aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.travis.yml6
-rw-r--r--AUTHORS32
-rw-r--r--CHANGES58
-rw-r--r--INSTALL2
-rw-r--r--Makefile23
-rw-r--r--Makefile.devel7
-rw-r--r--Makefile.travis3
-rw-r--r--README.md27
-rw-r--r--acl2/acl2.el20
-rwxr-xr-xbin/proofgeneral105
-rw-r--r--contrib/ML4PG/AUTHORS5
-rw-r--r--contrib/ML4PG/aux_files/headers.txt35
-rw-r--r--contrib/ML4PG/coq/auxiliary_files.el23
-rw-r--r--contrib/ML4PG/coq/feature_extraction.el862
-rw-r--r--contrib/ML4PG/coq/lemmas.txt44
-rw-r--r--contrib/ML4PG/coq/matlab_interaction.el627
-rw-r--r--contrib/ML4PG/coq/menus.el304
-rw-r--r--contrib/ML4PG/coq/save_lemmas.el117
-rw-r--r--contrib/ML4PG/coq/shortcuts.el14
-rw-r--r--contrib/ML4PG/coq/storage.el51
-rw-r--r--contrib/ML4PG/coq/views.txt1
-rw-r--r--contrib/ML4PG/coq/weka.el81
-rw-r--r--contrib/ML4PG/doc/ml4pg.v659
-rw-r--r--contrib/ML4PG/doc/ml4pg_manual.pdfbin1100379 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/algorithm1.pngbin249326 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/algorithm2.pngbin253897 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters1.pngbin117359 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters1pg.pngbin138300 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters2.pngbin93270 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/clusters2pg.pngbin69517 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/export.pngbin65552 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig1.pngbin32650 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig1pg.pngbin102528 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig2.pngbin83087 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig3.pngbin89061 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig4.pngbin129581 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/fig5.pngbin106362 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/frequencies.pngbin125515 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/granularity.pngbin122487 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/levels.pngbin261362 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/ml_system1.pngbin249326 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/images/ml_system2.pngbin179177 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/ml4pg_manual.bib12
-rw-r--r--contrib/ML4PG/doc/src/ml4pg_manual.pdfbin1100379 -> 0 bytes
-rw-r--r--contrib/ML4PG/doc/src/ml4pg_manual.tex209
-rw-r--r--contrib/ML4PG/icons/Clustering.pngbin2513 -> 0 bytes
-rw-r--r--contrib/ML4PG/icons/Hint.pngbin4843 -> 0 bytes
-rw-r--r--contrib/ML4PG/icons/clustering.xpm30
-rw-r--r--contrib/ML4PG/icons/sh-hint.xpm160
-rw-r--r--contrib/ML4PG/icons/sh-hint2.xpm103
-rw-r--r--contrib/ML4PG/icons/sh.xpm21
-rw-r--r--contrib/ML4PG/icons/sh1.xpm21
-rw-r--r--contrib/ML4PG/icons/test.xpm38
-rw-r--r--contrib/ML4PG/lemmas.txt57
-rw-r--r--contrib/ML4PG/libs/coq/test/peano.csv73
-rw-r--r--contrib/ML4PG/libs/coq/test/peano_names73
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/bigop.csv157
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/bigop_names157
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv156
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial.csv47
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial_names47
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv48
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv48
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/matrix.csv396
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/matrix_names396
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv395
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/series.csv22
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector_names236
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv273
-rw-r--r--contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv273
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq.csv394
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq_names394
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv393
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv393
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool_names236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv236
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv326
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat_names326
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv326
-rw-r--r--contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv326
-rw-r--r--contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv46
-rw-r--r--contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names49
-rw-r--r--contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv45
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/available.txt1
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/expt.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/expt_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/factorial.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/factorial_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/fib.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/fib_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/lessp.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/lessp_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/m1.csv3
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/m1_names3
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv2
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/multiplication_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv5
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/power.csv6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/power_names6
-rw-r--r--contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv5
-rw-r--r--contrib/ML4PG/ml4pg.el56
-rw-r--r--contrib/ML4PG/out.arff108
-rw-r--r--contrib/ML4PG/out_bis.arff72
-rw-r--r--contrib/ML4PG/ssreflect/auxiliary_files.el23
-rw-r--r--contrib/ML4PG/ssreflect/feature_extraction_2.el1282
-rw-r--r--contrib/ML4PG/ssreflect/lemmas.txt44
-rw-r--r--contrib/ML4PG/ssreflect/matlab_interaction.el646
-rw-r--r--contrib/ML4PG/ssreflect/menus.el308
-rw-r--r--contrib/ML4PG/ssreflect/save_lemmas.el121
-rw-r--r--contrib/ML4PG/ssreflect/shortcuts.el14
-rw-r--r--contrib/ML4PG/ssreflect/storage.el51
-rw-r--r--contrib/ML4PG/ssreflect/views.txt1
-rw-r--r--contrib/ML4PG/ssreflect/weka.el112
-rw-r--r--contrib/ML4PG/temp.csv72
-rw-r--r--contrib/ML4PG/temp3.arff107
-rw-r--r--contrib/ML4PG/views.txt1
-rw-r--r--contrib/ML4PG/weka.jarbin6473856 -> 0 bytes
-rw-r--r--contrib/mmm/AUTHORS16
-rw-r--r--contrib/mmm/COPYING340
-rw-r--r--contrib/mmm/FAQ181
-rw-r--r--contrib/mmm/INSTALL182
-rw-r--r--contrib/mmm/NEWS247
-rw-r--r--contrib/mmm/README122
-rw-r--r--contrib/mmm/README.mmm-for-ProofGeneral26
-rw-r--r--contrib/mmm/TODO67
-rw-r--r--contrib/mmm/mmm-auto.el177
-rw-r--r--contrib/mmm/mmm-class.el328
-rw-r--r--contrib/mmm/mmm-cmds.el449
-rw-r--r--contrib/mmm/mmm-compat.el194
-rw-r--r--contrib/mmm/mmm-cweb.el101
-rw-r--r--contrib/mmm/mmm-mason.el176
-rw-r--r--contrib/mmm/mmm-mode.el299
-rw-r--r--contrib/mmm/mmm-region.el818
-rw-r--r--contrib/mmm/mmm-rpm.el81
-rw-r--r--contrib/mmm/mmm-sample.el374
-rw-r--r--contrib/mmm/mmm-univ.el64
-rw-r--r--contrib/mmm/mmm-utils.el159
-rw-r--r--contrib/mmm/mmm-vars.el1055
-rw-r--r--contrib/mmm/mmm.texinfo2117
-rw-r--r--contrib/mmm/version.texi4
-rw-r--r--coq/ML4PG/doc/src/images/algorithm1.pngbin249326 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/algorithm2.pngbin253897 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/clusters1.pngbin117359 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/clusters1pg.pngbin138300 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/clusters2.pngbin93270 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/clusters2pg.pngbin69517 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/export.pngbin65552 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/fig1.pngbin32650 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/fig1pg.pngbin102528 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/fig2.pngbin83087 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/fig3.pngbin89061 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/fig4.pngbin129581 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/fig5.pngbin106362 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/frequencies.pngbin125515 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/granularity.pngbin122487 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/levels.pngbin261362 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/ml_system1.pngbin249326 -> 0 bytes
-rw-r--r--coq/ML4PG/doc/src/images/ml_system2.pngbin179177 -> 0 bytes
-rw-r--r--coq/coq-abbrev.el46
-rw-r--r--coq/coq-autotest.el30
-rw-r--r--coq/coq-compile-common.el157
-rw-r--r--coq/coq-db.el77
-rw-r--r--coq/coq-indent.el162
-rw-r--r--coq/coq-local-vars.el65
-rw-r--r--coq/coq-mmm.el51
-rw-r--r--coq/coq-par-compile.el177
-rw-r--r--coq/coq-par-test.el51
-rw-r--r--coq/coq-seq-compile.el81
-rw-r--r--coq/coq-smie.el136
-rw-r--r--coq/coq-syntax.el233
-rw-r--r--coq/coq-system.el140
-rw-r--r--coq/coq-unicode-tokens.el31
-rw-r--r--coq/coq.el767
-rwxr-xr-xcoq/coqtags4
-rw-r--r--coq/ex/indent.v13
-rw-r--r--doc/PG-adapting.texi6
-rw-r--r--doc/ProofGeneral.texi147
-rw-r--r--doc/dir5
-rw-r--r--doc/docstring-magic.el36
-rw-r--r--easycrypt/easycrypt-abbrev.el9
-rw-r--r--easycrypt/easycrypt-hooks.el11
-rw-r--r--easycrypt/easycrypt-keywords.el11
-rw-r--r--easycrypt/easycrypt-syntax.el17
-rw-r--r--easycrypt/easycrypt.el29
-rw-r--r--etc/ProofGeneral.spec2
-rw-r--r--etc/coq/coqdoc-egs.v26
-rw-r--r--etc/development-tips.txt7
-rw-r--r--etc/emacsbugs/visiblity-attempt.el21
-rw-r--r--etc/isar/MMMtests.thy40
-rw-r--r--etc/lego/lego-site.el20
-rw-r--r--etc/mmm-install17
-rw-r--r--etc/testsuite/pg-pgip-test.el18
-rw-r--r--etc/testsuite/pg-test.el17
-rw-r--r--generic/pg-assoc.el32
-rw-r--r--generic/pg-autotest.el26
-rw-r--r--generic/pg-custom.el30
-rw-r--r--generic/pg-goals.el20
-rw-r--r--generic/pg-movie.el33
-rw-r--r--generic/pg-pamacs.el53
-rw-r--r--generic/pg-pbrpm.el54
-rw-r--r--generic/pg-pgip.el29
-rw-r--r--generic/pg-response.el94
-rw-r--r--generic/pg-user.el113
-rw-r--r--generic/pg-vars.el27
-rw-r--r--generic/pg-xml.el33
-rw-r--r--generic/proof-autoloads.el304
-rw-r--r--generic/proof-auxmodes.el37
-rw-r--r--generic/proof-config.el77
-rw-r--r--generic/proof-depends.el29
-rw-r--r--generic/proof-easy-config.el35
-rw-r--r--generic/proof-faces.el17
-rw-r--r--generic/proof-indent.el18
-rw-r--r--generic/proof-maths-menu.el22
-rw-r--r--generic/proof-menu.el64
-rw-r--r--generic/proof-mmm.el76
-rw-r--r--generic/proof-script.el111
-rw-r--r--generic/proof-shell.el145
-rw-r--r--generic/proof-site.el59
-rw-r--r--generic/proof-splash.el38
-rw-r--r--generic/proof-syntax.el50
-rw-r--r--generic/proof-toolbar.el17
-rw-r--r--generic/proof-tree.el167
-rw-r--r--generic/proof-unicode-tokens.el26
-rw-r--r--generic/proof-useropts.el28
-rw-r--r--generic/proof-utils.el52
-rw-r--r--generic/proof.el21
-rw-r--r--hol-light/hol-light-autotest.el25
-rw-r--r--hol-light/hol-light-unicode-tokens.el19
-rw-r--r--hol-light/hol-light.el27
-rw-r--r--hol98/hol98.el21
-rw-r--r--isar/isabelle-system.el14
-rw-r--r--isar/isar-autotest.el18
-rw-r--r--isar/isar-mmm.el69
-rw-r--r--isar/isar-profiling.el7
-rw-r--r--isar/isar-unicode-tokens.el2
-rw-r--r--isar/isar.el21
-rw-r--r--lego/lego-syntax.el21
-rw-r--r--lego/lego.el38
-rw-r--r--lib/bufhist.el32
-rw-r--r--lib/holes.el91
-rw-r--r--lib/local-vars-list.el37
-rw-r--r--lib/maths-menu.el16
-rw-r--r--lib/pg-dev.el31
-rw-r--r--lib/pg-fontsets.el20
-rw-r--r--lib/proof-compat.el26
-rw-r--r--lib/scomint.el26
-rw-r--r--lib/span.el27
-rw-r--r--lib/texi-docstring-magic.el40
-rw-r--r--lib/unicode-chars.el21
-rw-r--r--lib/unicode-tokens.el34
-rw-r--r--obsolete/demoisa/demoisa-easy.el5
-rw-r--r--pg-init.el66
-rw-r--r--pghaskell/pghaskell.el19
-rw-r--r--pgocaml/pgocaml.el19
-rw-r--r--pgshell/pgshell.el19
-rw-r--r--phox/.cvsignore13
-rw-r--r--phox/README18
-rw-r--r--phox/README.pbrpm26
-rw-r--r--phox/example.phx22
-rw-r--r--phox/phox-extraction.el178
-rw-r--r--phox/phox-font.el102
-rw-r--r--phox/phox-fun.el440
-rw-r--r--phox/phox-lang.el64
-rw-r--r--phox/phox-outline.el69
-rw-r--r--phox/phox-pbrpm.el318
-rw-r--r--phox/phox-sym-lock.el401
-rw-r--r--phox/phox-tags.el92
-rw-r--r--phox/phox.el376
-rw-r--r--phox/sqrt2.phx253
-rw-r--r--phox/square-root-2.phx368
-rw-r--r--proof-general-pkg.el3
-rw-r--r--twelf/twelf-old.el76
280 files changed, 3834 insertions, 25851 deletions
diff --git a/.travis.yml b/.travis.yml
index f9f10d8c..6f70e507 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,11 +1,13 @@
language: emacs-lisp
-sudo: false
+sudo: true
env:
- EMACS_TARGET=emacs-24.3
- EMACS_TARGET=emacs-24.4
- EMACS_TARGET=emacs-24.5
- - EMACS_TARGET=emacs-git
+ - EMACS_TARGET=emacs-25.1
+ - EMACS_TARGET=emacs-25.2
+ - EMACS_TARGET=emacs-25.3
before_install:
- make -f Makefile.travis before_install
diff --git a/AUTHORS b/AUTHORS
index 03911df7..58978d23 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,22 +1,26 @@
Current Authors/Maintainers:
- David Aspinall (all)
- Pierre Courtieu (coq)
- Erik Martin-Dorel (coq, website)
- Clément Pit-Claudel (coq)
- Christoph Raffalli (phox)
- Makarius Wenzel (isar)
+ Pierre Courtieu (Coq, lib)
+ Erik Martin-Dorel (Coq, Web site)
+ Clément Pit-Claudel (Coq, packaging)
+ Christophe Raffalli (PhoX)
+ Pierre-Yves Strub (EasyCrypt)
+ Hendrik Tews (Proof Tree)
Previous Authors:
- Stefan Berghofer (isar)
- Paul Callaghan (plastic,lego)
- Healfdene Goguen (coq, generic, doc)
- Thomas Kleymann (lego, doc, generic)
- Patrick Loiseleur (coq)
- David von Oheimb (x-symbol)
- Dilip Sequeira (lego)
- Graham Dutton (web support)
+ David Aspinall (all)
+ Makarius Wenzel (Isar, generic)
+ Stefan Berghofer (Isar)
+ Paul Callaghan (Plastic, Lego)
+ Healfdene Goguen (Coq, generic, doc)
+ Thomas Kleymann (Lego, doc, generic)
+ Patrick Loiseleur (Coq)
+ Stefan Monnier (Coq)
+ Yves Bertot (generic)
+ David von Oheimb (X-Symbol)
+ Dilip Sequeira (Lego, generic)
+ Graham Dutton (Web support)
These are the main "official" authors of Proof General, but many more
people have contributed, some very significantly. We're grateful to
diff --git a/CHANGES b/CHANGES
index 142d3d84..02da6c87 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,13 +4,14 @@ This is a summary of main changes. For details, please see
the Git ChangeLog, the GitHub repo https://github.com/ProofGeneral/PG
and the PG Trac http://proofgeneral.inf.ed.ac.uk/trac
-* Changes of Proof General 4.4.1 from Proof General 4.4
+* Changes of Proof General 4.5 from Proof General 4.4
** Generic changes
*** bug fixes
- Using query-replace (or replace-string) in the processed region
doesn't wrongly jump to the first match anymore.
+ - cheat face (admit etc) now visible when locked.
*** remove key-binding for proof-electric-terminator-toggle
- The default key-binding for proof-electric-terminator-toggle
@@ -18,6 +19,12 @@ and the PG Trac http://proofgeneral.inf.ed.ac.uk/trac
useful as we can expect users to configure electric-terminator
once and for all. Hence the removal of this default key-binding.
+*** add another (fallback) key-binding for proof-goto-point
+ - The default key-binding for proof-goto-point (C-c <C-return>)
+ was not available in TTYs. Now, this function can also be run
+ with "C-c RET", which happens to be automatically trigerred if
+ we type "C-c <C-return>" in a TTY.
+
** Coq changes
*** new menu Coq -> Auto Compilation for all background compilation options
@@ -38,6 +45,55 @@ and the PG Trac http://proofgeneral.inf.ed.ac.uk/trac
compilation does not stop at the first error but rather
continues as far as possible.
+*** Limited extensibility for indentation
+
+ Coq indentation mechanism is based on a fixed set of tokens and
+ precedence rules. Extensibility is now possible by adding new
+ syntax for a given token (no new token can be added).
+
+ Typical example: if you define a infix operator xor you may
+ want to define it as a new syntax for token \/ in order to
+ have the indentation rules of or applied to xor.
+
+ Use:
+ (setq coq-smie-user-tokens '(("xor" . "\\/")))
+
+ The set of tokens can be seen in variable smie-grammar.
+
+*** Clickable Hypothesis in goals buffer to copy/paste hyp names
+
+ Clicking on a hyp name in goals buffer with button 2 copies its
+ name at current point position (which should be in the scripting
+ buffer). This eases the insertion of hypothesis names in scripts.
+
+*** Folding/unfolding hypothesis
+
+ A cross "-" is displayed to the left of each hypothesis of the
+ goals buffer. Clicking ont it (button 1) hides/unhides the
+ hypothesis. You can also hit "f" while ont he hypothesis. "F"
+ unfolds all hypothesis.
+
+ Hide/ unhide status remains when goal changes.
+
+
+*** Highlighting of hypothesis
+
+ You can highlight hypothesis in goals buffer on a per name
+ fashion. Hit "h" while on the hypothesis. "H" removes all
+ highlighting in the buffer.
+
+ Highlighting status remains when goal changes.
+
+
+**** Automtic highlighting with (search)About.
+ Hypothesis cited in the response buffer after C-c C-a C-a (i.e.
+ M-x coq-SearchAbout) will be highlighted automatically. Any other
+ hypothesis highlighted is unhighlighted.
+
+ To disable this, do:
+
+ (setq coq-highlight-hyps-cited-in-response nil)
+
*** bug fixes
- avoid leaving partial files behind when compilation fails
- 123: Parallel background compliation fails to execute some
diff --git a/INSTALL b/INSTALL
index 31331c2f..3b496bd7 100644
--- a/INSTALL
+++ b/INSTALL
@@ -57,7 +57,7 @@ Detailed installation Notes for Proof General
Supported Emacs Versions.
-------------------------
-Please see COMPATIBILTY.
+Please see COMPATIBILITY.
If you're not sure of your version of Emacs, inspect the variable
`emacs-version' by doing:
diff --git a/Makefile b/Makefile
index 78e4394f..3bc393ed 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@ PREFIX=$(DESTDIR)/usr
DEST_PREFIX=$(DESTDIR)/usr
PROVERS=acl2 ccc coq easycrypt hol-light hol98 isar lego pghaskell pgocaml pgshell phox twelf
-OTHER_ELISP=generic lib contrib/mmm
+OTHER_ELISP=generic lib
ELISP_DIRS=${PROVERS} ${OTHER_ELISP}
ELISP_EXTRAS=
EXTRA_DIRS = images
@@ -46,16 +46,11 @@ DOC_SUBDIRS=${DOC_EXAMPLES} */README* */CHANGES */BUGS
BATCHEMACS=${EMACS} --batch --no-site-file -q
# Scripts to edit paths to shells
-BASH_SCRIPTS = isar/interface bin/proofgeneral
+BASH_SCRIPTS = isar/interface
PERL_SCRIPTS = lego/legotags coq/coqtags isar/isartags
-# Scripts to edit path to PG
-# the scripts target (part of install) and the cleanscripts target
-# (part of clean) work only under the assumption that PG_SCRIPTS is a subset of
-# the union of BASH_SCRIPTS and PERL_SCRIPTS.
-PG_SCRIPTS = bin/proofgeneral
# Scripts to install to bin directory
-BIN_SCRIPTS = bin/proofgeneral lego/legotags coq/coqtags isar/isartags
+BIN_SCRIPTS = lego/legotags coq/coqtags isar/isartags
# Setting load path might be better in Elisp, but seems tricky to do
# only during compilation. Another idea: put a function in proof-site
@@ -236,7 +231,7 @@ doc.%: FORCE
## scripts: try to patch bash and perl scripts with correct paths
##
.PHONY: scripts
-scripts: bashscripts perlscripts pgscripts
+scripts: bashscripts perlscripts
.PHONY: bashscripts
bashscripts:
@@ -260,18 +255,10 @@ perlscripts:
sed -i.orig "s|^#.*!.*/bin/perl.*$$|#!$$perl|" $$i; \
done)
-# FIXME: this next edit is really for install case, shouldn't be made
-# just when user types 'make'
-.PHONY: pgscripts
-pgscripts: bashscripts perlscripts
- (for i in $(PG_SCRIPTS); do \
- sed -i.rm "s|PGHOMEDEFAULT=.*$$|PGHOMEDEFAULT=${DEST_ELISP}|" $$i; \
- done)
-
# Set PGHOME path in scripts back to default location.
.PHONY: cleanscripts
cleanscripts:
- (for i in $(PG_SCRIPTS) $(BASH_SCRIPTS) $(PERL_SCRIPTS); do \
+ (for i in $(BASH_SCRIPTS) $(PERL_SCRIPTS); do \
if [ -f $$i.rm ] ; then \
rm -f $$i.rm; \
fi; \
diff --git a/Makefile.devel b/Makefile.devel
index bba2efef..603a43b4 100644
--- a/Makefile.devel
+++ b/Makefile.devel
@@ -91,8 +91,8 @@ DEVELOPERS=\
# The prereltag.txt is kept as a record in the distrib area
# of the current pre-release version (currently not used explicitly
# anywhere for web pages/whatever).
-PRERELEASE_PREFIX=4\.4\.1~pre
-PRERELEASE_TAG=4.4.1~pre
+PRERELEASE_PREFIX=4\.5-git
+PRERELEASE_TAG=4.5-git
### Formerly: PRERELEASE_TAG=4.4pre$(shell date "+%y%m%d")
PREREL_TAG_FILE=prereltag.txt
@@ -443,6 +443,8 @@ rpmrelease: rpm
## This requires sudo powers for mounting, and
## (on Ubuntu), packages hfsplus and hfsprogs
##
+## Warning: the following line was removed below so Contents/MacOS'll be empty:
+## mv $(NAME)/bin/proofgeneral Contents/MacOS;
DMGBUILD=$(DISTBUILDIR)/dmg
dmg:
rm -rf $(DMGBUILD)
@@ -455,7 +457,6 @@ dmg:
$(TAR) -xpzf $(DISTBUILDIR)/$(RELEASENAMETGZ); \
mkdir -p Contents/Resources; \
mkdir -p Contents/MacOS; \
- mv $(NAME)/bin/proofgeneral Contents/MacOS; \
mv $(NAME)/* Contents/Resources; \
rm -rf $(NAME) $(RELEASENAME); \
mkdir $(NAME).app; \
diff --git a/Makefile.travis b/Makefile.travis
index c3711e59..1aa04dc0 100644
--- a/Makefile.travis
+++ b/Makefile.travis
@@ -1,4 +1,4 @@
-VERSIONS = 21.4a 22.1 22.2 22.3 23.1 23.2b 23.3b 23.4 24.1 24.2 24.3 24.4 24.5
+VERSIONS = 24.3 24.4 24.5 25.1 25.2 25.3
STABLE_TARGETS = $(addprefix prepare-emacs-,$(VERSIONS))
.PHONY: prepare-emacs-24 prepare-emacs-git $(STABLE_TARGETS) \
@@ -15,6 +15,7 @@ prepare-emacs-git:
cd /tmp/emacs && ./autogen.sh
prepare-emacs: prepare-$(EMACS_TARGET)
+ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
cd /tmp/emacs && ./configure --prefix="$(HOME)" --without-all --with-x-toolkit=no --without-x --with-xml2 && make -j2 install
before_install: prepare-emacs
diff --git a/README.md b/README.md
index 77dddcf1..d5d99d91 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,27 @@
[![Build Status](https://travis-ci.org/ProofGeneral/PG.svg?branch=master)](https://travis-ci.org/ProofGeneral/PG)
+## Overview
+
Proof General is a generic Emacs interface for proof assistants.
The aim of the Proof General project is to provide a powerful, generic
environment for using interactive proof assistants.
-This is version 4.4.1~pre of Proof General.
+This is version 4.5-git of Proof General.
+
+## About Proof General branches
+
+Two editions of Proof General are currently available:
+
+* the (legacy) REPL-based, stable version of Proof General,
+ gathered in the
+ [master](https://github.com/ProofGeneral/PG/tree/master) branch, and
+ licensed under GPLv2;
+* the (newest) Coq-specific, experimental version of Proof General,
+ supporting asynchronous proof processing,
+ gathered in the
+ [async](https://github.com/ProofGeneral/PG/tree/async) branch, and
+ licensed under GPLv3+.
## Setup
@@ -57,3 +73,12 @@ Supported proof assistants:
* Obsolete instances: Demoisa, Lambda-Clam, Plastic
A few example proofs are included in each prover subdirectory.
+
+## Contributing
+
+Contributions to this repository are placed under the BSD-3 license.
+As BSD-3 is compatible with both GPLv2 and GPLv3+, this means that
+we can merge them in both `master` and `async` branches if need be,
+using the same license as the rest of the codebase, while you keep
+all the rights on your code.
+For more info, see <https://opensource.org/licenses/BSD-3-Clause>.
diff --git a/acl2/acl2.el b/acl2/acl2.el
index 4f023217..cf9f521c 100644
--- a/acl2/acl2.el
+++ b/acl2/acl2.el
@@ -1,15 +1,25 @@
-;; acl2.el Basic Proof General instance for ACL2
-;;
-;; Copyright (C) 2000 LFCS Edinburgh.
+;;; acl2.el --- Basic Proof General instance for ACL2
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
-;;
-;; $Id$
+
+;;; Commentary:
;;
;; Needs improvement!
;;
;; See the README file in this directory for information.
+;;; Code:
(require 'proof-easy-config) ; easy configure mechanism
(require 'proof-syntax) ; functions for making regexps
diff --git a/bin/proofgeneral b/bin/proofgeneral
deleted file mode 100755
index 05d26724..00000000
--- a/bin/proofgeneral
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-#
-# Simple shell script for launching Proof General.
-#
-# Set EMACS to override choice of Emacs version
-#
-# PGHOME must be set to the directory where the lisp files of Proof
-# General are installed. Script checks standard locations in
-# /usr/share/emacs/site-lisp, or uses PGHOMEDEFAULT defined at top.
-#
-# We load ~/.proofgeneral instead of ~/.emacs if it exists.
-#
-# Thanks to Achim Brucker for suggestions.
-#
-# $Id$
-#
-
-# The default path should work if you are using the Proof General RPM
-# or unpack Proof General in your home directory. Otherwise edit below.
-# NB: no trailing backslash here!
-# On Mac, maybe:
-# /Applications/Emacs.app/Contents/MacOS/Emacs/site-lisp/ProofGeneral
-PGHOMEDEFAULT=$HOME/ProofGeneral
-
-NAME=`basename $0`
-
-HELP="Usage: proofgeneral [OPTION] [FILE]...
-Launches Emacs Proof General, editing the proof script FILE.
-
-Options:
- --emacs <EMACS> startup Proof General with emacs binary <EMACS>
- --pghome <PGDIR> startup Proof General from directory PGDIR
- -h, --help show this help and exit
- -v, --version output version information and exit
-
-Unrecognized options are passed to Emacs, along with file names.
-
-Examples:
- $NAME Example.thy Load Proof General editing Isar file Example.thy
- $NAME example.v Load Proof General editing Coq file Example.v
-
-For documentation and latest versions, visit http://proofgeneral.inf.ed.ac.uk
-Report bugs at http://proofgeneral.inf.ed.ac.uk/trac"
-
-VERSIONBLURB='David Aspinall.
-
-Copyright (C) 1998-2009 LFCS, University of Edinburgh, UK.
-This is free software; see the source for copying conditions.'
-
-
-while
- case $1 in
- -h)
- echo "$HELP"
- exit 0;;
- --help)
- echo "$HELP"
- exit 0;;
- --emacs)
- EMACS="$2"
- shift;;
- --pghome)
- PGHOME="$2"
- shift;;
- --version|-v)
- VERSION=`grep proof-general-version $PGHOME/generic/proof-site.el | head -1 | sed -e 's/.*Version //g' | sed -e 's/\. .*//g'`
- echo "$NAME" "--- script to launch Proof General $VERSION"
- echo "$VERSIONBLURB"
- exit 0;;
- *) break;;
- esac
-do shift; done
-
-# Try to find Proof General directory
-if [ -z "$PGHOME" ] || [ ! -d "$PGHOME" ]; then
- # default relative to this script, otherwise PGHOMEDEFAULT
- MYDIR="`readlink --canonicalize "$0" | sed -ne 's,/bin/proofgeneral$,,p'`"
- if [ -d "$MYDIR/generic" ]; then
- PGHOME="$MYDIR"
- elif [ -d "$PGHOMEDEFAULT" ]; then
- PGHOME="$PGHOMEDEFAULT"
- else
- echo "Cannot find the Proof General lisp files: Set PGHOME or use --pghome."
- exit 1
- fi
-fi
-
-# Try to find an Emacs executable
-if [ -z "$EMACS" ] || [ ! -x "$EMACS" ]; then
- if which emacs > /dev/null; then
- EMACS=`which emacs`
- else
- echo "$NAME: cannot find an Emacs executable. Change PATH, set EMACS, use --emacs to specify." 1>&2
- exit 1
- fi
-fi
-
-# User may use .proofgeneral in preference to .emacs or .xemacs/init.el
-if [ -f $HOME/.proofgeneral ]; then
- STARTUP="-q -l $HOME/.proofgeneral"
-else
- STARTUP=""
-fi
-
-exec $EMACS $STARTUP -eval "(or (featurep (quote proof-site)) (load \"$PGHOME/generic/proof-site.el\"))" -f proof-splash-display-screen "$@"
diff --git a/contrib/ML4PG/AUTHORS b/contrib/ML4PG/AUTHORS
deleted file mode 100644
index ab62d039..00000000
--- a/contrib/ML4PG/AUTHORS
+++ /dev/null
@@ -1,5 +0,0 @@
-ML4PG was designed and written by Jonathan Heras and Ekaterina Komendantskaya.
-<http://www.computing.dundee.ac.uk/staff/katya/ML4PG/>.
-
-Jonathan Heras <jonathanheras@computing.dundee.ac.uk>
-Ekaterina Komendantskaya <katya@computing.dundee.ac.uk>
diff --git a/contrib/ML4PG/aux_files/headers.txt b/contrib/ML4PG/aux_files/headers.txt
deleted file mode 100644
index 320270ae..00000000
--- a/contrib/ML4PG/aux_files/headers.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-@relation empty
-
-@attribute '1' real
-@attribute '2' real
-@attribute '3' real
-@attribute '4' real
-@attribute '5' real
-@attribute '6' real
-@attribute '7' real
-@attribute '8' real
-@attribute '9' real
-@attribute '10' real
-@attribute '11' real
-@attribute '12' real
-@attribute '13' real
-@attribute '14' real
-@attribute '15' real
-@attribute '16' real
-@attribute '17' real
-@attribute '18' real
-@attribute '19' real
-@attribute '20' real
-@attribute '21' real
-@attribute '22' real
-@attribute '23' real
-@attribute '24' real
-@attribute '25' real
-@attribute '26' real
-@attribute '27' real
-@attribute '28' real
-@attribute '29' real
-@attribute '30' real
-
-@data
-
diff --git a/contrib/ML4PG/coq/auxiliary_files.el b/contrib/ML4PG/coq/auxiliary_files.el
deleted file mode 100644
index 95a4ce0a..00000000
--- a/contrib/ML4PG/coq/auxiliary_files.el
+++ /dev/null
@@ -1,23 +0,0 @@
-(defun ml4pg-quicksort-pair (list)
- (if (<= (length list) 1)
- list
- (let ((pivot (cadar list)))
- (append (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (> (cadr x) pivot)) list))
- (remove-if-not #'(lambda (x) (= (cadr x) pivot)) list)
- (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (< (cadr x) pivot)) list))))))
-
-
-(defun ml4pg-zip (l1 l2)
- (do ((temp1 l1 (cdr temp1))
- (temp2 l2 (cdr temp2))
- (res nil))
- ((endp temp1) res)
- (setf res (append res (list (append (list (car temp1)) (list (car temp2))))))))
-
-(defun ml4pg-unzip (l)
- (do ((temp l (cdr temp))
- (res1 nil)
- (res2 nil))
- ((endp temp) (list (reverse res1) (reverse res2)))
- (progn (setf res1 (cons (caar temp) res1))
- (setf res2 (cons (cadr (car temp)) res2)))))
diff --git a/contrib/ML4PG/coq/feature_extraction.el b/contrib/ML4PG/coq/feature_extraction.el
deleted file mode 100644
index 4d934143..00000000
--- a/contrib/ML4PG/coq/feature_extraction.el
+++ /dev/null
@@ -1,862 +0,0 @@
-;; Variables to store the tree depth levels
-
-(defvar ml4pg-tdl1 nil)
-(defvar ml4pg-tdl2 nil)
-(defvar ml4pg-tdl3 nil)
-(defvar ml4pg-tdl4 nil)
-(defvar ml4pg-tdl5 nil)
-
-;; Variables to store the information about the tactic level
-
-(defvar ml4pg-intro nil)
-(defvar ml4pg-case nil)
-(defvar ml4pg-simpltrivial nil)
-(defvar ml4pg-induction nil)
-(defvar ml4pg-simpl nil)
-(defvar ml4pg-rewrite nil)
-(defvar ml4pg-trivial nil)
-
-(defvar ml4pg-hypothesis nil)
-
-(defvar ml4pg-init 0)
-
-(defun ml4pg-export-theorem ()
- (interactive)
- (progn (setf ml4pg-tdl1 nil
- ml4pg-tdl2 nil
- ml4pg-tdl3 nil
- ml4pg-tdl4 nil
- ml4pg-tdl5 nil
- ml4pg-intro nil
- ml4pg-case nil
- ml4pg-simpltrivial nil
- ml4pg-induction nil
- ml4pg-simpl nil
- ml4pg-rewrite nil
- ml4pg-trivial nil
- ml4pg-hypothesis nil
- ml4pg-goal-level nil)
- (if (equal ml4pg-init 0)
- (progn (ml4pg-read-lemmas)
- (setq ml4pg-init 1)))
- (ml4pg-export-theorem-aux nil nil 1 nil)
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
- ))
-
-(defvar ml4pg-saved-theorems nil)
-(defvar ml4pg-goal-level-temp nil)
-(defvar ml4pg-tactic-level nil)
-(defvar ml4pg-proof-tree-level nil)
-
-;; Variables to store the different values associated with the tactics, the
-;; types or the rewrite rules
-
-(defvar ml4pg-tactic_id '(("intro" . 1)
- ("case" . 2)
- ("simpl" . 3)
- ("trivial" . 4)
- ("induction" . 5)
- ("rewrite" . 6)
- ("simpl; trivial" . 34)))
-
-
-(defvar ml4pg-types_id '(("nat" . -2)
- ("Prop" . -4)
- ("bool" . -3)
- ("A" . -1)
- ("list" . -5)))
-
-(defvar ml4pg-theorems_id nil)
-
-;; A function to obtain the type associated with an object
-
-(defun ml4pg-get-type-id (object)
- (let* ((a (proof-shell-invisible-cmd-get-result (format (concat "Check " object))))
- (pos_jump (search "
-" a :start2 (+ 2 (search " " a))))
- (pos_space (search " " a :start2 (+ 2 (search ": " a))))
- (type (if pos_space
- (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
- (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
- (if type type -4)))
-
-
-;; A function to obtain the value of a top symbol
-
-
-(defun ml4pg-get-top-symbol ()
- (proof-shell-invisible-cmd-get-result (format "Set Printing All"))
- (let* ((res (proof-shell-invisible-cmd-get-result (format "Focus")))
- (res2 (subseq res (+ 32 (search "============================" res))))
- (fst-symbol (subseq res2 0 (search " " res2))))
- (cond ((string= fst-symbol "forall") 5)
- ((search "->" res2) 7)
- ((string= "@eq" fst-symbol) 6)
- ((string= "and" fst-symbol) 4) ; I have included this
- ((string= "iff" fst-symbol) 8) ; I have included this
- ((string= "or" fst-symbol) 3) ; I have included this
- (t 0))))
-
-;; In some cases the intro tactic does not have parameters, the following function
-;; obtain the type of the object introduced with the intro tactic in those cases
-
-(defun ml4pg-get-obj-intro ()
- (let* ((undo (proof-undo-last-successful-command))
- (obj (proof-shell-invisible-cmd-get-result (format "Show Intro")))
- (object (subseq obj 0 (search "
-" obj)))
- (dod (proof-assert-next-command-interactive))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object)))))
-
- (ml4pg-get-type-id object)
- ))
-
-(defun ml4pg-extract-params (seq res)
- (let ((pos_space (search " " seq))
- (pos_jump (search "
-" seq)))
- (if pos_space
- (ml4pg-extract-params (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
- (reverse (cons (subseq seq 0 pos_jump) res)))))
-
-(defun ml4pg-extract-params2 (seq res)
- (let ((pos_space (search " " seq))
- (pos_jump (search "." seq)))
- (if pos_space
- (ml4pg-extract-params2 (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
- (reverse (cons (subseq seq 0 pos_jump) res)))))
-
-;; Given a list of objects, it obtains the value associated with their types
-
-(defun ml4pg-get-types-list (list res)
- (if (endp list)
- (* -1 res)
- (ml4pg-get-types-list (cdr list) (+ (* -1 (ml4pg-get-type-id (car list)) (expt 10 (- (length list) 1))) res))))
-
-;; To obtain the number of tactics applied
-
-(defun ml4pg-get-number-list (list)
- (if (endp list)
- 0
- (+ (expt 10 (- (length list) 1)) (ml4pg-get-number-list (cdr list)))))
-
-;; To obtain the value associated with top symbol in the case of intros
-
-(defun ml4pg-get-top-symbols-list (len res)
- (if (= len 0)
- res
- (let ((gs (ml4pg-get-top-symbol))
- (ps (proof-shell-invisible-cmd-get-result (format "intro"))))
- (+ (ml4pg-get-top-symbols-list (- len 1) (+ (* gs (expt 10 (- len 1))) res))))))
-
-(defun ml4pg-get-top-symbols-seq (seq res)
- (if (endp seq)
- res
- (let ((gs (ml4pg-get-top-symbol))
- (ps (proof-shell-invisible-cmd-get-result (format (concat "intro " (car seq))))))
- (+ (ml4pg-get-top-symbols-seq (cdr seq) (+ (* gs (expt 10 (- (length seq) 1))) res))))))
-
-;; To obtain the values associated with intros both for the case when parameters are
-;; given and the case intros.
-
-(defun ml4pg-get-obj-intros ()
- (let* ((undo (proof-undo-last-successful-command))
- (obj (proof-shell-invisible-cmd-get-result (format "Show Intros")))
- (dod (proof-assert-next-command-interactive))
- (params (ml4pg-extract-params obj nil))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis params)))
- (types (ml4pg-get-types-list params 0))
- (num (ml4pg-get-number-list params))
- (undo2 (proof-shell-invisible-cmd-get-result (format "Undo")))
- (gts (ml4pg-get-top-symbols-list (length params) 0)))
- (list num types (length params) gts)
- ))
-
-(defun ml4pg-get-obj-intros2 (objects)
- (let* ((params (ml4pg-extract-params2 objects nil))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis params)))
- (types (ml4pg-get-types-list params 0))
- (num (ml4pg-get-number-list params))
- (undo2 (proof-shell-invisible-cmd-get-result (format "Undo")))
- (gts (ml4pg-get-top-symbols-seq params 0)))
- (list num types (length params) gts)
- ))
-
-;; To obtain the value associated with a theorem
-
-(defun ml4pg-search-in-hyp (obj hyp)
- (if (endp hyp)
- nil
- (if (string= obj (car hyp))
- t
- (ml4pg-search-in-hyp obj (cdr hyp)))))
-
-
-(defvar ml4pg-add_to 0.1)
-(defvar ml4pg-start 100)
-
-(defun ml4pg-extract-theorem-id (cmd)
- (let ((s<- (search "<-" cmd)))
- (if s<-
- (if (assoc (subseq cmd (+ 3 s<-) (search "." cmd)) ml4pg-theorems_id)
- (cdr (assoc (subseq cmd (+ 3 s<-) (search "." cmd)) ml4pg-theorems_id))
- (if (ml4pg-search-in-hyp (subseq cmd (+ 3 s<-) (search "." cmd)) ml4pg-hypothesis)
- 1
- (progn (setf ml4pg-start (+ ml4pg-start ml4pg-add_to))
- (setf ml4pg-theorems_id
- (append ml4pg-theorems_id (list (cons (subseq cmd (+ 3 s<-)
- (search "." cmd))
- ml4pg-start))))
- (ml4pg-save-lemma (subseq cmd (+ 3 s<-)
- (search "." cmd)) ml4pg-start)
- (setf ml4pg-add_to (/ ml4pg-add_to 2))
- ml4pg-start
- )))
- (if (assoc (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-theorems_id)
- (cdr (assoc (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-theorems_id))
- (if (ml4pg-search-in-hyp (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-hypothesis)
- 1
- (progn (setf ml4pg-start (+ ml4pg-start ml4pg-add_to))
- (ml4pg-save-lemma (subseq cmd (+ 1 (search " " cmd)) (search "." cmd)) ml4pg-start)
- (setf ml4pg-theorems_id
- (append ml4pg-theorems_id (list (cons (subseq cmd (+ 1 (search " " cmd)) (search "." cmd))
- ml4pg-start))))
- (setf ml4pg-add_to (/ ml4pg-add_to 2))
- ml4pg-start
- ))))))
-
-
-(defun ml4pg-arg-induction (object)
- (let* ((ps0 (proof-shell-invisible-cmd-get-result (format "Undo")))
- (res (proof-shell-invisible-cmd-get-result (concat "Check " object)))
- (ps3 (proof-shell-invisible-cmd-get-result (concat "induction " object)))
- (err (search "Error" res)))
- (if err -1 1)))
-
-(defun ml4pg-get-type-id-induction (object arg-ind)
- (if (equal arg-ind 1)
- (let ((ps0 (proof-shell-invisible-cmd-get-result (format "Undo")))
- (gt (ml4pg-get-type-id object))
- (ps3 (proof-shell-invisible-cmd-get-result (concat "induction " object))))
- gt)
- (let ((ps0 (proof-shell-invisible-cmd-get-result (format "Undo")))
- (ps (proof-shell-invisible-cmd-get-result (concat "intro " object)))
- (gt (ml4pg-get-type-id object))
- (ps2 (proof-shell-invisible-cmd-get-result (format "Undo")))
- (ps3 (proof-shell-invisible-cmd-get-result (concat "induction " object))))
- gt)))
-
-;; Function to add the information to the corresponding tree depth level
-
-(defun ml4pg-add-info-to-tree (info level)
- (cond ((= ml4pg-level 1) (setf ml4pg-tdl1 (append ml4pg-tdl1 (list info))))
- ((= ml4pg-level 2) (setf ml4pg-tdl2 (append ml4pg-tdl2 (list info))))
- ((= ml4pg-level 3) (setf ml4pg-tdl3 (append ml4pg-tdl3 (list info))))
- ((= ml4pg-level 4) (setf ml4pg-tdl4 (append ml4pg-tdl4 (list info))))
- ((= ml4pg-level 5) (setf ml4pg-tdl5 (append ml4pg-tdl5 (list info))))
- (t nil)))
-
-;; Function to add the information to the corresponding tactic
-
-(defun ml4pg-add-info-to-tactic (info tactic)
- (cond ((string= ml4pg-tactic "intro") (setf ml4pg-intro (append ml4pg-intro (list info))))
- ((string= ml4pg-tactic "case") (setf ml4pg-case (append ml4pg-case (list info))))
- ((string= ml4pg-tactic "simpltrivial") (setf ml4pg-simpltrivial (append ml4pg-simpltrivial (list info))))
- ((string= ml4pg-tactic "induction") (setf ml4pg-induction (append ml4pg-induction (list info))))
- ((string= ml4pg-tactic "simpl") (setf ml4pg-simpl (append ml4pg-simpl (list info))))
- ((string= ml4pg-tactic "rewrite") (setf ml4pg-rewrite (append ml4pg-rewrite (list info))))
- ((string= ml4pg-tactic "trivial") (setf ml4pg-trivial (append ml4pg-trivial (list info))))
- (t nil)))
-
-
-
-;The first value is the tactic, the second one is the number of tactics,
-;the third one is the argument type, the fourth one is if the
-;argument is a hypothesis of a theorem, the fifth one is the top-symbol
-;and the last one the number of subgoals
-
-(defun ml4pg-get-numbers (cmd tactic ngs ts current-level bot)
- (cond ((and (string= tactic "intro") (not (string= cmd "intro.")))
- (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
- (type (ml4pg-get-type-id object))
-
-
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object))))
- (res (list (cdr (assoc "intro" ml4pg-tactic_id))
- 1
- type
- -1
- ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "intro")
- (let* ((type (ml4pg-get-obj-intro))
-
-
- (res (list (cdr (assoc "intro" ml4pg-tactic_id))
- 1
- (ml4pg-get-obj-intro)
- -1
- ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((and (string= tactic "intros") (not (string= cmd "intros.")))
- (let* ((params (ml4pg-get-obj-intros2 (subseq cmd (1+ (search " " cmd)))))
- (nparams (car params))
- (types-params (cadr params))
- (len (caddr params))
- (gts (cadddr params))
-
-
- (res (list nparams
- len
- types-params
- -1
- gts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "intros")
- (let* ((params (ml4pg-get-obj-intros))
- (nparams (car params))
- (types-params (cadr params))
- (len (caddr params))
- (gts (cadddr params))
-
-
- (res (list nparams
- len
- types-params
- -1
- gts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "case")
- (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
- (type (ml4pg-get-type-id object))
-
-
- (res (list (cdr (assoc "case" ml4pg-tactic_id))
- 1
- type
- 1 ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "simpl")
- (progn
-
- (setf ml4pg-goal-level-temp (cons (list (cdr (assoc "simpl" ml4pg-tactic_id)) 1 0 0 ts ngs) ml4pg-goal-level-temp))
- (list (cdr (assoc "simpl" ml4pg-tactic_id)) 1 0 0 ts ngs)))
- ((string= tactic "trivial")
- (progn
-
- (setf ml4pg-goal-level-temp (cons (list (cdr (assoc "trivial" ml4pg-tactic_id)) 1 0 0 ts ngs) ml4pg-goal-level-temp))
- (list (cdr (assoc "trivial" ml4pg-tactic_id)) 1 0 0 ts ngs)))
- ((string= tactic "induction")
- (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
- (arg-ind (ml4pg-arg-induction object))
- (type (ml4pg-get-type-id-induction object arg-ind))
-
-
- (ih (setf ml4pg-theorems_id (append ml4pg-theorems_id (list (cons (concat "IH" object) 10)))))
- (res (list (cdr (assoc "induction" ml4pg-tactic_id))
- 1 type arg-ind ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "rewrite")
- (progn
-
- (setf ml4pg-goal-level-temp (cons (list (cdr (assoc "rewrite" ml4pg-tactic_id)) 1 -4
- (ml4pg-extract-theorem-id cmd) ts ngs) ml4pg-goal-level-temp))
- (list (cdr (assoc "rewrite" ml4pg-tactic_id)) 1 -4
- (ml4pg-extract-theorem-id cmd) ts ngs))
- )
- ((string= cmd "simpl; trivial.")
- (progn
-
- (setf goal-level-temp (cons (list (cdr (assoc "simpl; trivial" ml4pg-tactic_id)) 2 0 0 ts ngs) ml4pg-goal-level-temp))
- (list (cdr (assoc "simpl; trivial" ml4pg-tactic_id)) 2 0 0 ts ngs))
- )))
-
-;; Function to obtain the information just about the goals.
-
-(defun ml4pg-get-numbers2 (cmd tactic ngs ts current-level bot)
- (cond ((and (string= tactic "intro") (not (string= cmd "intro.")))
- (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
- (type (ml4pg-get-type-id object))
-
-
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object))))
- (res (list (cdr (assoc "intro" ml4pg-tactic_id))
- 1
- type
- -1
- ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "intro")
- (let* ((type (ml4pg-get-obj-intro))
-
-
- (res (list (cdr (assoc "intro" ml4pg-tactic_id))
- 1
- (get-obj-intro)
- -1
- ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((and (string= tactic "intros") (not (string= cmd "intros.")))
- (let* ((params (ml4pg-get-obj-intros2 (subseq cmd (1+ (search " " cmd)))))
- (nparams (car params))
- (types-params (cadr params))
- (len (caddr params))
- (gts (cadddr params))
-
-
- (res (list nparams
- len
- types-params
- -1
- gts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "intros")
- (let* ((params (ml4pg-get-obj-intros))
- (nparams (car params))
- (types-params (cadr params))
- (len (caddr params))
- (gts (cadddr params))
-
-
- (res (list nparams
- len
- types-params
- -1
- gts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "case")
- (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
- (type (ml4pg-get-type-id object))
-
-
- (res (list (cdr (assoc "case" ml4pg-tactic_id))
- 1
- type
- 1 ts ngs))
- (foo2 (setf ml4pg-goal-level-temp (cons res ml4pg-goal-level-temp))))
- res))
- ((string= tactic "simpl")
- (progn
-
- (list (cdr (assoc "simpl" ml4pg-tactic_id)) 1 0 0 ts ngs)))
- ((string= tactic "trivial")
- (progn
-
- (list (cdr (assoc "trivial" ml4pg-tactic_id)) 1 0 0 ts ngs)))
- ((string= tactic "induction")
- (let* ((object (subseq cmd (1+ (search " " cmd)) (search "." cmd)))
- (arg-ind (ml4pg-arg-induction object))
- (type (ml4pg-get-type-id-induction object arg-ind))
-
-
- (ih (setf ml4pg-theorems_id (append ml4pg-theorems_id (list (cons (concat "IH" object) 10)))))
- (res (list (cdr (assoc "induction" ml4pg-tactic_id))
- 1 type arg-ind ts ngs))
- (foo2 (setf goal-level-temp (cons res goal-level-temp))))
- res))
- ((string= tactic "rewrite")
- (progn
-
- (list (cdr (assoc "rewrite" ml4pg-tactic_id)) 1 -4
- (ml4pg-extract-theorem-id cmd) ts ngs))
- )
- ((string= cmd "simpl; trivial.")
- (progn
-
- (list (cdr (assoc "simpl; trivial" ml4pg-tactic_id)) 2 0 0 ts ngs))
- )))
-
-(defun ml4pg-count-seq (item seq)
- (let ((is? (search item seq)))
- (if is?
- (+ 1 (ml4pg-count-seq item (subseq seq (+ 1 is?))))
- 0)))
-
-(defun ml4pg-get-number-of-goals ()
- (let ((r (proof-shell-invisible-cmd-get-result (format "Show Proof"))))
- (ml4pg-count-seq "?" r)))
-
-
-(defun ml4pg-flat (ll)
- (if (endp ll)
- nil
- (append (car ll) (ml4pg-flat (cdr ll)))))
-
-
-;; The following function computes the result of the proof tree level
-
-(defun ml4pg-remove-zeros (n)
- (do ((temp n (/ temp 10)))
- ((or (= temp 0) (not (= (mod temp 10) 0))) temp)))
-
-(defun ml4pg-obtain-level (level n)
- (do ((temp (cdr level) (cdr temp))
- (temp2 (if (endp level) (list 0 0 0 0 0 0 0 0 0)
- (list (* (nth 0 (car level)) (expt 10 (length (cdr level))))
- (* (nth 1 (car level)) (expt 10 (length (cdr level))))
- (* (nth 2 (car level)) (expt 10 (length (cdr level))))
- (* (nth 3 (car level)) (expt 10 (length (cdr level))))
- (* (nth 4 (car level)) (expt 10 (length (cdr level))))
- (* (nth 5 (car level)) (expt 10 (length (cdr level))))
- (* (nth 6 (car level)) (expt 10 (length (cdr level))))
- (* (nth 7 (car level)) (expt 10 (length (cdr level))))
- (nth 8 (car level))))))
- ((endp temp) (list (ml4pg-remove-zeros (nth 0 temp2))
- (ml4pg-remove-zeros (nth 1 temp2))
- (ml4pg-remove-zeros (nth 2 temp2))
- (ml4pg-remove-zeros (nth 3 temp2))
- (ml4pg-remove-zeros (nth 4 temp2))
- (nth 5 temp2)
- (ml4pg-remove-zeros (nth 6 temp2))
- (if (= (nth 7 temp2) 0) (nth 7 temp2) (+ (* n (expt 10 (length level))) (ml4pg-remove-zeros (nth 7 temp2))))
- (nth 8 temp2)))
- (setf temp2 (list (+ (nth 0 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
- (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
- (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 2 (car temp))))
- (+ (nth 3 temp2) (* (expt 10 (length (cdr temp))) (nth 3 (car temp))))
- (+ (nth 4 temp2) (* (expt 10 (length (cdr temp))) (nth 4 (car temp))))
- (+ (nth 5 temp2) (* (expt 10 (length (cdr temp))) (nth 5 (car temp))))
- (+ (nth 6 temp2) (* (expt 10 (length (cdr temp))) (nth 6 (car temp))))
- (+ (nth 7 temp2) (* (expt 10 (length (cdr temp))) (nth 7 (car temp))))
- (+ (nth 8 temp2) (nth 8 (car temp))))
- )
- ))
-
-
-(defun ml4pg-compute-proof-result ()
- (append (ml4pg-obtain-level ml4pg-tdl1 1)
- (ml4pg-obtain-level ml4pg-tdl2 2)
- (ml4pg-obtain-level ml4pg-tdl3 3)
- (ml4pg-obtain-level ml4pg-tdl4 4)
- (ml4pg-obtain-level ml4pg-tdl5 5)))
-
-;; The following function computes the result of the tactic
-
-
-(defun ml4pg-digits (n)
- (if (= (mod n 10) 0)
- 0
- (1+ (ml4pg-digits (/ n 10)))))
-
-(defun ml4pg-first-digit (n digits)
- (/ n (expt 10 (1- digits))))
-
-(defun ml4pg-rest-of-digits (n digits)
- (- n (* (ml4pg-first-digit n digits) (expt 10 (1- digits)))))
-
-(defun ml4pg-obtain-tactic-result (tactic)
- (do ((temp (cdr tactic) (cdr temp))
- (temp2 (if (endp tactic) (list 0 0 0 0 0)
- (list (ml4pg-first-digit (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic))))
- (* (ml4pg-rest-of-digits (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic)))) (expt 10 (length (cdr tactic))))
- (* (nth 1 (car tactic)) (expt 10 (length (cdr tactic))))
- (nth 2 (car tactic))
- (nth 3 (car tactic))))))
- ((endp temp) temp2)
- (setf temp2 (list (nth 0 temp2)
- (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
- (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
- (concat (format "%s" (nth 3 temp2)) (format "%s" (nth 2 (car temp))))
- (+ (nth 4 temp2) (nth 3 (car temp))))
- )
- ))
-
-
-(defun ml4pg-compute-tactic-result ()
- (append (ml4pg-obtain-tactic-result ml4pg-intro)
- (ml4pg-obtain-tactic-result ml4pg-case)
- (ml4pg-obtain-tactic-result ml4pg-simpltrivial)
- (ml4pg-obtain-tactic-result ml4pg-induction)
- (ml4pg-obtain-tactic-result ml4pg-simpl)
- (ml4pg-obtain-tactic-result ml4pg-rewrite)
- (ml4pg-obtain-tactic-result ml4pg-trivial)))
-
-
-(defvar ml4pg-useless-terms '("Definition" "Defined" "Fixpoint" "Structure" "Section" "Add Ring" "Hypothesis" "Hypotheses" "Include" "Export" "Parameter" "Axiom"
-"End" "Notation" "Hint" "Inductive" "Variable" "Implicit" "Import" "Canonical" "Coercion"
-"Module" "Ltac" "Let" "Opaque" "Bind" "Scope" "Require" "Infix" "Record" "Fact"))
-
-(defun ml4pg-is-in-search (cmd)
- (do ((temp ml4pg-useless-terms (cdr temp))
- (is nil))
- ((or (endp temp) is) is)
- (if (search (car temp) cmd) (setf is t))))
-
-(defun ml4pg-export-theorem-aux (result name current-level dot-level)
- (let* ((semis (save-excursion
- (skip-chars-backward " \t\n"
- (proof-queue-or-locked-end))
- (proof-segment-up-to-using-cache (point))))
- (comment (caar semis))
- (cmd (cadar semis))
- (pos_dot (search "." cmd))
- (pos_space (search " " cmd))
- (ts nil))
- (if semis
- (cond ((or (string= comment "comment")
- (ml4pg-is-in-search cmd))
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result name current-level dot-level)))
- ((search "Lemma" cmd)
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result
- (subseq cmd (1+ (search " " cmd))
- (search " " cmd :start2 (1+ (search " " cmd))))
- current-level dot-level)))
- ((search "Proof" cmd)
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result name current-level dot-level)))
- ((search "Theorem" cmd)
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result
- (subseq cmd (1+ (search " " cmd))
- (search " " cmd :start2 (1+ (search " " cmd))))
- current-level dot-level)))
- ((search "Qed." cmd)
- (progn (proof-assert-next-command-interactive)
- ; (insert (format "\n(* %s *)\n" (reverse result)))
- (setf ml4pg-proof-tree-level (append ml4pg-proof-tree-level (list (ml4pg-compute-proof-result))))
- (setf ml4pg-tactic-level (append ml4pg-tactic-level (list (ml4pg-compute-tactic-result))))
- (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
- (list (list name (ml4pg-flat (reverse result))))))))
- (pos_space
- (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (cond ((< ng ng2) (ml4pg-export-theorem-aux
- (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 1) result)
- name
- (1+ current-level)
- (1+ current-level)))
- ((< ng2 ng) (ml4pg-export-theorem-aux
- (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result)
- name
- dot-level
- nil))
- (t (ml4pg-export-theorem-aux
- (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result)
- name
- (1+ current-level)
- dot-level)))))
- (t (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (cond ((< ng ng2) (ml4pg-export-theorem-aux
- (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 1) result)
- name
- (1+ current-level)
- (1+ current-level)))
- ((< ng2 ng) (ml4pg-export-theorem-aux
- (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result)
- name
- dot-level
- nil))
- (t (ml4pg-export-theorem-aux
- (cons (ml4pg-get-numbers cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result)
- name
- (1+ current-level)
- dot-level))
- )
- ))))))
-
-
-
-
-
-;;; Functions to save the files
-
-(defun ml4pg-save-file-conventions1 ()
- (interactive)
- (let ((file (read-file-name "Save in file (don't include the extension): ")))
- (progn (with-temp-file (concat file "_goals.csv") (insert (ml4pg-extract-features-1)))
- (with-temp-file (concat file "_proof_tree.csv") (insert (ml4pg-extract-features-2 proof-tree-level)))
- (with-temp-file (concat file "_tactic.csv") (insert (ml4pg-extract-features-2 tactic-level)))
- (with-temp-file (concat file (format "_summary.txt")) (insert (ml4pg-extract-names))))))
-
-
-(defun ml4pg-extract-names ()
- (do ((temp ml4pg-saved-theorems (cdr temp))
- (temp2 "")
- (i 1 (1+ i)))
- ((endp temp) temp2)
- (setf temp2 (concat temp2 (format "%s . %s\n" i (caar temp))) )))
-
-
-(defun ml4pg-print-list (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) (subseq temp2 0 (1- (length temp2))))
- (setf temp2 (concat temp2 (format "%s," (car temp))) )))
-
-
-(defun ml4pg-extract-features-1 ()
- (let ((fm (ml4pg-find-max-length)))
- (do ((temp ml4pg-saved-theorems (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (if (< (length (cadar temp)) fm)
- (setf temp2 (concat temp2
- (format "%s\n"
- (ml4pg-print-list (ml4pg-take-30 (append (cadar temp)
- (ml4pg-generate-zeros (- fm (length (cadar temp)))))) ))))
- (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (ml4pg-take-30 (cadar temp))) )))))
- ))
-
-
-
-(defun ml4pg-extract-features-2 (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (car temp)))))))
-
-
-
-(defun ml4pg-generate-zeros (n)
- (do ((i 0 (1+ i))
- (temp nil (cons 0 temp)))
- ((= i n) temp)))
-
-(defun ml4pg-find-max-length ()
- (do ((temp ml4pg-saved-theorems (cdr temp))
- (i 0))
- ((endp temp) i)
- (if (< i (length (cadar temp)))
- (setf i (length (cadar temp)))
- nil)))
-
-(defun ml4pg-take-30 (list)
- (do ((i 0 (1+ i))
- (temp list (cdr temp))
- (temp2 nil (cons (car temp) temp2)))
- ((= i 30) (reverse temp2))))
-
-
-;; Function which extract the info of a theorem up to a concrete point
-
-(defun ml4pg-extract-info-up-to-here ()
- (interactive)
- (setf ml4pg-tdl1 nil
- ml4pg-tdl2 nil
- ml4pg-tdl3 nil
- ml4pg-tdl4 nil
- ml4pg-tdl5 nil
- ml4pg-intro nil
- ml4pg-case nil
- ml4pg-simpltrivial nil
- ml4pg-induction nil
- ml4pg-simpl nil
- ml4pg-rewrite nil
- ml4pg-trivial nil)
- (let ((final (point))
- (result nil)
- (current-level 1))
- (search-backward "Proof.")
- (proof-goto-point)
- (while (< (point) final)
- (let* ((semis (save-excursion
- (skip-chars-backward " \t\n"
- (proof-queue-or-locked-end))
- (proof-segment-up-to-using-cache (point))))
- (comment (caar semis))
- (cmd (cadar semis))
- (pos_dot (search "." cmd))
- (pos_space (search " " cmd))
- (ts nil))
- (cond (pos_space
- (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (cond ((< ng ng2) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 1) result))
- (setf current-level (1+ current-level))))
- ((< ng2 ng) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result))
- (setf current-level (1+ current-level))))
- (t (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_space) (ml4pg-get-number-of-goals) ts current-level 0) result))
- (setf current-level (1+ current-level)))))))
- (t (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (cond ((< ng ng2) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 1) result))
- (setf current-level (1+ current-level))))
- ((< ng2 ng) (progn (setf result (cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result))
- (setf current-level (1+ current-level))))
- (t (progn (setf result(cons (ml4pg-get-numbers2 cmd (subseq cmd 0 pos_dot) (ml4pg-get-number-of-goals) ts current-level 0) result) )
- (setf current-level (1+ current-level))))
- )
- ))))
- )
-
-
- (ml4pg-take-30 (append (ml4pg-flat (reverse result)) (ml4pg-generate-zeros 20) ))
- ))
-
-
-
-(defun ml4pg-extract-features-1-bis (thm)
- (let ((fm (ml4pg-find-max-length)))
- (do ((temp ml4pg-saved-theorems (cdr temp))
- (temp2 ""))
- ((endp temp) (concat temp2 (format "%s\n" (ml4pg-print-list thm))))
- (if (< (length (cadar temp)) fm)
- (setf temp2 (concat temp2
- (format "%s\n"
- (ml4pg-print-list (ml4pg-take-30 (append (cadar temp)
- (ml4pg-generate-zeros (- fm (length (cadar temp)))))) ))))
- (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (ml4pg-take-30 (cadar temp))) )))))
- ))
-
-
-;; Function which extract the information from all the theorems up to a point
-
-(defun ml4pg-extract-feature-theorems ()
- (interactive)
- (let ((final (point))
- (current-level 1)
- (last-point -1))
- (ml4pg-export-theorem)
- (while (and (< (point) final) (not (= (point) last-point)))
- (progn (setq last-point (point))
- (ml4pg-export-theorem))))
- )
-
-
-
-
-
-
-(defun ml4pg-extract-theorems-library ()
- (interactive)
- (search-backward "Qed.")
- (forward-char)
- (forward-char)
- (forward-char)
- (forward-char)
- (let ((final (point))
- (last-point -1))
- (beginning-of-buffer)
- (proof-goto-point)
- (ml4pg-export-theorem)
- (while (and (< (point) final) (not (= (point) last-point)))
- (progn (setq last-point (point))
- (ml4pg-export-theorem)))
- )
-
- )
-
-
-
- \ No newline at end of file
diff --git a/contrib/ML4PG/coq/lemmas.txt b/contrib/ML4PG/coq/lemmas.txt
deleted file mode 100644
index c818e3b0..00000000
--- a/contrib/ML4PG/coq/lemmas.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-size_ncons&102$addn0&103$IHs&104$cats1&105$size_cat&106$addnC&107$last_cat&108$lastI&109$belast_cat&110$catA&111$|&112$rewrite&113$cat0s&114$cats0&115$cat_rcons&116$last_nth&119$nth_nil&120$eq_s12&122$IHs1&123$=>&124$i&125$addn1&126$maxn0&127$maxnE&128$subn1&129$add1n&130$addn_maxr&131$nth_ncons&132$eqSS&133$subnn&134$nth_default&135$subn_gt0&136$size_set_nth&138$maxnA&139$maxnn&140$nth_set_nth&141$maxnCA&142$eq_sym&143$if_neg&144$ne_n12&145$add0n&147$eqn_leq&148$andbC&149$ltnNge&150$count_size&151$leqnn&154$fun_if&155$filter_cat&159$count_filter&160$orbA&161$has_cat&162$has_seq1&163$orbC&164$andbA&165$all_cat&166$all_seq1&167$Ea&168$eq_filter&169$has_count&170$eq_count&171$all_count&172$has_find&173$s12&177$filter_pred0&179$filter_predT&180$addnCA&181$addnA&182$addn_negb&183$count_pred0&184$count_predT&185$negb_and&187$has_predC&188$has_predU&189$iterSr&191$IHn&192$drop_oversize&194$drop0&195$take_oversize&196$cat_take_drop&198$size_drop&199$size_takel&200$ltnW&201$ltnS&202$subSS&203$take0&204$take_cat&205$ltn_neqAle&206$Hn0&207$take_size&208$nth_cat&209$size_take&210$lt_n0_s&211$addKn&212$leq_addr&213$eqnP&216$lt_i_n0&217$1IHs&218$take_size_cat&220$drop_size_cat&221$size_rot&222$rot_size_cat&223$catrev_catr&225$catrevE&226$rev_cons&227$size_rcons&228$catrev_catl&229$rev_cat&230$rev_rcons&231$subn0&232$ltnn&233$subnK&234$addSnnS&235$eqseq_cons&237$andbF&238$1andbA&239$in_cons&241$inE&242$mem_cat&243$mem_seq1&244$mem_rcons&246$mem_head&247$mem_behead&249$s0x&250$s0'x&251$orbT&252$ay&254$eq_a&258$y&259$s_y&260$eq_a12&261$s'y&262$eq_in_count&263$has_filter&264$Es12&265$in&266$Hx&267$*&268$eqxx&270$all_pred1_nseq&271$def_s&273$has_pred0&274$has_sym&275$negb_or&276$cat_uniq&277$andbCA&278$uniq_catC&279$mem_filter&280$negbTE&281$mem_rev&282$Hy&283$all_pred1P&284$count_uniq_mem&285$s_x&286$mem_undup&287$size_undup&288$find_size&290$has_pred1&291$find_cat&292$lt_i_s&293$mem_nth&294$rcons_uniq&295$index_cat&296$size_belast&297$index_uniq&298$eq_sij&299$cat_cons&302$i.+1&304$nax&305$exists&306$i]&307$eq_all&308$a_s&309$IHv&310$count_cat&312$addn_eq0&313$count_predC&314$filter_predI&315$cnt_a'&316$leq_add2r&318$eq12&319$perm_eq_sym&321$eqn_add2l&322$perm_catC&324$perm_cat2r&326$cat1s&328$perm_catCA&329$perm_cons&330$def_s2&331$mem_rot&332$negPf&333$rot_uniq&334$le_s21&335$leqNgt&337$s3x&338$uniq_leq_size&339$eqs12&340$eqs12,&342$uniq_size_uniq&343$@uniq_leq_size&345$s2x&346$Hs12&347$x&352$\in&353$s1&354$by&355$/(rot i s1)&356$def_s1&357$FcatCA&359$addnK&360$rot1_cons&361$rotK&362$has_rot&363$subKn&364$rot0&365$size_rev&367$size_rotr&370$@size_takel&371$5(catA, =^~ rot_size_cat)&372$leq_addl&373$rot_addn&375$addnBA&376$@rot_oversize&377$1ltnW&378$rot_add_mod&379$1addnC&380$rot_rot&381$has_mask_cons&382$Hsn0:&383$size&384$take&385$=&386$Hs&387$size_mask&388$mask_cat&389$mask_rot&392$size_nseq&393$mask_false&394$sz_m&396$geq_min&397$nth_take&398$negb_add&399$addbF&400$addbT&401$negb_eqb&402$before_find&403$def_m_i&404$lt_i_m&405$subnKC&406$congr1&407$drop_nth&410$nth_index&411$index_mem&412$mask0&413$sz_m1&414$sz_m2&415$cat_subseq&416$sub0seq&417$mask_true&419$all_predC&428$map_cat&429$map_take&430$map_drop&431$map_rot&433$size_map&434$filter_mask&435$a_x&436$size_subseq_leqif&438$subseq_filter&439$introT&440$uniq_perm_eq&441$filter_uniq&442$Ds2&444$perm_rcons&445$eqP&446$x']&447$map_mask&449$inj_in_eq&450$count_map&453$Est&454$eq_sz&457$ltis&458$nth_map&459$Ef&460$eq_f12&461$eqf12&462$eqxx,&463$sy&464$gK&466$fK&467$mem_map&468$pmap_filter&469$size_pmap&471$IHn1&475$addnS&476$iota_add&477$size_iota&478$andbN&479$leq_eqVlt&480$mem_iota&482$nth_iota&484$size_mkseq&486$Hi&487$nth_mkseq&488$mkseq_nth&490$perm_map&491$perm_eq_small&492$s&493$Ds&494$iota_addl&495$map_rotr&496$map_comp&497$@eq_map&498$mulnC&499$sumn_nseq&500$foldr_cat&501$revK&502$Hfg&503$Hgf&504$addn_minr&505$size_zip&506$zip_cat&507$zip_rcons&508$IHss&509$IHsh&510$leq_subLR&511$leq_add2l&513$leq_max&514$def_z&515$def_x'&516$map_f&517$not_fxt_z&518$eq_s&519$eq_t&520$fpz&521$sp2&522$Ut&526$:&527$z.1,&528$x,&529$Dz1&530$s1z&531$s1'x&532$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$andb_false_r&108$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$mxE&102$ord1&105$perm1&106$permM&107$eq_axiomK&108$cast_ord_id&109$castmx_id&110$mxE,&113$unsplitK&116$row_mxEl&117$row_mxEr&118$col_mxEu&120$col_mxEd&121$row_mxKl,&122$col_mxKu,&123$tr_col_mx&125$trmx_usub&126$trmx_dsub&127$hsubmxK&128$castmxE&130$j&131$&&&132$by&133$def_j&134$lshift_subproof&135$mxE]&136$~~&137$j2&138$leqNgt&139$j1&140$<&141$n2&142$ltn_add2l&143$leq_add2l&144$trmx_cast&145$row_mxA&146$tr_col,&147$tr_col',&148$row_mxEl,&149$row_mxEr,&150$col_mxEu,&151$col_mxEd,&152$2mxE&153$def_j'&155$addSn&156$ltn_addr&157$@tr_row'&158$@tr_col_mx&159$col'Kl&160$addnS&161$tr_row',&162$col'Kr&163$vsubmxK&164$col_mxKu&165$row_mxKl&166$row_mxKr&167$col_mxKd&168$submxK&169$trmx_ulsub&170$trmx_ursub&171$trmx_dlsub&172$trmx_drsub&173$block_mxKul&174$block_mxKur&175$block_mxKdl&176$block_mxKdr&177$tr_block_mx&178$tr_row_mx&179$2tr_col_mx&180$block_mxEh&181$col_mxA&182$cast_row_mx&183$block_mxEv&184$cast_col_mx&185$castmx_comp&186$etrans_id&187$card_prod&188$card_ord&189$cast_ordK&190$enum_valK&191$enum_rankK&192$mxvecE&193$castmxE,&194$conform_mx_id&195$neq_mn&196$B&197$nonconform_mx&198$addrA&199$addrC&200$add0r&201$addNr&202$mulrS&203$IHd&204$can2_eq&208$raddf0&209$opp_col_mx&213$opp_row_mx&214$add_col_mx&215$add_row_mx&216$negbTE&217$row0&220$eqxx&221$map_const_mx&222$raddfN&223$raddfD&224$map_mxD&225$map_mxN&226$mul1r&227$mulrDl&228$mulrDr&229$mulrA&230$summxE&231$bigD1&232$mulr1&233$big1&234$addr0&235$diff&236$j'&237$mulr0&238$matrix_sum_delta&239$big_ord1&240$can_eq&241$inj_eq&242$vec_mx_delta&243$vec_mxK&244$scale_col_mx&245$scale_row_mx&246$mulrnAr&247$mulrnDl&248$mulr_natr&249$i'&250$ne_i'i&251$diag_const_mx&253$raddfB&254$scale_scalar_mx&255$diag_mx_sum_delta&256$scalar_mx_sum_delta&258$scaler_sumr&259$scale1r&260$A&262$eqxx]&263$eqn0Ngt&264$n0&265$in&266$*&267$flatmx0&268$val_eqE&269$eqn_add2l&270$big_distrr&271$exchange_big&272$big_distrl&273$mul0r&274$sumrN&275$mulrN&276$mulNr&277$big_split&278$mulmxDl&279$mulNmx&280$mulmxDr&281$mulmxN&282$mul0mx&284$mulmx0&286$rowE&287$mulmxA&288$mulmxnE&289$andbT&290$natrM&291$mulrnA&292$mulnb&293$andbAC&294$mul_delta_mx_cond&295$mulrnAl&296$mul_diag_mx&297$mul_scalar_mx&298$mul_mx_diag&299$reindex_inj&300$permKV&301$mul_col_perm&302$invgK&303$tpermV&304$mul_row_perm&305$mulmx1&306$mul1mx&307$col_permE&308$trmx1&310$tr_perm_mx&311$row_permM&313$perm_mx1&315$perm_mx_is_perm&316$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$m1_lb&186$m2_lb,&187$eqPQ&188$max_i&189$max_j&190$eq_f&191$mulSn&193$mulnS&194$mulnSr&195$muln0&196$muln0,&197$mulnC&198$mulnDl&199$mulnBl&200$mulnA&201$mulnCA&202$mulnBr&203$muln_eq0&204$leq_mul2l&205$le_mn2&207$orbT&208$leq_mul2r&209$le_mn1&210$orb_andr&211$eqn_mul2l&212$eqn_mul2r&213$ltn_mul2l&214$ltn_mul2r&215$mul1n&216$ltn_pmul2r&217$ltn_Pmull&218$maxn_mulr&220$minn_mulr&221$muln1&222$expnS&223$mul1n,&224$exp1n&225$expnD&226$expnMn&227$expnM&228$addn_gt0&229$eqn0Ngt&230$expn_gt0&231$leq_pmul2l&232$leq_pmulr&233$leq_exp2l&234$eqn_exp2l&235$leq_exp2l]&236$ltn_exp2l]&237$leq_mul&239$expn1&240$ltn_mul&241$IHe&242$ltn_exp2r&243$leq_exp2r&244$eqn_exp2r&245$muln_gt0&246$addTb&247$addbA&248$odd_add&251$odd_sub&252$andb_addl&253$odd_mul&254$addnn&255$mul2n&256$doubleB&257$2ltnNge&258$leq_double&259$doubleS&260$ltn_Sdouble&261$addbb&262$muln2&263$uphalf_half&264$doubleD&265$half_double,&266$odd_double_half&267$half_double&268$uphalf_double&269$halfD&270$mulnn&271$mulnDr&272$def_m&273$sqrnD&274$2addnA&275$/(2 * 2)&276$sqrn_sub&277$lte&280$ltm12&281$ltm23&282$andbT&283$eqm12&284$f_mono&285$in&286$hyp&287$*&288$lemn&289$le_ab&290$geq_leqif&291$n12_0&294$le2&295$m2_0&296$n1_gt0&297$n2_gt0&298$sqrn_gt0&299$ne_mn&300$ltn_add2r&301$nat_Cauchy&302$addE&303$add_mulE&304$mulE&305$mul_expE&306$sub2nn&307$:&308$n.*2&309$def_b&106$mem_topred&130$symR&132$Rxy&133$eqiR&134$fK&135$hf&140$fgK&141$mf&143$fgK_on&144$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$le_i_mj&186$:&187$subnBA&188$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$subnBA&186$:&187$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big1&181$big_mkcond&182$mul1m,&183$filter_index_enum&184$enum1&185$big_seq1&186$big_cat&188$iota_add&189$leq_sub&190$big_geq&191$@big_cat_nat&192$leqnSn&193$big_nat1&194$big_nat_recr&195$leqW&197$val_enum_ord&199$map_cat&200$map_comp&201$eqxx&202$count_cat&204$uniq_perm_eq&207$enum_uniq&208$big_tnth&209$index_uniq&210$valK&211$filter_undup&212$IHr&213$big_rem&214$idM&215$big_undup&216$undup_uniq&217$mem_undup&218$eq_r&219$big_split&220$simpm&221$bigID&222$orbK&223$cardD1&225$Aj&226$Qp&228$Q0&229$cardD1x&230$bigD1&231$Qj,&232$j&233$P0&234$IH&235$h'K&236$reindex_onto&237$hK&238$reindex_inj&241$addSn&242$subnDr&243$addnBA&244$partition_big&245$Pi&246$andbT&247$andb_idl&249$exchange_big_dep&250$Qi&251$2(big_seq_cond _ _ _ xQ)&252$exchange_big_dep_nat&253$big_endo&254$mulm0&256$x&257$y&258$big_distrl&260$big_distrr&261$f&263$ffunE&264$nri&265$eqP&266$big_distr_big_dep&267$mul0m&269$bigA_distr_big&271$big_has_cond&272$big_all_cond&273$allB&274$sum_nat_const&276$muln1&277$Monoid&278$big_const_nat&279$big_andE&280$@leqif_sum&283$muln_gt0&284$leq_maxl&286$geq_max&291$dvdn_lcm&294$in&295$dvFm&296$p_m&297$dvdn_trans&298$dvdn_lcml&299$dvdn_gcd&300$dvmF&301$m_p&302$dvdn_gcdl&303$mul0n&304$muln0&305$mulnDr&306$mulnDl&307$mulnC&308$addn2&309$exp0n&310$big1_seq&311$in_nil&312$big_cat_nested,&313$op_idx'&314$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$big_endo&256$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$mul0n&306$muln0&307$mulnDr&308$mulnDl&309$mulnC&310$addn2&311$exp0n&312$big1_seq&313$in_nil&314$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$is_perm_mx_tr&312$is_perm_mxMl&313$perm_mx_is_perm,&314$ltn_ord&315$lshift_subproof&316$row_mx0&317$leq_min&318$tr_pid_mx&319$pid_mx_minv&320$pid_mx_minh&321$le_n_i&322$andbCA&323$mul_pid_mx&324$minnn&325$minn_idPr&326$mulmxBl&327$pid_mx_id&328$subrr&329$mulmxBr&330$mul_pid_mx_copid&331$oppr0&332$defk&333$defi&334$big_split_ord&335$mul_col_mx&336$mul_mx_row&337$mul_row_col&338$mul_row_block&339$linear_sum&340$linearZ&341$mul_rV_lin&343$mxvecK&344$scalemxAl&345$linearP&346$row_mul&347$raddf0]&348$mulr_sumr&349$mxtrace_diag&351$mx11_scalar&353$block_mxEul,&354$oner_eq0&355$lift_permV&359$permK&360$canF_eq&361$split1&362$lift0_perm_lift&363$lift0_perm0&364$lift0_mx_perm&365$rmorphM&366$rmorph_sum&367$rmorph_nat&368$rmorphMn&369$map_scalar_mx&370$rmorph1&371$rmorph_sign&373$rmorph_prod&374$det_map_mx&375$map_row'&376$map_col'&377$cofactor_map_mx&378$map_mx_sub&379$map_mx1&380$map_pid_mx&381$map_delta_mx&385$def_gf&386$map_mxvec&388$map_vec_mx&389$trmx_mul_rev&390$mulrC&391$trmx_mul&392$scalemxAr&393$reindex&394$pair_bigA&395$mulrAC&396$mulmx_sum_row&397$scaler_suml&398$mulmx_diag&399$row_id&402$mulrCA&403$BA&404$CA&405$bigID&406$oddMt&410$mulN1r&411$tpermK&412$eqA12&413$odd_permV&414$t&415$Dst&416$det_perm&417$odd_perm1&418$det1&419$prodr_const&420$scale0r&421$detZ&422$exprS&423$bigA_distr_bigA&425$valP&427$signr_addb&428$odd_permM&429$pvalE&430$determinant_alternate&431$simp&432$Ef12&433$p_i&437$ulsfK&439$liftK&440$permE&441$si0&442$signr_odd&443$odd_add&444$odd_lift_perm&445$_]&446$neq_lift&447$partition_big&448$expand_cofactor&449$tr_row'&451$tr_col'&452$det_tr&453$expand_det_row&454$cofactor_tr&455$cofactorZ&456$eqP&457$Di&458$eq_refl&459$trmx_adj&460$mul_mx_adj&461$mul_adj_mx&462$kA:&463$A'&464$*m&465$=&466$1%:M&467$by&468$kA&469$AB1&470$def_m&471$mul_col_row&472$scalar_mx_block&473$BlAu1&474$AuBr0&475$oner_neq0&476$expand_det_col&477$1simp&478$block_mxEdl&479$block_mxEul&480$col'_col_mx&481$row'Ku&482$row'_row_mx&483$IHn1&484$trmx0&485$det_ublock&486$unitmxE&487$unitr1&488$unitrX&489$unitrN&490$unitrM&491$invr1&492$adj1&493$if_same&494$Ua&495$U_A&496$adjZ&497$scalerA&498$invrM&499$unitrX_pos&500$mulrK&501$exprSr&502$prednK&503$divrK&504$scalemx1&505$invmxZ&506$invmx1&507$invr_out&508$nsA&509$mulVr&510$mulVmx&511$mulmxV&512$uA&513$negbT&514$divrr&516$det_inv&517$unitrV&518$unitmx_tr&519$unitmx_inv&521$unitmx_mul&522$unitmx1&523$perm_mxM&526$mulVg&527$unitr0&531$mulf_eq0&533$nz_a&534$subr_eq0&536$orbF&537$scalemx_eq0&538$linearB&539$eq_aAB&540$mul_mx_scalar&542$vA0&543$detA0&544$thinmx0&545$signr_eq0&546$unlift_none&547$wjA'0&548$reindex_onto&551$defA&552$@mul_mx_row&553$/aj&554$aj0&555$wjA'&556$wj0_0&558$subr0&559$negPf&560$w0A'&561$linear0&562$fmorph_unit&565$unitfE&566$map_mxZ&568$map_mx_adj&569$fmorphV&570$is_perm_mxMr&573$mulmxE&575$xrowE&576$/A1&577$/(1 + n.+1)%N&578$mulmx_block&579$subrK&580$lshift0&581$tpermL&582$mulVf&583$_&584$elimNf&585$@det_lblock&586$def_t&589$trmxK&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mulC&116$mulm1&117$iteropS&118$mulmA&119$mulmC&120$mulmCA&121$mem_iota&124$leq_subLR&125$subSn&126$subnDA&127$subnKC&128$enumT&129$mem_enum&130$unlock&131$f_op&136$big_filter&139$filter_predI&140$mkseq_nth&143$big_map&144$eqn0Ngt&145$big_hasC&146$has_pred0&147$foldr_cat&149$big_cat_nested&150$big_seq_cond&152$big_andbC&153$big_seq&154$eq_bigr&155$mem_index_iota&156$big_nat_cond&157$big_nil&160$big_cons&161$iota_addl&163$big_addn&164$big_ltn&165$big_add1&166$val_ord_enum&167$sorted_filter&169$iota_ltn_sorted&170$mem_filter&171$andbCA&172$andb_idr&173$big_mkord&174$len12&175$big_ord_widen_cond&176$inord_val&177$big_pred0&178$]&179$big_ord0&180$big_nth&181$tnth_nth&182$big_ord_widen_leq&183$inordK&186$eqFG&187$big_const_seq&188$cardE&189$size_iota&190$big_const&191$card_ord&192$big_cat_nested,&193$op_idx'&194$big1&197$mul1m,&198$filter_index_enum&199$enum1&200$big_seq1&201$big_cat&203$iota_add&204$leq_sub&205$big_geq&206$@big_cat_nat&207$leqnSn&208$leqW&210$val_enum_ord&212$map_cat&213$map_comp&214$eqxx&215$count_cat&217$uniq_perm_eq&220$enum_uniq&221$big_tnth&222$index_uniq&223$valK&224$filter_undup&225$IHr&226$big_rem&227$idM&228$big_undup&229$undup_uniq&230$mem_undup&231$eq_r&232$big_split&233$simpm&234$bigID&235$orbK&236$cardD1&238$Aj&239$Qp&241$Q0&242$cardD1x&243$bigD1&244$Qj,&245$j&246$P0&247$h'K&248$reindex_onto&249$hK&250$reindex_inj&253$addSn&254$subnDr&255$addnBA&256$partition_big&257$Pi&258$andbT&259$andb_idl&261$exchange_big_dep&262$Qi&263$2(big_seq_cond _ _ _ xQ)&264$exchange_big_dep_nat&265$big_endo&266$mulm0&268$x&269$y&270$big_distrl&272$big_distrr&273$f&275$ffunE&276$nri&277$eqP&278$big_distr_big_dep&279$mul0m&281$bigA_distr_big&283$big_has_cond&284$big_all_cond&285$allB&286$sum_nat_const&288$Monoid&289$big_const_nat&290$big_andE&291$@leqif_sum&294$muln_gt0&295$leq_maxl&297$geq_max&302$dvdn_lcm&305$in&306$dvFm&307$p_m&308$dvdn_trans&309$dvdn_lcml&310$dvdn_gcd&311$dvmF&312$m_p&313$dvdn_gcdl&314$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$by&143$nth_nseq&144$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul1n&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.Theory.sumrB&115$big_ltn&116$@big_add1&117$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mxE&102$ord1&103$hjj&104$tpermR&105$hxx&106$hjjj&107$tpermL&108$tpermD&109$hx&110$leq0n&111$hy&112$xcolE&113$xcol_tool&114$vsubmxK&115$lshift0&116$eqP&117$hM00&118$unitmx1&119$mulmx1&120$block_mxEv&121$rshift1&122$unitmxE&123$det_ublock&124$det1&125$mul1r&126$unitr1&127$submxK&128$mulmx_block&129$mulmx0&130$addr0&131$mul_scalar_mx&132$scalerA&133$mulrN&134$mulfV&135$scaleN1r&136$addrC&137$subrr&138$scalemxAr&139$scaleNr&140$unitmx_mul&141$unitmx_perm&142$mul1r
-&143$h1&144$hsubmxK&145$mulmxA&146$@mul_row_block&147$mulmx0
-&148$add0r&149$h3&150$block_mxEh&151$tperm01_tool&152$_(1 + n)]row_mx0&153$dl&154$h&155$row_mx0&156$addsmxC&158$trmx0&160$trmxK&161$trmx_eq0&162$tr_block_mx&163$tr_col_mx&164$mulr1n&167$mxrank_tr&168$mxrank_disjoint_sum&169$rank_rV&170$rank0M&171$trmx_neq0&172$hC&173$tr_scalar_mx&174$sub_capmx&175$hB&176$big1&177$mulr0&178$hb&179$@mul0r&180$scale0r&181$rankaMc&182$M&183$mxrankMfree&184$subnDr&185$subSn&186$rank_leq_row&187$mulmxV&188$mul0mx&189$by&190$hY&191$mul_mx_scalar&192$@mul_row_col&193$@mul_col_mx&194$col_mx0&195$mul1mx&196$@mulmx_block&197$scalar_mx_block&198$m&199$n&200$castmx_mul&201$castmxE&202$thinmx0&203$X&204$hX&205$@mul_mx_row&206$mulmxN&207$addr_eq0&208$scalerN&209$opprK&210$mulVf&211$scale1r&212$hM&213$hR&214$hZ&215$ker0MS&217$dsubseqmxE&218$seqmx0E&219$@seqmxE&220$rsubseqmxE&221$dlsubseqmxE&222$row_seqmxE&223$ursubseqmxE&224$mulseqmxE&225$drsubseqmxE&226$cinvE&227$scaleseqmxE&228$subseqmxE&229$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$HH1&163$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$expn0&102$expnS&103$H&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$fact_auxP&113$prednK&114$addnS&115$pred_Sn&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$IH&102$IH&102$pred_Sn&103$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$factS&113$fact0&114$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
-&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&291$le2&292$m2_0&293$n1_gt0&294$n2_gt0&295$sqrn_gt0&297$ne_mn&298$ltn_add2r&299$nat_Cauchy&300$addE&301$add_mulE&302$mulE&303$mul_expE&304$sub2nn&305$natTrecE&306$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$thinmx0&102$=>&103$H&104$det1&105$det0&106$H1&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$ffunE&102$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$big_endo&256$mxE&108$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$addnS&155$nth_take&156$nth_drop&158$ltn_add2l&159$lsubseqmxE&160$usubseqmxE&161$rsubseqmxE&162$dsubseqmxE&163$size_row_row_seqmx&164$ltn_add2r&165$leqNgt&166$size_row_col_seqmx&167$ord1&168$row_seqmxE&169$col_seqmxE&170$H2&171$H1&172$H2=>&173$H3&174$H4&175$castmx_id&176$size_iota&177$mkseqmxE&179$oneE&180$scalar_seqmxE&181$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
-&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$IH&102$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$addn0&102$addn0&102$addn0&102$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$addn0&102$IH&103$addn0&102$IH&103$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$fact0&102$muln1&103$fact0&102$muln1&103$res&104$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$addn0&102$IH&103$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$muln1&102$leq_mul&103$fact_gt0&104$ltn_mul&105$big_nil&106$factS&108$big_add1&109$big_nat_recr&110$mulnC&111$logn1&112$big_geq&113$lognM&114$logn_count_dvd&116$big_mkcond&117$big_nat_widen&118$1ltnW&119$exchange_big_nat&122$divn_count_dvd&124$big_filter&125$fact_prod&126$prednK&128$all_predC&129$has_pred1&130$mem_iota&131$leq_eqVlt&132$bigD1&133$lt0n&134$dvdn_gt0&135$dvdn_addr&136$dvdn_mulr&137$dvdn1&138$1((1 =P p.-1)&139$modnMml&141$modnMmr&142$mulnA&143$mul1n&144$val_eqE&145$i_gt0&146$modnMDl&147$modn_small&148$coprime_sym&149$prime_coprime&150$leqNgt&151$ltn_ord&152$vFp0&153$mod0n&154$mFp1r&155$vFpV&156$mFpA&157$vFp0,&158$eqn_mod_dvd&162$modnDl,&163$subnKC&164$2eqFp&165$Euclid_dvdM&166$addnS&167$addnBA&168$mulnDl&169$subn_sqr&170$leq_sqr&171$mulnS&172$mulnn&173$/(Fp1 : nat)&174$dvdn_addl&175$eqFp&176$Fp_mod&177$eqn0Ngt&178$lt0i&179$modnDl&180$eqxx&181$modnDml&182$mod_fact&183$modnn&184$modnMm&185$big_mkord&186$bigID&187$/mFpM&188$mFpC&189$vFpId&190$mFp1&191$lt1p&192$orbT&193$eqF1n1&194$reindex_onto&195$2negb_or&196$E&197$vFpK&198$big_split&199$big1&200$ffactn1&201$ffactSS&202$muln_gt0&203$ffact_gt0&204$ffactnS&205$mulnK&206$binS&207$bin0&208$addn_gt0&209$IHm&210$andKb&211$leq_add&212$bin_gt0&213$bin_small&214$bin1&215$mulSn&216$mulnDr&217$mulnCA&218$mul_Sm_binm&219$divnMA&220$divn_small&221$fact_smonotone&222$ffact_small&223$eqn_pmul2r&224$bin_ffact&225$subKn&226$bin_fact&227$mulnAC&228$bin_sub&229$leqnSn&230$subSnn&231$mul2n&232$half_double&233$bin2&234$divn2&235$muln_divA&236$dvdn2&237$def_p&238$gtnNdvd&239$bin1]&240$addnn&242$big_nat_rev&243$sum_nat_const&244$card_ord&245$big_ord_recl&246$big_ord0&247$expnS&248$big_distrr&249$big_ord_recr&250$binn&251$subnSK&252$2mulnA&253$expnSr&254$/(f _ _)&255$fxx&256$IHk&257$big1_eq&258$mulnBl&259$subnDA&260$addnK&261$exp1n&262$subn_exp&263$reindex_inj&264$@eq_card1&265$t&266$tuple0&267$sum1dep_card&268$partition_big&269$cardD1&270$Ax&271$reindex&272$tuple_eta&273$theadE&274$andbT&275$all_predI&276$card_uniq_tuples&277$on_card_preimset&278$codom_ffun&280$has_map&282$enumT&283$has_filter&284$size_eq0&285$cardE&286$card_inj_ffuns_on&287$2inE&288$eq_card0&289$A&290$leq_ltn_trans&291$sum_nat_dep_const&292$card_inj_ffuns&293$card_imset&294$cardAk&295$enum_rankK_in&298$ffunE&299$inj_eq&300$im_f0&301$ffactnn&302$eq_pij&303$eqEcard&304$mem_imset&305$card_draws&307$mkseq_nth&308$Am&309$sorted_filter&310$unlock&311$val_ord_enum&312$iota_ltn_sorted&313$mem_enum&314$val_fA&315$cardsE&316$card_uniqP&317$size_tuple&318$map_inj_uniq&319$ft_m&321$in&323$t_x&324$*&325$addSn&326$tnth_nth&327$card_ltn_sorted_tuples&328$map_comp&329$eq_map&330$m0&331$def_m&332$drop_nth&333$leq_addl&334$drop_size&335$leq_add2l&336$tnth_ord_tuple,&338$inord_val&339$inc_t&340$tnth_map&341$tnth_ord_tuple&342$inordK&343$leq_subLR&344$nth_map&345$def_e&346$size_map&347$IHj&349$card_sorted_tuples&351$/(val x0)&352$big_cons&353$IHt&354$val_insubd&355$leq_add2r&356$add_mn&357$s&358$sub_mn&359$=&360$x&361$by&362$card_partial_ord_partitions&363$sameP&364$def_n&365$rowK&107$tnth_nth&108$genmx_id&109$gen_vs2mx&111$sameP&113$memvK&115$linear0&116$genmx0&117$genmx_adds&118$genmx_cap&119$genmx1&120$tvalK&121$mulmx_sum_row&122$linear_sum&123$row_b2mx&125$linearZ&126$mul_b2mx&127$mxE&128$span_b2mx&129$size_tuple&130$scalemx_sub&132$sub0mx&133$Uu&134$Uv&135$linearP&136$addmx_sub&137$scale1r&144$memvE&146$subv_refl&147$eqUV&148$row_sub&150$eqEsubv&152$sub0v&153$andbT&154$scaler0,&155$vs2mxF&156$submx1&157$mem_r2v&159$nz_row_sub&160$memv0&161$subv0&162$vs2mx0&163$submx0&164$nz_row_eq0&165$vs2mxD&166$addsmx_sub&167$addsmxSl&169$addsmxSr&170$addsmxC&171$submx_refl&172$addsmxA&173$addvC&175$linearD&177$submxMl&180$bigD1&181$addvSl&182$subv_add&187$vs2mx_sum&189$vs2mxI&190$sub_capmx&191$capmxSl&193$capmxSr&194$capmxC&195$capmxA&196$capvC&197$subv_cap&199$memv_cap&200$vs2mxD,&202$capvSl&204$bigcapv_inf&205$sub1mx&206$capmx_compl&208$diffmxSl&209$capmx_diff&210$addv_diff_cap&211$addvA&212$addv_idPr&213$mxrank0&214$mxrank_eq0&215$mxrank1&216$mxrank_gen&217$rank_rV&218$can2_eq&219$dimvf&223$mxrank_compl&224$mxrank_cap_compl&225$mxrank_sum_cap&226$dimv_sum_cap&227$dxUV&228$dimv0&229$dimv_eq0&231$eqn_add2l&232$dimv_leqif_eq&233$dim_vline&234$eqxx&235$leq_add2l&237$directvE&239$leq_eqVlt&242$dimv_sum_leqif&243$orbF&244$mxdirectE&245$mxdirect_addsE&246$directv_addE&247$directv_trivial&248$subr_eq0&250$opprD&251$addrACA&252$addr_eq0&253$xpair_eqE&254$eq_uv&255$oppr_eq0&256$andbb&257$memvN&258$memvB&259$addrC&260$vs2mx0]&262$2vs2mx_sum&263$dxU&266$sub0r&267$u_0&268$addKr&269$j&270$Dv&271$sumrB&272$big1&273$negPf&274$subrr&275$Pj&276$big1_eq&278$eq_row_sub&279$memv_span&280$rank_leq_row&281$sXU&283$mem_tnth&284$sub_span&286$u&287$eqXY&288$big_rem&289$big_tnth&290$span_def&291$big_nil&292$big_seq1&293$big_cons&294$big_cat&295$mulmxDl&296$scalemxAl&297$Xv&298$mulmxKpV&299$span_nil&300$span_seq1&301$perm_eq_size&302$eq_span&303$seq1_free&304$sum1_card&305$card_ord&306$has_pred1&307$all_predC&308$big_all&309$big_andE&310$free_directv&311$free_b2mx&312$\row_i&313$k&314$=&315$0&316$by&317$mul0mx&318$lin_b2mx&319$kt0&320$kermx_eq0&321$t_free&322$row_mul&323$mulmx1&324$CtK&325$2mulmxA&326$coord_free&327$mulr1&328$addr0&329$j'i&330$mulr0&331$negb_or&332$cat_free&333$perm_free&334$directvEgeq&336$geq_leqif&337$nil_free&338$big_ord0&339$free_cons&340$IH_X&341$big_ord_recl&342$freeE&343$negb_exists&344$negbK&345$in_tupleE&346$freeX&347$def_v&348$big_nth&349$big_mkord&350$index_uniq&351$free_uniq&352$valK&353$insubT&354$coord_sum_free&355$scaler_sumr&356$big_split&357$scalerA&358$scalerDl&359$size_map&360$eq_szX&361$ltiX&362$nth_map&363$neqji&364$scale0r&365$span_cat&367$defU&368$defV&369$freeY&370$eqEdim&371$sUX&372$dimvS&373$tnth_mktuple&375$row_base_free&376$eq_row_base&377$big_morph&381$span_bigcat&382$freeXs&383$bigcat_free&384$directvP&385$mul_rV_lin1&386$rowE&387$fun_of_lfunK&388$eq_fg&389$lfunE&390$addrA&391$add0r&392$addNr&393$scalerDr&394$/(f2mx (Vector.Hom _))&395$mulmxDr&396$scalemxAr&397$mxvecK&401$linearN&402$eqmxMr&404$limg_line&405$limgS&406$mulmxA&408$Drw&409$capvSr&411$big_map&412$limg_sum&413$opp_lfunE&416$add_lfunE&417$fg0&418$memvf&419$comp_lfunE&420$inv_lfun_def&421$lkerE&422$mxrank_mul_ker&423$limg_ker_dim&424$limg_span&425$limg_dim_eq&426$injf&428$memv_ker&429$linearB&430$eq_fuv&431$inj_eq&432$limg_ker0&433$limg_lfunVK&434$fK&435$capv0&436$lker0_limgf&437$lker0_lfunVK&438$comp_lfunA&439$lker0_compfV&440$comp_lfun1l&441$lker0_compVf&442$comp_lfun1r&443$map_id_in&444$map_comp&445$capvA&446$capvv&447$cap0v&448$limg0&449$add0v&450$addvS&451$capvS&452$limg_add&453$limg_comp&454$addv0&455$defW&456$x&457$Xx&458$lpreim_cap_limg&460$lpreimK&461$addNKr&462$Wfu&463$oner_eq0&464$proj_mx_sub&465$subvP&467$proj_mx_id&468$add_proj_mx&469$daddv_pi_add&473$projv_id&475$dimv_compl&476$limg_proj&477$addnK&478$capfv&479$subr0&480$capv_diff&482$addv_pi2_id&483$memv_pi2&484$addv_diff&485$memv_pi1&486$big_filter&487$IHr&488$coord_vbasis&494$vsprojK&495$basis_free&496$vbasis_mem&497$memt_nth&498$rmorphD&501$scale_scalar_mx&502$mx11_scalar&503$hsubmxK&504$row_mxKl&505$row_mxKr&506$ffunE&508$enum_rankK&509$enum_valK&510$sol_u&512$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$ \ No newline at end of file
diff --git a/contrib/ML4PG/coq/matlab_interaction.el b/contrib/ML4PG/coq/matlab_interaction.el
deleted file mode 100644
index bab2a30f..00000000
--- a/contrib/ML4PG/coq/matlab_interaction.el
+++ /dev/null
@@ -1,627 +0,0 @@
-;; This function starts Matlab
-
-(defun ml4pg-init-clusters ()
- (interactive)
- (ml4pg-my-config-display)
- (require 'comint)
- (apply 'make-comint "matlab" *matlab-program* nil
- (list "-nodesktop -r 0")))
- ;(apply 'make-comint "matlab" *matlab-program* nil (list "-nodesktop -r")))
- ; (shell-command "/home/jonathan/Matlab/bin/matlab -nodesktop -r
- ; \"load /home/jonathan/Desktop/Research/Matlab/expt1_complete_goals.csv; kmeans_clusters_and_frequencies(expt1_complete_goals,3,1000)\"")
-
-(defvar ml4pg-my-buffer "")
-
-(defun ml4pg-my-config-display ()
- (delete-other-windows)
- (switch-to-buffer-other-window "*display*")
- (erase-buffer)
- (other-window -1))
-
-;; This function is in charge of processing the output produced by Matlab
-;; The variable signal is used to indicate the function which has called to matlab and to process the result
-
-(defvar ml4pg-signal 0)
-
-(defun ml4pg-my-output-filter (output)
- (setq ml4pg-my-buffer (concat ml4pg-my-buffer output))
- (when (and output (get-buffer "*display*"))
- (with-current-buffer "*display*"
- (progn (erase-buffer)
- (cond ((equal ml4pg-signal 0) nil)
- ;((equal signal 1) (print-similarities (search-cluster (split-clusters-aux (remove-jumps my-buffer) nil) (1+(length saved-theorems)))))
- ;((equal signal 2) (print-clusters (split-clusters-aux (remove-jumps my-buffer) nil) (split-frequencies my-buffer nil)))
- ((equal ml4pg-signal 1) (ml4pg-print-similarities (ml4pg-split-clusters-aux2 ml4pg-my-buffer nil)))
- ;((equal signal 2) (print-clusters (split-clusters-aux my-buffer nil) (split-frequencies my-buffer nil)))
- ((equal ml4pg-signal 4) (ml4pg-print-clusters-bis (ml4pg-split-clusters-aux ml4pg-my-buffer nil) (ml4pg-split-frequencies ml4pg-my-buffer nil)))
- ((equal ml4pg-signal 3) (ml4pg-compute-clusters-and-values (ml4pg-split-clusters-aux (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)
- (ml4pg-split-frequencies (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)))
- (t nil)))))
- output)
-
-(add-hook 'comint-preoutput-filter-functions 'ml4pg-my-output-filter)
-
-;(defun ml4pg-split-clusters-aux (str res)
- ;(let ((init (search "'" str)))
- ;(if init
-; (let ((end (search "'" str :start2 (1+ init))))
-; (split-clusters-aux (subseq str (1+ end))
-; (cons (cluster-string-to-list (subseq str (1+ init) end)) res)))
- ; res)))
-
-;(defun ml4pg-split-frequencies (str res)
- ;(let ((init (search "[" str)))
- ;(if init
-; (let ((end (search "]" str :start2 (1+ init))))
-; (if (not (search "char" (subseq str init end)))
-; (split-frequencies (subseq str (1+ end))
-; (cons (string-to-number (subseq str (1+ init) end)) res))
-; (split-frequencies (subseq str (1+ (search "[" str :start2 (1+ end)))) res)
-; ))
- ; res)))
-
-
-(defun ml4pg-split-clusters-aux2 (str res)
- (let ((init (search "ans =" str)))
- (if init
- (list (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) (search ">>" str :from-end t)))))
- nil)))
-
-(defun ml4pg-split-clusters-aux (str res)
- (let ((init (search "ans =" str)))
- (if init
- (let ((end (search "[" str :start2 (1+ init))))
- (ml4pg-split-clusters-aux (subseq str (1+ end))
- (cons (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) end))) res)))
- res)))
-
-
-(defun ml4pg-split-frequencies (str res)
-(let ((init (search "[" str)))
- (if init
- (let ((end (search "]" str :start2 (1+ init))))
- (if (not (search "char" (subseq str init end)))
- (ml4pg-split-frequencies (subseq str (1+ end))
- (cons (string-to-number (ml4pg-remove-jumps (subseq str (1+ init) end))) res))
- (ml4pg-split-frequencies (subseq str (1+ (search "[" str :start2 (1+ end)))) res)
- ))
- res)))
-
-
-
-
-(defun ml4pg-search-cluster (res n)
- (do ((temp res (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (member (format "%s" n) (car temp))
- (append temp2 (list (car temp))))))
-
-
-
-(defun ml4pg-cluster-string-to-list (cluster)
- (do ((temp cluster)
- (temp2 nil))
- ((not (search "," temp)) (append temp2 (list temp)))
- (progn (setf temp2 (append temp2 (list (subseq temp 0 (search "," temp)))))
- (setf temp (subseq temp (1+ (search "," temp)))))))
-
-
-
-
-
-(defun ml4pg-remove-occurrence (list n)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (not (equal (format "%s" n) (car temp)))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-(defvar ml4pg-granularity-level-temp 1)
-
-(defun ml4pg-print-similarities (res)
- (interactive)
- (cond ((not (caar res)) (insert (format "Searching similarities...\n")))
- ((search "None" (caar res))
- (if (not ml4pg-iterative)
- (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
- (if (eq ml4pg-granularity-level-temp 5)
- (format "Sorry, but we have not found any similarity at any ganularity level\n")
- (progn (setf ml4pg-granularity-level-temp (1+ ml4pg-granularity-level-temp))
- (ml4pg-show-clusters-of-theorem-iterative)))))
- (t (progn (insert (format "Similarities:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (insert (format "This lemma is similar to the lemmas:\n"))
- (do ((temp2 (ml4pg-remove-occurrence (car res) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
- ((endp temp2) )
- (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "- "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
- (insert (format "- "))
- (ml4pg-insert-button-lemma temp-res)))))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
- )))
-
-
-
-
-(defun ml4pg-print-similarities-matlab ()
- (with-current-buffer "*display*"
- (while (string= "0" (car (read-lines (expand-file-name "available.txt"))))
-
- (progn (erase-buffer)
- (insert (format "Searching clusters...\n"))
- (sleep-for 1))
- )
- (erase-buffer)
- (let* ((clu (car (ml4pg-read-lines (expand-file-name "matlab_res.txt")))))
- (cond
- ((search "None" clu)
- (if (not ml4pg-iterative)
- (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
- (if (eq ml4pg-granularity-level-temp 5)
- (format "Sorry, but we have not found any similarity at any ganularity level\n")
- (progn (setf ml4pg-granularity-level-temp (1+ ml4pg-granularity-level-temp))
- (ml4pg-show-clusters-of-theorem-iterative)))))
- (t (progn (insert (format "Similarities:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (insert (format "This lemma is similar to the lemmas:\n "))
- (do ((temp2 (ml4pg-remove-occurrence (ml4pg-cluster-string-to-list clu) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
- ((endp temp2) )
- (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "- "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
- (insert (format "- "))
- (ml4pg-insert-button-lemma temp-res)))))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
- ))
-)))
-
-
-
-
-
-(defun ml4pg-print-similarities-weka (n)
- (let ((clusters (ml4pg-extract-clusters-from-file n)))
- (with-current-buffer "*display*"
- (erase-buffer)
- (insert (format "Similarities:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (insert (format "This lemma is similar to the lemmas:\n "))
- (do ((temp2 (ml4pg-remove-occurrence (ml4pg-clusters-of-n clusters (nth (1- (length ml4pg-saved-theorems)) clusters)) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
- ((endp temp2) )
- (if (<= (car temp2) (length ml4pg-saved-theorems))
- (progn (insert (format "- "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (car temp2) 1) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
- (insert (format "- "))
- (ml4pg-insert-button-lemma temp-res))))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- )
- ))
-
-
-
-(defun ml4pg-insert-button-lemma (lemma)
- (progn (insert-button lemma 'action (ml4pg-insert-button-lemma-macro lemma)
- 'face (list 'link)
- 'follow-link t)
- (insert (format "\n"))))
-
-
-
-(defun ml4pg-insert-button-lemma-macro (test)
- (list 'lambda '(x)
- (list 'progn
- (list 'proof-shell-invisible-cmd-get-result (list 'format '"Unset Printing All."))
- (list 'if (list 'get-buffer '"*display2*") (list 'with-current-buffer '"*display2*" (list 'delete-window)))
- (list 'with-current-buffer '"*display*" (list 'split-window-vertically))
- (list 'switch-to-buffer-other-window '"*display2*")
- (list 'with-current-buffer '"*display2*" (list 'erase-buffer))
- (list 'with-current-buffer '"*display2*"
- (list 'insert (list 'proof-shell-invisible-cmd-get-result
- (list 'format '"Print %s." test))))
- )))
-
-
-
-
-
-
-(defvar ml4pg-times 0)
-
-(defun ml4pg-print-clusters (res freq)
- (interactive)
- (setf times (1+ times))
- (if (not (caar res))
- (insert (format "Searching clusters...\n"))
- (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma
- (ml4pg-remove_last_colon
- (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))))))))
-
-
-(defun ml4pg-print-clusters-bis (res freq)
- (interactive)
- (setf times (1+ times))
- (if (not (caar res))
- (insert (format "Searching clusters...\n"))
- (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (if (< (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
- (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (format "%s" (read (current-buffer)))))
- (insert (format "Lemma " ))
- (ml4pg-insert-button-lemma temp-res))
- )))))))
-
-
-(defun ml4pg-extract_clusters_freq (list)
- (do ((temp list (cdr temp))
- (clusters nil)
- (freq nil))
- ((endp temp) (list clusters freq))
- (if (not (string= (subseq (car temp) 0 1) "["))
- (setf clusters (append clusters (list (car temp))))
- (setf freq (append freq (list (string-to-number (subseq (car temp) 1 (search "]" (car temp))))))))))
-
-
-
-
-
-
-
-
-
-
-
-(defun ml4pg-print-clusters-weka (gra)
- (let* ((clusters (ml4pg-extract-clusters-from-file gra))
- (res1 (ml4pg-remove-alone (cdr (ml4pg-form-clusters clusters gra)))))
- (with-current-buffer "*display*"
- (erase-buffer)
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
-
- (do ((temp res1 (cdr temp))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s\n" i ))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (if (< (car temp2) (length ml4pg-saved-theorems))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
- (car (nth (car temp2) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (format "%s" (read (current-buffer)))))
- (insert (format "Lemma " ))
- (if (not (search "home" temp-res) )(ml4pg-insert-button-lemma temp-res)))
- ))))
-
-
- )))
-
-
-
-
-
-
-
-(defun ml4pg-remove_last_colon (str)
- (if (string= (subseq str (1- (length str))) ":")
- (subseq str 0 (1- (length str)))
- str))
-
-
-;; This functions shows the cluster of a theorem
-
-
-(defun ml4pg-show-clusters-of-theorem-iterative ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
- (gra (if (not ml4pg-iterative)
- (cond ((eq 2 ml4pg-granularity-level) 5)
- ((eq 3 ml4pg-granularity-level) 10)
- ((eq 4 ml4pg-granularity-level) 15)
- ((eq 5 ml4pg-granularity-level) 20)
- (t 3))
- (cond ((eq 2 ml4pg-granularity-level-temp) 5)
- ((eq 3 ml4pg-granularity-level-temp) 10)
- ((eq 4 ml4pg-granularity-level-temp) 15)
- ((eq 5 ml4pg-granularity-level-temp) 20)
- (t 3)))))
- (progn (setf ml4pg-signal 1)
- (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp.csv")
- (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
- (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
- (ml4pg-print-similarities-matlab)
- )))
-
-(defun ml4pg-show-clusters-of-theorem ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
- (gra (if (not ml4pg-iterative)
- (cond ((eq 2 ml4pg-granularity-level) 8)
- ((eq 3 ml4pg-granularity-level) 15)
- ((eq 4 ml4pg-granularity-level) 25)
- ((eq 5 ml4pg-granularity-level) 50)
- (t 5))
- (cond ((eq 2 ml4pg-granularity-level-temp) 8)
- ((eq 3 ml4pg-granularity-level-temp) 15)
- ((eq 4 ml4pg-granularity-level-temp) 25)
- ((eq 5 ml4pg-granularity-level-temp) 50)
- (t 5)))))
- (progn
- (setq ml4pg-my-buffer "")
- (setf res (ml4pg-extract-info-up-to-here))
- (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1-bis res)))
- ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2-bis tactic-temp tactic-level)))
- ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2-bis proof-tree-temp proof-tree-level)))))
- (if ml4pg-libs-menus
- (progn (ml4pg-add-libraries-temp)
- (ml4pg-add-names)))
- (switch-to-buffer-other-window "*display*")
- (cond ((string= ml4pg-ml-system "m")
- (progn (setf ml4pg-signal 1)
- (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp.csv")
- (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
- (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
- (ml4pg-print-similarities-matlab)
- ))
-
- ((string= ml4pg-ml-system "w")
- (progn (setf ml4pg-signal 5)
- (ml4pg-weka gra)
- (sleep-for 1)
- (ml4pg-print-similarities-weka gra))
- )
- )))
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All")))
-
-;; The following function shows all the clusters which have been obtained from all the theorems exported up to now
-
-(defun ml4pg-show-clusters ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
- (gra (cond ((eq 2 ml4pg-granularity-level) 5)
- ((eq 3 ml4pg-granularity-level) 10)
- ((eq 4 ml4pg-granularity-level) 15)
- ((eq 5 ml4pg-granularity-level) 20)
- (t 3)))
- (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
- ((eq 3 ml4pg-frequency-precision) 1000)
- (t 100))))
-
- (progn
- (setf ml4pg-signal 2)
- (setf ml4pg-my-buffer "")
- (progn (with-temp-file (expand-file-name "temp1.csv") (insert (ml4pg-extract-features-1)))
- (switch-to-buffer-other-window "*display*")
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp1.csv") (format "; %s(temp1,%s,%s)\n" alg gra freq))))
- )))
-
-
-
-(defun ml4pg-show-clusters-bis ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
- (gra (cond ((eq 2 ml4pg-granularity-level) 5)
- ((eq 3 ml4pg-granularity-level) 10)
- ((eq 4 ml4pg-granularity-level) 15)
- ((eq 5 ml4pg-granularity-level) 20)
- (t 3)))
- (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
- ((eq 3 ml4pg-frequency-precision) 1000)
- (t 100))))
-
- (progn
- (setf ml4pg-signal 4)
- (setf ml4pg-my-buffer "")
- (if ml4pg-libs-menus
- (progn (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1)))
- ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2 tactic-level)))
- ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2 proof-tree-level)))))
- (ml4pg-add-libraries-temp)
- (ml4pg-add-names))
- (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-1))))
- (switch-to-buffer-other-window "*display*")
- (cond ((string= ml4pg-ml-system "m")
- (progn
- (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp.csv") (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra freq
- (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
- (ml4pg-print-clusters-matlab)))
- ((string= ml4pg-ml-system "w")
- (progn (setf ml4pg-signal 5)
- (ml4pg-weka gra)
- (sleep-for 1)
- (ml4pg-print-clusters-weka gra))
- )
-
- )))
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
-)
-
-
-
-
-(defun ml4pg-add-libraries ()
- (do ((temp ml4pg-libs-menus (cdr temp)))
- ((endp temp) nil)
- (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) ".csv >> " (expand-file-name "temp1.csv"))))
- ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tactics.csv >> " (expand-file-name "temp1.csv"))))
- ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tree.csv >> " (expand-file-name "temp1.csv")))))))
-
-(defun ml4pg-add-libraries-temp ()
- (do ((temp ml4pg-libs-menus (cdr temp)))
- ((endp temp) nil)
- (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) ".csv >> " (expand-file-name "temp.csv"))))
- ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tactics.csv >> " (expand-file-name "temp.csv"))))
- ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_tree.csv >> " (expand-file-name "temp.csv")))))))
-
-(defun ml4pg-add-names ()
- (shell-command (concat "rm " (expand-file-name "names_temp.txt")))
- (shell-command (concat "touch " (expand-file-name "names_temp.txt")))
- (do ((temp ml4pg-libs-menus (cdr temp)))
- ((endp temp) nil)
- (shell-command (concat "cat " ml4pg-home-dir "libs/coq/" (car temp) "_names >> " (expand-file-name "names_temp.txt")))))
-
-
-
-
-
-
-
-(defvar ml4pg-names-values nil)
-
-(defun ml4pg-print-clusters2 (res freq)
- (interactive)
- (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")))
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (insert (format "Lemma %s\n"
- (ml4pg-remove_last_colon
- (car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems2))))))))))
-
-
-(defun ml4pg-compute-clusters-and-values (list fr)
- (if (not (ml4pg-left-strings ml4pg-saved-theorems2))
- (ml4pg-print-clusters2 list fr)
- (progn (setf ml4pg-names-values (ml4pg-extract-names-dynamic))
- (do ((temp list (cdr temp))
- (n 200 (+ n 5)))
- ((endp temp) (progn (setf ml4pg-names-values (ml4pg-complete-names-values ml4pg-names-values n))
- (setf ml4pg-saved-theorems2 (ml4pg-recompute-saved-theorems ml4pg-saved-theorems2))
- (setf ml4pg-my-buffer "")
- (ml4pg-show-clusters-dynamic-b)
- )
-nil
-)
- (ml4pg-assign-values (car temp) n))
- )))
-
-(defvar ml4pg-granularity-dynamic 0)
-
-(defun ml4pg-show-clusters-dynamic ()
- (interactive)
- (setf ml4pg-granularity-dynamic (read-string "Introduce the granularity level (values from 1 to 5): "))
- (progn
- (setf ml4pg-signal 3)
- (setf ml4pg-my-buffer "")
- (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
- (switch-to-buffer-other-window "*display*")
- (require 'comint)
- (cond ((string= "1" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
- ((string= "2" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
- ((string= "3" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
- ((string= "4" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
- ((string= "5" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
- (t (ml4pg-show-clusters-dynamic)))
-
- ))
-
-(defun ml4pg-show-clusters-dynamic-b ()
- (interactive)
- (progn
- (setf ml4pg-signal 3)
- (setf ml4pg-my-buffer "")
- (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
- (require 'comint)
- (cond ((string= "1" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
- ((string= "2" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
- ((string= "3" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
- ((string= "4" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
- ((string= "5" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
- (t (ml4pg-show-clusters-dynamic)))
- ;(comint-send-string (get-buffer-process "*matlab*")
-; (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,"
-; (format "%s" (floor (length (extract-list-without-strings saved-theorems2)) 5) ) ",100)\n"))
- )) \ No newline at end of file
diff --git a/contrib/ML4PG/coq/menus.el b/contrib/ML4PG/coq/menus.el
deleted file mode 100644
index 97d67963..00000000
--- a/contrib/ML4PG/coq/menus.el
+++ /dev/null
@@ -1,304 +0,0 @@
-;;; The menu interaction
-
-(easy-menu-define statistics-menu global-map "Statistics"
- '("Statistics"
- ("Configuration"
- ("Algorithm"
- ["K-means" (ml4pg-change-algorithm "k")
- :selected (string= ml4pg-algorithm "k")
- :style toggle
- :help "Use k-means algorithm"]
- ["EM" (ml4pg-change-algorithm "e")
- :selected (string= ml4pg-algorithm "e")
- :style toggle
- :active (string= ml4pg-ml-system "w")
- :help "Use Simple EM algorithm"]
- ["FarthestFirst" (ml4pg-change-algorithm "f")
- :selected (string= ml4pg-algorithm "f")
- :style toggle
- :active (string= ml4pg-ml-system "w")
- :help "Use FarhestFirst algorithm"])
- ("Granularity"
- ["1" (ml4pg-change-granularity 1)
- :selected (eq ml4pg-granularity-level 1)
- :style toggle
- :help "We will use 3 clusters"]
- ["2" (ml4pg-change-granularity 2)
- :selected (eq ml4pg-granularity-level 2)
- :style toggle
- :help "We will use 5 clusters"]
- ["3" (ml4pg-change-granularity 3)
- :selected (eq ml4pg-granularity-level 3)
- :style toggle
- :help "We will use 10 clusters"]
- ["4" (ml4pg-change-granularity 4)
- :selected (eq ml4pg-granularity-level 4)
- :style toggle
- :help "We will use 15 clusters"]
- ["5" (ml4pg-change-granularity 5)
- :selected (eq ml4pg-granularity-level 5)
- :style toggle
- :help "We will use 20 clusters"])
- ("Frequencies"
- ["1" (ml4pg-change-frequency 1)
- :selected (eq ml4pg-frequency-precision 1)
- :style toggle
- :help "The experiments will be run 100 times"]
- ["2" (ml4pg-change-frequency 2)
- :selected (eq ml4pg-frequency-precision 2)
- :style toggle
- :help "The experiments will be run 500 times"]
- ["3" (ml4pg-change-frequency 3)
- :selected (eq ml4pg-frequency-precision 3)
- :style toggle
- :help "The experiments will be run 1000 times"])
-)
- ["Extract info up to point" (ml4pg-extract-feature-theorems)
- :keys "C-c SPC"]
- ["Show clusters" (ml4pg-show-clusters-bis)
- :keys "C-c c"]
- ["Show similar theorems" (ml4pg-show-clusters-of-theorem)
- :keys "C-c m"]
- ["Export library" (ml4pg-save-numbers)
- :keys "C-c n"]
- ["Show cluster libraries" (ml4pg-exported-libraries)]
- ["Activate Icons" (ml4pg-activate-icons)]
-))
-
-(easy-menu-remove-item global-map '("menu-bar") "Statistics")
-
-(easy-menu-add-item nil nil statistics-menu "help-menu")
-
-(defun ml4pg-activate-icons ()
- (interactive)
- (progn
- (easy-menu-remove-item nil '("Statistics") "Activate Icons")
- (define-key coq-mode-map [tool-bar statistical-hint]
- (list 'menu-item "Statistical Hint" 'ml4pg-show-clusters-of-theorem
- :help "Statistical Hint"
- :image (list 'image :type 'xpm
- :file (concat ml4pg-home-dir "icons/sh-hint.xpm"))))
- (define-key coq-mode-map [tool-bar clustering]
- (list 'menu-item "Clustering" 'ml4pg-show-clusters-bis
- :help "Clustering"
- :image (list 'image :type 'xpm
- :file (concat ml4pg-home-dir "icons/clustering.xpm"))))))
-
-
-(defvar ml4pg-ml-system "w")
-(defvar ml4pg-algorithm "k")
-(defvar ml4pg-granularity-level 3)
-(defvar ml4pg-frequency-precision 1)
-(defvar ml4pg-iterative nil)
-(defvar ml4pg-save-automatically nil)
-(defvar ml4pg-level "g")
-
-
-(defun ml4pg-change-level (n)
- (setq ml4pg-level n))
-
-(defun ml4pg-change-algorithm (s)
- (setq ml4pg-algorithm s))
-
-(defun ml4pg-change-ml-system (s)
- (setq ml4pg-ml-system s)
- (setq ml4pg-algorithm "k")
- (cond ((string= s "w")
- (setq ml4pg-iterative nil)
- ))
- )
-
-(defun ml4pg-change-granularity (n)
- (setq ml4pg-granularity-level n))
-
-(defun ml4pg-change-frequency (n)
- (setq ml4pg-frequency-precision n))
-
-(defun ml4pg-change-iterative-search ()
- (setq ml4pg-iterative (not ml4pg-iterative)))
-
-(defun ml4pg-change-save ()
- (setq ml4pg-save-automatically (not ml4pg-save-automatically)))
-
-
-;(easy-menu-add-item nil '("Statistics") statistics-menu "help-menu")
-
-(defun ml4pg-change-algorithm-interactive ()
- (interactive)
- (let ((alg (read-string
- "What algorithm do you want to use (k-means -> k, Gaussian -> g): ")))
- (setf ml4pg-algorithm (cond ((string= "g" alg) "g")
- ((string= "k" alg) "k")
- (t ml4pg-algorithm)))))
-
-(defun ml4pg-change-granularity-interactive ()
- (interactive)
- (let ((alg (read-string
- "Introduce the granularity level (values from 1 to 5): ")))
- (setf ml4pg-granularity-level (cond ((string= "1" alg) 1)
- ((string= "2" alg) 2)
- ((string= "3" alg) 3)
- ((string= "4" alg) 4)
- ((string= "5" alg) 5)
- (t ml4pg-granularity-level)))))
-
-(defun ml4pg-change-frequency-interactive ()
- (interactive)
- (let ((alg (read-string
- "Introduce the precision of the frequencies that you want to obtain (values from 1 to 3): ")))
- (setf ml4pg-frequency-precision (cond ((string= "1" alg) 1)
- ((string= "2" alg) 2)
- ((string= "3" alg) 3)
- (t ml4pg-frequency-precision)))))
-
-(defun ml4pg-change-iterative-interactive ()
- (interactive)
- (let ((alg (read-string
- "Do you want to perform iterative search? (yes -> y, no -> n): ")))
- (setf ml4pg-iterative (cond ((string= "y" alg) 1)
- ((string= "n" alg) 2)
- (t ml4pg-iterative)))))
-
-
-
-(defun ml4pg-exported-libraries ()
- (interactive)
- (easy-menu-remove-item nil '("Statistics") "Show cluster libraries")
- (easy-menu-add-item nil '("Statistics")
- (cons "Available libraries for clustering:"
- (cons ["Current" nil
- :selected t
- :style toggle
- :help "Use the current library for clustering"]
- (ml4pg-select-libraries)))))
-
-
-(defun ml4pg-select-libraries ()
- (ml4pg-available-libraries)
- (ml4pg-available-dirs)
- (append (ml4pg-select-libraries-aux ml4pg-libs nil) (ml4pg-libraries-dirs)))
-
-
-(defun ml4pg-select-libraries-aux (temp temp2)
- (if (endp temp)
- temp2
- (ml4pg-select-libraries-aux (cdr temp) (append temp2 (list (ml4pg-menu-library (car temp)))))))
-
-
-
-
-(defvar ml4pg-libs nil)
-
-(defun ml4pg-available-libraries ()
- (shell-command (concat "ls " ml4pg-home-dir "libs/coq | grep .csv | wc -l"))
- (let ((n nil)
- (i 0))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (setq n (string-to-number (format "%s" (read (current-buffer))))))
- (shell-command (concat "ls " ml4pg-home-dir "libs/coq | grep .csv"))
- (with-current-buffer "*Shell Command Output*"
- (progn (beginning-of-buffer)
- (while (< i n)
- (let ((r (format "%s" (read (current-buffer)))))
- (progn (setq i (1+ i))
- (setq ml4pg-libs (append ml4pg-libs (list (subseq r 0 (search "." r))))))))))))
-
-
-
-(defvar ml4pg-dirs nil)
-
-(defun ml4pg-available-dirs ()
- (shell-command (concat "ls -d " ml4pg-home-dir "libs/coq/*/ | wc -l"))
- (let ((n nil)
- (i 0))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (setq n (string-to-number (format "%s" (read (current-buffer))))))
- (shell-command (concat "ls -d " ml4pg-home-dir "libs/coq/*/"))
- (with-current-buffer "*Shell Command Output*"
- (progn (beginning-of-buffer)
- (while (< i n)
- (let ((r (format "%s" (read (current-buffer)))))
- (progn (setq i (1+ i))
- (setq ml4pg-dirs (append ml4pg-dirs (list (subseq r (length (concat ml4pg-home-dir "libs/coq/")) (1- (length r)))))))))))
- ))
-
-
-
-
-(defun ml4pg-libraries-dirs ()
- (do ((temp ml4pg-dirs (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (setf temp2 (append temp2 (list (append (list (car temp)) (ml4pg-libraries-dir (car temp))))))))
-
-
-
-(defun ml4pg-libraries-dir (dir)
- (shell-command (concat "ls " ml4pg-home-dir "libs/coq/" dir "/ | grep _names | wc -l"))
- (let ((n nil)
- (i 0)
- (temp nil))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (setq n (string-to-number (format "%s" (read (current-buffer))))))
- (shell-command (concat "ls " ml4pg-home-dir "libs/coq/" dir "/ | grep _names"))
- (with-current-buffer "*Shell Command Output*"
- (progn (beginning-of-buffer)
- (while (< i n)
- (let* ((r1 (format "%s" (read (current-buffer))))
- (r (subseq r1 0 (search "_names" r1))))
- (progn (setq i (1+ i))
- (setq temp (append temp (list (ml4pg-menu-library-dir (subseq r 0 (search "." r)) dir)))))))
-))
- temp))
-
-
-
-(defun ml4pg-menu-library-dir (item dir)
- (vector item (list 'change-library (concat dir "/" item))
- :selected (list 'string-member (concat dir "/" item) 'ml4pg-libs-menus)
- :style 'toggle
- :help (format "Use the %s library for clustering" item)))
-
-(defun ml4pg-menu-library (item)
- (vector item (list 'change-library item)
- :selected (list 'string-member item 'ml4pg-libs-menus)
- :style 'toggle
- :help (format "Use the %s library for clustering" item)))
-
-
-
-(defvar ml4pg-libs-menus nil)
-
-(defun ml4pg-string-member (string list)
- (do ((temp list (cdr temp))
- (is nil))
- ((or (endp temp) is) is)
- (if (string= string (car temp))
- (setf is t))))
-
-
-(defun ml4pg-change-library (string)
- (if (string-member string ml4pg-libs-menus)
- (ml4pg-remove-from-menus string)
- (setq ml4pg-libs-menus (append ml4pg-libs-menus (list string)))))
-
-
-(defun ml4pg-remove-from-menus (string)
- (do ((temp ml4pg-libs-menus (cdr temp))
- (temp2 nil))
- ((endp temp) (setf libs-menus temp2))
- (if (not (string= string (car temp)))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-
-
-
-
-
-
-
-
diff --git a/contrib/ML4PG/coq/save_lemmas.el b/contrib/ML4PG/coq/save_lemmas.el
deleted file mode 100644
index 70b06cd8..00000000
--- a/contrib/ML4PG/coq/save_lemmas.el
+++ /dev/null
@@ -1,117 +0,0 @@
-(defun ml4pg-proof-assert-next-command-interactive3 ()
- (interactive)
- (if (get-buffer "*response*")
- (if (eq ml4pg-save-automatically 0)
- (proof-assert-next-command-interactive)
- (progn (with-current-buffer "*response*"
- (beginning-of-buffer)
- (if (zerop (buffer-size))
- (setf temp nil)
- (setf temp (search "No"
- (format "%s" (read (current-buffer)))))))
- (if temp
- (ml4pg-export-previous-lemm)
- (proof-assert-next-command-interactive)
- ))
-
- )
- (proof-assert-next-command-interactive)))
-
-
-(defun ml4pg-export-previous-lemm ()
- (interactive)
- (let ((final (point))
- (result nil)
- (end nil))
- (search-backward "Proof.")
- (proof-goto-point)
- (while (< (point) final)
- (let* ((semis (save-excursion
- (skip-chars-backward " \t\n"
- (proof-queue-or-locked-end))
- (proof-segment-up-to-using-cache (point))))
- (comment (caar semis))
- (cmd (cadar semis))
- (ts nil))
- (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (get-number-of-goals))
- (if cmd
- (setf result (cons (append (get-numbers cmd) (list ts) (list ng2)) result))
- )
- )
-
- )
- )
- (proof-assert-next-command-interactive)
- (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
- (list (list (format "%s" (get-name))
- (ml4pg-flat (reverse result))))))
- (search-forward "Qed.")
-
- ))
-
-
-(defun ml4pg-get-name ()
- (search-backward "Lemma")
- (read (current-buffer))
- (read (current-buffer)))
-
-
-(defun ml4pg-list-to-string (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2 (car temp) ", "))))
-
-
-
-
-
-
-
-(defun ml4pg-save-numbers ()
- (interactive)
- (progn (beginning-of-buffer)
- (proof-goto-point)
- (end-of-buffer)
- (ml4pg-extract-feature-theorems)
- (let ((d (read-string (concat "Where do you want to store this library (" (ml4pg-list-to-string ml4pg-dirs) "n (create new directory)): ")))
- (d2 nil))
- (cond ((ml4pg-string-member d ml4pg-dirs)
- (progn (with-temp-file
- (concat ml4pg-home-dir "libs/coq/" d "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- ".csv") (insert (ml4pg-extract-features-1)))
-
-
- (with-temp-file (concat ml4pg-home-dir "libs/coq/" d "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- "_names") (insert (ml4pg-extract-names)))))
- ((string= d "n")
- (progn
- (setf d2 (read-string (concat "Introduce a name for the directory:")))
- (shell-command (concat "mkdir " ml4pg-home-dir "libs/coq/" d2))
- (with-temp-file
- (concat ml4pg-home-dir "libs/coq/" d2 "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- ".csv") (insert (ml4pg-extract-features-1)))
- (with-temp-file (concat ml4pg-home-dir "libs/coq/" d2 "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- "_names") (insert (ml4pg-extract-names)))))
- (t
- (progn (with-temp-file
- (concat ml4pg-home-dir "libs/coq/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- ".csv") (insert (ml4pg-extract-features-1)))
- (with-temp-file (concat ml4pg-home-dir "libs/coq/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- "_names") (insert (ml4pg-extract-names))))))
-))) \ No newline at end of file
diff --git a/contrib/ML4PG/coq/shortcuts.el b/contrib/ML4PG/coq/shortcuts.el
deleted file mode 100644
index d67a7f50..00000000
--- a/contrib/ML4PG/coq/shortcuts.el
+++ /dev/null
@@ -1,14 +0,0 @@
-(global-set-key (kbd "C-c C-d") 'ml4pg-export-theorem)
-(global-set-key (kbd "C-c C-e") 'ml4pg-save-file-conventions1)
-(global-set-key (kbd "C-c m") 'ml4pg-show-clusters-of-theorem)
-(global-set-key (kbd "C-c C-SPC") 'ml4pg-extract-feature-theorems)
-(global-set-key (kbd "C-c c") 'ml4pg-show-clusters)
-(global-set-key (kbd "C-c e") 'ml4pg-extract-feature-theorems-dynamic)
-(global-set-key (kbd "C-c d") 'ml4pg-show-clusters-dynamic)
-(global-set-key (kbd "C-c a") 'ml4pg-change-algorithm-interactive)
-(global-set-key (kbd "C-c g") 'ml4pg-change-granularity-interactive)
-(global-set-key (kbd "C-c f") 'ml4pg-change-frequency-interactive)
-(global-set-key (kbd "C-c i") 'ml4pg-change-iterative-interactive)
-(global-set-key (kbd "C-c C-m") 'ml4pg-proof-assert-next-command-interactive3)
-(global-set-key (kbd "C-c n") 'ml4pg-save-numbers)
-
diff --git a/contrib/ML4PG/coq/storage.el b/contrib/ML4PG/coq/storage.el
deleted file mode 100644
index 84f1ddc1..00000000
--- a/contrib/ML4PG/coq/storage.el
+++ /dev/null
@@ -1,51 +0,0 @@
-(defun ml4pg-save-lemma-aux (string)
- (append-to-file string nil (concat ml4pg-home-dir "lemmas.txt"))
-)
-
-(defun ml4pg-save-lemma (name value)
- (ml4pg-save-lemma-aux (format "%s&%s$" name value)))
-
-
-(defun ml4pg-save-view-aux (string)
- (append-to-file string nil (concat ml4pg-home-dir "views.txt"))
-)
-
-(defun ml4pg-save-view (name value)
- (sml4pg-ave-view-aux (format "%s&%s$" name value)))
-
-
-(defun ml4pg-read-lemmas ()
- (if (file-exists-p (concat ml4pg-home-dir "coq/lemmas.txt"))
- (with-temp-buffer
- (insert-file-contents (concat ml4pg-home-dir "coq/lemmas.txt"))
- (let ((temp (format "%s" (read (current-buffer)))))
- (setf ml4pg-theorems_id (ml4pg-extract-info-from-files temp))
- ))))
-
-(defun ml4pg-read-views ()
- (if (file-exists-p (concat ml4pg-home-dir "coq/views.txt"))
- (with-temp-buffer
- (insert-file-contents (concat ml4pg-home-dir "coq/views.txt"))
- (let ((temp (format "%s" (read (current-buffer)))))
- (setf ml4pg-views_id (ml4pg-extract-info-from-files temp))
- ))))
-
-(defun ml4pg-extract-info-from-files (string)
- (do ((temp string)
- (temp2 nil))
- ((not (search "$" temp)) temp2)
- (let ((dollar (search "$" temp))
- (amper (search "&" temp)))
- (progn
- (setf temp2 (append temp2 (list (cons (subseq temp 0 amper)
- (string-to-number (subseq temp (1+ amper) dollar))))))
- (setf temp (subseq temp (1+ dollar)))))))
-
-
-
-
-
-
-
-
-
diff --git a/contrib/ML4PG/coq/views.txt b/contrib/ML4PG/coq/views.txt
deleted file mode 100644
index 1f40a052..00000000
--- a/contrib/ML4PG/coq/views.txt
+++ /dev/null
@@ -1 +0,0 @@
-all_filterP&102$leq_trans->&103$subnKC&104$addIn&105$rot&106$rotr&107$/eqP&108$eqP&109$hasP&110$negP&111$predU1P&112$eq_in_filter&113$allP&114$all_pred1P&115$index&116$nth_find&117$andP&118$i&119$idPn&120$perm_eqP&121$idP&122$perm_eq_trans&123$perm_eqlP&124$perm_eq_size:&125$eqP->&126$uniq_leq_size&127$/idP&128$ss12&129$rot_to:&130$PcatCA&131$PcatCA/IHs/PcatCA&132$catCA_perm_ind&133$has_mask&134$all_nthP&135$subseqP&136$@all_pred1P&137$perm_to_rem/perm_eq_size->&138$esym&139$rem_filter&140$perm_eq_size&141$mapP&142$/mapP&143$@eq_from_nth&144$eq_in_map->&145$filter_uniq&146$map_inj_uniq->&147$It&148$allpairsP&149$orP&150$hasPn&151$eq_bigl&102$eq_bigr->&103$index_iota&104$nilP->&105$eq_bigl->&106$reducebig&107$big_hasC->&108$index_enum&109$big_nat_widen&110$g&111$G&112$eq_bigr&113$_&114$perm_to_rem/(eq_big_perm _)->&115$eq_big_perm&116$big_rem->&117$rem_filter->&118$IHn&119$familyP&120$ffunP&121$eqP/Df&122$IHr&123$familyP/(_ i)&124$existsP&125$forallP&126$bigmax_leqP&127$eq_card0->&128$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$matrixP&102$rowP&103$rowP/(_ j):&104$colP&105$canLR&106$conform_mx&107$ord_inj->&108$addnI/val_inj->&109$bump&110$block_mx&111$ulsubmx&112$ursubmx&113$dlsubmx&114$drsubmx&115$nz_row&116$row_matrixP&117$eqP:&118$negbTE&119$is_scalar_mx&120$is_scalar_mxP&121$negbTE->&122$xcol&123$is_perm_mxP&124$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$lastP:&116$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$b&102$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$rowP&102$1&103$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$matrixP&102$ord_inj&103$bump&104$rowP&105$colP&106$block_mx&107$rowV0P&108$mulIf&109$1&110$ker&111$tool&112$row_freeP&113$kernel&114$eq_row_mx&115$eqP:&116$ker_base&117$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$fact&102$exponential&103$fact&102$exponential&103$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$exponential&102$multiplication&103$fact&104$b&102$a&103$pot_matrix&104$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_less&102$theta_power&102$fn_power&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$fn_fib&102$fib_locals&103$helper_fib&104$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$pot_matrix&102$eqP&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$val_inj&102$ffunP&103$matrixP&104$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_fib&102$fib_locals&103$helper_fib&104$fn_less&102$theta_mul&102$fn_mul&103$theta_power&102$fn_power&103$theta_sum&102$theta_sum&102$theta_sum&102$b&102$a&103$pot_matrix&104$theta_sum&102$theta_sum&102$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$theta_sum&102$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$primeP&102$vFpV&103$dvdn&104$/eqxx&105$ffact_fact&106$eqP:&107$f&108$F&109$injectiveP&110$setP&111$imsetP&112$ffunP&113$ff0'&114$inj_f0&115$subsetP&116$add_mn_nat&117$sub_mn&118$add_mn&119$vs2mx&102$free&103$dimv&104$v2r_inj->&105$vlineP&106$subsetv&107$sU12&108$subvP&109$sVW&110$vs2mxP&111$subv_anti&112$vlinePk&113$subV&114$addv_idPl&115$addv_idPr&116$sub0v&117$subvf&118$sub_addsmxP&119$subv_trans->&120$rpred_sum&121$sumv_sup&122$Uv&123$sub_sumsmxP&124$subV(sameP capmx_idPl eqmxP)&125$capv_idPl&126$capv_idPr&127$eqmxP/matrix_modl&128$val_inj&129$eqmxP/addsmx_diff_cap_eq&130$eq_op&131$dimv_leqif_eq&132$geq_leqif&133$directv_def&134$andP]&135$dxU/(_ i Pi)&136$forall_inP&137$eqP/dxU&138$seq_tnthP&139$span_subvP&140$memv_span&141$subv_sumP&142$leqif_eq&143$dim_span&144$rowP/(_ i):&145$row_free_inj&146$r2v_inj&147$rowV0P&148$rowP&149$row_freeP&150$negPf&151$and3P&152$coord_span&153$sumX&154$k&155$f&156$span_basis&157$basis_of&158$basis_free/free_not0&159$eq_span&160$row_matrixP&161$directvP->&162$/]&163$directvP&164$lfunP&165$submxP&166$memv_imgP&167$lker0P&168$lker0_lfunK&169$eq_map&170$lfun_preim&171$memv_capP&172$canRL&173$rowP/(_ (Ordinal vT_proper))/eqP&174$daddv_pi_id&175$vspaceP&176$sumv_pi_for&177$addv_pi1_pi2&178$iota_uniq&179$val_inj/vsprojK/subvsP&180$p2r&181$r2p&182$fr&183$matrixP&184$ffunP&185$canLR&186$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$rowP&102$1&103$drlower1&104$invmx_uniq&105$b&102$a&103$pot_matrix&104$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$index_iota&102$andP&103$index_iota&102$andP&103$b&102$a&103$pot_matrix&104$ \ No newline at end of file
diff --git a/contrib/ML4PG/coq/weka.el b/contrib/ML4PG/coq/weka.el
deleted file mode 100644
index e21fa35c..00000000
--- a/contrib/ML4PG/coq/weka.el
+++ /dev/null
@@ -1,81 +0,0 @@
-(defun ml4pg-weka (n)
- (let ((alg (cond ((string= "k" ml4pg-algorithm) "SimpleKMeans")
- ((string= "e" ml4pg-algorithm) "EM")
- ((string= "f" ml4pg-algorithm) "FarthestFirst")
- )))
- ;(comint-send-string (get-buffer-process "*matlab*")
-; (concat "load " (expand-file-name "temp.csv") "; [t1,X,t3] = princomp(temp); X=normalize(X); csvwrite('"
-; (expand-file-name "temp2.csv") "',X);
-;"))
-
- (shell-command (concat "sleep 1; cat " ml4pg-home-dir "aux_files/headers.txt " (expand-file-name "temp.csv") " > " (expand-file-name "temp3.arff")))
- (shell-command (concat "java -classpath "
- *weka-dir*
- " weka.filters.unsupervised.attribute.AddCluster -W \"weka.clusterers." alg " -N " (format "%s" n) " -S 42\" -I last -i "
- (expand-file-name "temp3.arff") " -o " (expand-file-name "out.arff")))
- (shell-command (concat "tail -n +37 "
- (expand-file-name "out.arff") " > " (expand-file-name "out_bis.arff")))
- ))
-
-
-(defun ml4pg-0_n (n)
- (do ((i 0 (1+ i))
- (temp nil))
- ((= i n) temp)
- (setf temp (append temp (list (list i nil))))))
-
-
-(defun ml4pg-read-lines (file)
- "Return a list of lines in FILE."
- (with-temp-buffer
- (insert-file-contents file)
- (split-string
- (buffer-string) "\n" t)
- ))
-
-
-(defun ml4pg-lines-to-clusters (lines)
- (do ((temp lines (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (setf temp2 (append temp2 (list (string-to-number (subseq (car temp) (+ 7 (search "cluster" (car temp) :from-end t)))))))
- ))
-
-
-
-(defun ml4pg-extract-clusters-from-file (clusters)
- (let* ((temp (ml4pg-0_n clusters))
- (lines (ml4pg-read-lines (expand-file-name "out_bis.arff"))))
- (ml4pg-lines-to-clusters lines)))
-
-
-
-
-
-(defun ml4pg-form-clusters (list n)
- (do ((i 0 (1+ i))
- (temp nil))
- ((= i n) temp)
- (setf temp (append temp (list (ml4pg-clusters-of-n list i))))))
-
-
-
-
-(defun ml4pg-clusters-of-n (list n)
- (do ((temp list (cdr temp))
- (i 1 (1+ i))
- (temp2 nil))
- ((endp temp) temp2)
- (if (equal (car temp) n)
- (setf temp2 (append temp2 (list i))))))
-
-
-(defun ml4pg-remove-alone (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (not (= (length (car temp)) 1))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-
diff --git a/contrib/ML4PG/doc/ml4pg.v b/contrib/ML4PG/doc/ml4pg.v
deleted file mode 100644
index ced9f9a4..00000000
--- a/contrib/ML4PG/doc/ml4pg.v
+++ /dev/null
@@ -1,659 +0,0 @@
-Inductive nat : Set :=
- | O : nat
- | S : nat -> nat.
-
-Delimit Scope nat_scope with nat.
-
-
-Fixpoint plus (n m:nat) : nat :=
- match n with
- | O => m
- | S p => S (p + m)
- end
-
-where "n + m" := (plus n m) : nat_scope.
-
-Fixpoint mult (n m:nat) : nat :=
- match n with
- | O => O
- | S p => m + p * m
- end
-
-where "n * m" := (mult n m) : nat_scope.
-
-Fixpoint minus (n m:nat) : nat :=
- match n, m with
- | O, _ => n
- | S k, O => n
- | S k, S l => k - l
- end
-
-where "n - m" := (minus n m) : nat_scope.
-
-
-Require Import Coq.Lists.List.
-
-Variable A: Type.
-
-Local Notation "[ ]" := nil : list_scope.
-Local Notation "[ a ; .. ; b ]" := (a :: .. (b :: []) ..) : list_scope.
-
-Set Implicit Arguments.
-Open Scope nat.
-
-
-(*********************************************************************************************)
-(* Exported theorems *)
-(*********************************************************************************************)
-
-(*-------------------------------------------------------------------------------------------*)
-(* Layer 0 : Fundamental lemmas *)
-(*-------------------------------------------------------------------------------------------*)
-
-(*1.*)
-Lemma app_nil_l : forall l:list A, [] ++ l = l.
-intro l.
-case l.
-simpl; trivial.
-intros a0 l0.
-simpl; trivial.
-Qed.
-
-(*2.*)
-Theorem app_nil_l_shorter : forall l:list A, [] ++ l = l.
-intro l.
-simpl; trivial.
-Qed.
-
-
-(*3. alternativeApp_nil_l*)
-Theorem app_nil_l_shorter' : forall l:list A, [] ++ l = l.
-intro l.
-simpl.
-trivial.
-Qed.
-
-(* 4 *)
-Theorem app_nil_l2 : forall l: list A, l ++ [] = l.
-intro l.
- induction l.
- simpl; trivial.
- simpl.
- rewrite IHl.
- trivial.
-Qed.
-
-
-
-(* 5 *)
-Theorem app_nil_l2' : forall l: list A, l ++ [] = l.
-induction l.
-simpl; trivial.
-simpl.
-rewrite IHl.
-trivial.
-Qed.
-
-(*6.*)
-Lemma mult_n_O : forall n:nat, O = n * O.
-induction n.
-simpl; trivial.
-simpl; trivial.
-Qed.
-
-(*7.*)
-Lemma mult_O_n : forall n: nat, O = O * n.
-intro.
-simpl.
-trivial.
-Qed.
-
-(*8.*)
-
-Lemma M15_c : forall a: nat, a = S O -> (S O - a) * a = O.
-intros.
-rewrite H.
-simpl.
-trivial.
-Qed.
-
-(*9.*)
-Lemma O_minus : forall m, O-m = O.
-intro. simpl. trivial.
-Qed.
-
-(*10.*)
-Lemma minus_O : forall m, m-O = m.
-induction m.
- trivial.
-simpl; trivial.
-Qed.
-
-(*11.*)
-Lemma plus_n_O : forall n:nat, n = n + O.
-induction n.
- simpl; trivial.
-simpl; trivial.
-rewrite <- IHn.
-trivial.
-Qed.
-
-(*12.*)
-Lemma plus_0_n : forall n:nat, n = O + n.
-simpl; trivial.
-Qed.
-
-(*13.*)
-Lemma addSn : forall m n, S m + n = S (m + n).
-trivial.
-Qed.
-
-(*14.*)
-Lemma mulSn : forall m n, S m * n = n + m * n.
-trivial. Qed.
-
-(*15.*)
-Lemma plus_n_Sm : forall n m:nat, S (n + m) = n + S m.
-induction n.
- simpl; trivial.
-simpl.
-intro m.
-rewrite <- IHn.
-trivial.
-Qed.
-
-(*16.*)
-Lemma plus_Sn_m : forall n m:nat, S n + m = S (n + m).
-induction n.
- simpl; trivial.
-simpl; trivial.
-Qed.
-
-(*17.*)
-Lemma aux10 : forall a, (S a - a) = S O.
-induction a.
- simpl; trivial.
-simpl; trivial.
-Qed.
-
-(*18.*)
-Lemma aux12 : forall n, (n * S O) = n.
-induction n.
- simpl; trivial.
-simpl.
-rewrite IHn.
-trivial.
-Qed.
-
-(*-------------------------------------------------------------------------------------------*)
-(* Layer 1 : Lemmas which use layer 0 lemmas *)
-(*-------------------------------------------------------------------------------------------*)
-
-(*19.*)
-Lemma addnS : forall m n, m + S n = S (m + n).
-induction m.
- trivial.
-intro n.
-rewrite addSn.
-rewrite addSn.
-rewrite IHm.
-trivial.
-Qed.
-
-(*20.*)
-Lemma addnCA : forall m n k, m + (n + k) = n + (m + k).
-intros m n k.
-induction m.
- trivial.
-rewrite plus_Sn_m.
-rewrite plus_Sn_m.
-rewrite <- plus_n_Sm.
-rewrite IHm.
-trivial.
-Qed.
-
-
-
-(*21.L1M*)
-Lemma M1_corrected : forall l: list A, l= []
- -> tl (tl (tl l) ++ nil) = nil.
-intro l.
-intro H.
-rewrite H.
-rewrite app_nil_l2.
-simpl; trivial.
-Qed.
-
-(*22. L1Mbutwithintros *)
-Lemma L1Mbutwithintros : forall l: list A, l= []
- -> tl (tl (tl l) ++ nil) = nil.
-intros l H.
-rewrite H.
-rewrite app_nil_l2.
-simpl; trivial.
-Qed.
-
-(*23.*)
-Lemma M2 : forall a: A,
-tl (tl (tl ([a] ++ []))) = [].
-intro.
-rewrite app_nil_l2.
-simpl.
-trivial.
-Qed.
-
-(*24. L31Mintroal*)
-Lemma M3_1: forall (a: nat) (l :list nat), (hd O (a :: l)) * O = O.
-intro a.
-intro l.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(* 25. L31M*)
-Lemma L31M : forall (a: nat) (l :list nat), (hd O (a :: l)) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(* 26. L31Mextrasimpl *)
-Lemma L31Mextrasimpl : forall (a: nat) (l :list nat), (hd O (a :: l)) * O = O.
-intros.
-simpl.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*Many profs below follow that exact scheme with reduction of *, but it would be completely different strategies if reduction was first made in lists...*)
-
-(*27. L32M*)
-Lemma M3_2 : forall (a: nat) (l :list nat), l= [a] -> (hd O [a]) * O = O.
-intro a.
-intro l.
-intro H.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*28. L32Mlessintro *)
-Lemma L32Mlessintro : forall (a: nat) (l :list nat), l= [a] -> (hd O [a]) * O = O.
-intro a.
-intro l.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-(* 29. L32Mintros *)
-Lemma L32Mintros : forall (a: nat) (l :list nat), l= [a] -> (hd O [a]) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-Definition hdn (l:list nat) :=
- match l with
- | nil => O
- | cons x _ => x
- end.
-
-(*30*)
-Lemma M3_3: forall (a: nat) (l :list nat), l= [a] -> (hdn [a]) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*31*)
-Lemma M3_4: forall a: nat, (hd O ([a] ++ [])) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-(*32*)
-Lemma M4: forall a: nat, hd O ([a] ++ [a]) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-(*33*)
-Lemma M8: forall (a b : nat), hd O [a] * O * b = O.
-(* This alone does not work: intros; simpl; auto.*)
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-(*34*)
-Lemma M16: forall a: nat, (S a - a) * O = O.
-intros. rewrite <- mult_n_O. trivial.
-Qed.
-
-(*35*)
-Lemma M10: forall a: nat, a * S O * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*36*)
-Lemma M13: forall a b : nat, a * hd O [b] * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*37*)
-Lemma M14 : forall a: nat, (hd O [a] + O) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*38*)
-Lemma M17 : forall a b: nat, (S a - b) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*39*)
-Lemma M18 : forall (a b :nat), ((hd O [a]) - b) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*40*)
-Lemma M18' : forall (a: list nat)(b:nat), (hd O a - b) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*41*)
-Lemma M19 : forall a:nat, (O - hd O [a]) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*42*)
-Lemma M20 : forall a b:nat, (O - hd O [a]) * b =O.
-intros. rewrite O_minus. trivial.
-Qed.
-
-(*43*)
-Lemma M21 : forall (a :nat) (b: list nat), (a - hd O b) * O = O.
-intros.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*44*)
-Lemma M22 : forall a: nat, a * O * S O = O.
-intros.
-rewrite <- mult_n_O.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*45*)
-Lemma M24 : forall a: nat, (O - a) * S O = O.
-intro.
-rewrite O_minus.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*46*)
-Lemma M25 : forall a:nat,
-(O - a) * S a = O.
-intro.
-rewrite O_minus.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*47*)
-Lemma M26 : forall a b: nat, (O - a) * S b = O.
-intros.
-rewrite O_minus.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*48*)
-Lemma aux7 : forall a:nat, a-a = O.
-induction a.
-rewrite O_minus.
-trivial.
-rewrite <- IHa.
-trivial.
-Qed.
-
-
-(*49*)
-Lemma M31 : forall a b, hd O a * (b * O) = O.
-intros.
-rewrite <- mult_n_O.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-
-(*50*)
-Lemma M32 : forall a b, hd O a * (O - b) = O.
-intros.
-rewrite O_minus.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-
-(*51.*)
-Lemma aux11 : forall n, (S O * n) = n.
-induction n.
- simpl; trivial.
-simpl.
-rewrite <- plus_n_O.
-trivial.
-Qed.
-
-(*52*)
-Lemma M36 : forall a, a * S (a * O) = a.
-intro. rewrite <- mult_n_O.
-rewrite aux12. trivial.
-Qed.
-
-(*53*)
-Lemma M37 : forall a b, a * S (b * O) = a.
-intros. rewrite <- mult_n_O.
-rewrite aux12. trivial.
-Qed.
-
-(*54*)
-Lemma M38 : forall a, a * S (O - a) = a.
-intro. rewrite O_minus.
-rewrite aux12.
-trivial.
-Qed.
-
-(*55*)
-Lemma M39 : forall a, a * S (a - a) = a.
-intro. rewrite aux7. rewrite aux12. trivial.
-Qed.
-
-(*56*)
-Lemma M40 : forall a, a * (S a - a) = a.
-intro. rewrite aux10.
-rewrite aux12. trivial.
-Qed.
-
-(*57*)
-Lemma M41 : forall a b, a * (O - hd O b) = O.
-intros. rewrite O_minus.
-rewrite <- mult_n_O. trivial.
-Qed.
-
-(*58*)
-Lemma M42 : forall a, hd O a * O + O = O.
-intro. rewrite <- plus_n_O.
-rewrite <- mult_n_O. trivial.
-Qed.
-
-(*59*)
-Lemma M43 : forall a b, hd O a * O + b = b.
-intros.
-rewrite <- mult_n_O.
-simpl; trivial.
-Qed.
-
-(*60*)
-Lemma M44 : forall a, a * S O + O = a.
-intro. rewrite aux12.
-rewrite <- plus_n_O. trivial.
-Qed.
-
-(*-------------------------------------------------------------------------------------------*)
-(* Layer 2 : Lemmas which use layer 1 lemmas *)
-(*-------------------------------------------------------------------------------------------*)
-
-
-
-
-(*61*)
-Lemma mulnS : forall n m, n * S m = n + n * m.
-induction n.
- trivial. intro m.
-rewrite mulSn. rewrite mulSn. rewrite addSn. rewrite addSn. rewrite addnCA.
-rewrite IHn. trivial.
-Qed.
-
-(*62*)
-Lemma M27 : forall a, (a - a) * S O = O.
-(*intros; simpl; auto. will not work *)
-intro.
-rewrite aux7.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*63*)
- (*Same proof*)
-Lemma M28 : forall a, (a - a) * S a = O.
-intro.
-rewrite aux7.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*64*)
-Lemma M29 : forall a b, (a - a) * S b = O.
-intros.
-rewrite aux7.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*65*)
-Lemma M30 : forall a b, (a - a) * hd O b = O.
-intros.
-rewrite aux7.
-rewrite <- mult_O_n.
-trivial.
-Qed.
-
-(*66*)
-Lemma M33 : forall a b, hd O a * (b - b) = O.
-intros.
-rewrite aux7.
-rewrite <- mult_n_O.
-trivial.
-Qed.
-
-(*67*)
-Lemma M34 : forall a:nat, (S a - a) * a = a.
-intro. rewrite aux10.
-rewrite aux11. trivial.
-Qed.
-
-(*68*)
-Lemma M35 : forall a b, (S a - a) * b = b.
-intros. rewrite aux10.
-rewrite aux11. trivial.
-Qed.
-
-
-(*-------------------------------------------------------------------------------------------*)
-(* Layer 3 : Lemmas which use layer 1 lemmas *)
-(*-------------------------------------------------------------------------------------------*)
-
-
-(*69*)
-Lemma M23 : forall a: nat, (a + O) * S O = a.
-intro.
-rewrite <- plus_n_O.
-rewrite mulnS.
-rewrite <- mult_n_O.
-rewrite <- plus_n_O.
-trivial.
-Qed.
-
-(*********************************************************************************************)
-(*********************************************************************************************)
-(*********************************************************************************************)
-
-
-(*-------------------------------------------------------------------------------------------*)
- (* Lemmas to look for similarities *)
-(*-------------------------------------------------------------------------------------------*)
-
-
-
-Definition hdb (l:list bool) :=
- match l with
- | nil => false
- | cons x _ => x
- end.
-
-(*58*)
-
-Lemma andb_false_r : forall (a : bool) , false = andb a false.
-Proof.
-intros.
-case a.
- simpl; trivial.
-simpl; trivial.
-Qed.
-
-Lemma M3_3b: forall (a: bool) (l :list bool), l= [a] -> andb (hdb [a]) false = false.
-Proof.
-intros.
-rewrite <- andb_false_r.
-
-
-
-
-
-
-
-Lemma aux7_bis: forall a:nat, a-a = O.
-Proof.
-induction a.
- simpl; trivial.
-
-
-
-
-
-
-
diff --git a/contrib/ML4PG/doc/ml4pg_manual.pdf b/contrib/ML4PG/doc/ml4pg_manual.pdf
deleted file mode 100644
index c13f6801..00000000
--- a/contrib/ML4PG/doc/ml4pg_manual.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/algorithm1.png b/contrib/ML4PG/doc/src/images/algorithm1.png
deleted file mode 100644
index 8c8f47b5..00000000
--- a/contrib/ML4PG/doc/src/images/algorithm1.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/algorithm2.png b/contrib/ML4PG/doc/src/images/algorithm2.png
deleted file mode 100644
index 6b5e0835..00000000
--- a/contrib/ML4PG/doc/src/images/algorithm2.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters1.png b/contrib/ML4PG/doc/src/images/clusters1.png
deleted file mode 100644
index ca4ef219..00000000
--- a/contrib/ML4PG/doc/src/images/clusters1.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters1pg.png b/contrib/ML4PG/doc/src/images/clusters1pg.png
deleted file mode 100644
index b39d409f..00000000
--- a/contrib/ML4PG/doc/src/images/clusters1pg.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters2.png b/contrib/ML4PG/doc/src/images/clusters2.png
deleted file mode 100644
index f091abbe..00000000
--- a/contrib/ML4PG/doc/src/images/clusters2.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/clusters2pg.png b/contrib/ML4PG/doc/src/images/clusters2pg.png
deleted file mode 100644
index 6ba6dcb4..00000000
--- a/contrib/ML4PG/doc/src/images/clusters2pg.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/export.png b/contrib/ML4PG/doc/src/images/export.png
deleted file mode 100644
index de048b47..00000000
--- a/contrib/ML4PG/doc/src/images/export.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig1.png b/contrib/ML4PG/doc/src/images/fig1.png
deleted file mode 100644
index 955fd048..00000000
--- a/contrib/ML4PG/doc/src/images/fig1.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig1pg.png b/contrib/ML4PG/doc/src/images/fig1pg.png
deleted file mode 100644
index d4a0df9f..00000000
--- a/contrib/ML4PG/doc/src/images/fig1pg.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig2.png b/contrib/ML4PG/doc/src/images/fig2.png
deleted file mode 100644
index ed8c399e..00000000
--- a/contrib/ML4PG/doc/src/images/fig2.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig3.png b/contrib/ML4PG/doc/src/images/fig3.png
deleted file mode 100644
index f3741a0e..00000000
--- a/contrib/ML4PG/doc/src/images/fig3.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig4.png b/contrib/ML4PG/doc/src/images/fig4.png
deleted file mode 100644
index 9df097bd..00000000
--- a/contrib/ML4PG/doc/src/images/fig4.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/fig5.png b/contrib/ML4PG/doc/src/images/fig5.png
deleted file mode 100644
index 733a3d22..00000000
--- a/contrib/ML4PG/doc/src/images/fig5.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/frequencies.png b/contrib/ML4PG/doc/src/images/frequencies.png
deleted file mode 100644
index 4f90b5fc..00000000
--- a/contrib/ML4PG/doc/src/images/frequencies.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/granularity.png b/contrib/ML4PG/doc/src/images/granularity.png
deleted file mode 100644
index 385b3972..00000000
--- a/contrib/ML4PG/doc/src/images/granularity.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/levels.png b/contrib/ML4PG/doc/src/images/levels.png
deleted file mode 100644
index 48e02db7..00000000
--- a/contrib/ML4PG/doc/src/images/levels.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/ml_system1.png b/contrib/ML4PG/doc/src/images/ml_system1.png
deleted file mode 100644
index f11cebf1..00000000
--- a/contrib/ML4PG/doc/src/images/ml_system1.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/images/ml_system2.png b/contrib/ML4PG/doc/src/images/ml_system2.png
deleted file mode 100644
index 792c423d..00000000
--- a/contrib/ML4PG/doc/src/images/ml_system2.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/ml4pg_manual.bib b/contrib/ML4PG/doc/src/ml4pg_manual.bib
deleted file mode 100644
index 07dcb4ba..00000000
--- a/contrib/ML4PG/doc/src/ml4pg_manual.bib
+++ /dev/null
@@ -1,12 +0,0 @@
-@Article{KHG12,
- author = {E. Komendantskaya and J. Heras and G. Grov},
- title = {Machine Learning in Proof General: interfacing interfaces},
- year = {2012},
-}
-
-
-@Article{HK13,
- author = {J. Heras and E. Komendantskaya},
- title = {ML4PG Case studies},
- year = {2013},
-} \ No newline at end of file
diff --git a/contrib/ML4PG/doc/src/ml4pg_manual.pdf b/contrib/ML4PG/doc/src/ml4pg_manual.pdf
deleted file mode 100644
index c13f6801..00000000
--- a/contrib/ML4PG/doc/src/ml4pg_manual.pdf
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/doc/src/ml4pg_manual.tex b/contrib/ML4PG/doc/src/ml4pg_manual.tex
deleted file mode 100644
index 2eb92b7e..00000000
--- a/contrib/ML4PG/doc/src/ml4pg_manual.tex
+++ /dev/null
@@ -1,209 +0,0 @@
-\documentclass[10pt]{article}
-
-
-\usepackage[utf8]{inputenc}
-
-\usepackage{hyperref}
-\usepackage{graphicx}
-\usepackage{amssymb}
-\usepackage{color}
-\usepackage{listings}
-\usepackage{tikz}
-\usepackage{verbatim}
-\usepackage{theorem}
-
-
-
-\begin{document}
-
-\title{ML4PG: Machine learning for Proof General}
-\author{J\'onathan Heras and Ekaterina Komendantskaya\\
-\{jonathanheras,katya\}@computing.dundee.ac.uk}
- \maketitle
-
-
-
-\tableofcontents
-
-
-\section{Using ML4PG}
-
-
-To illustrate the use of ML4PG, we will use the file \verb"ml4pg.v" which can be find in the same folder of this manual.
-This file contains various lemmas about natural numbers and lists.
-
-\subsection{Getting started}
-
-Open the file \verb"ml4pg.v" using emacs. The Proof General interface is the usual one, but it includes a new option in the Coq menu
-called ML4PG.
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.4]{images/fig1pg.png}
- \caption{Proof General with the ML4PG option.}\label{fig1}
-\end{figure}
-
-If you select this option, the interface asks you if you are developing your proofs using the plain Coq style or the SSReflect style, in this case we select the Coq mode (c).
-Subsequently, the interface asks you if you want to extract the information associated with the lemmas which have been previously developed in this library. In this case,
-we select no (c). Once that this is done, the Proof General interface is extended with a new menu called \emph{Statistics} and two buttons, see Figure~\ref{fig3}.
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.4]{images/fig3.png}
- \caption{ML4PG interface with all the options active.}\label{fig3}
-\end{figure}
-
-
-\subsection{Extracting feature vectors}
-
-Feature vectors can be extracted in two different ways:
-
-\begin{itemize}
- \item During the development of the proofs. To this aim, you have to use the shortcut Ctrl-C Ctrl-M to process the next proof command.
- \item Several proofs at the same time. If you want to extract the feature vectors of several proofs, go to the last proof and use the shortcut Ctrl-C Space.
- You can also use the \emph{Extract info up to point} option of the statistics menu.
-\end{itemize}
-
-Go to the end of \verb"emacs ml4pg.v" file; there, you can see two unfinished proofs: \verb"M3_3b" and \verb"aux7_bis". Put the cursor at the end of
-the proof of Lemma \verb"andb_false_r" and use the shortcut Ctrl-C Space or the \emph{Extract info up to point} option of the statistics menu. In this
-way the information associated with each proof will be extracted and you will be able to use it to obtain proof clusters (groups of similar proofs).
-
-Now, let us explain the functionality of the options included in the Statistics menu.
-
-\subsection{Configuration menu}
-
-The different options to configure the Machine-learning environments were detailed in~\cite{KHG12}. All those options can be accessed from the Configuration
-submenu of the Statistics menu, see Figure~\ref{fig3}.
-
-
-
-\paragraph{Algorithms:}
-
-The user can select different algorithms to obtain proof similarities (all of them behave similar, see~\cite{HK13}).
-ML4PG offers different algorithms, see Figure~\ref{algorithms}.
-
-In the case of MATLAB; there are three algorithms available: K-means and Gaussian. In the case of Weka, the algorithms
-which are available are: K-means, EM and FarthestFirst.
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.4]{images/algorithm2.png}
- \caption{The ML algorithms menu.}\label{algorithms}
-\end{figure}
-
-\paragraph{Granularity:}
-
-In the machine learning literature, there exists a number of heuristics to determine this optimal number of clusters.
-We used them as an inspiration to formulate our own algorithm for ML4PG, tailored
-to the interactive proofs. It takes into consideration the size of the proof library and an auxiliary parameter
- -- called granularity. This parameter is used to calculate the optimal number of
-proof clusters, the process to calculate this optimal number was described in~\cite{KHG12}. The user decides the
-granularity in ML4PG menu (see Figure~\ref{granularity}), by selecting a value between 1 and 5, where 1 stands for a
-low granularity (producing big and general clusters) and 5 stands for a high granularity (producing small
-and precise clusters).
-
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.4]{images/granularity.png}
- \caption{ML4PG granularity menu.}\label{granularity}
-\end{figure}
-
-
-
-\paragraph{Frequencies:}
-
-Clustering techniques divide data into n groups of similar objects (called clusters), where the value of
-n is a ``learning'' parameter provided by the user together with other inputs to the clustering algorithms.
-Increasing the value of n means that the algorithm will try to separate objects into more classes, and, as a
-consequence, each cluster will contain examples with higher correlation. The frequencies of clusters can
-serve for analysis of their reliability. Results of one run of a clustering algorithm may differ from another,
-even on the same data set. This is due to the fact that clustering algorithms randomly choose examples
-to start from, and then, form clusters relative to those examples. However, it may happen that certain
-clusters are found repeatedly – and frequently – in different runs; then, we can use these frequencies to
-determine the reliable clusters. The frequencies can be determined using the threshold presented in Figure~\ref{frequencies},
-a detailed description of this parameter was given in~\cite{KHG12}.
-
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.4]{images/frequencies.png}
- \caption{ML4PG frequencies menu.}\label{frequencies}
-\end{figure}
-
-
-\subsection{Show clusters}
-
-The option \emph{Show Clusters} of the Statistics menu shows clusters when a library is clustered
-irrespective of the current proof goal. An example using the \verb"ml4pg.v" library with the options:
-
-\begin{itemize}
- \item Algorithm: K-means,
- \item Granularity: 3,
- \item Frequencies: 1.
-\end{itemize}
-
-\noindent is shown in Figure~\ref{clusters1}.
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.23]{images/clusters1pg.png}
- \caption{Clusters for the ml4pg library. The Proof General window has been split into two windows positioned side by
-side: the left one keeps the current proof script, and the right one shows the clusters. If the user clicks
-on the name of a theorem showed in the right screen, such a window is split horizontally and a brief description of the selected
-theorem is shown.}\label{clusters1}
-\end{figure}
-
-This functionality can also invoked using the second right most button of the Proof General toolbar.
-
-\subsection{Show similar theorems}
-
-The example above shows one mode of working with ML4PG: that is, when a library is clustered
-irrespective of the current proof goal. However, it may be useful to use this technology to aid the interactive
-proof development. In which case, we can cluster libraries relative to a few initial proof steps for the
-current proof goal. An example using the \verb"ml4pg.v" library with the options:
-
-\begin{itemize}
- \item Algorithm: FarthestFirst,
- \item Granularity: 2,
- \item Frequencies: 2.
-\end{itemize}
-
-\noindent and with the few steps included about the proof of \verb"M3_3b" is shown in Figure~\ref{clusters2}.
-
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.23]{images/clusters2pg.png}
- \caption{On the right side, several suggestions provided by ML4PG. If the user clicks on the name of one of the
-suggested lemmas, a brief description about it is shown.}\label{clusters2}
-\end{figure}
-
-This functionality can also invoked using the right most button of the Proof General toolbar.
-
-\subsection{Export Library}
-
-Using the Export library option, the user can export the library for further use (see Figure~\ref{export}) with the
-Available libraries for clustering option.
-
-
-\begin{figure}
- \centering
- \includegraphics[scale=0.4]{images/export.png}
- \caption{ML4PG export menu.}\label{export}
-\end{figure}
-
-
-
-
-
-
-
-
-
-
-\bibliographystyle{plain}
-\bibliography{ml4pg_manual}
-
-
-\end{document}
diff --git a/contrib/ML4PG/icons/Clustering.png b/contrib/ML4PG/icons/Clustering.png
deleted file mode 100644
index 1f878eca..00000000
--- a/contrib/ML4PG/icons/Clustering.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/icons/Hint.png b/contrib/ML4PG/icons/Hint.png
deleted file mode 100644
index f84346e4..00000000
--- a/contrib/ML4PG/icons/Hint.png
+++ /dev/null
Binary files differ
diff --git a/contrib/ML4PG/icons/clustering.xpm b/contrib/ML4PG/icons/clustering.xpm
deleted file mode 100644
index ff0728fc..00000000
--- a/contrib/ML4PG/icons/clustering.xpm
+++ /dev/null
@@ -1,30 +0,0 @@
-/* XPM */
-static char * clustering_xpm[] = {
-"20 20 7 1",
-" c None",
-". c #FBFE00",
-"+ c #FCFF00",
-"@ c #FE0000",
-"# c #FF0000",
-"$ c #4DFE00",
-"% c #4EFF00",
-" ",
-" ",
-" . + ",
-" ",
-" . . . ",
-" . . . ",
-" + @ ",
-" . . . ",
-" + @@ ",
-" + # @ ",
-" ++ @ # ",
-" ",
-" $ @ #@ ",
-" % ### ",
-" $ % # ",
-" % # ",
-" % $% #@ ",
-" $ $ ",
-" $ # ",
-" "};
diff --git a/contrib/ML4PG/icons/sh-hint.xpm b/contrib/ML4PG/icons/sh-hint.xpm
deleted file mode 100644
index f5f5ea8b..00000000
--- a/contrib/ML4PG/icons/sh-hint.xpm
+++ /dev/null
@@ -1,160 +0,0 @@
-/* XPM */
-static char * sh_hint_xpm[] = {
-"20 20 137 2",
-" c None",
-". c #C1D2D1",
-"+ c #C2D2D1",
-"@ c #C1D2D0",
-"# c #BBCECE",
-"$ c #E3EFEF",
-"% c #F7FFFF",
-"& c #FBFDFD",
-"* c #FBFFFF",
-"= c #F7FAFA",
-"- c #E2EEED",
-"; c #BBCDCC",
-"> c #ACC2C0",
-", c #ECF3F3",
-"' c #FFC9CE",
-") c #FC828D",
-"! c #FEF2F3",
-"~ c #FDB4BB",
-"{ c #FEEEEF",
-"] c #FFD5D8",
-"^ c #EBF3F3",
-"/ c #AAC1C0",
-"( c #91AFAC",
-"_ c #DDE8E8",
-": c #FEC9CF",
-"< c #FC7481",
-"[ c #FDD9DC",
-"} c #FFFFFF",
-"| c #FB2237",
-"1 c #FECED2",
-"2 c #FD7F8B",
-"3 c #DBE5E6",
-"4 c #93B0AD",
-"5 c #B6CAC9",
-"6 c #E4EDEE",
-"7 c #FBE1E4",
-"8 c #FA5867",
-"9 c #FB7985",
-"0 c #FDFFFF",
-"a c #FB182E",
-"b c #FDC0C5",
-"c c #FC7B87",
-"d c #E5ECED",
-"e c #B7CBCA",
-"f c #C2D3D3",
-"g c #DAE6E7",
-"h c #F3EEEF",
-"i c #FAC9CE",
-"j c #FB4D5E",
-"k c #FDEEEF",
-"l c #FA0017",
-"m c #FB7481",
-"n c #FB7683",
-"o c #F9FFFF",
-"p c #DCE7E7",
-"q c #C2D3D4",
-"r c #B4C9C8",
-"s c #D4E2E3",
-"t c #E3D6D9",
-"u c #F37C89",
-"v c #F8959F",
-"w c #FAFCFD",
-"x c #FA8995",
-"y c #FAE8EA",
-"z c #F5B8BF",
-"A c #E7F2F2",
-"B c #D5E2E3",
-"C c #B4C9C9",
-"D c #98B4B3",
-"E c #CAD9DA",
-"F c #D7E5E3",
-"G c #E2F3EA",
-"H c #ECF9ED",
-"I c #F1F4EA",
-"J c #F2FFF2",
-"K c #E9EEE5",
-"L c #E5F0E8",
-"M c #DCE6DE",
-"N c #CBDADA",
-"O c #9BB8B6",
-"P c #A8C0BF",
-"Q c #D6E1DE",
-"R c #CFD9D7",
-"S c #DCE4E2",
-"T c #D8E2E1",
-"U c #D0DAD6",
-"V c #DBE4E1",
-"W c #D5E1E2",
-"X c #A8C1BF",
-"Y c #B1C7C7",
-"Z c #C6D5D6",
-"` c #C3D5D5",
-" . c #BECFCF",
-".. c #CBDADB",
-"+. c #D4E0E1",
-"@. c #B2C8C7",
-"#. c #CFDDDD",
-"$. c #AAC2C4",
-"%. c #A6BDC0",
-"&. c #C4D6D8",
-"*. c #BDD0D1",
-"=. c #A2BDBF",
-"-. c #C7D5D8",
-";. c #A3B7B9",
-">. c #95AEAF",
-",. c #ACC2C7",
-"'. c #94B4B7",
-"). c #9EAB78",
-"!. c #9BB29D",
-"~. c #90AAAF",
-"{. c #8AA6AC",
-"]. c #8FAA96",
-"^. c #95A778",
-"/. c #A2971A",
-"(. c #ACA644",
-"_. c #C9C95E",
-":. c #D3D45F",
-"<. c #B9B34A",
-"[. c #A5981C",
-"}. c #ACA11C",
-"|. c #D0CD4C",
-"1. c #E9E989",
-"2. c #F0F09E",
-"3. c #D5D25F",
-"4. c #ABA11E",
-"5. c #A69918",
-"6. c #B6B02E",
-"7. c #CCCB45",
-"8. c #D0CF47",
-"9. c #BCB836",
-"0. c #A69A1A",
-"a. c #AFA626",
-"b. c #B1AC32",
-"c. c #AFA931",
-"d. c #AEA525",
-"e. c #AA9F27",
-"f. c #A79B22",
-" ",
-" . + + @ ",
-" # $ % & * = - ; ",
-" > , ' ) ! ~ { ] ^ / ",
-" ( _ : < [ } | 1 2 } 3 4 ",
-" 5 6 7 8 9 0 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 B Q R S T U V W X ",
-" Y B Z ` ...+.@. ",
-" ` #.$.%.&.*. ",
-" =.-.;.>.,.'. ",
-" ).!.~.{.].^. ",
-" /.(._.:.<.[. ",
-" }.|.1.2.3.4. ",
-" 5.6.7.8.9.0. ",
-" a.b.c.d. ",
-" e.f. ",
-" "};
diff --git a/contrib/ML4PG/icons/sh-hint2.xpm b/contrib/ML4PG/icons/sh-hint2.xpm
deleted file mode 100644
index 900ed4cf..00000000
--- a/contrib/ML4PG/icons/sh-hint2.xpm
+++ /dev/null
@@ -1,103 +0,0 @@
-/* XPM */
-static char * sh_hint2_xpm[] = {
-"16 16 84 1",
-" c None",
-". c #D1DDDD",
-"+ c #D4E0DF",
-"@ c #D0DCDC",
-"# c #B1C6C6",
-"$ c #F1F4F5",
-"% c #FFFFFF",
-"& c #FEFEFE",
-"* c #F1F5F5",
-"= c #AFC5C4",
-"- c #DCE6E6",
-"; c #FDB8BF",
-"> c #FC7682",
-", c #FC7E8A",
-"' c #FB0920",
-") c #FD8A95",
-"! c #DBE4E5",
-"~ c #B5C9C8",
-"{ c #EAF1F1",
-"] c #FADCE0",
-"^ c #FB6876",
-"/ c #FC949E",
-"( c #FA1127",
-"_ c #FB7E8A",
-": c #FB97A0",
-"< c #ECF2F2",
-"[ c #B5C9C9",
-"} c #B8CCCB",
-"| c #DBE5E7",
-"1 c #F4C1C6",
-"2 c #FA7581",
-"3 c #FB5565",
-"4 c #FA081F",
-"5 c #FCFDFC",
-"6 c #F98792",
-"7 c #DEE8E8",
-"8 c #B8CCCC",
-"9 c #D2E0E1",
-"0 c #DFE9E9",
-"a c #EDF2EF",
-"b c #F6F8F2",
-"c c #F8FAEF",
-"d c #ECEEF0",
-"e c #E5EDE9",
-"f c #D3E0E2",
-"g c #A1BCBA",
-"h c #B7CCCC",
-"i c #D8E4DF",
-"j c #D2DBD2",
-"k c #E1E9E4",
-"l c #D9E2E1",
-"m c #D9E2D8",
-"n c #DAE4DD",
-"o c #B8CDCC",
-"p c #C0D2D2",
-"q c #D4E2E3",
-"r c #BCCDCE",
-"s c #BCCCCD",
-"t c #D1DFE0",
-"u c #C1D3D3",
-"v c #99B4B4",
-"w c #D5E3E3",
-"x c #ACC3C4",
-"y c #A4BFC0",
-"z c #C5D6D7",
-"A c #97B5B5",
-"B c #9BB5B4",
-"C c #9EB2B5",
-"D c #8FA8AA",
-"E c #88A9AD",
-"F c #AAA330",
-"G c #B7BF75",
-"H c #C0C877",
-"I c #B2A933",
-"J c #B1A82D",
-"K c #D7D368",
-"L c #DFDD79",
-"M c #B7AF37",
-"N c #BAB328",
-"O c #D2D551",
-"P c #D3D653",
-"Q c #B9B32C",
-"R c #A4961E",
-"S c #A1921C",
-" ",
-" .++@ ",
-" #$%&&&*= ",
-" -;>,'%)! ",
-" ~{]^/(_:<[ ",
-" }|12345678 ",
-" 90abcdefg ",
-" hijklmno ",
-" pqrstu ",
-" vwxyzA ",
-" BCDE ",
-" FGHI ",
-" JKLM ",
-" NOPQ ",
-" RS ",
-" "};
diff --git a/contrib/ML4PG/icons/sh.xpm b/contrib/ML4PG/icons/sh.xpm
deleted file mode 100644
index 3fa7dde6..00000000
--- a/contrib/ML4PG/icons/sh.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * sh_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #FB0920",
-" ",
-" ",
-" ",
-" ",
-" ... . . ",
-" . . . . ",
-" . . . ",
-" ... ...... ",
-" . . . ",
-" . . . . ",
-" ... . . ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/contrib/ML4PG/icons/sh1.xpm b/contrib/ML4PG/icons/sh1.xpm
deleted file mode 100644
index 3fa7dde6..00000000
--- a/contrib/ML4PG/icons/sh1.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * sh_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #FB0920",
-" ",
-" ",
-" ",
-" ",
-" ... . . ",
-" . . . . ",
-" . . . ",
-" ... ...... ",
-" . . . ",
-" . . . . ",
-" ... . . ",
-" ",
-" ",
-" ",
-" ",
-" "};
diff --git a/contrib/ML4PG/icons/test.xpm b/contrib/ML4PG/icons/test.xpm
deleted file mode 100644
index 5e1f0fa5..00000000
--- a/contrib/ML4PG/icons/test.xpm
+++ /dev/null
@@ -1,38 +0,0 @@
-/* XPM */
-static char * 8885_xpm[] = {
-"32 32 3 1",
-" c None",
-". c #000000",
-"+ c #FFFFFF",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ... . ",
-" .... .. ",
-" .+++. ... ",
-" .+... .... ",
-" .+++. .+++. ",
-" .+... ..++++.. ",
-" .+++.. .+.++++++. ",
-" .++.++... ..+.++++.++. ",
-" .+.++..++.. ..++.+++.++. ",
-" .+.++.+++..+. .+.++++++.++. ",
-" .+++.+++.++++..++.+++++++++.",
-" .++.+++.+++..++++++....++++.",
-" .+++++.+++.+++.++++++++++++.",
-" .++++++++.+++.++++++++++++. ",
-" .++++++++++++++++++++++.... ",
-" .+++.+++++.++++++++.... ",
-" ..+.+++..+..++++++++++++. ",
-" .+++..+...+++++++++++++... ",
-" .++....++...+++++++..+.++.. ",
-" .+..+.... .........+.++.++. ",
-" ...+. ...+..++.+. ",
-" .. .++..+++. ",
-" .. ... ",
-" ",
-" ",
-" ",
-" "};
diff --git a/contrib/ML4PG/lemmas.txt b/contrib/ML4PG/lemmas.txt
deleted file mode 100644
index 764aba29..00000000
--- a/contrib/ML4PG/lemmas.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&193$mulnS&194$muln0&195$iter_addn&196$mulnSr&197$muln0,&198$mulnC&199$mulnDl&200$mulnBl&201$mulnA&202$mulnCA&203$mulnBr&204$muln_eq0&205$leq_mul2l&206$le_mn2&208$orbT&209$leq_mul2r&210$le_mn1&211$orb_andr&212$eqn_mul2l&213$eqn_mul2r&214$ltn_mul2l&215$ltn_mul2r&216$mul1n&217$ltn_pmul2r&218$ltn_Pmull&219$maxn_mulr&221$minn_mulr&222$muln1&223$expnS&224$iter_muln&225$mul1n,&226$exp1n&227$expnD&228$expnMn&229$expnM&230$addn_gt0&231$eqn0Ngt&232$expn_gt0&233$leq_pmul2l&234$leq_pmulr&235$leq_exp2l&236$eqn_exp2l&237$leq_exp2l]&238$ltn_exp2l]&239$leq_mul&241$expn1&242$ltn_mul&243$IHe&244$ltn_exp2r&245$leq_exp2r&246$eqn_exp2r&247$muln_gt0&248$mulnbl&249$addTb&250$addbA&251$odd_add&254$odd_sub&255$andb_addl&256$odd_mul&257$addnn&258$mul2n&259$doubleB&260$2ltnNge&261$leq_double&262$doubleS&263$ltn_Sdouble&264$addbb&265$muln2&266$uphalf_half&267$doubleD&268$half_double,&269$odd_double_half&270$half_double&271$uphalf_double&272$halfD&273$odd_n&274$leq_Sdouble&275$odd_geq&276$mulnn&277$mulnDr&278$def_m&279$sqrnD&280$2addnA&281$/(2 * 2)&282$sqrn_sub&283$lte&286$ltm12&287$ltm23&288$andbT&289$eqm12&290$f_mono&291$lemn&292$le_ab&293$geq_leqif&294$mono_leqif&295$n12_0&297$le2&298$m2_0&299$n1_gt0&300$n2_gt0&301$in&302$le1&303$sqrn_gt0&304$ne_mn&305$ltn_add2r&306$nat_Cauchy&307$addE&308$add_mulE&309$mulE&310$mul_expE&311$sub2nn&312$natTrecE&313$by&316$IHp&317$nat_of_succ_gt0&318$doubleS,&319$doubleMl&321$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$@block_seqmxE&132$seqmx0E&133$drsubseqmxE&134$mulseqmxE&135$oppseqmxE&136$dlsubseqmxE&137$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$@block_seqmxE&132$seqmx0E&133$drsubseqmxE&134$mulseqmxE&135$oppseqmxE&136$dlsubseqmxE&137$helper_fact_is_theta&102$mul1n&103$mul0n&138$big_nat1&139$muln0&140$big_nat_recr&141$mulnDr&142$IH&143$exp0n&144$big1_seq&145$in_nil&146$big_mkcond&147$muln1&148$addn2&149$mul1n&150$GRing.subr_eq&151$GRing.addrA&152$GRing.addrC&153$GRing&154$addrA&155$sumrB&156$@big_nat_recl&157$addrC
-&158$_(0 <= i < n.+1)&159$x&160$@eq_bigr&161$@big1&162$GRing.subr_eq0&163$in&164$H1&165$eqP&166$GRing.Theory.sumrB&167$big_ltn&168$@big_add1&169$big_addn&170$ltn_predK&171$pred_Sn&172$subr_sub&173$subnDA&174$subnS&175$H4&176$addnBA&177$subnDl&178$lemma2_aux&179$subn_eq0&180$big_nil&181$leq_eqVlt&182$lemma1&183$lemma2'&184$lemma2&185$/pot_matrix&186$det1&187$det0&188$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$h&126$addSn&127$IHm&128$plus_Sn_m&129$mulSn&130$addnS&131$plus_assoc&132$minus_n_O&133$app_nil_r&134$mult_n_O&135$seqmx1E&169$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$exp0n&102$muln0&103$big_nat1&104$big_nat_recr&105$mulnDr&106$IH&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$andb_false_r&120$mul0n&102$big_nat1&103$muln0&104$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$HH1&169$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$big_endo&256$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$HH1&169$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$HH1&169$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$aux11&100.1999755859375$mulnS&100.19998779296874$andb_false_r&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$addrA&119$sumrB&120$@big_nat_recl&121$addrC
-&122$_(0 <= i < n.+1)&123$x&124$@eq_bigr&125$@big1&126$GRing.subr_eq0&127$in&128$H1&129$eqP&130$GRing.Theory.sumrB&131$big_ltn&132$@big_add1&133$big_addn&134$H&135$ltn_predK&136$pred_Sn&137$subr_sub&138$subnDA&139$subnS&140$H4&141$addnBA&142$subnDl&143$lemma2_aux&144$subn_eq0&145$big_nil&146$leq_eqVlt&147$lemma1&148$lemma2'&149$lemma2&150$h'&151$mulVmx&152$mulmx1&153$mulmxV&154$mulmxA&155$invmx_left&156$mul1mx&157$/pot_matrix&158$thinmx0&159$det1&160$det0&161$mulmxBr&162$pot_1&163$big_nat_recl&164$big_nat_recr
-&165$submx_sub&166$GRing.sub0r&167$p&168$ \ No newline at end of file
diff --git a/contrib/ML4PG/libs/coq/test/peano.csv b/contrib/ML4PG/libs/coq/test/peano.csv
deleted file mode 100644
index 06face92..00000000
--- a/contrib/ML4PG/libs/coq/test/peano.csv
+++ /dev/null
@@ -1,73 +0,0 @@
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0
-1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1
-5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
-34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1
-5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1
-111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.14999999999999,6,1,6,1,-4,100.14999999999999,6,1
-1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0
-11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0
-1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,6,1,-4,100.19687499999999,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.199609375,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951171875,6,1,6,1,-4,100.199951171875,6,1
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19998779296874,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.19921875,6,1
-1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0
-111,3,-354,-1,557,1,6,1,-4,100.19999389648437,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/coq/test/peano_names b/contrib/ML4PG/libs/coq/test/peano_names
deleted file mode 100644
index 0ad40090..00000000
--- a/contrib/ML4PG/libs/coq/test/peano_names
+++ /dev/null
@@ -1,73 +0,0 @@
-1 . nil
-2 . app_nil_l
-3 . app_nil_l_shorter
-4 . app_nil_l_shorter'
-5 . app_nil_l2
-6 . app_nil_l2'
-7 . mult_n_O
-8 . mult_O_n
-9 . M15_c
-10 . O_minus
-11 . minus_O
-12 . plus_n_O
-13 . plus_0_n
-14 . addSn
-15 . mulSn
-16 . plus_n_Sm
-17 . plus_Sn_m
-18 . aux10
-19 . aux12
-20 . addnS
-21 . addnCA
-22 . M1_corrected
-23 . L1Mbutwithintros
-24 . M2
-25 . M3_1:
-26 . L31M
-27 . L31Mextrasimpl
-28 . M3_2
-29 . L32Mlessintro
-30 . L32Mintros
-31 . M3_3:
-32 . M3_4:
-33 . M4:
-34 . M8:
-35 . M16:
-36 . M10:
-37 . M13:
-38 . M14
-39 . M17
-40 . M18
-41 . M18'
-42 . M19
-43 . M20
-44 . M21
-45 . M22
-46 . M24
-47 . M25
-48 . M26
-49 . aux7
-50 . M31
-51 . M32
-52 . aux11
-53 . M36
-54 . M37
-55 . M38
-56 . M39
-57 . M40
-58 . M41
-59 . M42
-60 . M43
-61 . M44
-62 . mulnS
-63 . M27
-64 . M28
-65 . M29
-66 . M30
-67 . M33
-68 . M34
-69 . M35
-70 . M23
-71 . andb_false_r
-72 . M3_3b:
-73 . aux7_bis:
diff --git a/contrib/ML4PG/libs/ssreflect/advance/bigop.csv b/contrib/ML4PG/libs/ssreflect/advance/bigop.csv
deleted file mode 100644
index 380bf70e..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/bigop.csv
+++ /dev/null
@@ -1,157 +0,0 @@
-1170,4,6640,-111020,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1170,4,6640,-111020,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-111170,6,66640,-11111020,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,70,-10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,70,-10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,70,-10,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--2107770,7,686604440.0,-110191103104.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,90,-10,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-111770,6,666440,-1111051060.0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-111770,6,666440,-1111051060.0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1111770,7,6666440,-1111105107.0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,100,-10,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,100,-10,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,105,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,107,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,108,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,109,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,103,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,110,-10,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,110,-10,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7200,3,44800,-110100,6,1,777777770.0,11,4444444400.0,100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1151160,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--731102009.0,9,4666012800.04,-1171110100.0118,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--4111190,7,4666640,-1191111120.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--731102009.0,9,4666012800.04,-1171110100.0118,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--411190,6,466640,-1211111200.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--73110770,8,46660440,-1171110122155.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--731102009.0,9,4666012800.04,-1171110100.012,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--411090,6,466000,-12311000,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,124,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--7311020,7,4666040,-117111010,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,125125,6,1,-7419,4,-4464,-1261691149.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,6440,-11251690,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--4190,4,4640,-12711490,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-10,2,60,-10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--57570,5,44440,102110310,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-790,3,440,11280,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,1170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,1170,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--731100,6,466600,-11711100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77770,5,44440,1291302320.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77777770,8,44444440,1.2517016013111712e+170,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77700,5,44400,13213300,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--5790,4,4440,10611340,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1171350,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1361240,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777,3,444,125125159,7,1,7720,4,44130,-17016010,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--7311020,7,4666040,-117111010,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--7410,4,4460,-12513710,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1381390,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,6440,-11401410,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--74170,5,44640,-1381271142.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1431390,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-117777,6,1324444,-1111138138.0,7,1,-417770,6,4144440,-1281242142.0,6,2,490,3,440,14410,6,1,790,3,440,14910,7,0,0,0,0,0,0,0
-140,3,640,-11450,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17770,5,4440,-12161460,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--21777700,8,680044440.0,-1111214700.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-19,2,-4,-1148,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77777,5,44444,113107149130.0,6,1,-41170,5,48840,-128111070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--77741170,8,44448840,-126150129128.01112,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77700,5,44400,15115200,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777,3,444,232130,6,1,7770,4,4440,1171530,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1777,4,15444,-1125126125.0,7,1,6,1,4777770,7,4444440,154155156124125.0,6,1,777777770.0,9,444444440,1.5714215816515915e+170,6,1,-570,3,440,10310,7,0,0,0,0,0
--517770,6,464440,-1101160161160.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-190,3,40,-100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-15,-1,7,1,77,2,44,162,6,1,-41170,5,46840,-128111630,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1641241650.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--211077,6,168186044,-1110146166.0,23,1,-774170,6,444640,-1671601281.0168,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--211110,6,688086808.0,-111110,23,2,77777070,8,44444040,166164124125.0238,6,1,-741,3,-4418,-1691281,6,2,-4147700,7,4044400,-1701171172.0,6,1,1147700,7,19044400,-1117117200.0,7,0
-9,1,-4,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-6,1,7,1,4,141,6,1,777770,7,444440,1511521600.0,6,1,-4170,4,4640,-14111730,6,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1741601750.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1741851760.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1771780,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1777,4,444,-1125170160.0,7,1,61111,5,-46177,-1021111,7,1,77770,5,44440,105179180103.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11400580,7,60400460,-1118100110.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--731090,6,406040,-1741101090.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--5790,4,4440,11311820,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17770,5,64440,-1138139183.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77700,5,44400,11710300,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--73110270,8,46660640,-11711101109.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,184117,6,1,-311070,6,666040,-11101850,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77770,5,44440,125186187188.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--5790,4,4440,10211890,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-117777,6,4444,-11190114191113.0,7,1,77700,5,44400,11419200,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7777700,8,4444400,1511931030.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777700,6,444400,1941951960.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-6,2,-74170,5,44640,-1601411163.0,6,1,77,2,44,197160,6,2,47700,5,44400,17117200,6,1,-41477700,8,46444400,-1411198172199.0,6,0,0,0,0,0
-7777700,7,4444400,1171901300.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,130130,6,1,74,2,-44,190200,6,1,777777,6,444444,115201202203201.0,6,1,77,2,44,203203,6,1,7770,4,4440,1491031910.0,6,0
--57,2,44,121184,7,1,-311111,6,-7666760,-111111,7,2,-211057700,9,1609561560.0444,-1110114204.0,6,1,6,1,11111111777.0,12,216776808444.0,-11111111190147.0,6,1,-7741,4,-44413,-1071902051.0
-174,3,-44,-1125208,7,1,777777070.0,9,444444040,186209210124125.0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--15741,5,-1544422,-1139211141.01,7,1,77700,5,44400,21221300,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--57770,5,44440,1031184147.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177,3,2344,-1125214,7,1,-31110,5,415840,-11110,6,1,-217770,6,12804440,-111472150,6,1,7770,4,4440,2161052170.0,6,0,0,0,0,0,0,0
-11777705,9,-230444404,-112182180104.0,7,1,777770770.0,9,444440440,209219124125.02203,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7777700,7,4444400,103107105107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,184222,6,1,-41270,5,46440,-141112230,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17,2,154,-1224,7,1,-417,3,4224,-1271225,6,1,777020,6,444040,-149242010,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-17,2,154,-1224,7,1,-417702000,8,4644019800.0,-2261149010.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--557770,6,444440,10510611125.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177,3,1544,-1227228,7,1,-4177700,7,4644400,-2291242149.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-12,-1,7,2,-4127700,7,4644400,-1271123000.0,6,1,-31110,5,1343330,-11110,6,1,-2111,4,-48685,-1111,7,2,77770770,8,44440440,1641241250.0231237,6,1
--1311110,7,1214243342.0,-1111110,7,1,-2111,4,-48685,-1111,7,2,7777070,7,4444040,1641242350.0236,6,1,-7751,4,-44426,-2022321071.0,7,1,77,2,44,233233,6,1
--21117,5,249824984,-1111239,7,1,-417277700,9,464044400,-12712421240204.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-19,2,-64,-1241242,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--217,3,495154,-11193,6,1,7,1,4,234,6,1,77770,5,44440,1501602430.0,6,1,-4117777700.0,10,4664444400.0,-12811244245107246.0,6,0,0,0,0,0,0,0
-7701,3,-44019,-24712401,6,1,-41100,4,423500,-1411100,6,2,-417770,6,464440,-1271204248249.0,6,1,-2110011570.0,9,666600198.044,-1110011126.01,7,0,0,0,0,0,0,0
-9,1,-4,250,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,250,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-12,-1,7,1,7,1,4,141,6,1,7,1,4,141,6,1,77,2,44,250239,6,1,-411077770,9,4198044440.0,-128110204249251.0,6,1
--7704110,7,44043050,-2520141110.0,6,1,-41770,5,46440,-1271253249.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17,2,124,-1141,7,1,77770,5,44440,1382521240.0,6,2,77770,5,44440,1421240,7,1,-7410,4,44140,-25414110,6,1,-74170,5,44640,-1381271165.0,6,0
-770,3,440,2550,6,1,-411041770,9,466046440,-1411101271.0253248,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-790,3,440,2562570,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777777090.0,9,444444040,256258124259260.03,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--74170,5,44640,-2621411263.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7,1,77,2,44,125186,7,1,7,2,-4177,4,42244,-1281125186.0,7,2,-417700,6,464400,-264111600,7,1,7,1,-31110,5,66660,-11110,7,2
--741,3,-4422,-2691271,7,1,551120,6,44661240,-1081081110.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--2119,4,-48854,-111270,7,1,-772111,6,-444083066,-1151111,7,2,7,2,7,1,4,226,7,2,555110,6,4446220,-1081091091.01,7,1,7,1,-2959640470.0,12
-9,1,-4,272,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--74190,5,44840,-2731271108.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,1170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,1170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1841170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1841170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-755180,6,444660,-2741101131.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-755111770.0,9,444942440,-275114114111.0276,6,1,9,1,-4,277,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--73100,5,42600,-1771100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2782790,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1772800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--73100,5,40800,-2811100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2812800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17,2,124,-1282,7,1,90,2,40,2830,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-190,3,640,-12840,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1432851820.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17770,5,64440,-12861240,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-19,2,-64,-1287,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,6440,-12332880,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,289,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--41111,5,-416035,-2901111,7,2,490,3,440,2912922890.0,2,1,7770,4,4440,2931240,21,0,0,0,0,0,0,0,0,0,0,0,0,0
-1190,4,6040,-112912940,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--121110,6,15103622362.0,-111110,7,1,57777090,8,44444040,109148289249.0115,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--21157,5,-4823544,-1111161,7,1,820,3,10100,-10,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11780,5,6460,-11100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,295,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--41111,5,-417365,-2901111,7,2,777770011.0,9,4444400222.0,-233296297298.011,2,1,770,3,440,2962990,21,0,0,0,0,0,0,0,0,0,0,0,0,0
-11777700,8,60444400,-11300233301.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--41111,5,-417365,-2901111,7,2,777770011.0,9,4444400222.0,-233302297303.011,2,1,770,3,440,3023040,21,0,0,0,0,0,0,0,0,0,0,0,0,0
-14770,5,64440,-1300233305.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/bigop_names b/contrib/ML4PG/libs/ssreflect/advance/bigop_names
deleted file mode 100644
index d228e3ab..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/bigop_names
+++ /dev/null
@@ -1,157 +0,0 @@
-1 mulC_id
-2 mulC_zero
-3 mulC_dist
-4 mul1m
-5 mulm1
-6 mulmA
-7 iteropE
-8 mulmC
-9 mulmCA
-10 mulmAC
-11 mulmACA
-12 mul0m
-13 mulm0
-14 addmA
-15 addmC
-16 addmCA
-17 addmAC
-18 add0m
-19 addm0
-20 mulm_addl
-21 mulm_addr
-22 bigopE
-23 mem_index_iota
-24 mem_index_enum
-25 filter_index_enum
-26 big_load
-27 big_rec3
-28 big_ind3
-29 big_rec2
-30 big_ind2
-31 big_morph
-32 big_rec
-33 big_ind
-34 eq_big_op
-35 big_endo
-36 big_filter
-37 big_filter_cond
-38 eq_bigl
-39 big_andbC
-40 eq_bigr
-41 eq_big
-42 congr_big
-43 big_nil
-44 big_cons
-45 big_map
-46 big_nth
-47 big_hasC
-48 big_pred0_eq
-49 big_pred0
-50 big_cat_nested
-51 big_catl
-52 big_catr
-53 big_const_seq
-54 big_seq_cond
-55 big_seq
-56 eq_big_seq
-57 big_nat_cond
-58 big_nat
-59 congr_big_nat
-60 eq_big_nat
-61 big_geq
-62 big_ltn_cond
-63 big_ltn
-64 big_addn
-65 big_add1
-66 big_nat_recl
-67 big_mkord
-68 big_nat_widen
-69 big_ord_widen_cond
-70 big_ord_widen
-71 big_ord_widen_leq
-72 big_ord0
-73 big_tnth
-74 big_ord_narrow_cond
-75 big_ord_narrow_cond_leq
-76 big_ord_narrow
-77 big_ord_narrow_leq
-78 big_ord_recl
-79 big_const
-80 big_const_nat
-81 big_const_ord
-82 eq_big_idx_seq
-83 eq_big_idx
-84 big1_eq
-85 big1
-86 big1_seq
-87 big_seq1
-88 big_mkcond
-89 big_cat
-90 big_pred1_eq
-91 big_pred1
-92 big_cat_nat
-93 big_nat1
-94 big_nat_recr
-95 big_ord_recr
-96 big_sumType
-97 big_split_ord
-98 eq_big_perm
-99 big_uniq
-100 big_index_uniq
-101 big_rem
-102 big_undup
-103 eq_big_idem
-104 big_split
-105 bigID
-106 bigU
-107 bigD1
-108 bigD1_seq
-109 cardD1x
-110 partition_big
-111 reindex_onto
-112 reindex
-113 reindex_inj
-114 big_nat_rev
-115 pair_big_dep
-116 pair_big
-117 pair_bigA
-118 exchange_big_dep
-119 exchange_big
-120 exchange_big_dep_nat
-121 exchange_big_nat
-122 big_distrl
-123 big_distrr
-124 big_distrlr
-125 big_distr_big_dep
-126 big_distr_big
-127 bigA_distr_big_dep
-128 bigA_distr_big
-129 bigA_distr_bigA
-130 big_has
-131 big_all
-132 big_has_cond
-133 big_all_cond
-134 big_orE
-135 big_andE
-136 sum_nat_const
-137 sum1_card
-138 prod_nat_const
-139 sum_nat_const_nat
-140 prod_nat_const_nat
-141 leqif_sum
-142 leq_sum
-143 sum_nat_eq0
-144 prodn_cond_gt0
-145 prodn_gt0
-146 leq_bigmax_cond
-147 leq_bigmax
-148 bigmax_leqP
-149 bigmax_sup
-150 bigmax_eq_arg
-151 eq_bigmax_cond
-152 eq_bigmax
-153 expn_sum
-154 dvdn_biglcmP
-155 biglcmn_sup
-156 dvdn_biggcdP
-157 biggcdn_inf
diff --git a/contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv
deleted file mode 100644
index 1f8d30e3..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/bigop_tactics.csv
+++ /dev/null
@@ -1,156 +0,0 @@
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-7;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-7;0;-1;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-7;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;191103104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105106;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105106;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105107;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-10;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;10;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;11;1
-0;0;0;0;0;-11;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.1011111213611311e+20;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115116;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;22;1;-6;0;-1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
-0;0;0;0;0;-12;0;-1;22;1;-6;0;-1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117122155;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;22;1;-6;0;-1;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;22;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;125125126;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;125169;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102103;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;129130232;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.2517016013111712e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;132133;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;117135;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;136124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;125125159170160.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;125;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;138139;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;140141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;138142;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143139;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;-12;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;138138242142149.0;767;3;0;0;0;0;0;0;0;0;0;0;-4;0;100100;67;2
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;216146;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;112147;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;113107149130.0107;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;126150129126.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;151152;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;232130117153.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103;7;1;0;0;0;0;0;-4;44;1.2512612515515613e+20;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;110;7;1;0;0;0;0;0;-4;44;160161160;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;162163;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164124165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-16;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;146166167160168.0;2366;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4444;166164124125.0238;66667;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;23;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;23;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;23;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;141151152160173.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;174160175;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;174185176;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;177178;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;-4;44;1.2517016010517919e+20;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;174;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;138139183;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;117103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117109;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184117185;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;125186187188.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;190114191113.0114;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;151193103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;194195196;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.6016319716017216e+20;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;117190130;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.301301901152012e+23;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-16;0;-1;6;1;-6;0;-1;7;1;0;0;0;0;0;-4;0;121114114;766;3;-4;0;0;6;1;-4;0;1.842041901471072e+23;766666;6;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.2518620921012413e+17;72121;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;211212213;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103;7;1;0;0;0;0;0;-4;4;184147;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--23;0;-1;7;1;-12;0;-1;6;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.252141472152161e+20;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--23;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;2.1821820921912413e+17;722;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;103107105107.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184222223;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;224225149242.0;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;-19;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;224149;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;125;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;227228242149.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;-1;7;1;-4;0;-1;676;3;0;0;-1;6;1;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;-4;4;2.3016412412523123e+35;6667666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;-1;7;1;-4;0;-1;76;2;0;0;-1;7;1;-4;-4;108109;6;1;-4;-4;107;7;1;0;0;0;0;0;-4;444;1.6412423523620224e+41;6676666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-22;0;-1;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;239242240204.0;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.9323415016024324e+26;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;-4;0;0;67;2;-4;4;2471240204248249.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;0;1.4114125023920425e+20;6666;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;252253249;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.4113825212414213e+26;767666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;255253249;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;256;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;256258124259260.0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;262263;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-19;0;-1;662177;5;-6;0;-1;7;1;-4;-4;1.081091091091181e+26;77677;5;-4;0;112;7;1;-4;0;0;7;1;-4;4;1.2518612518611622e+26;7.777777777676673e+21;20;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-12;0;-1;7;1;0;0;0;0;0;-4;-4;108108;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;269;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;0;-1;7;1;-4;0;-1;77;2;0;0;0;0;0;-4;-4;108109109108.0;777;3;0;0;0;0;0;0;0;0;0;0;-4;4;100;7777;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;273;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;184117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;110113;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;274;6;1;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;114114;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;275276;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;177;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;278279;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;177280;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;281;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;281280;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;282;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;24;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;143285182;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;286124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;233288;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;293124;21;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
--6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--15;0;-1;7;1;0;0;-1;7;1;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;148289249;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;725;2;0;0;0;0;0;0;0;0;0;0;-4;0;116;7;1;0;0;0;0;0;0;0;0;0;0;8;0;1;25;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;2;1;-4;4444;233296297298.02963;221;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;300233301;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;2;1;-4;4444;233302297303.03024;221;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;233305;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial.csv b/contrib/ML4PG/libs/ssreflect/advance/binomial.csv
deleted file mode 100644
index 66a967ab..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/binomial.csv
+++ /dev/null
@@ -1,47 +0,0 @@
--31107;5;22904;-1110106;6;1;4777777700.0;11;4444444400.0;100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1;1;0;-1;7;2;-7311077;7;4229044;-1091110112113.0;6;2;777777700.0;9;444444400;100;6;1;6;2;-411770;6;420440;-115111160;6;2;-7777041;7;-4444042;-1171181190.0121
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;102;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077;7;22282044;-11110201144.0;6;1;7770;4;4440;2021921430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107770;9;666660444.0;-11110202203192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7720;4;4480;-15020410;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110770;7;6660440;-1110205192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111107777.0;12;66666004444.0;-111110144143192.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--57770;5;44440;1061206104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311077770;9;666044440.0;-1110207208192126.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110;5;222820;-11110;6;1;7777770;7;4444440;2.072092101642062e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111077.0;11;2222282200.044;-11111110208.0;7;1;777700;6;444400;2072122100.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7720;4;4480;-15021310;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110770;7;6660440;-1110207214.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107777;9;2228204444.0;-11110208215102144.0;6;1;7777770;7;4444440;2.162072171812102e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--51117;5;-44724;-1041111;7;1;-31177;5;22944;-111208144;6;1;7777770;7;4444440;1.432181432191432e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-1;1;0;-1;7;2;777700;6;444400;2062031040.0;6;1;777777700.0;10;444444400;214220221104222.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-5;1;-4;109;6;2;770;3;440;2142230;10;1;70;2;40;2240;10;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2252061040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1551;4;440;-11091071;7;1;777777770.0;11;4444444400.0;100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777700;7;4444400;229230231215.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21077770;8;676604444.0;-110215219232233.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211077770;9;67666604444.0;-1110234235236237.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;2;-4;-1118;7;1;2;1;777777770.0;11;4444444400.0;100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3117777777.0;11;6664444444.0;-1.1111311211311018e+230;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-74;2;-44;234241233;6;1;7777770;7;4444440;242243199186147.0;6;1;77;2;44;244245;6;1;-21110770;8;676600440.0;-11110203234.0;7;0;0;0;0;0;0;0
--31177770;8;22944440;-111246102247.0;6;1;-2959640470.0;11;4444444440.0;2.4819216924924613e+200;6;1;-2959640470.0;10;4444444440.0;2.502511342082321e+230;6;0;7770;4;4440;1821990;6;0;-41777770;8;414444440;-1231218143248252.0;6;0
-6;1;6;2;-3111177777.0;10;62266244444.0;-11111255256257208.0;6;3;777770;6;444440;246258103144232.0;6;2;777770;6;444440;246247103208102.0;6;1;77;2;44;246;6;1;7770;4
--217;3;2724;-11247;6;1;77777770;8;44444440;2.592492462502321e+170;6;1;7777;4;4444;134144248260.0;6;1;77777770;8;44444440;123261124125.0;6;1;777770;6;444440;218248143248252.0;6;0
-777;3;444;129262263;6;1;-7410;4;44150;-26412310;6;1;77770;5;44440;129260262102.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111;4;-76676;-1111;6;2;77770770;8;44440440;2651242660.0267243;6;1;77770;5;44440;2682691240.0;6;2;1111010;6;116660130;-1111010;7;1;2;1;-2;-1;6;1
-7;1;4;277;7;1;7;2;-81090;5;186040;-1101400;5;1;-741;3;-4415;-2782791;7;1;774;3;-444;242280281;7;1;7777770;7;4444440;1.882822832842853e+170
--741;3;-4415;-2872791;7;1;72000;4;47000;-2881000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;2;7777770;8;4444440;214289124290.0;6;2;777770;6;444440;242148149151291.0;6;1;57;2;44;109224;6;1;7777;4;4444;292245293268.0;10;1;10;1;7;1
-6;2;-21401;4;-676408;-1128901;6;2;-41770;5;46440;-3061267242.0;6;1;77;2;44;245307;6;1;6;1;6;1;6;2;17770;5;64440;-1308286309.0
-6;1;6;2;77770;5;44440;202326167212.0;10;1;6;1;6;1;6;2;17700;5;64400;-132700;18;1;6;1;77770;5;44440;3282682720.0;6;2
-6;1;6;1;6;1;77770;5;44440;3512682720.0;6;2;-417;3;4174;-1201147;6;2;2;1;-28;-1;6;2;-7311110;7;4466830;-352111110;6;3
-6;1;6;1;77770;5;44440;3632682720.0;6;2;-417777700;9;464444400;-1201353107364128.0;6;1;-8111;4;-895;-1111;15;2;9;1;-4;140;6;1;1117777770.0;10
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial_names b/contrib/ML4PG/libs/ssreflect/advance/binomial_names
deleted file mode 100644
index e7b814dd..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/binomial_names
+++ /dev/null
@@ -1,47 +0,0 @@
-1 fact_prod
-2 logn_fact
-3 ffactE
-4 ffactn0
-5 ffact0n
-6 ffactnS
-7 ffactSS
-8 ffactn1
-9 ffactnSr
-10 ffact_gt0
-11 ffact_small
-12 ffactnn
-13 ffact_fact
-14 ffact_factd
-15 binE
-16 bin0
-17 bin0n
-18 binS
-19 bin1
-20 bin_gt0
-21 leq_bin2l
-22 bin_small
-23 binn
-24 mul_Sm_binm
-25 bin_fact
-26 bin_factd
-27 bin_ffact
-28 bin_ffactd
-29 bin_sub
-30 binSn
-31 bin2
-32 bin2odd
-33 prime_dvd_bin
-34 triangular_sum
-35 textbook_triangular_sum
-36 Pascal
-37 Vandermonde
-38 subn_exp
-39 predn_exp
-40 card_uniq_tuples
-41 card_inj_ffuns_on
-42 card_inj_ffuns
-43 card_draws
-44 card_ltn_sorted_tuples
-45 card_sorted_tuples
-46 card_partial_ord_partitions
-47 card_ord_partitions
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv
deleted file mode 100644
index 5efa52fd..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/binomial_tactics.csv
+++ /dev/null
@@ -1,48 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.0610819210911011e+17;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6666666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;77111314;5;-4;0;-1;2666;4;0;0;0;0;0;-4;0;1.021221221021111e+17;66227;5;-4;-44444;103;67;2;-4;0;0;6;1;-4;4;100;7.610777721122276e+55;48;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;201144202192143.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202203192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150204;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;205192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;144143192;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;7;1;0;0;0;0;0;-4;4;206104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;207208192126.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;2.072092101642062e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;208207212210.0;72;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150213;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;207214;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;208215102144.02;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4;-72;111;7;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;-4;4;2.081441432181432e+23;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.0620310421422022e+23;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;214223224;1010;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;225206104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;109;7;1;-4;-4;107;7;1;0;0;0;0;0;-4;4444444;2.262271432282241e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;229230231215.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;215219232233.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;234235236237.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;2.3821923812816624e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.1311211311019221e+20;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.3424224319918614e+17;66667;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.4610224724819217e+211;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;255256257207.02463;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.2926226326412927e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;77;2;-4;444;2.6512426626724226e+38;666666666.0;9;8;0;1;15;1;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.7727824228018827e+29;7776;4;8;0;1;5;1;0;0;0;0;0;-4;0;100;5;1
-0;0;0;0;0;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;287288;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;77;2;0;0;0;0;0;-4;0;1.091091111121221e+32;676677610.0;8;-4;-4;110114109;77;2;0;0;0;0;0;-4;44444;214289124290.0242;6.661010771677778e+23;19;8;8080;111;7167;3;0;0;0;0;0;-4;0;100100100100.0;761717;4
--6;0;-1;7;1;-6;0;-1;6;1;0;0;0;0;0;-4;0;1.1112212210914214e+17;76106;4;-4;-4;109109109;777;3;-4;0;0;67;2;-4;4;2.672422453073083e+38;6671010106776106.0;12;8;0;1;6;1;0;0;0;0;0;-4;0;100;10;1
--6;0;-111111111;18610;3;0;0;-1;1710;2;-6;0;-1;67;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;202326167212.03275;1.0186666666677777e+37;29;8;0;1;15;1;0;0;0;0;0;0;0;0;0;0
-0;0;111;10610;3;-27;0;-1;6107710;5;-4;0;-1;677;3;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;444;3.512682721473521e+26;6.666666610767711e+17;16;8;0;1;15;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;13;1;-4;444;3.632682723531074e+20;66136;4;8;0;1;15;1;0;0;0;0;0;-4;0;100;6;1
diff --git a/contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv b/contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv
deleted file mode 100644
index 4097929e..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/binomial_tree.csv
+++ /dev/null
@@ -1,48 +0,0 @@
-0;0;-2;100;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;100100100100.0;0;0;0;44444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;-4;0;100100100100.01111;-4;-4;0;4444444444.044444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--472;0;-2;0;0;-4;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;-4;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;100;0;0;0;44444444444.04444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;444444444444.0444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;0;0;0;0;0;444444444444444.06;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;-6;100100;0;0;0;44444444444.04444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;0;0;0;444444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;100100100;-4;-4;0;444444444444.04443;111;0;100100100100.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;0;100100100100.0;-4;-4;0;44444444444.04444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-14;-6;100100100100.0111;0;0;0;44444444444.04444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-261;-4;100100100100.01;0;0;0;44444444444.04444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100100;0;0;0;444444444444.044;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/matrix.csv b/contrib/ML4PG/libs/ssreflect/advance/matrix.csv
deleted file mode 100644
index 65bb8920..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/matrix.csv
+++ /dev/null
@@ -1,396 +0,0 @@
-7700,4,4400,10200,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-8,1,551190,6,446640,-10210311103.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77770,5,44440,104105106107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-2220,4,660,-1110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,109,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10411110,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10511080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511,3,-477,-10411,8,1,-5170,4,4440,-10611080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111110,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10511080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10711080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108112.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108112.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108113.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108113.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--211770,6,8000440,-1111141140.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-22220,5,600660060.0,-11110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-220,3,60600,-110,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-220,3,60600,-110,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--50,2,40,1080,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-22270,5,668666840.0,-1111150,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--721070,6,49888040,-1101160,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-720,3,490,-10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-2220,4,668680,-1110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-151170,6,646640,-1104111080.0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,117118,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--21151170,8,800046640.0,-11110411119.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,120,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,121,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51770,5,46440,-1051108111.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51770,5,46440,-1071108111.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--51170,5,46640,-105111080,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--51170,5,46640,-107111080,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--5117701117.0,9,-4111440774.0,-10411242143.01111,7,1,70,2,40,1080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--5111770117.0,9,-4108144074.0,-104111242143.0111,7,1,70,2,40,1080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108123.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108124.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117,4,4774,-10411108,6,1,-21107709,8,-1286666044.04,-11101080125.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108126.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1081220,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108127.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--111,3,-1344,-111,7,1,70,2,40,1280,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--111,3,-1344,-111,7,1,70,2,40,1290,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-477770,6,444440,130131132133134.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,600,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-20,2,600,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4511,4,-4477,-13510411,14,1,-7772110,7,4441287070.0,-1361081151.011,6,2,6,2,-12107770,8,128804440,-1110137124.0,7,1,-2117,4,120870704,-111108,6,2,6,2,7,2
-47770,5,44440,130138131139.0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--51172170,8,4664486640.0,-1041110811.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-470,3,440,1301400,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--51172170,8,4664486640.0,-1041110811.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-470,3,440,1301410,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111420,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111430,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111440,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111450,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51117,5,47874,-104111146,6,1,-211,3,-1287070,-111,6,2,774,3,-444,108123147,6,2,7700,4,4400,14800,6,1,7400,3,4400,12414700,6,1
-477770,6,444440,130131151152153.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--2170,4,6640,-111540,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511777,6,477444,-10411136108115.0,6,1,-2110,4,12870700,-1110,6,2,774,3,-444,108123147,6,2,7777700,7,4444400,1551561500.0,6,1,774,3,-444,146124147,6,1
-47770,5,44440,130138158159.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-101770,5,440,-101110,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1341600,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1261230,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1611620,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1261240,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1611630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1271230,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1641620,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1271240,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1641630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77777,5,44444,165166167168169.0,6,1,77770,5,44440,170171172173.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-47770,5,44440,130174175176.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7777770,7,4444440,177178179180177.0,14,1,777777,6,444444,1.8017713918117718e+17,6,1,770,3,440,1821830,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1061070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7,1,4,184,15,1,720,3,400,-18510,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77770,5,44440,136108184186.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1511770,7,6466440,-110411108187.0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1510111177.0,10,646066644.0,-1105101111.0187109,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--81110,5,147760,-11110,17,2,770,3,440,1841860,6,1,11111770,8,6668440,-11111184186.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10511080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10711080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111880,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--1,1,-15,-1,6,2,70,2,40,1890,6,1,777770,6,444440,187124190191.0192,7,0,0,0,0,0,0,0,0,0,0,0,0,0
-5170,4,4640,-10511880,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--511770210,9,4664401288.08,-1041110801.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--511770210,9,4664401288.08,-1041110801.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--511770210,9,4664401288.08,-1041110801.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-111511770,9,666466440.0,-11110411108193.0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11511770,8,66466440,-1110411108194.0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1511770,7,6466440,-110411108195.0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1511770,7,6466440,-110411108196.0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--3117770,7,6664440,-111197108198.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--41170,5,46640,-111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1151170,7,6646640,-1110411108.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1151170,7,6646640,-1110411108.0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-150,3,640,-11040,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1510,4,6460,-110410,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,199,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,200,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,201,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2022030,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2022030,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,204,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,205,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,206,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2072080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77700,5,44400,20921000,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--721110,6,412817760,-11110,6,2,740770,5,440440,2112122130.0214214,6,1,-755151770.0,9,444644440,-2151091191.012112,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2162030,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108217.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108218.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2192200,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108221.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108222.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108223.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108224.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511,3,-477,-10411,6,1,-2959640470.0,11,4444444440.0,2.252262252261082e+200,6,1,777707777.0,9,444404444,2282291240.0143123,6,2,7777770777.0,11,4444440444.0,225228124231.01083,6,1,77770,5,44440,108215230232.0,6,0
-1151170,7,6646640,-1110411108.0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108149.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2332340,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108235.0,6,1,-721770,6,41288440,-12211108238.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108235.0,6,1,-721770,6,41288440,-12211108238.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108235.0,6,1,-72170,5,4128840,-122111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108235.0,6,1,-72170,5,4128840,-122111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177700,8,46644400,-10411108236.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2372380,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,1,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2392400,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511772000,8,4664498000.0,-10411108143.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1115117770.0,10,666466444.0,-11110411108241242.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117777770.0,11,4774444440.0,-10411225226108216.0,6,1,777777770.0,9,444444440,1.4324322822912423e+200,6,1,77770,5,44440,108143211232.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-51170,5,46640,-104111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108143.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,246,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11770,5,66440,-112472480,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108241.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2492270,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--774170,6,444640,-2472502511.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,2522532540.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51770,5,46440,-1051108143.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--721,3,-412818,-11,26,2,-41777770,8,46444440,-2.5512561121131083e+180,26,1,77778,5,-444419,2581242590.0,7,1,7777770,7,4444440,203259260256261.03,6,0,0,0,0,0,0,0
-580,3,460,12300,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5870,4,41940,12302030,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51770,5,46440,-1051111108.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108263.0,6,1,-217777700,9,1288444440.0,-11137113264143.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117,4,4774,-10411108,6,1,6,2,-41770,5,46440,-2511108265.0,6,1,-7417770,7,44164440,-2662511108267.0,6,1,-4170,4,4640,-25112240,6,0,0,0,0,0
-5117777770.077,13,4664444440.044,-10411108228124268.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117777770.077,13,4664444440.044,-10411108228124268.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108270.0,6,1,-41770,5,46440,-2511108271.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108270.0,6,1,-41770,5,46440,-2511108272.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108273.0,6,1,-41770,5,46440,-2511108222.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108273.0,6,1,-41770,5,46440,-2511108223.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2742750,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2762770,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--411770,6,466440,-27811279274.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--411770,6,466440,-28011281276.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108265.0,24,1,-41770,5,46440,-2511224108.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-517777770,9,474444440,-1.0511082261082151e+180,6,1,77777707777.0,13,44444404444.0,228229124244245.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2822830,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--51774170,8,46444640,-1051108225.0251111,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108226.0,6,1,-295964047,9,444444444,2.841082152852863e+26,6,1,-777770777.057,12,4444404444.04,228229124268.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2902150,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,2901240,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511261585009.0,15,477149477148.0,-1.0411108226108217e+280,6,1,777770,6,444440,108143291124.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511261585009.0,15,477149477148.0,-1.0411108226108217e+280,6,1,-777570,6,444440,108143241124.01,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4664440,-10411292108241.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7751170,7,4446640,-24729210411.0108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2932490,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2932540,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,247294,6,1,511770,6,466440,-10411108227.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108295.0,6,1,-410770,6,460440,-25110108296.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2972980,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2972990,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,3003012980.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777770,6,444440,302300301300302.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,3032990,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,304,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777770,6,444440,301120297305302.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3062990,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,307,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3043080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--4180,4,4660,-309100,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-580,3,460,12600,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3103110,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-117,3,-204,-111,7,1,551117,6,-4420204,-1261261111.0,6,2,870,3,2140,3120,28,1,8,1,-21,0,28,1,7777770,7,4444440,3.123133043083143e+170,6,0
-5511178,7,-442020421,-1261261111.0,6,2,7770,4,4440,3063133150.0,6,1,70,2,40,3060,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-117,3,-204,-111,7,1,77777,5,44444,298303316121304.0,6,1,770,3,440,3173180,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108238.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4664440,-10411108319285.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511777,6,477444,-10411108319285.0,6,1,-21770,5,12877440,-111080,6,1,77770,5,44440,148149156320.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108149.0,6,1,-2177700,7,1286644400.0,-1110814300.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511777,6,477444,-10411108321149.0,6,1,-2177021770.0,10,128774401287.0744,-11108011108.0,6,1,77770,5,44440,148149156320.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-511772000,8,4664498000.0,-10411108143.01,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4664440,-10411108322319.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4770,4,4440,1303233240.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51177,5,47744,-10411108322.0,6,1,6,2,7777770,7,4444440,238228124268.0,6,2,77777770,8,44444440,3.251083221503262e+200,6,1,7,1,4,226,6,2,77777700,8,44444400,108215286288327.0
-17770,5,4440,-1328329330.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177770,6,44440,-1331302332333.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177770,6,44440,-1334301332333.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177777700,9,44444400,-1331302335336229.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117,4,4774,-10411108,6,1,-2741770,7,4446440,-11082511108337.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117,4,4774,-10411108,6,1,-2741770,7,4446440,-11082511108338.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108339.0,6,1,-4177,4,4744,-2511123126.0,6,1,770,3,440,1241270,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3403410,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1773413420.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3403420,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3403430,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77751,5,-44447,-233234344105.01,7,1,-7741770,7,4446440,-1082252511.0345109,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,346,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3473480,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3473480,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3473480,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11177700,8,66644400,-1112743490.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11150111,7,-24534077,-1111190111.0,7,1,777777770.0,10,444444440,3.502823472373503e+170,6,1,51,2,-47,-1191,7,1,777770,6,444440,345351282290.0,6,1,27777770,8,44444440,-1.2823451121132794e+180,6,0
--4170,4,4640,-25111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--111777041,9,-24534440416.0,-1113532730.02511,7,1,70,2,40,1080,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,203,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,218,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,354,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--41770,5,46440,-2511108215.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,247355,6,1,70,2,40,2510,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,356,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3573560,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,3390,6,1,-4170,4,4640,-25113580,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5551770,7,44412440,-1091141091.010836,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-90,2,40,3600,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,361,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,362,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17770,5,64440,-13633640,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,3650,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--5111777021.0,11,48774440128.07,-104111108366.011,6,2,77770,5,44440,3671083660.0,6,2,-2170,4,128640,-112360,6,1,77770,5,44440,3681083660.0,6,1,-217700,6,12864400,-1110800,6,0
-770,3,440,3693110,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--51174170,8,46644640,-10411108251.01108,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108370.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5117770,7,4774440,-10411108371.0,7,1,-41770,5,46440,-2511108370.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108372.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108373.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108373.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,3743750,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108372.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,376,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108372.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--74170,5,44640,-3712511108.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--77041,5,-440416,-37102511,7,1,777,3,444,370377378,7,1,-4170,4,4640,-25111080,7,0,0,0,0,0,0,0,0,0,0,0,0,0
-777770,6,444440,370377379380381.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108382.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,3833843850.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-90,2,40,386112387388.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-151177770,9,46644440,-1.1041110838939011e+170,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--1410,4,4150,-139110,7,1,7770,4,4440,3923903930.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-75117,5,44774,-39410411108.0,6,1,-4170,4,4640,-25113950,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-47777700,8,44444400,130396345396349.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1170,4,6640,-113970,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1115177777.0,12,24534744444.0,-1111191350282347.0,7,1,70,2,40,3500,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1115177777.0,12,24534744444.0,-1111191350282346.0,7,1,70,2,40,3500,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77700,5,44400,34634800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-6,2,51777,5,46444,-1051111108398.0,6,2,-774110,6,444770,-39922525111.0,6,2,7777770,7,4444440,1.081871082341084e+170,6,1,-77410,5,444160,-4012662511.0,6,1,770,3,440,1084020
-751770,6,446440,-4031051108395.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,404,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-477770,6,444440,130396246293345.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,405,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,4052930,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-6,2,-4170,4,4640,-25111080,6,1,-74107,5,441604,-26625110108.0,6,1,-419,3,-464,-2511395,6,0,0,0,0,0,0,0,0,0,0,0
--751,3,-4424,-4061291,7,1,-5151,4,-425425,-13011301,7,1,-77410,5,444160,-2652732511.0,6,1,7,1,4,407,6,1,7,1,4,226,6,0
-11,2,-24,-11,7,1,6,1,7,1,4,410,6,1,477,3,444,411412195270.0,6,1,-7410,4,44200,-29541310,6,1,77777,5,44444,414124415221.0
-7,1,4,295,6,1,-41077,5,426044,-25110418295.0,6,1,-41770,5,46440,-2511108364.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-777707770.0,9,444404440,2262281240.0108213,6,1,77777770,8,44444440,2.272282291244194e+170,6,1,-21111,5,-421700,-11111,6,2,777777700.0,10,444444400,226407108211269.0,6,1,-1151510,7,27646440,-1113311201.0,6,0
-7770,4,4440,3104214220.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,2622624230.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--770417,6,4404164,-26502511407.0,6,1,77770,5,44440,1074242730.0,6,1,-4170,4,4640,-25111080,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-77770,5,44440,425426427269.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777770,6,444440,227249426423227.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,428,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,2670,6,1,6,1,6,2,-7410770,7,44200440,-26625110265.0,6,2,7,1,4,429,7,2,-4170,4,4640,-25111080,6,1,7,1
-9,1,-4,438,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7777770,7,4444440,226194228124.0,6,2,-777417770.0,9,444464440,-195422221251.0111,6,1,6,2,-451551,6,-44284416,-4394401351.010913,27,2,-755570,6,444440,112109120136.0242,6,1,-117751,6,1064440,-11242143121.01
--211112,6,-356695773577.07,-111111,6,1,7,1,4,398,6,2,17,2,17,3,7,1,4,0,6,3,70,2,40,2360,7,2,17,3
-7770,4,4440,4520,6,1,-417770,6,474440,-2511453265.0,6,1,-411,3,-4213,-25111,6,1,77,2,44,407410,6,1,-4170,4,4640,-45411430,6,0
-77,2,44,107,6,1,777,3,444,455456457,6,1,51170,5,48840,-104111080,24,0,0,0,0,0,0,0,0,0,0,0,0,0
-777770,6,444440,345426407224.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,457458,6,1,-41770,5,46440,-2511459108.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108459.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-511770,6,466440,-10411108460.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-51172,5,-47744,-104111081,6,2,7770,4,4440,4614580,6,2,-4170,4,4640,-25111080,6,1,6,1,77770,5,44440,1084624630.0,6,1,77,2,44,435458
-4777770,7,4444440,1.3039646446545725e+170,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,4234663010.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-13,-1,7,1,-407995279,13,227034908,4.674684692564705e+38,6,1,77777770,8,44444440,3.494662493954385e+200,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-17517,5,1344124,-11561111235.0,7,1,-1111177777.0,10,820644444.0,-1.111147526025619e+19,7,1,7777,4,4444,160134476477.0,7,1,611111,6,-413439,-12011111,7,1,77777770,8,44444440,3.024782834792812e+200,27,0
--3111111,7,-6669658,-1111111,6,2,6,2,77511,5,-44477,-42322110411.0,6,2,-72105170,8,4128860484.0,-1081101021.01,6,1,7,1,4,481,6,1,7777777,7,4444444,194228482124.0483
-777770,6,444440,457174489490457.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,4914234920.0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777770,6,444440,491421493494492.0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,4914570,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177770,6,644440,-1491426495493.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7777770,7,4444440,423496254497498.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777777,6,444444,491426495124.0,7,1,7777770,7,4444440,499500501502503.0,24,1,-21177,5,55951544,-111262262,6,1,77770777,8,44440444,5042604990.05054,6,1,77777700,8,44444400,506507224508493.0,6,0
-2,1,-4,-1,24,2,777777770.0,10,4444444400.0,509260499261.051,24,1,777,3,444,499262,24,1,777777077.0,10,4444440440.0,491428504260499.06,24,0,0,0,0,0,0,0
-117777770,9,664444440.0,-11513349466249514.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-117777770,9,664444440.0,-11513397465249514.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11107770,8,66604440,-1110283515302.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11107770,8,66604440,-1110283516302.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11107770,8,66604440,-1110283516301.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-11107770,8,66604440,-1110283515301.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-27777,5,44444,-1517512518.0,24,1,477770,6,444440,519438516520423.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,4915215220.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,4954380,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77777700,8,44444400,155345464523457.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1277,4,15444,-11517,32,1,4777700,7,4444400,524515516525.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-157770,6,644440,-1118526474527.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-200,2,0,-100,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-177777700,9,644444400.0,-1242144124.0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,521,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,523,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,528,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-74,2,-44,221529,24,1,7770,4,4440,3123143100.0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-55118,5,-4421321,-126126110,6,2,7770,4,4440,5305315320.0,24,1,770,3,440,5315320,24,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,431,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,533,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-477770,6,444440,534535491124.0536,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-2077,3,498044,-10425215,6,1,55179,5,-441344,-10910911537.0,6,1,-511551,6,-477446,-10411109141.01,6,1,7770,4,4440,1085385390.0,7,0,0,0,0,0,0,0
-11114,5,-16504,-11115401,7,1,7777,4,4444,541542124.0,7,1,7777700,7,4444400,543544541545.0,27,0,0,0,0,0,0,0,0,0,0,0,0,0
--41111,5,-47683,-2551111,26,2,-417,3,404,-5405461236.0,6,2,7777770,7,4444440,5.375474652835483e+170,27,1,-3111111,7,-6669638,-1111111,33,2,1177770,7,27044440,-11549550550423.0,33,1
-111511,6,-1650477,-11110411,7,1,-51790,5,40440,-1461108567.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--7210,4,498180,-110,7,1,7777090,7,4444040,1083742360.0568,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77777700,9,44444400,491379569570.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,571,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,571,7,1,77770,5,44440,572573379574.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-9,1,-4,575,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,2360,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--31111109,8,-23295804,-1111110576.0,27,1,-5121111,7,-468816682,-114111111,27,1,7,1,4,577,7,1,1179,4,-644,-111578,7,0,0,0,0,0,0,0
--31111107,8,23295804,-1111110221.0,36,1,37,1,-51211110,8,41389316663.0,-1141111110.0,37,1,77777770,8,44444440,2.2457958058158218e+170,6,1,7777777,7,4444444,5.832792811952293e+20,6,0,777777,6,444444,3.493972831942236e+17
--31111107,8,23295804,-1111110423.0,6,1,-51211111,8,-46893166833.0,-1141111111.0,6,1,7770,4,4440,590423221.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
--311111110777.0,12,232957780444.0,-1.111111101111111e+17,7,1,-51211111,8,-46892166832.0,-1141111111.0,7,1,-7721077,7,441287044,-108366110108366.0,7,2,-21090,5,1286040,-1105910,7,1,-217700,6,12864400,-1110800,7,0
--3111111107.0,10,2329577804.0,-111111110111.0,7,1,-51211111,8,-46892166832.0,-1141111111.0,7,1,-7721077,7,441287044,-108366110108366.0,7,1,-2190,4,128640,-11592112113137.0,7,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/matrix_names b/contrib/ML4PG/libs/ssreflect/advance/matrix_names
deleted file mode 100644
index 41837a27..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/matrix_names
+++ /dev/null
@@ -1,396 +0,0 @@
-1 mxE
-2 matrixP
-3 card_matrix
-4 castmx_const
-5 trmx_const
-6 row_perm_const
-7 col_perm_const
-8 xrow_const
-9 xcol_const
-10 rowP
-11 rowK
-12 row_matrixP
-13 colP
-14 row_const
-15 col_const
-16 row'_const
-17 col'_const
-18 col_perm1
-19 row_perm1
-20 col_permM
-21 row_permM
-22 col_row_permC
-23 castmx_id
-24 castmx_comp
-25 castmxK
-26 castmxKV
-27 castmx_sym
-28 castmxE
-29 conform_mx_id
-30 nonconform_mx
-31 conform_castmx
-32 trmxK
-33 trmx_inj
-34 trmx_cast
-35 tr_row_perm
-36 tr_col_perm
-37 tr_xrow
-38 tr_xcol
-39 row_id
-40 col_id
-41 row_eq
-42 col_eq
-43 row'_eq
-44 col'_eq
-45 tr_row
-46 tr_row'
-47 tr_col
-48 tr_col'
-49 row_mxEl
-50 row_mxKl
-51 row_mxEr
-52 row_mxKr
-53 hsubmxK
-54 col_mxEu
-55 col_mxKu
-56 col_mxEd
-57 col_mxKd
-58 eq_row_mx
-59 eq_col_mx
-60 row_mx_const
-61 col_mx_const
-62 trmx_lsub
-63 trmx_rsub
-64 tr_row_mx
-65 tr_col_mx
-66 trmx_usub
-67 trmx_dsub
-68 vsubmxK
-69 cast_row_mx
-70 cast_col_mx
-71 row_mxA
-72 col_mxA
-73 row_row_mx
-74 col_col_mx
-75 row'_row_mx
-76 col'_col_mx
-77 colKl
-78 colKr
-79 rowKu
-80 rowKd
-81 col'Kl
-82 row'Ku
-83 mx'_cast
-84 col'Kr
-85 row'Kd
-86 eq_block_mx
-87 block_mx_const
-88 submxK
-89 block_mxEul
-90 block_mxKul
-91 block_mxEur
-92 block_mxKur
-93 block_mxEdl
-94 block_mxKdl
-95 block_mxEdr
-96 block_mxKdr
-97 block_mxEv
-98 trmx_ulsub
-99 trmx_ursub
-100 trmx_dlsub
-101 trmx_drsub
-102 tr_block_mx
-103 block_mxEh
-104 block_mxA
-105 mxvec_cast
-106 mxvec_indexP
-107 mxvecE
-108 mxvecK
-109 vec_mxK
-110 curry_mxvec_bij
-111 map_trmx
-112 map_const_mx
-113 map_row
-114 map_col
-115 map_row'
-116 map_col'
-117 map_row_perm
-118 map_col_perm
-119 map_xrow
-120 map_xcol
-121 map_castmx
-122 map_conform_mx
-123 map_mxvec
-124 map_vec_mx
-125 map_row_mx
-126 map_col_mx
-127 map_block_mx
-128 map_lsubmx
-129 map_rsubmx
-130 map_usubmx
-131 map_dsubmx
-132 map_ulsubmx
-133 map_ursubmx
-134 map_dlsubmx
-135 map_drsubmx
-136 addmxA
-137 addmxC
-138 add0mx
-139 addNmx
-140 mulmxnE
-141 summxE
-142 const_mx_is_additive
-143 swizzle_mx_is_additive
-144 flatmx0
-145 thinmx0
-146 trmx0
-147 row0
-148 col0
-149 mxvec_eq0
-150 vec_mx_eq0
-151 row_mx0
-152 col_mx0
-153 block_mx0
-154 opp_row_mx
-155 opp_col_mx
-156 opp_block_mx
-157 add_row_mx
-158 add_col_mx
-159 add_block_mx
-160 nz_row_eq0
-161 map_mx0
-162 map_mxN
-163 map_mxD
-164 map_mx_sub
-165 scale1mx
-166 scalemxDl
-167 scalemxDr
-168 scalemxA
-169 scalemx_const
-170 matrix_sum_delta
-171 swizzle_mx_is_scalable
-172 trmx_delta
-173 row_sum_delta
-174 delta_mx_lshift
-175 delta_mx_rshift
-176 delta_mx_ushift
-177 delta_mx_dshift
-178 vec_mx_delta
-179 mxvec_delta
-180 scale_row_mx
-181 scale_col_mx
-182 scale_block_mx
-183 tr_diag_mx
-184 diag_mx_is_linear
-185 diag_mx_sum_delta
-186 diag_const_mx
-187 tr_scalar_mx
-188 trmx1
-189 scalar_mx_is_additive
-190 scale_scalar_mx
-191 scalemx1
-192 scalar_mx_sum_delta
-193 mx1_sum_delta
-194 row1
-195 is_scalar_mxP
-196 scalar_mx_is_scalar
-197 mx0_is_scalar
-198 mx11_scalar
-199 scalar_mx_block
-200 mulmxA
-201 mul0mx
-202 mulmx0
-203 mulmxN
-204 mulNmx
-205 mulmxDl
-206 mulmxDr
-207 mulmxBl
-208 mulmxBr
-209 mulmx_suml
-210 mulmx_sumr
-211 scalemxAl
-212 rowE
-213 row_mul
-214 mulmx_sum_row
-215 mul_delta_mx_cond
-216 mul_delta_mx
-217 mul_delta_mx_0
-218 mul_diag_mx
-219 mul_mx_diag
-220 mulmx_diag
-221 mul_scalar_mx
-222 scalar_mxM
-223 mul1mx
-224 mulmx1
-225 mul_col_perm
-226 mul_row_perm
-227 mul_xcol
-228 col_permE
-229 row_permE
-230 xcolE
-231 xrowE
-232 tr_perm_mx
-233 tr_tperm_mx
-234 perm_mx1
-235 perm_mxM
-236 is_perm_mxP
-237 perm_mx_is_perm
-238 is_perm_mx1
-239 is_perm_mxMl
-240 is_perm_mx_tr
-241 is_perm_mxMr
-242 pid_mx_0
-243 pid_mx_1
-244 pid_mx_row
-245 pid_mx_col
-246 pid_mx_block
-247 tr_pid_mx
-248 pid_mx_minv
-249 pid_mx_minh
-250 mul_pid_mx
-251 pid_mx_id
-252 mul_copid_mx_pid
-253 mul_pid_mx_copid
-254 copid_mx_id
-255 mul_mx_row
-256 mul_col_mx
-257 mul_row_col
-258 mul_col_row
-259 mul_row_block
-260 mul_block_col
-261 mulmx_block
-262 mul_rV_lin1
-263 mul_rV_lin
-264 mul_vec_lin
-265 mx_rV_lin
-266 mx_vec_lin
-267 mulmxr_is_linear
-268 lin_mulmxr_is_linear
-269 mxtrace_tr
-270 mxtrace_is_scalar
-271 mxtrace0
-272 mxtraceD
-273 mxtraceZ
-274 mxtrace_diag
-275 mxtrace_scalar
-276 mxtrace1
-277 trace_mx11
-278 mxtrace_block
-279 matrix_nonzero1
-280 mulmxE
-281 idmxE
-282 scalar_mx_is_multiplicative
-283 lift0_perm0
-284 lift0_perm_lift
-285 lift0_permK
-286 lift0_perm_eq0
-287 lift0_mx_perm
-288 lift0_mx_is_perm
-289 trmx_mul_rev
-290 map_mxZ
-291 map_mxM
-292 map_delta_mx
-293 map_diag_mx
-294 map_scalar_mx
-295 map_mx1
-296 map_perm_mx
-297 map_tperm_mx
-298 map_pid_mx
-299 trace_map_mx
-300 det_map_mx
-301 cofactor_map_mx
-302 map_mx_adj
-303 map_copid_mx
-304 map_mx_is_multiplicative
-305 map_lin1_mx
-306 map_lin_mx
-307 trmx_mul
-308 scalemxAr
-309 mulmx_is_scalable
-310 lin_mulmx_is_linear
-311 lin_mul_row_is_linear
-312 mul_vec_lin_row
-313 mxvec_dotmul
-314 diag_mxC
-315 diag_mx_comm
-316 scalar_mxC
-317 scalar_mx_comm
-318 mul_mx_scalar
-319 mxtrace_mulC
-320 determinant_multilinear
-321 determinant_alternate
-322 det_tr
-323 det_perm
-324 det1
-325 det_mx00
-326 detZ
-327 det0
-328 det_scalar
-329 det_scalar1
-330 det_mulmx
-331 detM
-332 det_diag
-333 expand_cofactor
-334 expand_det_row
-335 cofactor_tr
-336 cofactorZ
-337 expand_det_col
-338 trmx_adj
-339 adjZ
-340 mul_mx_adj
-341 mul_adj_mx
-342 adj1
-343 mulmx1C
-344 mulmx1_min
-345 det_ublock
-346 det_lblock
-347 unitmxE
-348 unitmx1
-349 unitmx_perm
-350 unitmx_tr
-351 unitmxZ
-352 invmx1
-353 invmxZ
-354 invmx_scalar
-355 mulVmx
-356 mulmxV
-357 mulKmx
-358 mulKVmx
-359 mulmxK
-360 mulmxKV
-361 det_inv
-362 unitmx_inv
-363 unitmx_mul
-364 trmx_inv
-365 invmxK
-366 mulmx1_unit
-367 intro_unitmx
-368 invmx_out
-369 detV
-370 unitr_trmx
-371 trmxV
-372 perm_mxV
-373 is_perm_mxV
-374 GL_1E
-375 GL_VE
-376 GL_VxE
-377 GL_ME
-378 GL_MxE
-379 GL_unit
-380 GL_unitmx
-381 GL_det
-382 scalemx_eq0
-383 scalemx_inj
-384 det0P
-385 map_mx_inj
-386 map_mx_is_scalar
-387 map_unitmx
-388 map_mx_unit
-389 map_invmx
-390 map_mx_inv
-391 map_mx_eq0
-392 cormen_lup_perm
-393 cormen_lup_correct
-394 cormen_lup_detL
-395 cormen_lup_lower
-396 cormen_lup_upper
diff --git a/contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv
deleted file mode 100644
index 6b82eaa4..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/matrix_tactics.csv
+++ /dev/null
@@ -1,395 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;102103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;104105106107.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;11;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;8;1;-4;-4;106;6;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;11;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;1212;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;1212;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;116;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
-0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;105;7;1;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;107;7;1;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;104;7;1;-4;0;0;7;1;-4;4;242143108;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-444;104;7;1;-4;0;0;7;1;-4;4;242143108;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108124;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108126;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108127;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;-111;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;128;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;-111;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;131132133134.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;11;77;2;-12;0;-1;67677;5;0;0;0;0;0;-4;0;104;14;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.361081151371241e+23;6767;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;138131139;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;141;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;142;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;144;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;145;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.4610812314812414e+26;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;131151152153.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;154;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.3610811510812316e+38;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;138158159;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;134160;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;126123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;161162;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;126124;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;161163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;127123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164162;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;127124;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;165166167168169.03;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;174175176;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;177178179180177.0;1466;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;184185;1516;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;136108184186.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;12;1;0;0;0;0;0;0;0;0;0;0;-4;4;108187;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;-4;0;105;12;1;0;0;0;0;0;-4;0;0;12;1;-4;4;187108;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;-4;4;184186184186.0;66;2;8;0;1;17;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;188;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;189187124190191.03;677;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;188;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;18;1;0;0;0;0;0;0;0;0;0;0;-4;4;108193;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;19;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;19;1;0;0;0;0;0;0;0;0;0;0;-4;4;108194;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;20;1;0;0;0;0;0;0;0;0;0;0;-4;4;108195;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;21;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;21;1;0;0;0;0;0;0;0;0;0;0;-4;4;108196;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;197108198;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;22;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;23;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202203;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202203;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;207208;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;209210;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;-4;109119;6;1;-4;-4;120;6;1;0;0;0;0;0;-4;0;211214215215214.0;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;216203;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108217;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108218;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;219220;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108222;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108223;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108224;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;24;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444444;1.0e+INF;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;25;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;25;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108149;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;233234;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108238.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108238.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108235122108.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108236;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;237238;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;239240;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;108241242;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;225226108215.01;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--6;-6;-11;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247248;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108241;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;249227;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247250108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;252253254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;256112113108257.03;26267666;6;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;27;1;0;0;0;0;0;0;0;0;0;0;-4;0;203;27;1;8;0;1;27;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;111108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0826313711326414e+17;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.0810826526610827e+20;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;108228124268.01083;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;108228124268.01082;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108270108271.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108270108272.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108273108222.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108273108223.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;274275;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;276277;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;279274;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;281276;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;24;1;0;0;0;0;0;0;0;0;0;0;-4;44;108265224108.0;246;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;108226108215221.02;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;282283;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108225108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;-4;0;124;6;1;0;0;0;0;0;-4;44;1.0e+INF;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;290215;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;290124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;444444444;1.0e+INF;67;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;-4;0;124;7;1;0;0;0;0;0;-4;444444444;1.0e+INF;67;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;292108241;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;247292108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;293249;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;293254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;247294108227.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108295108296.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;297298;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;297299;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;300301298;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;302300301300302.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;303299;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;301120297305302.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;306299;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;304308;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;26;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;310311;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;126126;6;1;0;0;0;0;0;-4;0;0;7;1;-4;0;3.123123133043083e+20;286;2;8;80;11;2828;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;126126;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;306313315306.0;66;2;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4444;298303316121304.06;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108238;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108319285;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0831928510814815e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108149108143.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;66;2;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0832114910810816e+26;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;108322319;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;323324;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0832223822812427e+17;666667;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;328329330;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;331302332333.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;334301332333.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;331302335336229.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108108337.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108108338.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0833912312612413e+17;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340341;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;177341342;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340342;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340343;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;2.3323434410822533e+20;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;347348;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;347348;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;347348;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;274349;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;-253;-111;7;1;-4;0;-1;6;1;0;0;0;0;0;-4;0;119119;77;2;0;0;0;0;0;-4;0;0;7;1;-4;4444444;1.0e+INF;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;-253;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;353273108;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108215;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247355251;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;357356;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;339358;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;109114109;27;1;0;0;0;0;0;0;0;0;0;0;-4;4;108359;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;29;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;363364;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;365;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;666;3;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0836636710836624e+29;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;369311;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;108108;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108370;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;108371108370.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108372;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108373;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108373;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;374375;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108372;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108372;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;371108;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;371370377378108.0;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;370377379380381.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;108382;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;383384385;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;108389390108.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;392390393;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;394108395;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;396345396349.0;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;397;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;-253;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;119;7;1;0;0;0;0;0;0;0;0;0;0;-4;4444;350282347350.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;-253;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;119;7;1;0;0;0;0;0;0;0;0;0;0;-4;4444;350282346350.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;346348;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.0e+INF;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;403108395;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;30;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;396246293345.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;30;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;405293;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108266108;666;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;129130130;777;3;0;0;0;0;0;-4;0;4.062652734072264e+20;76666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-24;-11;7;1;-12;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;4.1019527029541414e+35;66677666;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;295418295108364.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;133;6;1;-4;-4;120;6;1;-4;0;0;6;1;-4;444;1.0e+INF;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;310421422;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;262262423;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;2.6540710742427312e+17;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;425426427269.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;227249426423227.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;-4;4;1.0e+INF;6.667666666666666e+17;18;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109133109120.0;272766;4;-4;-4;135136121;2767;3;-4;0;0;7;1;-4;44444;226194228124.01953;6666676;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--20;0;-1;5;1;-2;0;-1;6666;4;0;0;0;0;0;-4;0;133133;67;2;-4;-4;138;7;1;-4;0;0;7;1;-4;0;3.9802364433644445e+27;667666666666617.0;14;8;80;11;1717;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;4.524532654074101e+17;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;24;1;0;0;0;0;0;0;0;0;0;0;-4;4;107455456457108.0;6624;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;345426407224.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;457458459108.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108459;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108460;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.0846145810810847e+44;6666666;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;396464465457246.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;423466301;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-84670692;1.0e+INF;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;-111111;777;3;0;0;0;0;0;0;0;0;0;0;-4;0;111;7;1;0;0;0;0;0;-4;0;120;7;1;-4;0;1.562354752602562e+20;777727;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;-6;0;-1;6;1;-4;0;104;6;1;-4;-4;102;6;1;0;0;0;0;0;-4;4;4.2322110848119425e+23;66666666;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;457174489490457.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;491423492;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;491421493494492.0;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;491457;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;491426495493.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;423496254497498.0;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;491426495124.0499;7246666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;509260499261.051;242424242424.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;513349466249514.0;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;513397465249514.0;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283515302;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283516302;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283516301;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;283515301;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;5.175125184385165e+20;2424;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;491521522;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;495438;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;155345464523457.0;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;32;1;-4;0;-1;32;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;517515516525.0;326;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;118;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;526474527;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;1;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;242144124;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;221312314310.0;2424;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;126126;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;530531532531532.0;2424;2;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;27;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;27;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;491124536;2727;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;-4;-4;109109104109.0;666;3;-4;-4;141;6;1;0;0;0;0;0;-4;4;425215108538539.0;67;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;-1650;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;541542124.0543544;727;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-12;0;-1;6;1;-6;0;-1;33;1;-4;0;1.041091091051051e+17;66272433;5;-4;-4;143144120145.0;663327;4;-4;0;0;33733;3;-4;0;1.0e+INF;6.273333246666356e+30;22;8;808080;1111;33343333;4;0;0;0;0;0;0;0;0;0;0
--15;-150;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;-4;-4;146;6;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108374236;77;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;491379569570.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;571572573379574.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;236;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;27;1;-2;0;-1;27;1;0;0;0;0;0;-4;-4;114;27;1;-4;0;0;7;1;-4;0;577;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100100;277;2
-0;0;0;0;0;0;0;-1;376;2;-2;0;-1;36;1;-4;0;107;6;1;-4;-4;114;37;1;0;0;0;0;0;-4;0;2.2122457958058158e+178;366666666;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;-4;-4;114;6;1;0;0;0;0;0;-4;0;423590423221.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;7777;4;-2;0;-1;7;1;0;0;0;0;0;-4;-4;114;7;1;0;0;0;0;0;-4;44;1.1111110810836611e+23;7777;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;-1;777;3;-2;0;-1;7;1;0;0;0;0;0;-4;-4;114;7;1;0;0;0;0;0;-4;0;111108366108366.0;777;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
diff --git a/contrib/ML4PG/libs/ssreflect/advance/series.csv b/contrib/ML4PG/libs/ssreflect/advance/series.csv
deleted file mode 100644
index c64eeb0d..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/series.csv
+++ /dev/null
@@ -1,22 +0,0 @@
-3,1,-6,-1,6,2,7770,4,4440,1021031040.0,6,1,11,2,-27,-11,7,1,777,3,444,105106107,6,1,6,0,0,0,0,0
-3,1,-6,-1,6,2,7770,4,4440,1021031040.0,6,1,11,2,-27,-11,7,1,77770,5,44440,1051061070.0,6,1,6,0,0,0,0,0
-3,1,-6,-1,6,2,77777700,8,44444400,108104103103104.0,6,1,11,2,-27,-11,7,1,77770,5,44440,1051061070.0,6,1,6,0,0,0,0,0
-3,1,-6,-1,6,2,7777770,8,4444440,1082321090.0,6,2,-151770,6,646440,-11181104110.0,7,1,1,1,-2,-1,7,1,777,3,444,111124107,7,1
-3,1,-6,-1,6,2,7777770,8,4444440,1082321090.0,6,2,-151770,6,646440,-11181104110.0,7,1,1,1,-2,-1,7,1,777,3,444,111124107,7,1
-3,1,-6,-1,6,2,7777770,8,4444440,1082321090.0,6,2,-151770,6,646440,-11181104110.0,7,1,1,1,-2,-1,7,1,777,3,444,111124107,7,1
-3,1,-6,-1,6,2,77770,5,44440,103102103114.0,6,1,11,2,-27,-11,7,1,777,3,444,105106107,6,1,6,0,0,0,0,0
-5,1,-4,109,6,1,77770,5,44440,115116117118.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,1190,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--31,2,-66,-11,6,2,70,2,40,1030,6,1,777777,6,444444,1.2010512112212312e+17,6,1,7017,3,-4064,-118011,6,1,70,2,40,1180,6,0
-6,2,1070,4,6040,-101180,7,1,6,1,7,1,4,125,6,1,7,1,4,118,6,1,0,0,0,0,6,1,77,2
-77770,5,44440,1311321330.0,6,1,77,2,44,147134,6,1,7777,4,4444,136128135136.0,6,1,77,2,44,129105,6,1,6,1,5,1,-4,150
-6,1,770,3,440,1441370,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7,1,4,135,6,1,-1757,4,-444,-11181091,6,1,770,3,440,0,6,1,6,1,-750770,6,440440,14510901146.0,7,0,0,0,0,0
--175,3,-844,-1147150,6,2,-1517770,7,8484440,-11091148149.0,6,1,7770,4,4440,1481500,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1111,4,-2997,-1111,7,1,6,1,6,1,770,3,440,1511520,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-7,-1,7,1,6,1,777770,6,444440,153154155156157.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-3777,4,6444,-1157153,6,1,1177,4,2744,-11158,7,1,770,3,440,1551070,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-4,109,11,1,77770,5,44440,115116117118.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-287,3,2104,-10159,7,1,11,2,-29,-11,7,1,2,1,-6,-1,7,2,777,3,444,124135,7,2,12,2,-77771,5,44440,-160161124129.01
--1111,4,-10112,-1111,7,1,8,1,-9,0,13,1,70,2,40,1560,6,0,0,0,0,0,0,0,0,0,0,0,0,0
--11,2,-90,-11,6,1,2117,4,2604,-111159,7,1,11,2,-29,-11,7,1,2,1,-2,-1,7,2,777,3,444,124135,7,2
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector.csv b/contrib/ML4PG/libs/ssreflect/advance/vector.csv
deleted file mode 100644
index 18f6b2c4..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/vector.csv
+++ /dev/null
@@ -1,236 +0,0 @@
-9;1;-4;103;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;104105;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-40;2;0;0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;104106;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1071061080.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5720;4;4480;-109010;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-147700;6;844400;-111011100;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;112;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--41777770;8;48444440;-1311115112126132.0;17;1;1177780;7;844480;-1112612400.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;138;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;139;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;140;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;141;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;142;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;143;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5870;4;41140;10601440;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--411;3;-4133;-14511;17;2;777770;6;444440;1461121240.0;7;1;77770;5;44440;1461121050.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;109;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11111555511.0;12;888884444.088;-11111109109.010912;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1150;4;8840;-111110;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-551770;6;440440;-10812211147.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--41140;4;48840;-131111490;17;1;11;2;-14;-11;7;1;87770;5;84440;1151051500.0;25;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;151;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1521531540.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5557770;7;4444440;12210911311.0155;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1561570;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;158;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1591600;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777770;8;44444440;1.6115916216316415e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1661670;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7740;4;4440;1661680;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1661690;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1661700;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1157770;7;8844440;-11111166171172.0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11157770;8;88844440;-111111166173172.0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77740;5;44440;1131661740.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;1751760;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-150;3;840;-11150;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11161170;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11151170;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11151180;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11161180;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77740;5;44440;115112177178.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--411119;6;-488884;-1311111179.0;17;1;7777;4;4444;115112124;7;1;770;3;440;1770;25;1;8877700;7;88844400;15918000;25;0;0;0;0;0;0;0
--1057770;7;8044440;-101201181182.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--41111;5;-416165;-1311111;7;2;440;3;440;183184185186.0;2;1;777700;6;444400;1531871840.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-1511550;7;8488440;-112111122123.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4119;4;-4884;-13111188;7;1;7777;4;4444;115189124;7;1;-770810;6;44010100;-1230110;7;1;770;3;440;1591800;15;0;0;0;0;0;0;0
-7770;4;4440;1901910;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7740;4;4440;1901920;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1901930;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1901940;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1157770;7;8844440;-11111190195172.0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11157770;8;88844440;-111111190196172.0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7740;4;4440;1901740;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;1971980;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-150;3;840;-11260;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11261170;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11271170;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11271180;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1550;4;8440;-11261180;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1461990;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;2002010;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-15790;5;84440;-1111202128.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7740;4;4440;1751972030.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-14770;5;84440;-1183181204.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--41111;5;-416165;-1311111;7;2;770;3;440;1832050;2;1;777700;6;444400;1581991840.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-5777777;7;4444444;1.1116611111811216e+20;14;1;9;1;-4;207;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5777770;7;4444440;129163190111119.0;14;1;770;3;440;2081170;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1122090;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5777770;7;4444440;129163190111119.0;14;1;770;3;440;2101170;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5777;4;4444;111166118112.0;14;1;9;1;-4;130;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2112122130.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1632140;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777777700.0;10;444444400;2151161170.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1562160;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777770;6;444440;217218219116.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;220;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;221;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;1522220;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5555570;7;4444440;122118109132133.02;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;2232172240.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2172250;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2172260;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177770;6;844440;-1227228229103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777740;7;4444440;217163112230.0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77;2;44;231232;6;1;70;2;40;2330;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77;2;44;234235;15;1;470;3;440;2362370;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;216;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;235;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--721110;6;428617380;-23911110;35;1;-7311111111.0;11;48824092365.0;-1111111110.0;2;1;470;3;440;2402412300.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-777770;6;444440;242150143243244.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777770;8;44444440;166245246190163.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7740;4;4440;2472481140.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--437369287;11;430369810;-24937369287.0;7;2;55777777;8;44444444;1.2812211250251252e+19;6;2;-51777777;8;40444444;-1.0912542502552563e+21;7;2;77777770;8;44444440;2.5016122820025824e+200;15;1;575111;6;-4441315;-109162109111.0;14;1
-77777040;8;44444040;2392632450.0264;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4111111111.0;10;-4238374491.0;-265111111111.0;7;2;577777777.0;10;4444444440.0;1.0916126620013427e+230;14;2;-2959640470.0;12;4444444440.0;100;15;1;5751;4;-44413;-1091621091.0;14;1;7777;4;4444;200161124;7;1
--4373692871.0;12;-4136809560.0;-277373692871.0;7;0;55155511;8;-44044480;-1221371109113109.0;6;0;7777777;7;4444444;2.502721242551252e+17;7;0;-7777770411.0;11;4444440488.0;-250255124270276.03;15;0;5777;4;4444;109268278235.0;14;0
-7;1;7777700;7;4444400;115112279107.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2802470;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1122810;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--741110;6;4413280;-1122821110.0;17;2;-5770;4;4440;1391071150.0;36;1;77770;5;44440;107115283284.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-155110;6;844880;-1140141110.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-147777070;9;844444040.0;-1285286124287.0288;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-55;2;-44;112118;14;2;511777700;9;488444400;-14011289146182.0;15;1;7517770;7;4484440;-2901421146280284.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2912920;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2912930;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2912940;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2912950;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;115129112124298.0;7;1;7770;4;4440;1272991060.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;3002290;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77720;5;44400;-30123410;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17770;5;84440;-13023030;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;2;7777550;7;4444440;304301124143144.0;7;1;6;1;777777770.0;9;444444440;3.0530623914929124e+170;7;1;777770;6;444440;307308309290310.0;7;0;0;0;0;0;0;0;0;0
-777740;6;444400;3111491240.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7411111;7;-4416140;-31213111111.0;7;2;-295964047;9;444444444;3.133141253153163e+23;6;2;5577770;7;4444440;1.4614731831932012e+170;6;1;75111;5;-441920;-321148111;15;1;5177777700.0;10;4844444400.0;-100;6;0
-7777;4;4444;312124125;7;1;777777770.0;10;4444444400.0;100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177777770;10;1544444440.0;-1123181126327235.0;7;1;777777770.0;9;444444440;3.282733291241253e+170;6;1;77777700;9;44444400;126327330331.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-777777770.0;10;444444440;3.1124323929523925e+170;6;1;777;3;444;332165291;6;0;70;2;40;1130;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;3331240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;3331240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;334;7;1;9;1;-4;335;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777770;7;4444440;333304336301234.0;6;1;2007;3;217004;-100151;6;1;777;3;444;149150337;6;1;77770;5;44440;187147154146.0;6;0;0;0;0;0;0;0
--210770;6;2292220440.0;-1103100;6;1;-3111077;7;221520044;-11110338339.0;6;1;77770;5;44440;340341342195.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;3433443450.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110777;8;815200444.0;-11110340124.0;7;1;777700;6;444400;14912400;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;346124347348.0;7;1;7;1;-8111;4;-23808;-1111;7;2;-777741;6;-4444410;-349350348124.01;14;2;7777700;7;4444400;3513523530.0;14;1;777777770.0;11;444444440;351352354348.0
-7;1;7;2;-1117741;7;-136444410;-111356357124.01;7;2;777700;6;444400;3583591360.0;14;1;-811;3;-25150;-111;7;1;557777770.0;9;444444440;1.3914436036112412e+200;7;1;77770;5
-110;3;2310;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-10;2;210;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5740;4;4440;15713660;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;3002353380.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17777700;8;4444400;-1301235304.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--540;3;400;15900;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5570;4;4440;15714110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--155;3;-1544;-1118118;7;1;-2959640470.0;11;4444444440.0;100;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117740;6;2314440;-11111300;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5511777;7;44101444;-118122111371143.0;6;1;111;3;-2265;-111;7;1;77777770;8;44444440;143371372148240.0;4;1;770;3;440;2403730;4;0;0;0;0;0;0;0
-19;2;-154;-1334;7;1;540;3;440;1603740;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777;4;4444;312129113;15;1;15;2;517770;6;484440;-1611107375105.0;14;1;7770;4;4440;3763771720.0;15;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;378;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;379380;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;3810;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777777770.0;10;444444440;239382124383.0;7;1;7;1;4;381;15;1;555110;6;444880;-10911310911.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-1177;4;16244;-11382;7;1;15;1;7777770;7;4444440;124235384124.0;15;1;577770;7;444440;1641243850.0;15;1;5170;4;4840;-113110;6;0;0;0;0;0
-777700;7;444400;38610600;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1551;4;-264414;-11291611;7;1;777700;6;444400;1071053870.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77;2;44;388388;24;1;55177700;8;44844400;-1291611107389.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-151777700;9;848444400.0;-11651390390393.0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;3900;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;390;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;390;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5177070;7;4844040;-16513900116.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5177070;7;4844040;-16513900177.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5177070;7;4844040;-16513900402.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-517700;6;484400;-165139000;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5177070;7;4844040;-16513900126.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;1124030;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-57770;5;44440;1091520;14;1;7770;4;4440;1051124040.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;4051160;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17770;5;84440;-1146405406.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4119;4;-4884;-13111407;17;1;77777;5;44444;146112124;7;1;8777770;7;24444440;105408409106.0;25;1;777770;6;444440;146112105180.0;15;0;0;0;0;0;0;0
-57517;5;-44404;-1091621091.01;14;1;770;3;440;3901380;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-577770;6;444440;1091521180.0;43;1;770;3;440;1124040;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;410;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;199406204411.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;158;15;1;70;2;40;1830;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7774170;7;4444840;-291412413124.01404;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4140;3;4840;-13114140;17;1;44;2;777777080.0;10;444444080;390390161250.0;7;1;-415515;6;-42744244;-1494151109165.011;15;1;77777770;8;44444440;2.504164171614184e+200;15;0;0;0;0;0
-51770;5;424440;-16513900;6;1;777700;6;444400;1052991800.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;1674204210.0;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;231112215;6;1;70;2;40;1130;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777770;6;444440;161146162422405.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-755;3;-444;211139115;14;1;70;2;40;1830;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777770;7;4444440;119109119112.0;6;1;770;3;440;1074230;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;4241242290.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;2;-204;-1118;7;1;777777770.0;9;444444440;3.6042534736842626e+170;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--74111111;8;-442964294;-162427111111.0;17;2;577770;6;444440;109250161428.0;14;2;7777700;7;4444400;429430431275.0;15;1;77770;5;44440;429161432116.0;7;0;0;0;0;0;0;0
--5155519;7;-428444274;-1681122122109.0142;7;1;5110;4;4880;-109110;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;8440;-11524330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--51147770;8;48844440;-168111434407419.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--515177700;9;484844400;-16911651390435.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-577777700.0;9;444444400;100;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1777700;7;8444400;-1434437419.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5177700;7;4844400;-1651390438.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;4394404410.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;4394424410.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;4394404430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;4394424430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777770;7;4444440;425444124287.0;14;1;70;2;40;3900;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;425;14;1;75170;5;44840;-4451701390.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;4464470;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;4484494500.0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17777700;9;84444400;-1451406452.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177770;6;1544440;-1453198454.0;7;1;14;1;777;3;444;455456425;14;1;7777707777.0;12;4444404444.0;444124457458.03906;14;1;470;3;440;4594584560.0;15;0;0;0;0;0
-5511;4;-4480;-12212211;6;2;77777700;8;44444400;460461411124.0;7;1;7;1;4;462;15;2;77770;5;44440;200463407419.0;15;1;777777770.0;10;4444444400.0;100;15;0
-77777700;8;44444400;146112105465.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;466;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;4670;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;466;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--577777777.0;9;444444444;1.0923114611221512e+17;7;1;77700;5;44400;46810600;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--50740;5;40440;175014660;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--577777777.0;9;444444444;1.0923114611221512e+17;7;1;7777700;8;4444400;1774691060.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;470471;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;472471;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;473;15;1;7770;4;4440;2602694660.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5155179;7;-41344844;-1761167122.011474;14;1;87770;5;84440;4754074190.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5775;4;-4444;109371149118.0;14;2;777770;6;444440;476424477478479.0;15;1;517777740;9;484444440;-1091429480124.0481;2;0;0;0;0;0;0;0;0;0;0;0;0;0
-77700;5;44400;47248200;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-4770;4;4440;4701974820.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;4834840;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7440;4;4440;4854734820.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;0;15;1;-31111077;8;6431344044.0;-111110390151.0;15;1;2077700;6;217044400;-1039048600.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0
-777;3;444;369487;7;1;-3111110;7;53889370;-1111110;7;2;77770;5;44440;2921611240.0;7;1;7777;4;4444;294235124;7;1;-7770410;7;44404290;-4884840489.01;14;1
-440;3;440;4904910;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-4550;4;4440;4901461790.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;492;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;110;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;493;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-40;2;40;4750;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-190;3;840;-11800;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-47700;5;44400;11013600;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5177;4;4844;-1851508136.0;17;1;-4111800;6;414501300;-511111100;17;2;17770;5;84440;-1508512390.0;5;1;5170;4;4840;-18513900;14;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector_names b/contrib/ML4PG/libs/ssreflect/advance/vector_names
deleted file mode 100644
index 1ba1f9ae..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/vector_names
+++ /dev/null
@@ -1,236 +0,0 @@
-1 r2vK
-2 r2v_inj
-3 v2rK
-4 v2r_inj
-5 b2mxK
-6 gen_vs2mx
-7 vs2mxK
-8 mx2vsK
-9 memvE
-10 vlineP
-11 mem0v
-12 memvN
-13 memvD
-14 memvB
-15 memvZ
-16 memv_suml
-17 memv_line
-18 subvP
-19 subv_refl
-20 subv_trans
-21 subv_anti
-22 eqEsubv
-23 subvPn
-24 sub0v
-25 subv0
-26 memv0
-27 subvf
-28 memvf
-29 memv_pick
-30 vpick0
-31 subv_add
-32 addvS
-33 addvSl
-34 addvSr
-35 addvC
-36 addvA
-37 addv_idPl
-38 addv_idPr
-39 addvv
-40 add0v
-41 addv0
-42 sumfv
-43 addvf
-44 memv_add
-45 memv_addP
-46 sumv_sup
-47 subv_sumP
-48 memv_sumr
-49 memv_sumP
-50 subv_cap
-51 capvS
-52 capvSl
-53 capvSr
-54 capvC
-55 capvA
-56 capv_idPl
-57 capv_idPr
-58 capvv
-59 cap0v
-60 capv0
-61 capfv
-62 capvf
-63 memv_cap
-64 memv_capP
-65 vspace_modl
-66 vspace_modr
-67 bigcapv_inf
-68 subv_bigcapP
-69 addv_complf
-70 capv_compl
-71 diffvSl
-72 capv_diff
-73 addv_diff_cap
-74 addv_diff
-75 dimv0
-76 dimv_eq0
-77 dimvf
-78 dim_vline
-79 dimvS
-80 dimv_leqif_sup
-81 dimv_leqif_eq
-82 eqEdim
-83 dimv_compl
-84 dimv_cap_compl
-85 dimv_sum_cap
-86 dimv_disjoint_sum
-87 dimv_add_leqif
-88 diffv_eq0
-89 dimv_leq_sum
-90 directvE
-91 directvP
-92 directv_trivial
-93 dimv_sum_leqif
-94 directvEgeq
-95 directv_addE
-96 directv_addP
-97 directv_add_unique
-98 directv_sumE
-99 directv_sum_independent
-100 directv_sum_unique
-101 memv_span
-102 memv_span1
-103 dim_span
-104 span_subvP
-105 sub_span
-106 eq_span
-107 span_def
-108 span_nil
-109 span_seq1
-110 span_cons
-111 span_cat
-112 coord_span
-113 nil_free
-114 seq1_free
-115 perm_free
-116 free_directv
-117 free_not0
-118 freeP
-119 coord_free
-120 coord_sum_free
-121 cat_free
-122 catl_free
-123 catr_free
-124 filter_free
-125 free_cons
-126 freeE
-127 freeNE
-128 free_uniq
-129 free_span
-130 linear_of_free
-131 span_basis
-132 basis_free
-133 coord_basis
-134 nil_basis
-135 seq1_basis
-136 basis_not0
-137 basis_mem
-138 cat_basis
-139 size_basis
-140 basisEdim
-141 perm_basis
-142 vbasisP
-143 vbasis_mem
-144 coord_vbasis
-145 span_bigcat
-146 bigcat_free
-147 bigcat_basis
-148 lfunE
-149 fun_of_lfunK
-150 lfunP
-151 lfun_addN
-152 zero_lfunE
-153 add_lfunE
-154 opp_lfunE
-155 sum_lfunE
-156 scale_lfunE
-157 id_lfunE
-158 comp_lfunE
-159 comp_lfunA
-160 comp_lfun1l
-161 comp_lfun1r
-162 comp_lfun0l
-163 comp_lfun0r
-164 comp_lfunDl
-165 comp_lfunDr
-166 comp_lfunNl
-167 comp_lfunNr
-168 comp_lfunZl
-169 comp_lfunZr
-170 limgS
-171 limg_line
-172 limg0
-173 memv_img
-174 memv_imgP
-175 lim0g
-176 limg_add
-177 limg_sum
-178 limg_cap
-179 limg_bigcap
-180 limg_span
-181 lfunPn
-182 inv_lfun_def
-183 limg_lfunVK
-184 lkerE
-185 memv_ker
-186 limg_ker_compl
-187 limg_ker_dim
-188 limg_dim_eq
-189 limg_basis_of
-190 lker0P
-191 limg_ker0
-192 eq_limg_ker0
-193 lker0_lfunK
-194 lker0_compVf
-195 lker0_limgf
-196 lker0_lfunVK
-197 lker0_compfV
-198 lker0_compVKf
-199 lker0_compKf
-200 lker0_compfK
-201 lker0_compfVK
-202 lim1g
-203 limg_comp
-204 lpreim_cap_limg
-205 lpreim0
-206 lpreimS
-207 lpreimK
-208 memv_preim
-209 memv_pi
-210 memv_proj
-211 memv_pi1
-212 memv_pi2
-213 daddv_pi_id
-214 daddv_pi_proj
-215 daddv_pi_add
-216 projv_id
-217 projv_proj
-218 memv_projC
-219 limg_proj
-220 lker_proj
-221 addv_pi1_proj
-222 addv_pi2_id
-223 addv_pi2_proj
-224 addv_pi1_pi2
-225 memv_sum_pi
-226 sumv_pi_uniq_sum
-227 sumv_pi_sum
-228 sumv_pi_nat_sum
-229 subvsP
-230 subvs_inj
-231 congr_subvs
-232 vsval_is_linear
-233 vsprojK
-234 vsvalK
-235 vsproj_is_linear
-236 vsolve_eqP
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv b/contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv
deleted file mode 100644
index ac47e370..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/vector_tactics.csv
+++ /dev/null
@@ -1,273 +0,0 @@
-0;0;0;0;0;-4;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;80;11;117;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107106108;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;14;1;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;111;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;16;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;113111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;116117;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;118111;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;119111;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;120;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108107;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;121;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;122123125126106.0;147;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;127128;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;129112130;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;18;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4444;115112126132.01262;177;2;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;100;1915;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;15;1;0;0;0;0;0;0;0;0;0;0;-4;0;144;15;1;8;0;1;15;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;1.461121241461121e+17;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
--8;-8888;-11111;22;1;0;0;0;0;0;0;0;0;0;0;-4;-4;109110;22;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-8;-11;23;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;108122;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;147;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;112118109;244;2;0;0;0;0;0;0;0;0;0;0;-4;0;148;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;115105150;25;1;8;0;1;25;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;152153154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;122109113;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;155;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;156157;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;159160;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.6115916216316416e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;166167;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;166;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;166169;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;166170;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-8;-11;26;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;26;1;0;0;0;0;0;0;0;0;0;0;-4;44;166171172;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-88;-111;27;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;27;1;0;0;0;0;0;0;0;0;0;0;-4;44;166173172;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;113166;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;175;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;28;1;0;0;0;0;0;0;0;0;0;0;-4;0;115;28;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;-4;116117;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;30;1;0;0;0;0;0;0;0;0;0;0;-4;-4;115117;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;-4;-4;115118;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;32;1;0;0;0;0;0;0;0;0;0;0;-4;-4;116118;32;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;115112177;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;1.1511212417715918e+17;72525;3;8;80;11;2525;2;0;0;0;0;0;-4;0;100;17;1
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;181182;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;153187184;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;121122123;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;1.1518912412315918e+17;7715;3;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;190191;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;190;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;190193;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;190194;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-8;-11;26;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;26;1;0;0;0;0;0;0;0;0;0;0;-4;44;190195172;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-88;-111;27;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;27;1;0;0;0;0;0;0;0;0;0;0;-4;44;190196172;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;190;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;197;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;28;1;0;0;0;0;0;0;0;0;0;0;-4;0;126;28;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;-4;-4;126117;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;32;1;0;0;0;0;0;0;0;0;0;0;-4;-4;127117;32;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;-4;127118;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;30;1;0;0;0;0;0;0;0;0;0;0;-4;-4;126118;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;146199;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;200;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;202;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;175197;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;181204;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;183205158199184.0;215;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;14;1;0;0;0;0;0;0;0;0;0;0;-4;44444;1.6611111811215722e+17;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;14;1;0;0;0;0;0;0;0;0;0;0;-4;4444;163190111119.0208;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112209;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;14;1;0;0;0;0;0;0;0;0;0;0;-4;4444;163190111119.02103;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;14;1;0;0;0;0;0;0;0;0;0;0;-4;44;166118112;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;211212213;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;163214;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;215116117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;156216;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;217218219116.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;152;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4444;122118109132133.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;223217224;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;217225;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;217226;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;227228229103.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;217163112;33;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;231232233;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;234235237;1515;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;166;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;189;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;-2;0;-1;35;1;-8;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2390230;35215;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;242150143243244.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;166245246190163.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;247248;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;128122109109.0;61414;3;-4;-4;109;7;1;0;0;0;0;0;-4;444;250251252253.02;67151415;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;2.3918924518919025e+20;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;239263245;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109109109;141414;3;-4;0;136;7;1;0;0;0;0;0;-4;4444444;1.6126620013425825e+201;14151471414715.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-8;11;15;1;0;0;0;0;0;0;0;0;0;0;-4;-4;1.221371091131091e+17;6614;3;-4;-4;114;7;1;0;0;0;0;0;-4;444444;100;71514;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;115112279107.0;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;280247;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112281;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;36;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.1210711510711529e+20;173615;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;140141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;286124287288.0;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;112118140142.0;141515;3;0;0;0;0;0;0;0;0;0;0;-4;444;2.891461822901463e+20;151515;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291292;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291293;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291294;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;291295;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;136296297128.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;115129112124298.02;714;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;300229;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;301234;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;302303;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;143144;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;100;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;311149124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;146147148149.0;6156;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;766156;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;3.121241253233243e+29;776;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;123181126327235.03;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;100;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;333124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;333124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;334;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-21;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;333304336301234.0;6666;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-22;0;-1;6;1;-22;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;3.1033833934034135e+20;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;343344345;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;340124149124.0;715;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;346124347348.0349;7141466;5;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
--11;-264;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;139144;7;1;0;0;0;0;0;0;0;0;0;0;-4;4;3.5635735835913635e+29;7147714141414.0;8;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;157;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;300235338;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;301235304;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;159;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;157141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444444;3.6733336836923536e+20;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;118122;6;1;0;0;0;0;0;-4;0;0;7;1;-4;4;3.7114314337137217e+20;644;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;160;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;161;14;1;0;0;0;0;0;0;0;0;0;0;-4;444;3.121291131073751e+26;151415;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;381;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;109113109;15;1;0;0;0;0;0;0;0;0;0;0;-4;4444444;239382124383.0381;715;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;-12;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;164113;156;2;0;0;0;0;0;0;0;0;0;0;-4;4;382124235384124.0;71515;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;386106;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--26;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;129161;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;107105387;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;129161;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;388388107389.0;246;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-88;-111;37;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;37;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390391;37;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-8;-11;38;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;38;1;0;0;0;0;0;0;0;0;0;0;-4;44;390260;38;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;39;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390392;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;40;1;0;0;0;0;0;0;0;0;0;0;-4;0;165;40;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390393;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;390;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390358;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;390144;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390394;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;444;390390359;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;14;1;0;0;0;0;0;0;0;0;0;0;-4;444;1.363953901363964e+20;1414146;4;8;0;1;41;1;0;0;0;0;0;-4;0;100;42;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390116;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390177;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390402;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;14;1;0;0;0;0;0;0;0;0;0;0;-4;4;390;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;14;1;0;0;0;0;0;0;0;0;0;0;-4;4;390126;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;112;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;44;152105112404.0;1415;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;405116;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;146405406;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;1.4611212410540841e+20;72515;3;8;0;1;25;1;0;0;0;0;0;-4;0;100;17;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109109;1414;2;0;0;0;0;0;0;0;0;0;0;-4;0;162390138;1415;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;43;1;0;0;0;0;0;0;0;0;0;0;-4;444;152118112404.0;4315;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;199406204411.0;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;183;15;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;291412413405.0;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;109165109;1515;2;0;0;0;0;0;0;0;0;0;0;-4;44444;390390161250.02;715;2;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;390105299180.0;614;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;420421;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;231112215113.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;161146162422405.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;139115;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;211183;1415;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;119109119112.01074;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;424124229;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--20;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;3.6042534736842624e+17;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.6225016142842943e+23;1714157;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;122122109109.0;72;2;-4;-4;168;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;152433;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;168;7;1;0;0;0;0;0;-4;44;434407419;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;7;1;-4;-4;169;7;1;0;0;0;0;0;-4;44;390435;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;-4;44444;371158426114436.0;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;434437419;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;165;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;390438;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439440441;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439442441;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439440443;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;439442443;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;425444124287.039;1414;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;170;14;1;0;0;0;0;0;0;0;0;0;0;-4;0;425445390;141414;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;446447;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;448449450;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;451406452;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;4.531984544554564e+29;714141415.0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;460461411124.0462;7151515;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;109114;15;1;0;0;0;0;0;0;0;0;0;0;-4;444;390124116128464.0;157;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;146112105465.0;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;467;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;-4;4444444;231146112215124.03;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;175;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;-4;4444444;231146112215124.03;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;473260269466.0;1515;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;176167122;1414;2;0;0;0;0;0;0;0;0;0;0;-4;44;475407419;7;1;8;0;1;7;1;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;109118109;14142;3;0;0;0;0;0;0;0;0;0;0;-4;4;3.711494764244775e+20;14152;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;472482;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197482;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;483484;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;485;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-21;0;-1;15;1;-4;0;-1;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;390151390486.0;151515;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-21;0;-1;7;1;-4;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;3.694872921611243e+32;777147;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;146179;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;15;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;136;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-88;-111;71245;3;0;0;0;0;0;0;0;0;0;0;-4;0;149149;745;2;0;0;0;0;0;0;0;0;0;0;-4;4;1.2813649412812849e+32;7141445615.0;6;8;80;11;4142;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;80;11;4146;2;0;0;0;0;0;-4;0;100;41;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;501502128503.0;4146;2;8;80;11;4146;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.0550450550610614e+17;414141;3;8;0;1;41;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;184185186184.0;14714;3;0;0;0;0;0;0;0;0;0;0;-4;4;136128508136128.05;146714;4;8;80;11;77;2;0;0;0;0;0;0;0;0;0;0
--8;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;185185;1714;2;0;0;0;0;0;0;0;0;0;0;-4;4;5.081365085123904e+17;17514;3;8;0;1;17;1;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv b/contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv
deleted file mode 100644
index d6fe103a..00000000
--- a/contrib/ML4PG/libs/ssreflect/advance/vector_tree.csv
+++ /dev/null
@@ -1,273 +0,0 @@
-0;-4;0;100;0;0;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--88888;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--88;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;0;0;0;44;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--88;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--888;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;444444;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--88;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--888;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-4;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;-8;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-44;-4;0;44444444444444.05;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-4;-4;0;444444444444444.06;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--88;0;0;100100100;-44;-4;0;44444444444.044;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;4444444444.04444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-44;0;0;44444444444.04444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;0;0;0;0;0;4444444444444.045;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-21;0;0;0;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-22;-22;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-8;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44444444444.04444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1364;0;0;100;-44;0;0;444444444444.04443;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;0;100;-4;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-444;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--162;0;0;0;-4;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--26;0;0;0;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--888;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--88;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-4;0;0;4444444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;444444444444.0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100100;-44;0;0;44444444444.0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--20;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-4;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-444;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--15;0;0;100;0;0;0;444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;444444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;44444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-4;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-21;-4;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-21;-4;100;0;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--888;0;0;100100;-4;0;0;44444;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4444444444444.0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;0;0;100;-4;0;0;444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq.csv b/contrib/ML4PG/libs/ssreflect/basic/seq.csv
deleted file mode 100644
index c7a47a31..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/seq.csv
+++ /dev/null
@@ -1,394 +0,0 @@
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21100;5;676600;-11100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1021030;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1051061070.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1051080;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1091051100.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1051110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1051110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211777;6;6766444;-111112113109.0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1117;4;9004;-111114;7;1;-3111117;7;66210084;-111111115;11;1;70;2;40;1160;11;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;66666640;-11111102103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111100;7;66666600;-1111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211070;6;676666040.0;-11101190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21110;5;6676660;-11110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;66666640;-11111102103.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110770;9;666666044.0;-111110120104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111090;7;66666040;-111101040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111090;7;66666040;-111101040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311111110;9;1102092000.0;-111111110;7;1;77777709;9;-44444404;122123124125.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110;6;6266620;-111110;6;3;7770;4;4440;1021261270.0;6;2;770;3;440;1281290;6;1;7770;4;4440;1041301310.0;6;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311111077777.0;13;6266622044444.0;-1.1111101201041322e+180;12;1;-2107;4;97004;-110134;6;1;77700;5;44400;13513600;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;2;-41777;5;42444;-1051138139140.0;6;2;77020;5;440110;-141010;6;1;-4177;4;4244;-1051138142.0;6;1;770200;5;44011700;-1410100;6;1;7770;4;4440;1431441450.0
--311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110290;7;6660440;-111011060;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110200;6;102004700;-1110100;6;1;777770;6;444440;147148149150151.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311102000;8;666609700.0;-111101000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-409;2;-404;1070108;9;1;-31111070;8;66666040;-1111101040.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-590;3;440;1021080;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110270;8;66660440;-1111011540.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111020;7;6666040;-1111010;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111020077.0;10;666604700.044;-11110100104155.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;109;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20090;4;670040;-1001090;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111020;7;6666040;-1111010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111021090.0;11;666660476.04;-11110110111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777027700.0;9;444044400;-10515901115.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1601591060.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110770;8;66660440;-11110104161.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;105162163164.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110770;8;66660440;-11110104165.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;105166167149.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;6440;-11681040;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;6440;-11681040;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-111601690;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-111701710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-111721710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311102000;8;666609700.0;-111101000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-790;3;440;1731121130.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110427700.0;10;666044440.0;-11101141177.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777777090.0;9;444444040;172148151124.0115;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077;7;10212044;-11110149104.0;6;1;20020;4;470040;-10010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1601790;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1601800;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110777777.0;12;102120444444.0;-1.1110181182104182e+190;6;1;7220;4;4440;-182110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077777.0;11;6666044444.0;-1.1110181182104182e+190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1701840;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1701850;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311070;6;666040;-11101610;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1721841430.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1721850;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-4777;4;4444;116187188189.0;6;1;-417700;6;464400;-117118700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110770;9;266660440;-111110191192.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21110;5;776660;-11110;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;66666640;-11111102118.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77700;5;44400;19415400;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;62666640;-11111102103.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;62666640;-11111102103.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-730070;5;460040;-11001950;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30020;4;60000;-10000;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111140;8;666666640.0;-11111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77700;5;44400;19615400;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;62666640;-11111102103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;62666640;-11111102119.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5777770;7;4444440;104198106199124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;196;6;1;77700;5;44400;20020100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110;6;10220920;-111110;6;1;7770;4;4440;2022031550.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--731117770.0;10;4666644400.0;-11111204104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117777;6;1404444;-11205206207110.0;7;1;20077770;7;470044440;-100134204115208.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;2;7777770;7;4444440;198209210211212.0;6;2;770;3;440;1502130;6;1;7709;4;-4404;1350120121.0;6;1;770;3;440;1992160;2;0;0;0;0;0
-112;3;-104;-111;7;2;77777700;8;44444400;198209210211217.0;6;1;7777700;7;4444400;115205211115.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110770.0;10;6666666044.0;-1111110195218.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110770.0;11;6666666044.0;-1111110204104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;1952041150.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;1981061070.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17770;5;4440;-11961940;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;122;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;162164162198.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2202210;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17777;5;104444;-1222199;13;1;770;3;440;2231980;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;123;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777700;7;4444400;2041951050.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-3000;3;66000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2250;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1052260;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107770;9;666604440.0;-11110227228104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2252290;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1052300;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2272311040.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;77777770;8;44444440;2.312282022031052e+170;7;1;-211777;6;27020444;-111232233134.0;7;1;7777700;7;4444400;234235213104.0;6;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;16;1;202;2;4700;-100;17;1;400;2;400;12400;17;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111110;8;1101510512.0;-11111110;7;1;7770;4;4440;2371651040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110295964047.0;19;-1.0e+INF;-1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7720;4;4440;-17016010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5579;4;-4444;1081091125.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2411090;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077770.0;11;666604444.0;-11110242161104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177777700;9;644444400.0;-1105243244164241.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;126;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1092462470.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2111090;7;676666660.04;-111101270;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117770;6;664440;-11109246249.0;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111107777.0;13;666660004444.0;-1111110247249104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1777700;7;6444400;-1198243250.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17777700;8;64444400;-1198243128129.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13111077777.0;13;66666044444.0;-1.0e+INF;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311102;6;10151100;-111100;17;1;287;3;4144;-10247;17;1;-41118009;7;-4154314004.0;-130111100249.0;17;1;2070;3;467040;-101310;19;0;0;0;0;0;0;0
--41111;5;-4840;-1071111;7;2;-41580;5;40460;-1321331110.0;2;1;511590;6;460440;-11011111133.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111;4;-101511;-1111;7;1;-770210;6;44097990;-1490110;7;2;-41149;5;-414404;-107110247;7;2;170;3;1140;-110;7;1;-211490;6;676666440.0;-1111342490.0;7;0
--3111;4;-101511;-1111;17;1;-7770210;7;4440158515.0;-1491870110.0;17;2;-2111890;7;1676666666.04;-111102490;17;1;-4187;4;414144;-10710247;17;1;6117280;7;404660;-112111100;7;0
--731110;6;41015120;-14911110;6;1;7;1;4;155;6;1;2027700;6;117044400;-10123800;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110;6;10151700;-111110;7;1;777777704.09;10;-4444444044.0;1.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111077777777.0;16;1015170044444444.0;-1.1111013824710412e+230;7;1;77700;5;44400;13824900;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--51770;5;40440;-1131160138.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;440;-11721400;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--51770;5;40440;-1131141138.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-115511187777.0;14;664466666.04444;-11110110111.014214;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-115511147777.0;13;664466644444.0;-11114114111.011421;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-55180;5;44660;-110110100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110;5;1015110;-11110;17;1;-2102;4;117000;-1101;17;1;4000;3;4000;130000;17;0;0;0;0;0;0;0;0;0;0;0;0;0
--21100;5;67666600;-11100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--210740;5;27220440;-1101431460.0;6;1;-31070;5;66040;-1101470;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2107770;7;676604440.0;-110148147129.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--419;3;-464;-1071149;17;1;-21108;5;-107150014;-11100;7;1;-51870;5;40640;-115101500;7;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111770;7;101512440;-11111510;6;1;777777700.0;9;444444400;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777770;6;444440;154152155165149.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777770;7;4444440;1.1115615415616216e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1051560;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111102;7;-101514304;-1111101;7;1;7777700;8;4444400;1571582380.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1561980;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110;5;1015120;-11110;6;1;-2959640470.0;11;4444444440.0;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110;7;101507380;-1111110;7;1;7720070;6;441170040;-241143100160.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117;3;4;-11161;7;1;7770;4;4440;1601621630.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111020090.0;9;666604700.04;-11110100201.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--131110;6;141015120;-111110;18;1;277702000;8;4444011700.0;-1241104010.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111027770.0;11;666604444.0;-111101164163.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311100;6;666600;-111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111027770.0;11;666604444.0;-111101202165.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077777.0;12;101512044444.0;-11110155155157.0;6;1;720090;5;4970040;-1551001660.0;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1670;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1681730;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1681240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1691680;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110777777.0;14;102150920444444.0;-1.1111014720212419e+170;7;1;61117;5;-4584;-1181111;7;1;20070;4;11070040;-1001710;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-7700;4;4400;14700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;109172105173174.0;7;1;200770;5;9700440;-1001471030.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111557;6;-13444;-1111081091.0;7;1;7770;4;4440;1751761750.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1777700;7;6444400;-1198243164.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-490;3;440;1771780;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-18;2;-30;-10;7;1;-7731110;7;4410015130.0;-17911110;6;1;7720070;6;441170040;-143241100195.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
--4114;4;-4664;-10711171;17;1;840;3;640;1800;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311102;6;1021100;-111100;17;1;28;2;-42;-10;17;1;-4177777770.0;10;4644444440.0;-1.301181112113182e+240;17;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;185;7;1;-211;3;70;-111;7;2;-21170;5;7333340;-1111860;22;1;51280;5;40060;-1201100;2;0;0;0;0;0;0;0
--3111100;7;66666600;-1111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110777.02;12;-622666220.0444762;-1111110133103.01;6;1;-3111077020.0;10;666660440.06;-1111013301.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111107770.0;10;10230920444.0;-111110102126.0;6;1;79;2;-44;187155;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--411119;6;-419064;-1881111109.0;17;1;-311110;6;19430900;-111110;6;1;2;1;-4;-1;6;2;-5772000;6;444117000;-1091891901.0;7;1;777;3;444;170124;7;1
-50;2;40;1210;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1155110;7;6644770;-1112112111.0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1115151;7;-1110420420.0;-1111211121.01;24;1;5170;4;4640;-12111960;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4110;4;41400;-107110;9;1;559;3;-444;122122197;6;1;-7540;4;4400;19812300;7;0;0;0;0;0;0;0;0;0;0;0;0;0
--4110;4;42100;-107110;17;1;770;3;440;1981960;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-551770;6;446440;-1241211189107.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5511501177.0;9;446640644;-12112111109.011189;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;200;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7790;4;4440;1982012020.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-57770;5;44440;124111202201.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-57770;5;44440;124111203201.0;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-10770;5;60440;-101052010;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-10770;5;60440;-102011980;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;204;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--531110;6;41015130;-12411110;12;1;27777070;8;44444040;-1113205206.0207;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5117770;7;4664440;-12111168170196.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--51770;5;46440;-1211185196.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--115111;6;-64600;-11125111;7;1;-211077770;10;667776604444.0;-1110242147124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111110;8;1101510139.0;-11111110;7;1;77;2;44;222208;19;1;-4110;4;41530;-104110;19;1;77770;5;44440;209208242210.0;7;0;0;0;0;0;0;0
--3111110;7;1101510130.0;-1111110;7;1;61111111;8;-411101190;-1181111111.0;7;1;77777770;8;44444440;2.1122220814321215e+170;2;1;19;2;77770;5;44440;209208242210.0;19;1;-7770417;7;44404134;-10411002131.01214
-1155111;7;-151441410;-11122122111.0;7;2;77777070;8;44444040;148216124136.0217;19;1;-4170;4;4640;-21812190;2;0;0;0;0;0;0;0;0;0;0;0;0;0
-111;3;-1520;-111;7;1;57;2;44;109220;25;1;-1555141;7;144441340;-1128122129.012211;18;1;77;2;44;150222;19;1;577050;6;444040;1142230114.0;20;0
-1155177770.0;10;664464444.0;-1.1122122111322022e+200;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-149;3;-44;-1225226112227228.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111515;6;-14514144;-1111141109.0;7;1;770;3;440;1621960;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1;1;0;-1;7;1;111117;6;-2310474;-111111;2;1;515770;6;464440;-1141109162164.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
-111177;6;1010044;-1111115115.0;7;1;-311111111;9;-7066708007.0;-111111111;7;2;20;2;1000;-10;7;1;7;1;7777;4;4444;198111124;7;1;777777704.0;9;444444400;111229230205124.0
--11115;5;-101004;-1111133;7;1;-41070;5;47040;-231102320;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2220;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-170;3;640;-12090;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;1062332230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2342350;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2360;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1;1;-10;-1;13;2;790;3;440;2372350;6;1;77770;5;44440;1222162380.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;239;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;240198230;6;1;7770;4;4440;1992402230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-4777777;7;4444444;241242240243230.0;6;1;7;1;4;244;6;1;77770;5;44440;240223230198.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-177;3;44;-1198;7;1;77;2;44;245198;6;1;77770;5;44440;199200246233.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;247;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11210;5;14397130;-11110;7;1;77777770;8;44444440;2.3524822224923423e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21;2;-48313;-11;6;2;7770;4;4440;2502222510.0;6;1;-21;2;-48313;-11;6;2;7770;4;4440;2502222510.0;6;1;770;3;440;2522530;6;0
-7770;4;4440;2222540;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2222540;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111100;7;66666600;-1111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311111040;9;666666604.0;-1111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111110277.0;13;666666660.0644;-111111101104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1113111111.0;11;14501112409212.0;-1111111111.0;7;1;720;3;460;-10410;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110777.0;11;110409200444.0;-1111110255149.0;7;1;2000;3;47000;-1000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1;1;-12;-1;7;1;6;1;7777770;7;4444440;256257199258.0;6;1;77770;5;44440;1981982570.0;6;1;70;2;40;2230;6;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1681240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111110;8;1015143400.0;-11111110;7;1;-2107770;7;667130444.0;-1101041100.0;19;1;490;3;440;1322592600.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0
-1177700;7;6644400;-1126120900.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311111;6;-6666666;-111111;17;4;80;2;0;0;17;3;20;2;0;0;17;2;877700;6;1044400;26226300;17;1;-4111;4;-41000;-264111;17;2
--155;3;-1044;-1136136;24;1;-311111117;9;1015098107.04;-11111111280.0;19;1;-217;3;1096104;-11280;19;2;-2107770;7;1096100444.0;-1101471040.0;19;2;111115;6;-2350004;-11111136;19;2
--3111070;7;6666040;-111101470;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1117011175.0;9;-1000401000.044;-111101111136.0;7;1;877770;6;644440;106257281282.0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1152832840.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1142832840.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11179;5;-96644;-1111260;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31107270;8;66604440;-11102421284.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11177770;8;96044440;-1111256265151.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-19;2;-134;-1285;7;1;557011117.0;8;-4440237004.0;-128109101111.01;6;1;777770;6;444440;256265172185.0;7;1;-57770;5;44440;1371265286.0;7;0;0;0;0;0;0;0
-90;2;40;2870;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1151052830.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111790;6;966440;-11112880;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110770;8;66660440;-11110143158.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077770.0;10;10151304444.0;-11110242143198.0;7;1;200;2;11700;-100;7;1;7770;4;4440;2062071980.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
--570;3;440;13810;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107;6;10151304;-11110143;2;1;2090;3;97040;-10289112113290.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-490;3;440;2912920;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;293294;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110;5;1015130;-11110;7;1;20055770;7;1170044440.0;-100139102295168.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--51770;5;46440;-140111570;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;2700;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111070;7;6666040;-111101040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111190;7;66666640;-11111102103.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1052960;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-3000;3;66000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077700.0;10;666604440.0;-11110155104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;266666040;-1111101920.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;266666040;-1111101920.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;2962972980.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-4770;4;4440;241299300242.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077770.0;10;666604444.0;-11110227105296104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-10;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311020;6;666040;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-58770;5;46440;1360301302.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110777.0;11;1101510500.0444;-1111110238284.0;6;1;2777020070.0;10;4444011700.04;-11040100303.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1419;4;-4134;-11071304;7;1;577770;6;444440;109305306307.0;6;1;555;3;-444;109139141;19;1;7777770;7;4444440;308309291124310.0;19;1;7490;4;4440;1571463110.0;6;0
-87;2;2904;312;7;1;-211;3;-11718;-111;7;2;870;3;1040;2070;27;1;8777770;7;6444440;179313105111203.0;27;0;0;0;0;0;0;0
--31110;5;1015130;-11110;7;1;1740;4;11440;-11126112314127.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31112;5;1015110;-11110;17;1;77702;5;-44404;-24114301;17;2;877770;6;1444440;247112113315.0;17;1;-41111;5;-415436;-1301111;17;2;890;3;1440;1270;26;1
--311107;6;10151304;-11110110;7;1;-41580;5;46460;-1323171142.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110;7;10153190;-111110;7;2;551118;6;-44155914;-1421221110.0;6;2;7777700;7;4444400;2472491240.0;7;1;-411114009;8;-466664004;-1041111100.0127;6;0;0;0;0;0;0;0
-11175;5;-120044;-1111136;7;1;8770;4;6440;3013180;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110777.0;11;101529000444.0;-1111110319247.0;7;1;-1772004;6;-44117004;-1242143100.0104;6;1;-4190;4;4640;-3203211127.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
--5151770;7;4646440;-12111211322323.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-5511780;7;4466460;-1431221110.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--731110770.0;9;466660440;-11110177104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-49;2;-44;324325;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8111;4;-3320;-1111;7;1;557777770.0;9;444444440;1.3914430132612412e+200;6;1;77700;5;44400;32817500;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-170;3;640;-13290;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-170;3;40;-13300;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311110;6;10151870;-111110;7;1;777777770.0;10;444444440;3.312423321241363e+170;6;1;777700;6;444400;3312421270.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--5790;4;4440;14513340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-170;3;640;-13350;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311020;6;6660320;-111010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31102100;8;666047600.0;-11101100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110720;7;66604320;-111033610;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-170;3;640;-13290;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107720;9;666604440.0;-11110241104.01;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11170;5;66640;-1113370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5790;4;4440;1463383390.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;3401710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-49;2;-44;341342;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;343;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111070;7;66666040;-111101920;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077770.0;11;6666604444.0;-11110103235344.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110770;8;666660440.0;-11110345192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--577777770.0;9;444444440;1.0412353462093471e+210;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31110777;8;222920444;-11110103150348.0;6;1;7777;4;4444;235349241143.0;6;1;2090;3;117040;-103500;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111077700.0;10;666660444.0;-11110351233.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;3013470;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1190;4;6640;-1135210;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17770;5;64440;-1328353347.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-477777070;9;444444040;354355124125356.06;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5740;4;4440;14713580;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4111;4;-4713;-107111;17;2;770;3;440;3593600;19;1;-311111111;9;-666681137.0;-111111111;26;2;77080;5;44000;361000;26;1;26;1;777;3;444;207362204
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31100;5;66600;-11100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--73100;5;46600;-3671100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311070;6;666040;-11101820;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-407;2;404;1070368;9;1;-311107770;9;666604440.0;-11110190124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;1;77770;5;44440;231105369104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;3700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111040.0;10;666666660.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101040.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111070;8;666666040.0;-1111101230.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111077.0;11;666666660.044;-11111110204104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11131111077.0;12;666666666.044;-111111110371104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11131111077.0;12;666666666.044;-111111110372104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311100;6;666600;-111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111070.0;10;666666600.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111070.0;10;666666600.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111070.0;10;666666660.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111111070.0;10;666666660.04;-11111110104.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110777.0;11;66666660444.0;-1111110104130373.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--531111100;9;4666666600.0;-1091111110.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5311111100.0;10;4666666666.0;-1091111111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777;3;444;374150266;6;1;-3111111077.0;11;666666666.044;-11111110129104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1777700;7;444400;-1105375326.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111110;8;1103409200.0;-11111110;7;1;77770;5;44440;227376104240.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311070;6;666040;-11101060;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311070;6;666040;-11101110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107770;9;666604440.0;-11110220221377.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110777.0;11;110310000444.0;-1111110378198.0;7;1;770;3;440;1993790;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111110;7;110310000;-1111110;7;1;79;2;-44;200120121380.0;6;1;777777770.0;10;4444444400.0;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--311107770;9;666604440.0;-11110106301104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311070;6;666040;-11101110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311100;6;10151100;-111100;17;1;7;1;4;243;17;2;870;3;640;2470;17;1;-41111108;8;-4154000034.0;-1301111100.0;17;2;770;3;440;2421270;28;1
-111;3;-14;-111;7;1;5511877777.0;11;4466644444.0;-1.4914911038738813e+230;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17;2;144;-1243;18;1;5511;4;-44353;-14915011;6;2;701580;5;4011460;-2430114900.0;7;1;-21187770;8;6664440;-1110243390129.0;7;0;0;0;0;0;0;0
-111;3;-1430;-111;7;1;-3111110;7;1061514430.0;-1111110;7;1;777777770.0;10;444444440;1.5410411032439115e+170;19;2;511175111;9;-4743441542.0;-1511111142.0111;19;1;261585009;10;149477148;3.923933943953961e+29;22;1
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq_names b/contrib/ML4PG/libs/ssreflect/basic/seq_names
deleted file mode 100644
index 9ad9bc21..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/seq_names
+++ /dev/null
@@ -1,394 +0,0 @@
-1 size0nil
-2 nilP
-3 size_behead
-4 size_ncons
-5 size_nseq
-6 cat0s
-7 cat1s
-8 cat_cons
-9 cat_nseq
-10 cats0
-11 catA
-12 size_cat
-13 rcons_cons
-14 cats1
-15 lastI
-16 last_cons
-17 size_rcons
-18 size_belast
-19 last_cat
-20 last_rcons
-21 belast_cat
-22 belast_rcons
-23 cat_rcons
-24 rcons_cat
-25 lastP
-26 last_ind
-27 nth0
-28 nth_default
-29 nth_nil
-30 last_nth
-31 nth_last
-32 nth_behead
-33 nth_cat
-34 nth_rcons
-35 nth_ncons
-36 nth_nseq
-37 eq_from_nth
-38 size_set_nth
-39 set_nth_nil
-40 nth_set_nth
-41 set_set_nth
-42 count_filter
-43 has_count
-44 count_size
-45 all_count
-46 filter_all
-47 all_filterP
-48 filter_id
-49 has_find
-50 find_size
-51 find_cat
-52 has_nil
-53 has_seq1
-54 has_seqb
-55 all_nil
-56 all_seq1
-57 nth_find
-58 before_find
-59 filter_cat
-60 filter_rcons
-61 count_cat
-62 has_cat
-63 has_rcons
-64 all_cat
-65 all_rcons
-66 eq_find
-67 eq_filter
-68 eq_count
-69 eq_has
-70 eq_all
-71 sub_find
-72 sub_has
-73 sub_count
-74 sub_all
-75 filter_pred0
-76 filter_predT
-77 filter_predI
-78 count_pred0
-79 count_predT
-80 count_predUI
-81 count_predC
-82 has_pred0
-83 has_predT
-84 has_predC
-85 has_predU
-86 all_pred0
-87 all_predT
-88 all_predC
-89 all_predI
-90 drop_behead
-91 drop0
-92 drop1
-93 drop_oversize
-94 drop_size
-95 drop_cons
-96 size_drop
-97 drop_cat
-98 drop_size_cat
-99 nconsK
-100 take0
-101 take_oversize
-102 take_size
-103 take_cons
-104 drop_rcons
-105 cat_take_drop
-106 size_takel
-107 size_take
-108 take_cat
-109 take_size_cat
-110 takel_cat
-111 nth_drop
-112 nth_take
-113 drop_nth
-114 take_nth
-115 rot0
-116 size_rot
-117 rot_oversize
-118 rot_size
-119 has_rot
-120 rot_size_cat
-121 rotK
-122 rot_inj
-123 rot1_cons
-124 catrev_catl
-125 catrev_catr
-126 catrevE
-127 rev_cons
-128 size_rev
-129 rev_cat
-130 rev_rcons
-131 revK
-132 nth_rev
-133 eqseqP
-134 eqseqE
-135 eqseq_cons
-136 eqseq_cat
-137 eqseq_rcons
-138 has_filter
-139 size_eq0
-140 in_cons
-141 in_nil
-142 mem_seq1
-143 mem_seq2
-144 mem_seq3
-145 mem_seq4
-146 mem_cat
-147 mem_rcons
-148 mem_head
-149 mem_last
-150 mem_behead
-151 mem_belast
-152 mem_nth
-153 mem_take
-154 mem_drop
-155 mem_rev
-156 hasP
-157 hasPn
-158 allP
-159 allPn
-160 mem_filter
-161 eq_in_filter
-162 eq_in_find
-163 eq_in_count
-164 eq_in_all
-165 eq_in_has
-166 eq_has_r
-167 eq_all_r
-168 has_sym
-169 has_pred1
-170 all_pred1P
-171 all_pred1_constant
-172 all_pred1_nseq
-173 constant_nseq
-174 constantP
-175 cons_uniq
-176 cat_uniq
-177 uniq_catC
-178 uniq_catCA
-179 rcons_uniq
-180 filter_uniq
-181 rot_uniq
-182 rev_uniq
-183 count_uniq_mem
-184 filter_pred1_uniq
-185 size_undup
-186 mem_undup
-187 undup_uniq
-188 undup_id
-189 ltn_size_undup
-190 filter_undup
-191 index_size
-192 index_mem
-193 nth_index
-194 index_cat
-195 index_uniq
-196 index_head
-197 index_last
-198 nth_uniq
-199 mem_rot
-200 eqseq_rot
-201 rot_to
-202 nthP
-203 has_nthP
-204 all_nthP
-205 set_nth_default
-206 headI
-207 nth_incr_nth
-208 size_incr_nth
-209 perm_eqP
-210 perm_eq_refl
-211 perm_eq_sym
-212 perm_eq_trans
-213 perm_eqlE
-214 perm_eqlP
-215 perm_eqrP
-216 perm_catC
-217 perm_cat2l
-218 perm_cons
-219 perm_cat2r
-220 perm_catAC
-221 perm_catCA
-222 perm_rcons
-223 perm_rot
-224 perm_rotr
-225 perm_filterC
-226 perm_eq_mem
-227 perm_eq_size
-228 perm_eq_small
-229 uniq_leq_size
-230 leq_size_uniq
-231 uniq_size_uniq
-232 leq_size_perm
-233 perm_uniq
-234 perm_eq_uniq
-235 uniq_perm_eq
-236 count_mem_uniq
-237 catCA_perm_ind
-238 catCA_perm_subst
-239 size_rotr
-240 mem_rotr
-241 rotr_size_cat
-242 rotr1_rcons
-243 has_rotr
-244 rotr_uniq
-245 rotrK
-246 rotr_inj
-247 rev_rot
-248 rev_rotr
-249 rot_addn
-250 rotS
-251 rot_add_mod
-252 rot_rot
-253 rot_rotr
-254 rotr_rotr
-255 mask_false
-256 mask_true
-257 mask0
-258 mask1
-259 mask_cons
-260 size_mask
-261 mask_cat
-262 has_mask_cons
-263 has_mask
-264 mask_rot
-265 mem_mask_cons
-266 mem_mask
-267 mask_uniq
-268 mem_mask_rot
-269 sub0seq
-270 subseq0
-271 subseqP
-272 subseq_trans
-273 subseq_refl
-274 cat_subseq
-275 prefix_subseq
-276 suffix_subseq
-277 mem_subseq
-278 sub1seq
-279 size_subseq
-280 size_subseq_leqif
-281 subseq_cons
-282 subseq_rcons
-283 subseq_uniq
-284 rem_id
-285 perm_to_rem
-286 size_rem
-287 rem_subseq
-288 rem_uniq
-289 mem_rem
-290 rem_filter
-291 mem_rem_uniq
-292 map_cons
-293 map_nseq
-294 map_cat
-295 size_map
-296 behead_map
-297 nth_map
-298 map_rcons
-299 last_map
-300 belast_map
-301 filter_map
-302 find_map
-303 has_map
-304 all_map
-305 count_map
-306 map_take
-307 map_drop
-308 map_rot
-309 map_rotr
-310 map_rev
-311 map_mask
-312 inj_map
-313 filter_mask
-314 filter_subseq
-315 subseq_filter
-316 subseq_uniqP
-317 perm_to_subseq
-318 map_f
-319 mapP
-320 map_uniq
-321 map_inj_in_uniq
-322 map_subseq
-323 nth_index_map
-324 perm_map
-325 mem_map
-326 index_map
-327 map_inj_uniq
-328 map_of_seq
-329 map_id
-330 eq_map
-331 map_comp
-332 mapK
-333 eq_in_map
-334 map_id_in
-335 map_pK
-336 size_pmap
-337 pmapS_filter
-338 pmap_filter
-339 eq_pmap
-340 mem_pmap
-341 can2_mem_pmap
-342 pmap_uniq
-343 size_pmap_sub
-344 mem_pmap_sub
-345 pmap_sub_uniq
-346 size_iota
-347 iota_add
-348 iota_addl
-349 nth_iota
-350 mem_iota
-351 iota_uniq
-352 size_mkseq
-353 eq_mkseq
-354 nth_mkseq
-355 mkseq_nth
-356 mkseq_uniq
-357 perm_eq_iotaP
-358 foldr_cat
-359 foldr_map
-360 sumn_nseq
-361 sumn_cat
-362 natnseq0P
-363 foldl_rev
-364 foldl_cat
-365 size_pairmap
-366 pairmap_cat
-367 nth_pairmap
-368 size_scanl
-369 scanl_cat
-370 nth_scanl
-371 scanlK
-372 pairmapK
-373 zip_unzip
-374 unzip1_zip
-375 unzip2_zip
-376 size1_zip
-377 size2_zip
-378 size_zip
-379 zip_cat
-380 nth_zip
-381 nth_zip_cond
-382 zip_rcons
-383 rev_zip
-384 size_flatten
-385 flatten_cat
-386 flattenK
-387 reshapeKr
-388 reshapeKl
-389 size_allpairs
-390 allpairs_cat
-391 allpairsP
-392 mem_allpairs
-393 allpairs_catr
-394 allpairs_uniq
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv b/contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv
deleted file mode 100644
index 27486f7c..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/seq_tactics.csv
+++ /dev/null
@@ -1,393 +0,0 @@
-0;0;0;0;0;-6;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;102103;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;105106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105108;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109105110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112113109;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--8;-100;-111;7;1;0;0;0;0;0;-6;0;-1;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;114115116;71111;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;120104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;122123124125.0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.021261271281291e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;-6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;120104132133.01341;1266;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.3813914014113813e+29;66666;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
-0;0;0;0;0;-4;0;-1;6;1;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;147148149150151.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104155;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;105159115;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;160159106;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;105162163164.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;105166167149.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;168104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;168104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160169;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170171;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;172171;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;173;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;177;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;172148151124.0;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;149104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160179;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160180;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;181182104182107.03;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;181182104182183.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170184;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170185;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;172184143;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;172185;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;187188189187.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;191192;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-7;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;194154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1195;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;196154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;-4;4444;198106199124.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;196200201;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202203155;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1204104;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;-10;-11;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;205206207110.01343;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;198209210211212.0;6662;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;-10;-11;7;1;-4;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;198209210211217.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;195218;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;204104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;195204115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;198106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;196194;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;162164162198.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;220221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222199223198.0;136;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;204195105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;225;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105226;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;227228104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;225229;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105230;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;227231104;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.0e+INF;776;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;16;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;237165104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-7;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444444;1.1323711023810424e+20;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;170160;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;241109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;242161104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;105243244164241.0;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109246247;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
--6;-6;-11;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109246249;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;247249104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;198243250;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;198243128129.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;18;1;0;0;0;0;0;-6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;227246241104.0;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;1719;2;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;247131;1719;2;8;80;11;1717;2;0;0;0;0;0;-4;0;100;17;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;110110111;222;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;-4;0;100;2;1
-0;0;0;0;0;-9;0;-1;77;2;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;4;149;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100100;77;2
-0;0;0;0;0;-15;0;-1;17177;3;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;-4;0;112;7;1;-4;44;149187247;1717;2;8;8080;111;17177;3;0;0;0;0;0;-4;0;100;17;1
-0;0;0;0;0;-11;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;149155238;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.3524710412413614e+17;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.0e+INF;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;113;7;1;0;0;0;0;0;-4;4;160138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;172140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;113;7;1;0;0;0;0;0;-4;4;141138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;110110;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;142142;7;1;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;114114;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;142143144145.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;110110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;117;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;1717;2;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;17;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;6;1;-6;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;143147;619;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;148147129;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;115;7;1;0;0;0;0;0;-4;0;150;7;1;8;80;11;77;2;0;0;0;0;0;-4;0;100;17;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.511522431531521e+20;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;154152155165149.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.1115615415616216e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105156;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;157158238;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;156198;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444444;2.2710515411014915e+23;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;241143160;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;161160162163.0;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;19;1;-6;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
--14;0;-1;18;1;-4;0;-1;66;2;-10;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;241104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;2;1;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;164163;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;21;1;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;155155157155.0;621;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;21;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;167;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;168173;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;168124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;169168;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;118;7;1;-4;44444;147202124170.0171;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;147;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;109172105173174.02;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-13;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;108109;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;175176175;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;198243164;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;-1;7;1;-11;0;-1;7;1;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;179143241195.0;677;3;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;17;1;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;1.811121131821122e+20;17;1;8;0;1;17;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;7222;3;0;0;0;0;0;-4;0;120;2;1;0;0;0;0;0;0;0;0;0;0;-4;0;185186;722;2;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-7;0;-1;66;2;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;133103133;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;102126187;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;676;3;0;0;-1;6;1;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;-4;4;1.891901701241602e+47;7766619;6;0;0;0;0;0;0;0;0;0;0;-4;0;100;17;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;121;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;23;1;0;0;0;0;0;0;0;0;0;0;-4;-4;121121;23;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;-110;-111;24;1;0;0;0;0;0;0;0;0;0;0;-4;0;121;2;1;-4;-4;121121;2424;2;0;0;0;0;0;-4;0;196;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;6;1;-4;0;123;7;1;0;0;0;0;0;-4;0;198;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;198196;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;124121;1212;2;0;0;0;0;0;0;0;0;0;0;-4;4;189107;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;121121109;66;2;-4;-44;0;6;1;0;0;0;0;0;-4;4;189199;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;198201;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;124;12;1;0;0;0;0;0;0;0;0;0;0;-4;44;111202201;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;124;12;1;0;0;0;0;0;0;0;0;0;0;-4;44;111203201;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105201;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;201198;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
-0;0;0;0;0;-4;0;-1;19;1;-10;0;-1;12;1;-4;0;124;12;1;0;0;0;0;0;0;0;0;0;0;-4;444;113205206207.0;1919;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-44;121;7;1;0;0;0;0;0;-4;44;168170196;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;121;7;1;0;0;0;0;0;-4;4;185196;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-11;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-444;125;7;1;0;0;0;0;0;-4;444;242147124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;2.222082092082422e+17;197;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;-4;-4;127114114;1919;2;0;0;0;0;0;-4;0;118;7;1;-4;444444;1.0e+INF;219191919;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;-21;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;-4;4444;148216124136.02173;19192;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;-220;-111;718;2;0;0;0;0;0;0;0;0;0;0;-4;0;1.0912812212911411e+17;25182020;4;0;0;0;0;0;0;0;0;0;0;-4;0;220150222223.0;251920;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;-4;444;113220224147.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--13;-151;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;114109;77;2;0;0;0;0;0;0;0;0;0;0;-4;4;162196;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;114109;22;2;-4;-44444;0;2;1;0;0;0;0;0;-4;4;162164;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--9;-1100;-1111;7;1;-10;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.151151981111241e+29;7772;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--9;-1100;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;232;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;222;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;209;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;106233223;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;234235;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;236;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;211;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;237122216238.0;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;14;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;2.4019823019924022e+17;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;2.4024323024424022e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.9824519819920025e+20;766;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--13;-13;-11;7;1;-9;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;2.3524822224923424e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;2.5022225125022225e+23;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;222254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;222254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;-250;-111;7;1;-6;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;255149;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;256257199258.0198;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;168124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;19;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104110;19;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;261209;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;262626;3;-6;0;-1;17;1;-4;0;115135111;662;3;0;0;0;0;0;-4;0;0;7;1;-4;44;2.6226326523021017e+26;1.7267192222226666e+21;17;8;80808080;11111;1717262626.0;5;0;0;0;0;0;0;0;0;0;0
--10;0;-1;24;1;-10;0;-1;1919;2;-10;0;-1;19;1;-4;0;136136;1919;2;0;0;0;0;0;-4;0;0;1919;2;-4;0;2.8028014710426528e+17;1919192626.0;5;8;80;11;2626;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;147;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;136;7;1;0;0;0;0;0;-4;0;0;77;2;-4;444;106257281282.0;26;1;8;0;1;26;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;115283284;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;114283284;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242284;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;256265151;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;128109;6;1;-4;0;137;7;1;-4;0;0;6;1;-4;4444;256265172185.02652;77;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;115105283;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143158;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.421431982062072e+17;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;19;1;-10;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;143;2;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;19;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;20;1
-0;0;0;0;0;-11;0;-1;6;1;-10;0;-1;7;1;-4;-4;139102;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;295168;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;140;7;1;0;0;0;0;0;-4;0;157;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;105296;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;155104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;296297298;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;300242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;227105296104.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;136;2;1;0;0;0;0;0;0;0;0;0;0;-4;4;301302;2;1;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;66;2;-10;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;238284104303.0;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;109109139141.0;619;2;0;0;0;0;0;0;0;0;0;0;-4;444;3.0530630730830926e+23;6196;3;0;0;0;0;0;0;0;0;0;0;-4;0;100100;76;2
-0;0;0;0;0;-11;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;3.1220717931310514e+20;72727;3;8;8080;111;72727;3;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-67;111;26;1;-4;0;-1;17;1;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;-4;0;0;26;1;-4;44;2.411432471121133e+17;171726;3;8;80;11;1726;2;0;0;0;0;0;-4;0;100;26;1
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;-4;0;142;19;1;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;8;0;1;19;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;-4;-4;142122;6;1;0;0;0;0;0;0;0;0;0;0;-4;4444;247249124;7;1;8;0;1;6;1;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;136;7;1;0;0;0;0;0;-4;0;0;7;1;-4;4;301318;26;1;8;0;1;26;1;0;0;0;0;0;0;0;0;0;0
-0;0;1;6;1;-11;0;-1;6;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;319247242143.0;76;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;121;7;1;-4;-4;121;7;1;0;0;0;0;0;-4;4;322323;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;143122;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;177104;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;139144;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;301326124125327.06;66;2;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;329;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;330;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.0e+INF;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;145;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;335;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-32;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-32;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;336;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;329;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;241104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;337;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;146;7;1;0;0;0;0;0;-4;0;338;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;340171;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;103235344;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;345192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;-4;44444;2.3534620934723312e+17;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;1.0315034823534925e+20;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;351233;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;301347;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;328353347;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;355124125356.0357;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;147;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;3.593603612073622e+29;192626196;5;8;80;11;2626;2;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;367;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;182;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;368190124;97;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;231105369104.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;370;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;123;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;204104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;371104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;372104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104130373;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;-4;0;109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;374150266129104.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;105375326;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;227376104240.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;220221377;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;378198199379.0;72;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.0037838119912837e+23;66;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;106301104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;111;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-10;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;2.4324724212738338e+26;17172828;4;8;80;11;1717;2;0;0;0;17;1;0;0;0;0;0
-0;-14;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;149149;6;1;0;0;0;0;0;0;0;0;0;0;-4;4444;387388143389145.0;6;1;8;0;1;6;1;0;0;0;0;0;0;0;0;0;0
--14;0;-1;18;1;1;0;-1;7;1;0;0;0;0;0;-4;-4;149150149;67;2;0;0;0;0;0;-4;0;0;7;1;-4;0;243243243390129.0;1877;3;8;80;11;77;2;0;0;0;0;0;0;0;0;0;0
--13;-130;-111;7;1;-4;0;-1;6;1;-10;0;-1;7;1;-4;0;151142149149.0;191966;4;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.5410411032439113e+173;1922;2;8;8080;111;6296;3;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv b/contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv
deleted file mode 100644
index d3f51ac1..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/seq_tree.csv
+++ /dev/null
@@ -1,393 +0,0 @@
-0;-6;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--900;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;0;100100;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;744;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--140;-4;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;-4;0;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;0;0;0;0;0;444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;100;0;0;0;0;0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-7;-6;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;100;0;0;0;0;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;-4;0;0;0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;-10;100100;0;0;0;4;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-15;-10;100;0;0;-4;44;111;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100;0;0;0;444444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;-44;0;0;444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;100;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;100;0;0;0;0;0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-10;0;100;0;-4;0;0;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;-4;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;-10;0;0;0;0;4444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;0;0;0;-4;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;0;0;-44;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;0;0;0;0;44;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100100;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;100;0;0;0;444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-7;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;44;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;100100100;0;-4;0;44444444444.0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1110;0;0;0;-4;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;-44;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;-4;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;0;0;0;-4;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100;-44;0;-4;44444444444.04;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--151;0;0;100;-44;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1520;0;0;100;-4;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;-44;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1451;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10100;-10;-6;0;0;0;0;4444444444.044;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10100;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;0;0;0;0;0;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--143;-9;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1450;-6;-10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;0;0;0;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-10;100;0;0;0;44;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-6;100;-4;0;0;44444444444444.055;11111;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--10;-10;-10;0;-4;0;0;4444;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;0;0;-44;-4;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;-10;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;0;-44;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-10;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100100;-4;0;0;44444444;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;0;0;0;0;0;4444;111;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--667;-4;-10;100;0;0;0;44444444;11;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100;-4;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100100;-44;0;0;4444;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-10;100100;0;0;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;-4;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-44;0;0;4444444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;4444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-32;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-32;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;-2;0;0;0;0;44444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;444444444444.0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;0;0;0;0;4444444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-10;100;0;0;0;44444;11;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;0;0;0;-44;0;0;4444;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;1;0;0;-44;0;0;44;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1430;-4;-10;100100;-4;0;0;4444444444444444.0;111;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv
deleted file mode 100644
index edd1bd1e..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrbool.csv
+++ /dev/null
@@ -1,236 +0,0 @@
-1170;4;6640;-1110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;102103;12;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;104103;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;105103;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20020;4;670060;-10010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5510;4;4400;-10210310;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5510;4;4400;-10410310;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5510;4;4400;-10510610;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5510;4;4400;-10410710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5510;4;4400;-10810910;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2070;4;3040;-101060;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;30;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;30;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;30;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;30;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;380;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;380;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-720;3;480;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-720;3;480;-110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;80;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21111120;8;877677660.0;-11111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5720;4;4430;-110110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7420;4;4430;-110710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-79;2;-44;144108;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-79;2;-44;144109;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;110111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;110112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;113111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;113112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;114111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;114112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;115111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;115112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;116111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;116112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;117111;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;117112;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;800;-100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-290;3;40;1180;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;600;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1520;4;6460;-111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-29;2;-4;119112120121.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;80;-10;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;390;-10;15;0;90;2;40;119112120122.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1420;4;64100;-1123112124125.01;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2070;4;38040;-101060;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-90;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1025;4;-4064;-101112;5;1;1110;4;11800;-1110;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1111114590.0;10;666060440.0;-1111111113.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-110440;6;660440;-1101126127.0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--111104512;9;-1334404415.016;-1111011131.01;7;1;-41290;5;461640;-11110;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111042;6;-12270416;-111011;7;1;480;3;460;100;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;40;-10;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;40;-10;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;40;-10;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;40;-10;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;128;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-222020;6;3330760;-111010;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2222020;7;33330760;-1111010;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22222020;8;333330760;-11111010;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;300;-100;9;1;200;3;300;-100;9;1;200;3;300;-100;9;1;20;3;0;0;9;0;0;0;0;0;0;0
-200;3;300;-100;9;1;200;3;300;-100;9;1;200;3;300;-100;9;1;200;3;300;-100;9;1;20;3;0;0;21;0
-22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22020;5;33000;-11000;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2200;4;3300;-1100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-22000;4;667000;-11000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-222000;5;6667000;-111000;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;34;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;33;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;35;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;36;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;37;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;38;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2200;4;6600;-1100;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-150;3;740;-11500;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-150;3;740;-11500;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7211100;7;4186766666.0;-111100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1290;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;677000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;41;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1290;42;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;-10;43;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111559;6;-666444;-1111221221.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111554770.0;11;666644444.0;-1111122122.013131;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11115770;8;66664440;-1111115131132.0;45;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-8;1;77770;5;44440;133112113133.0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11111190;8;66666640;-1111111110.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1159;4;-6644;-111161;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1111559;7;-6666444;-1111116117.01;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1111115559.0;11;666666444.04;-111111116117118.02;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11590;5;66440;-1111710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11590;5;66440;-1111710;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11115590;8;66664440;-1111117117.01;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--111557770;9;666444440.0;-111119119111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--111557770;9;666444440.0;-111119119111.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;66440;-1111340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211181110;9;6666666777.0;-111111110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--181590;6;666440;-1.1112013411212013e+170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--181590;6;666440;-1.1112013411212013e+170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1090;4;40;-101360;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1090;4;40;-101370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11090;5;66040;-1101370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11090;5;66040;-1101370;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;138;7;1;77770;5;44440;133112113133.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11170;5;66640;-1111390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111170;6;666640;-11111390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--111570;6;666440;-1111211400.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--111570;6;666440;-1111211400.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111200;6;21120000;-1111100;7;1;4070;3;4040;14101400;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111401420.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111401420.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1110770;7;6660440;-1110142140.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11111170;8;66666640;-1111111390.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111170;6;666640;-11111390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1111157704.0;11;666664440.0;-11111121143.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1111157704.0;11;666664440.0;-11111121143.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111112009.0;9;-2332242000.04;-111111100144.0;7;1;4077040;6;4044000;1410143000.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111177700.0;10;666664440.0;-11111143142.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111177700.0;10;666664440.0;-11111143142.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111107770.0;11;666660444.0;-111110142143.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_names b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_names
deleted file mode 100644
index 6b406acf..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_names
+++ /dev/null
@@ -1,236 +0,0 @@
-1 prop_congr
-2 is_true_true
-3 not_false_is_true
-4 is_true_locked_true
-5 negbT
-6 negbTE
-7 negbF
-8 negbFE
-9 negbK
-10 negbNE
-11 negb_inj
-12 negbLR
-13 negbRL
-14 contra
-15 contraL
-16 contraR
-17 contraLR
-18 contraT
-19 wlog_neg
-20 contraFT
-21 contraFN
-22 contraTF
-23 contraNF
-24 contraFF
-25 ifP
-26 ifPn
-27 if_same
-28 if_neg
-29 fun_if
-30 if_arg
-31 ifE
-32 introNTF
-33 introTF
-34 elimNTF
-35 elimTF
-36 equivPif
-37 xorPif
-38 introTFn
-39 elimTFn
-40 equivPifn
-41 xorPifn
-42 introT
-43 introF
-44 introN
-45 introNf
-46 introTn
-47 introFn
-48 elimT
-49 elimF
-50 elimN
-51 elimNf
-52 elimTn
-53 elimFn
-54 introP
-55 iffP
-56 equivP
-57 sumboolP
-58 appP
-59 sameP
-60 decPcases
-61 rwP
-62 rwP2
-63 altP
-64 bind_unless
-65 unless_contra
-66 classicP
-67 classic_bind
-68 classic_EM
-69 classic_imply
-70 classic_pick
-71 all_and2
-72 all_and3
-73 all_and4
-74 all_and5
-75 idP
-76 boolP
-77 idPn
-78 negP
-79 negPn
-80 negPf
-81 andP
-82 and3P
-83 and4P
-84 and5P
-85 orP
-86 or3P
-87 or4P
-88 nandP
-89 norP
-90 implyP
-91 andTb
-92 andFb
-93 andbT
-94 andbF
-95 andbb
-96 andbC
-97 andbA
-98 andbCA
-99 andbAC
-100 andbACA
-101 orTb
-102 orFb
-103 orbT
-104 orbF
-105 orbb
-106 orbC
-107 orbA
-108 orbCA
-109 orbAC
-110 orbACA
-111 andbN
-112 andNb
-113 orbN
-114 orNb
-115 andb_orl
-116 andb_orr
-117 orb_andl
-118 orb_andr
-119 andb_idl
-120 andb_idr
-121 andb_id2l
-122 andb_id2r
-123 orb_idl
-124 orb_idr
-125 orb_id2l
-126 orb_id2r
-127 negb_and
-128 negb_or
-129 andbK
-130 andKb
-131 orbK
-132 orKb
-133 implybT
-134 implybF
-135 implyFb
-136 implyTb
-137 implybb
-138 negb_imply
-139 implybE
-140 implyNb
-141 implybN
-142 implybNN
-143 implyb_idl
-144 implyb_idr
-145 implyb_id2l
-146 addFb
-147 addbF
-148 addbb
-149 addbC
-150 addbA
-151 addbCA
-152 addbAC
-153 addbACA
-154 andb_addl
-155 andb_addr
-156 addKb
-157 addbK
-158 addIb
-159 addbI
-160 addTb
-161 addbT
-162 addbN
-163 addNb
-164 addbP
-165 subrelUl
-166 subrelUr
-167 sub_refl
-168 mem_topred
-169 topredE
-170 app_predE
-171 in_applicative
-172 in_collective
-173 in_simpl
-174 unfold_in
-175 simpl_predE
-176 mem_simpl
-177 mem_mem
-178 qualifE
-179 keyed_predE
-180 symmetric_from_pre
-181 sym_left_transitive
-182 sym_right_transitive
-183 equivalence_relP
-184 rev_trans
-185 forE
-186 in1W
-187 in2W
-188 in3W
-189 in1T
-190 in2T
-191 in3T
-192 sub_in1
-193 sub_in11
-194 sub_in111
-195 on1W
-196 on1lW
-197 on2W
-198 on1T
-199 on1lT
-200 on2T
-201 subon1
-202 subon1l
-203 subon2
-204 can_in_inj
-205 canLR_in
-206 canRL_in
-207 on_can_inj
-208 canLR_on
-209 canRL_on
-210 inW_bij
-211 onW_bij
-212 inT_bij
-213 onT_bij
-214 sub_in_bij
-215 subon_bij
-216 sub_in2
-217 sub_in3
-218 sub_in12
-219 sub_in21
-220 equivalence_relP_in
-221 monoW
-222 mono2W
-223 homoRL
-224 homoLR
-225 homo_mono
-226 monoLR
-227 monoRL
-228 can_mono
-229 monoW_in
-230 mono2W_in
-231 homoRL_in
-232 homoLR_in
-233 homo_mono_in
-234 monoLR_in
-235 monoRL_in
-236 can_mono_in
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv
deleted file mode 100644
index 4e875323..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tactics.csv
+++ /dev/null
@@ -1,236 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;12;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;102103;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;104103;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;105106;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;104107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;108109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;13;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;13;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;13;1;0;0;0;0;0;0;0;0;13;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;144;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;144;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-3;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;-8;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-6;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
--6;0;-1;7;1;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-8;0;-1;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;8;1
--6;0;-1;7;1;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;106;16;1;0;0;0;0;0;0;0;0;16;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4;0;-1;5;1;-6;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;1120;517;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;1;0;0;0;0;0
--6;-66060;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;5;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;-1344;-1111;7;1;-16;0;-1;72;2;0;0;0;0;0;0;0;0;0;0;-4;-4;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
--12;-27;-111;7;1;-16;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;2;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;16;1
-0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;9999;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;99999;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;212121212121.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;21;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;999;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9999999;7;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;9999;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9999999921.0;9;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
-0;0;0;0;0;-3;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;23;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;777;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;99;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;1;0;0;0;0;0
--7;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;-4;0;150;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;-4;0;150;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;40;1;0;0;0;0;0
-0;0;0;0;0;-18;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;41;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;42;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;-1;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-666;-1111;44;1;0;0;0;0;0;0;0;0;0;0;-4;-4;122122;44;1;0;0;0;0;0;0;0;0;0;0;-4;4;131;44;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;45;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;131132;45;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;133112113133.0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66666;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-66666;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;120;7;1;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;120;7;1;0;0;0;0;0;0;0;0;0;0;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;133112113133.0;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--19;-2120;-1111;7;1;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;140142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;140142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;142140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66666;-111111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;139;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21;-232242;-111111;7;1;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;143;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;143142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;143142;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6666;-11111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;142143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv
deleted file mode 100644
index 2a61f4cb..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrbool_tree.csv
+++ /dev/null
@@ -1,236 +0,0 @@
-0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;100;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-10;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4;-6;0;0;0;-4;0;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666060;0;0;100;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13344;-16;0;100100;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1227;-16;0;100100;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9999999;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9999999921.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;41;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;-44;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;100;-44;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;-4;0;0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;-4;0;0;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21120;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2332242;0;0;100;0;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv
deleted file mode 100644
index 77e27515..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrnat.csv
+++ /dev/null
@@ -1,326 +0,0 @@
-110;3;660;-110;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1140;3;2240;-111020;12;1;-311100;6;6666600;-111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;103;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1530;4;6460;-110910;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1113107770.0;10;666660444.0;-111110104124.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117770;6;664440;-11103181103.0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1117770;7;6664440;-111107181107.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111821070.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111770;7;6666440;-1111182181.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1071050;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111147770;9;666644440.0;-1111106105107108.0;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11174;5;-66644;-111107109;21;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;23;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;2;67700;-100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;2;67700;-100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1071100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1777700;7;6444400;-1103110232.0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177700;6;644400;-110721200;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;111;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311190;6;6666640;-1111112113.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111141070.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1261141290.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1150;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-2000;3;67000;-1000;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;116;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111090;7;66666040;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1501540;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311109;6;-6666604;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117770;6;664440;-111481240;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;148187164150.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;1481191240.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--570;3;440;1021430;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311109;6;-6666604;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777770;6;444440;150120121119143.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111090;8;666666604.0;-111110192122123.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-19;2;-64;-1124;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;124;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-190;3;40;-12010;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1590;4;440;-11031240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77590;5;44440;125150104201.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4310;4;4220;-102110;9;1;-3112;4;-2282;-1111;7;1;77770;5;44440;1202021240.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0
--31111110;8;2242970070.0;-11111110;6;1;6;1;6;1;-2111111;7;-600700600600.0;-1111111;5;4;70;2;40;1260;6;3;-5770;4;4440;1051272330.0;6;2;-5770;4
-9;1;-4;128;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-72077700;8;44044400;-15010150129.0;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7200;4;4900;-202100;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;3;600;-100;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7720;4;4490;-20614810;28;1;772090;6;449040;-12016410106.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-30;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-790;3;440;1041300;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-790;3;440;1071300;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;131123132118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1170;4;40;-111330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1031300;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1072130;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--50790;5;40440;107012130;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--50790;5;40440;107011340;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1351871360.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111090;7;66666040;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1371140;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1381340;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311100;6;6666600;-111100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-790;3;440;1071390;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-17770;5;4440;-1234182140.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;440;-12341410;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;10812120;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;1301240;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--50;2;40;1100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1777700;7;444400;-1138124138.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;4;131;7;1;470;3;440;1241380;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--55140;5;44040;-1111121124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5790;4;4440;113100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5790;4;4440;11311420;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1501380;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2107770;7;97004440;-110234143140.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11720;5;66490;-11010;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77200;4;449700;-107100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111777770;9;666444440.0;-1.1112818211412814e+170;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111441450.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111391440.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111770;7;6666440;-1111139142.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777740;6;444440;137105103128.0106;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;1441460;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-150;3;640;-11150;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;2;11177740;8;100044400;-111113144164.0;7;1;7777700;7;4444400;1461471240.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1481540;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1441490;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1501481210.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2021500;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1280;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1117770;7;6664440;-111128141151.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111071520.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11720;5;66490;-11010;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7720090;7;44970040;-1001070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777770;6;444440;110128153140154.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11177777777.0;12;66644444444.0;-1.1115511415612815e+260;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1117770;7;6664440;-111154157154.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111581540.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111770;7;6666440;-1111158159.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;160105143153161.0;9;1;9;1;-4;106;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-740;3;440;1541620;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-150;3;640;-11170;29;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-6;2;1117770;7;10074440;-111113154149.0;7;1;777770200.0;9;4444409700.0;-1501631490.01;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1501641870.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2021650;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1661540;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1541670;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11177770;8;66644440;-111155110168169.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111071700.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;1700;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;118;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;119;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;120;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;121;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111;3;-222;-111;30;2;1611;4;-949;-112211;7;2;770;3;440;1541540;7;1;755;3;-444;171139123;6;1;77770;5;44440;172173148174.0;2;0
-111770;6;666440;-1111441750.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1117777770.0;10;666444444.0;-1.1117617515814013e+200;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111541780.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7;1;7;2;-2173111;7;-11722422292.0;-111031111;33;2;79;2;-44;235192;7;1;-128;3;-242;-110;7;1;-41127;5;428124;-179132111180.0;7;1;77702000;7
-720;3;400;-10;34;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2118770;7;1176666644.0;-1110182183.0;35;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--72111;5;-47280280;-1111;36;1;2;1;777770;6;444440;137184124169.0;2;1;7770;4;4440;1071841830.0;2;0;0;0;0;0;0;0;0;0;0;0
--121112111;9;-1472802807280.028;-111111111;7;1;57777700;8;44444400;109148185186187.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--121112111;9;-1472802807280.028;-111111111;7;1;577777700.0;9;444444400;1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11131070;8;6666040;-1111101900.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11131070;8;6666040;-1111101900.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11420;5;6400;-1119100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;103;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;107;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--310777770;9;660444440.0;-110192143181124.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1071930;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;6440;-11941950;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1131777770.0;11;666644444.0;-1111196192124.0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1113110770.0;10;666666044.0;-1111110182117.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111971980.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-117;3;224;-11195;30;1;-311107770;10;666660444.0;-11110192110117.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111971990.0;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1113107777.0;11;6666604444.0;-111110192198124.0;17;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1112001970.0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1112001970.0;18;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1111770;7;6666440;-1111200201.0;19;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211070;7;667666040.0;-11101950;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211070;6;667776604.0;-11101950;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--211070;7;667666040.0;-11101950;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5790;4;4440;12612130;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--570;3;440;1271970;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2022030;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1972040;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-114;3;-4;-11205;7;2;7770;4;4440;2042062070.0;2;1;7770;4;4440;2082092070.0;2;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;148204210148.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;148208210148.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;12612040;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;12612080;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;12612110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;12612120;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;135150204121.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;135150208121.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;12612130;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5770;4;4440;12612140;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;60440;-112152160;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-11770;5;60440;-111972170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-114;3;-4;-11218;7;2;7770;4;4440;2041642010.0;2;1;77700;5;44400;21612400;2;0;0;0;0;0;0;0;0;0;0;0;0;0
--21110770;8;666666044.0;-111101550;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111972190.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21110770;8;666666044.0;-111101550;31;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-111770;6;666440;-1111972200.0;30;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-270;3;640;-12210;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1972220;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;2;67700;-100;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--310770;6;660440;-1102222150.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311777700;9;666444400.0;-111223192200.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311077770;9;666044440.0;-1110222192200201.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3117;4;2354;-111224;6;1;77770;5;44440;225222226192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2271970;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2131107777.0;12;67666604444.0;-111110222228192.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77770;5;44440;229230121135.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13107;5;2204;-1110231;7;1;490;3;440;1242170;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--131110;6;222920;-111110;7;3;7777700;7;4444400;222231192201.0;6;2;770;3;440;2302010;6;1;777777770.0;11;4444444400.0;1.0e+INF;6;0;0;0;0;0;0;0
-1770;4;440;-11502330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;440;-11482330;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1115777700.0;10;664444400.0;-111109234124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21077770;8;677604444.0;-110224112113235.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21077770;8;677604444.0;-110224112113236.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1551;4;-446;-11221221;7;2;-741;3;-448;-1502371;7;2;-3110770;7;2260440;-1110222238.0;2;1;-3110777770.0;12;6066044444.0;-1110239240241.0;2;0;0;0;0;0;0;0
-1777700;7;444400;-1119242119.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;440;-11482430;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1115777700.0;10;664444400.0;-111109244124.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311070;6;666040;-11102450;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-220;3;660;-110;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311077770;9;666044440.0;-1110246192247246.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-14770;5;4440;-1248249250234.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1170;4;6040;-112510;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311077770;9;666044440.0;-1110250246252117.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3110777720.0;10;666044442.0;-1110222253192164.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--4311070;7;4666040;-1061110104.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1922152540.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1972550;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2541821810.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311109;6;-6666604;-11110117118.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7720;4;4440;-25610;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2572580;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2592580;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;1192601190.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7770;4;4440;2542502610.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-20;2;60;-10;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2552000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2622000;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;0;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3100;4;6600;-1100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--310770;6;660440;-1101821830.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3107720;7;6604440;-1102632641.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-27700;5;64400;-126500;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-77777;5;44444;266181266182264.0;6;1;2777700;7;2444400;-1147267268.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--577770;6;444440;1291269182134.0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-200;2;67700;-100;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;2222210;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-777777;6;444444;2.702552711981972e+17;6;1;7770;4;4440;1822541070.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--517777;6;404444;-1291272273182151.0;7;1;77777770;8;44444440;2.7425425527119826e+200;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177777;6;44444;-1275200255254114.0;7;1;7770;4;4440;2731402760.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-7777770;7;4444440;1.9927110719711027e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2420;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2430;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;277;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-70;2;40;2440;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;278;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--74172;5;-44643;-2061021279.01;9;1;2090;3;677040;-101080;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-40070;4;40040;102001080;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1157;4;17644;-11130280;7;1;2;1;-4;-1;37;2;777720;6;444430;-106206281282.01;37;1;77777700;8;44444400;133281206283280.0;37;0;0;0;0;0;0;0
-1111;4;-223;-1111;7;1;57777770;8;44444440;1.3014815028428527e+200;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;6440;-11482880;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;2;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21770;5;440;-111482890;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1770;4;440;-11502900;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--5;1;-4;131;7;1;9;1;-4;291292;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--1121;4;176970;-1111;7;2;-751117;6;44664;-293132111203.0;38;2;-1721107790.0;10;13422722044.04;-111110113195.0133;7;1;777;3;444;245124;7;1;38;2;57777777;8;44444444;1.3029414914314811e+23
-38;2;27770;5;44440;-1143107197.0;7;1;-521777;6;4970444;-13011270254255.0;38;1;777777770.0;10;4444444400.0;1.0e+INF;37;0;0;0;0;0;0;0;0;0;0;0
-777775;6;-444444;275200255254273.0;38;1;7777200;6;44449700;-300161206301.01;37;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-770;3;440;1922350;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--210770;6;660440;-1102543020.0;40;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--311111107777.0;13;666766704444.0;-1.111111019230218e+190;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2110770;7;66660440;-1110303107.0;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--3111117777777.0;15;6667674444444.0;-1.0e+INF;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-107770;6;604440;-10305222197.0;39;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-177;3;244;-1266107;40;1;30020;4;60040;-10010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-1140200;5;1874017700.0;-111020100;12;1;22000170;6;667000640.0;-11000110;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-10;1;-2107;4;2204;-110306;10;1;-3111077770.0;12;6666604444.0;-11110117307306.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--200210;5;7220;-100110;10;2;77730;5;44420;-3071042541.0;6;1;77777030;8;44444060;-307104104254.01;6;0;0;0;0;0;0;0;0;0;0;0;0;0
--31070;5;66040;-1103070;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-4;1;-4;308309;6;1;-31111077077777.0;14;666666044.044444;-1111103070.0310113;41;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--21109;5;-6676604;-1110314;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2110311107777777.0;17;6676606666.044444;-1.1101111031011322e+260;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2109;4;-671804;-110316;6;1;-310777770;9;660444440.0;-1.1030727022726222e+170;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;3.171471071822153e+26;42;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11570;5;440;-1112610;43;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-9;1;-4;319;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_names b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_names
deleted file mode 100644
index 829f9c28..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_names
+++ /dev/null
@@ -1,326 +0,0 @@
-1 succn_inj
-2 eqnP
-3 eqnE
-4 eqSS
-5 nat_irrelevance
-6 addnE
-7 plusE
-8 add0n
-9 addSn
-10 add1n
-11 addn0
-12 addnS
-13 addSnnS
-14 addnCA
-15 addnC
-16 addn1
-17 addnA
-18 addnAC
-19 addnACA
-20 addn_eq0
-21 eqn_add2l
-22 eqn_add2r
-23 addnI
-24 addIn
-25 addn2
-26 add2n
-27 addn3
-28 add3n
-29 addn4
-30 add4n
-31 subnE
-32 minusE
-33 sub0n
-34 subn0
-35 subnn
-36 subSS
-37 subn1
-38 subn2
-39 subnDl
-40 subnDr
-41 addKn
-42 addnK
-43 subSnn
-44 subnDA
-45 subnAC
-46 subnS
-47 subSKn
-48 ltnS
-49 leq0n
-50 ltn0Sn
-51 ltn0
-52 leqnn
-53 ltnSn
-54 eq_leq
-55 leqnSn
-56 leq_pred
-57 leqSpred
-58 ltn_predK
-59 prednK
-60 leqNgt
-61 ltnNge
-62 ltnn
-63 leqn0
-64 lt0n
-65 lt0n_neq0
-66 eqn0Ngt
-67 neq0_lt0n
-68 eqn_leq
-69 anti_leq
-70 neq_ltn
-71 gtn_eqF
-72 ltn_eqF
-73 leq_eqVlt
-74 ltn_neqAle
-75 leq_trans
-76 leq_ltn_trans
-77 ltnW
-78 leqW
-79 ltn_trans
-80 leq_total
-81 leP
-82 le_irrelevance
-83 ltP
-84 lt_irrelevance
-85 leqP
-86 ltnP
-87 posnP
-88 ltngtP
-89 leq_add2l
-90 ltn_add2l
-91 leq_add2r
-92 ltn_add2r
-93 leq_add
-94 leq_addr
-95 leq_addl
-96 ltn_addr
-97 ltn_addl
-98 addn_gt0
-99 subn_gt0
-100 subn_eq0
-101 leq_subLR
-102 leq_subr
-103 subnKC
-104 subnK
-105 addnBA
-106 subnBA
-107 subKn
-108 subSn
-109 subnSK
-110 leq_sub2r
-111 leq_sub2l
-112 leq_sub
-113 ltn_sub2r
-114 ltn_sub2l
-115 ltn_subRL
-116 subn_if_gt
-117 max0n
-118 maxn0
-119 maxnC
-120 maxnE
-121 maxnAC
-122 maxnA
-123 maxnCA
-124 maxnACA
-125 maxn_idPl
-126 maxn_idPr
-127 maxnn
-128 leq_max
-129 leq_maxl
-130 leq_maxr
-131 gtn_max
-132 geq_max
-133 maxnSS
-134 addn_maxl
-135 addn_maxr
-136 min0n
-137 minn0
-138 minnC
-139 addn_min_max
-140 minnE
-141 minnAC
-142 minnA
-143 minnCA
-144 minnACA
-145 minn_idPl
-146 minn_idPr
-147 minnn
-148 leq_min
-149 gtn_min
-150 geq_min
-151 geq_minl
-152 geq_minr
-153 addn_minr
-154 addn_minl
-155 minnSS
-156 maxnK
-157 maxKn
-158 minnK
-159 minKn
-160 maxn_minl
-161 maxn_minr
-162 minn_maxl
-163 minn_maxr
-164 find_ex_minn
-165 ex_minnP
-166 ex_maxn_subproof
-167 ex_maxnP
-168 eq_ex_minn
-169 eq_ex_maxn
-170 iterSr
-171 iterS
-172 iter_add
-173 iteriS
-174 iteropS
-175 eq_iter
-176 eq_iteri
-177 eq_iterop
-178 multE
-179 mulnE
-180 mul0n
-181 muln0
-182 mul1n
-183 mulSn
-184 mulSnr
-185 mulnS
-186 mulnSr
-187 muln1
-188 mulnC
-189 mulnDl
-190 mulnDr
-191 mulnBl
-192 mulnBr
-193 mulnA
-194 mulnCA
-195 mulnAC
-196 mulnACA
-197 muln_eq0
-198 muln_eq1
-199 muln_gt0
-200 leq_pmull
-201 leq_pmulr
-202 leq_mul2l
-203 leq_mul2r
-204 leq_mul
-205 eqn_mul2l
-206 eqn_mul2r
-207 leq_pmul2l
-208 leq_pmul2r
-209 eqn_pmul2l
-210 eqn_pmul2r
-211 ltn_mul2l
-212 ltn_mul2r
-213 ltn_pmul2l
-214 ltn_pmul2r
-215 ltn_Pmull
-216 ltn_Pmulr
-217 ltn_mul
-218 maxn_mulr
-219 maxn_mull
-220 minn_mulr
-221 minn_mull
-222 expnE
-223 expn0
-224 expn1
-225 expnS
-226 expnSr
-227 exp0n
-228 exp1n
-229 expnD
-230 expnMn
-231 expnM
-232 expnAC
-233 expn_gt0
-234 expn_eq0
-235 ltn_expl
-236 leq_exp2l
-237 ltn_exp2l
-238 eqn_exp2l
-239 expnI
-240 leq_pexp2l
-241 ltn_pexp2l
-242 ltn_exp2r
-243 leq_exp2r
-244 eqn_exp2r
-245 expIn
-246 factE
-247 fact0
-248 factS
-249 fact_gt0
-250 leq_b1
-251 addn_negb
-252 eqb0
-253 lt0b
-254 sub1b
-255 mulnb
-256 oddb
-257 odd_add
-258 odd_sub
-259 odd_opp
-260 odd_mul
-261 odd_exp
-262 doubleE
-263 double0
-264 doubleS
-265 addnn
-266 mul2n
-267 muln2
-268 doubleD
-269 doubleB
-270 leq_double
-271 ltn_double
-272 ltn_Sdouble
-273 leq_Sdouble
-274 odd_double
-275 double_gt0
-276 double_eq0
-277 doubleMl
-278 doubleMr
-279 doubleK
-280 uphalf_double
-281 uphalf_half
-282 odd_double_half
-283 half_bit_double
-284 halfD
-285 half_leq
-286 half_gt0
-287 mulnn
-288 sqrnD
-289 sqrn_sub
-290 sqrnD_sub
-291 subn_sqr
-292 ltn_sqr
-293 leq_sqr
-294 sqrn_gt0
-295 eqn_sqr
-296 sqrn_inj
-297 leqifP
-298 leqif_refl
-299 leqif_trans
-300 monotone_leqif
-301 leqif_geq
-302 leqif_eq
-303 geq_leqif
-304 ltn_leqif
-305 leqif_add
-306 leqif_mul
-307 nat_Cauchy
-308 nat_AGM2
-309 addE
-310 doubleE
-311 add_mulE
-312 mulE
-313 mul_expE
-314 expE
-315 oddE
-316 eq_binP
-317 bin_of_natK
-318 nat_of_binK
-319 nat_of_succ_gt0
-320 nat_of_addn_gt0
-321 nat_of_add_bin
-322 nat_of_mul_bin
-323 nat_of_exp_bin
-324 nat_semi_ring
-325 nat_semi_morph
-326 nat_power_theory
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv
deleted file mode 100644
index 26c705fa..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tactics.csv
+++ /dev/null
@@ -1,326 +0,0 @@
--6;-6;-11;11;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-2;-11;12;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;13;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
--6;0;-1;14;1;0;0;0;0;0;-6;0;-1;14;1;-4;0;109;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;15;1;0;0;0;0;0;-6;0;-1;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104124;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;103181103;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107181107;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182107;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182181;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;105107108;20;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;21;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;103110232;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107212;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114107;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;126114129;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150154;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--6;-6;-11;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;148124;24;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148187164150.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148119124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;7;1;0;0;0;0;0;-4;0;143;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;150120121119143.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;2;1;0;0;0;0;0;0;0;0;0;0;-4;4;125150;2;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;2;1
-0;0;0;0;0;-2;0;-1;7;1;-2;0;-1;97;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;120202124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;56;2;-2;0;-1;6;1;0;0;0;0;0;-4;0;105105;66;2;0;0;0;0;0;-4;0;1.2612723312723312e+17;6666;4;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;25;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;150150129;2525;2;0;0;0;0;0;0;0;0;25;1;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;26;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;202;26;1;0;0;0;0;0;0;0;0;26;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;27;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;27;1;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;287;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;206148120164.0;287;2;0;0;0;0;0;0;0;0;287;2;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;133;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;103130;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107213;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;135187136;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;137114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;138134;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;107;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;234182140;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;234141;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;-4;0;212;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;130124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;110;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;138124138;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;131138;77;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;111112;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150138;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;234143140;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;14;1;0;0;0;0;0
--6;-6;-11;16;1;-9;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;128182114128144.0;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;144145;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;139144;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;139142;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;137105103128.0;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;144;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;0;115;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;1.1314416414614712e+17;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148154;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;144149;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;150148121;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202150;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;128;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;128141151;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107152;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;32;1;0;0;0;0;0
--6;-6;-11;16;1;-9;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;110128153140154.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444444;1.5511415612814413e+23;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;154157154;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;158154;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;158159;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;160105143153161.0;9;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;9;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;154;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;29;1;0;0;0;0;0;0;0;0;0;0;-4;0;117;29;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;-4;44;1.1315414915016315e+17;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;150164187;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202165;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;166154;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;154167;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;155110168169.0;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107170;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;170;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--2;-22;-111;307;2;0;0;0;0;0;0;0;0;0;0;-4;-4;139123;6;1;0;0;0;0;0;-4;0;122;7;1;-4;4;1.5415417117217315e+20;762;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;144175;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.761751581401442e+17;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;154178;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;0;1;7;1;-11;0;-1;33772;4;-2;0;-1;33;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103235180206181.0;33772;4;8;0;1;7;1;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;-1;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;34;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-11;0;-1;35;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182183;35;1;8;0;1;35;1;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;-1;36;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;137184124169.01071;3622;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;0;-1;7;1;0;0;-1;77;2;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;4444;148185186187.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;0;-1;7;1;0;0;-1;77;2;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;0;0;0;0;0;-4;44444;148188187189187.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;190;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-66;-111;7;1;0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;190;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;22;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;13;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;192143181124.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;107193;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;194195;14;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-6;-11;16;1;0;0;0;0;0;-6;0;-1;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;196192124;16;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;30;1;0;0;0;0;0;-6;0;-1;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182117;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197198;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-2;-11;30;1;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195192110117.0;306;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197199;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;17;1;0;0;0;0;0;-6;0;-1;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;192198124;17;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;200197;15;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;200197;18;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-666;-1111;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;200201;19;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;195;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;127;7;1;0;0;0;0;0;-4;0;197;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;202203;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197204;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;2.042062072082092e+17;22;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148204210148.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;148208210148.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;204;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;208;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;211;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;212;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;135150204121.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;135150208121.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;213;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;7;1;0;0;0;0;0;-4;0;214;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;215216;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197217;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;204164201216124.0;22;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;155;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197219;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;155;31;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;-66;-111;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197220;30;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197222;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;222215;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;223192200;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222192200201.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;224225222226192.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;227197;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222228192;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;229230121135.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;231;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;-1;7;1;0;0;0;0;0;-2;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;222231192201.023;666;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150233;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148233;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;234124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;224112113235.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;224112113236.0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;-2;0;-1;22;2;-4;-4;122122;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.5022223823924026e+17;722;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;119242119;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148243;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-66;-111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;244124;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;245;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;246192247246.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;250234;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;251;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;250246252117.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;222253192164.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;6;1;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;192215254;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;197255;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;254182181;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;256;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;257258;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;259258;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;119260119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;254250261;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;255200;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;262200;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;182183;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;263264;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;265;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;266181266182264.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;129;7;1;0;0;0;0;0;-4;44;269182134;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;222221;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.0e+INF;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;129;7;1;0;0;0;0;0;-4;444;272273182151.02;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;275200255254114.03;76;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44444;1.9927110719711027e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;242;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;243;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;244;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;11;1
-0;0;0;0;0;-3;0;-1;97;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;206279;99;2;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;9;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--16;-16;-11;7;1;-4;0;-1;3737;2;0;0;0;0;0;-4;0;130;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;280106206281282.0;73737;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-223;-1111;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;130;8;1;0;0;0;0;0;0;0;0;0;0;-4;44444;1.4815028428528627e+17;8;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148288;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
-0;0;0;0;0;0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;148289;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;150290;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
--16;-16;-11;7;1;-9;0;-1;77;2;0;0;0;0;0;-4;0;130;38;1;-4;-444;1.3213413113513614e+20;38383877;5;-4;0;0;7;1;-4;0;1.0e+INF;3838773837.0;6;0;0;0;0;0;0;0;0;0;0;-4;0;100100;77;2
-0;0;0;0;0;-4;0;-1;738;2;0;0;0;0;0;-4;0;130;38;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.4310719727025426e+38;73837;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-9;0;-1;37;1;0;0;0;0;0;-4;0;130;38;1;0;0;0;0;0;0;0;0;0;0;-4;4444;275200255254273.03;3837;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;192235;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;254302;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;192302181182.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;303107;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;2.152221923042012e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;305222197;39;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;0;-1;40;1;-4;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;266107;40;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--17;-17;-11;12;1;-17;0;-1;1277;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-2;0;-1;10;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;306117307306.0;106;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;1;0;-1;1010;2;-2;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;3.071042543071041e+20;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;307;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;-6;0;-1;41;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;3.073101133113123e+17;4141;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444444;3.101132233073113e+17;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-6;0;-1;6;1;-6;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;307270227262222.0;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;42;1
-0;0;11;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;126;43;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;100;44;1
diff --git a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv b/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv
deleted file mode 100644
index 73b0d461..00000000
--- a/contrib/ML4PG/libs/ssreflect/basic/ssrnat_tree.csv
+++ /dev/null
@@ -1,326 +0,0 @@
--66;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;13;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-6;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;100;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;-4;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;-2;100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-2;0;0;-4;0;444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;44;0;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;0;0;26;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;27;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;44;0;287;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;-44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;-9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;32;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;-9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;4;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--222;0;0;0;-44;0;-4;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-11;-2;100;0;0;0;44;1;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-11;0;0;0;0;0;4;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;0;0;0;-4;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;22;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;-6;0;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--22;0;-6;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--60;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--60;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--666;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;0;0;0;0;444444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-2;100;-44;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--66;0;0;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--60;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;444444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-3;0;100;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--176;-4;0;0;-4;0;0;44444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--223;0;0;0;-4;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;7;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--176;-9;0;0;-4;-4;0;44444444444.0;0;0;100100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-4;0;0;-4;0;0;44444444444.0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-9;0;0;-4;0;0;4444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;0;0;0;0;0;44;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-4;-6;0;0;0;0;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--187;-17;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-2;-6;0;0;0;0;444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;1;-2;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;-6;100;0;0;0;44444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-6;0;0;0;0;444444;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;-6;-6;0;0;0;0;4444;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv
deleted file mode 100644
index 21129939..00000000
--- a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix.csv
+++ /dev/null
@@ -1,46 +0,0 @@
-77490,5,44440,102103104105.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--141410,6,646460,-1106110610.0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-117770,6,664440,-111070,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,0,10,1,777,3,444,110109111,10,1,777,3,444,110109111,10,1,70,2,40,1120,10,0,0,0,0,0,0,0
--4170,4,4640,-10611130,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-111,3,-778,-111,11,1,5114,4,-4994,-10511115,6,1,770,3,440,1161170,10,0,0,0,0,0,0,0,0,0,0,0,0,0
-5570,4,4440,10610910,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--2111117,7,10767314,-111111118,7,1,7777,4,4444,110108109,6,1,70,2,40,1090,13,0,0,0,0,0,0,0,0,0,0,0,0,0
-1777700,7,6444400,-110711900,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7,2,-4117,4,4314,-12011121,6,2,-777417,6,444464,-122123124125.01126,6,3,70,2,40,1270,6,2,1770,4,6440,-11281290,7,1,7,1,4,121
-777,3,444,130,6,1,-414170,6,464640,-10611061131.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-12,-1,7,1,577,3,444,108108121,6,2,77777700,8,44444400,110121108127.0,6,1,77777770,8,44444440,131110121110.0,10,2,770,3,440,1321160,6,1
-15,2,-134,-1108,7,3,7770,4,4440,1331211340.0,6,2,7777,4,4444,135121134,6,2,777700,6,444400,1331271340.0,6,1,777770,6,444440,128135121134.0,10,1
-7777,4,4444,136137138,14,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-777,3,444,136139,15,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7777,4,4444,136137138,14,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7,1,4,0,6,1,6,1,6,2,1,1,-14,-1,7,2,6,3,-11110,5,66400,-11110,16,2,7777700,7,4444400,133104117134.0,6,1
-7,2,11,2,-34,-11,7,2,77,2,44,135,6,3,-777017701.0,10,44401144015.0,-10401133142.01,6,2,70,2,40,1330,13,1,17,2,114,-1117
-5,1,-4,108,6,3,70,2,40,1440,6,2,70,2,40,1450,6,1,77,2,44,0,10,1,10,3,7,1,4,232
-57,2,44,108140,6,2,77770,5,44440,1431241400.0,6,1,77777770,8,44444440,143111143111131.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1471480,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7720,4,44160,-20210,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-15,2,-74,-1108,5,3,-772177,6,4410244,-21012111103233.0,6,3,770,3,440,1552130,6,2,77777090,9,44444040,1561270157.0,6,1,77777700,8,44444400,1561311160.0,10,0
-15,2,-74,-1108,5,3,7770,4,4440,1991212120.0,6,2,77777700,9,44444400,1581271590.0,6,1,77777700,8,44444400,1581311160.0,10,0,0,0,0,0,0,0
-15,2,-74,-1108,5,3,770,3,440,1081210,6,2,77777770,9,44444440,110121210127.0,6,2,-2177,4,10244,-11103233,6,2,770,3,440,1552130,6,1
-15,2,-74,-1108,5,3,770,3,440,1081210,6,2,777770,6,444440,1101211990.0,6,2,77700,5,44400,12721200,6,1,777770,6,444440,1101210,10,1
-770,3,440,1601610,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1621610,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1601630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1621630,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1777,4,11444,-1135,7,2,770,3,440,1061270,6,1,770,3,440,1211340,13,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-4,108,6,3,7770,4,4440,1331211340.0,6,2,70,2,40,1640,6,1,77777,5,44444,131135121,10,2,7770,4,4440,2091270,10,2
-17777,5,114444,-1209121,7,1,27,2,44,-1127,6,1,777707,6,444404,1271652340.0107,6,1,770,3,440,1661170,2,0,0,0,0,0,0,0
-5,1,-4,108,6,3,770,3,440,1061210,6,2,70,2,40,1670,6,1,777,3,444,131,10,1,77,2,44,209121,10,1
-577,3,444,108108121,10,2,77777700,8,44444400,110121210127.0,6,1,777770,6,444440,1101210,10,1,7770,4,4440,1311161680.0,10,0,0,0,0,0,0,0
-7770,4,4440,1691700,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-57,2,44,108121,6,2,777700,6,444400,1271711720.0,6,1,7077777,6,4044444,1.1601721731741752e+18,10,1,70,2,40,1760,6,0,0,0,0,0,0,0
-577,3,444,108108177,6,2,9,1,-4,178,7,1,777777020.07,13,4444440400.04,-1791310100.0148,10,0,0,0,0,0,0,0,0,0,0,0,0,0
-577,3,444,108108177,6,2,9,1,-4,178,7,1,77702770,8,444016440,-17913101180148.0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1811800,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-77,2,44,139,6,1,51170,5,46640,-105111310,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--170,3,40,-100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names
deleted file mode 100644
index 694a3a2d..00000000
--- a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_names
+++ /dev/null
@@ -1,49 +0,0 @@
-1 ord_enum_eqE
-2 eq_mkseqmx_ord
-3 fun_of_seqmxE
-4 mkseqmxE
-5 size_seqmx
-6 seqmxE
-7 seqmx_is_trans
-8 seqmx0n
-9 seqmxm0
-10 inj_seqmx_of_mx
-11 seqmx_eqP
-12 size_row_seqmx
-13 size_row_mkseqmx
-14 seqmxP
-15 seqmx_of_funE
-16 map_seqmxE
-17 zipwithseqmxE
-18 addseqmxE:
-
-19 oppseqmxE:
-
-20 subseqmxE:
-
-21 size_trseqmx
-22 size_row_trseqmx
-23 trseqmxE
-24 const_seqmxE
-25 seqmx0E
-26 minSS
-27 usubseqmxE
-28 dsubseqmxE
-29 lsubseqmxE
-30 rsubseqmxE
-31 ulsubseqmxE
-32 ursubseqmxE
-33 dlsubseqmxE
-34 drsubseqmxE
-35 size_row_row_seqmx
-36 row_seqmxE
-37 size_row_col_seqmx
-38 col_seqmxE
-39 colseqmxE
-40 block_seqmxE
-41 cast_seqmx
-42 scalar_seqmxE
-43 delta_seqmxE
-44 seqmx1E
-45 scaleseqmxE
-46 seqmx_of_mx_eq0
diff --git a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv b/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv
deleted file mode 100644
index 3057f33d..00000000
--- a/contrib/ML4PG/libs/ssreflect/coqeal/seqmatrix_tactics.csv
+++ /dev/null
@@ -1,45 +0,0 @@
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;10;1;0;0;0;0;0
--6;-6;-11;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;107;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;1.1010911111010912e+20;101010101010.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;-78;-111;11;1;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;116117;10;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;-4;106109;12;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-10;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;118110108109109.0;76613;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;107119;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;1.2112212312412612e+32;666677610.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;130131;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--12;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012110813e+17;6610613;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--13;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;7;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.3312113413512114e+56;66661010101010.0;9;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;136137138131.0;14146;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;136139131;15156;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;136137138131.0;14146;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--14;0;-1;716161616.0;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;133104117134.01172;6661616;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-14;-111;767;3;-16;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;-4;4;1.3510413314213311e+32;66613761313.0;8;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-10;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;-4;0;0;13;1;-4;0;1.4414502321331243e+45;661077710131013.0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.4014312414014311e+26;6610;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;147148;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-16;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;202;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;-1;5;1;-10;0;-1;6;1;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;4;2.101211032331552e+32;666610;5;0;0;0;0;0;0;0;0;0;0;-4;0;100;6;1
--7;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.9912121215812717e+26;6610;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;-1;5;1;-10;0;-1;6;1;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012121013e+17;66661010;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;-1;5;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;5;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012119913e+35;6661010;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;162161;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;160163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;162163;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;135106127121134.0;7613;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;44;1.3312113416413113e+35;661010102.0;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--11;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;444;2.0912112712716523e+26;76662;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0612116713120912e+23;66101010;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;108;10;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0812111012121013e+17;1061010;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;169170;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;10;1;0;0;0;0;0;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;0;1.2112717117211617e+29;6610106;5;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;-4;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;108177179131148.0;61010;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;-16;0;-1;10;1;0;0;0;0;0;-4;0;108;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;1.0817717913118014e+17;61010;3;0;0;0;0;0;0;0;0;0;0;-4;0;100;7;1
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;181180;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;-4;4;139131;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/available.txt b/contrib/ML4PG/libs/ssreflect/jvm/available.txt
deleted file mode 100644
index d00491fd..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/available.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/expt.csv b/contrib/ML4PG/libs/ssreflect/jvm/expt.csv
deleted file mode 100644
index 68738b5a..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/expt.csv
+++ /dev/null
@@ -1,6 +0,0 @@
--1131111110.0,10,622222662.0,-1111111110.0,6,2,7770,4,4440,1021030,6,1,777770,6,444440,104105106107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--11311110,8,22227220,-11111110,6,1,7,1,4,104,6,1,6,1,770,3,440,1291100,6,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1111120,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1131140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,6440,-11151160,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/expt_names b/contrib/ML4PG/libs/ssreflect/jvm/expt_names
deleted file mode 100644
index 3678e929..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/expt_names
+++ /dev/null
@@ -1,6 +0,0 @@
-1 helper_expt_is_theta
-2 fn_expt_is_theta
-3 loop_is_helper_expt
-4 program_is_fn_expt
-5 program_correct_expt
-6 total_correctness_expt
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv
deleted file mode 100644
index d4257d07..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/expt_tactics.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-2;11;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104129110;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;111112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;113114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115116;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/factorial.csv b/contrib/ML4PG/libs/ssreflect/jvm/factorial.csv
deleted file mode 100644
index 452cfa2a..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/factorial.csv
+++ /dev/null
@@ -1,6 +0,0 @@
--1311110,7,2626620,-1111110,6,2,7770,4,4440,1021030,6,1,777770,6,444440,104105106107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--131110,6,222720,-111110,6,1,7,1,4,104,6,1,6,1,7770,4,4440,1291101070.0,6,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1111120,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1131140,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,6440,-11151160,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/factorial_names b/contrib/ML4PG/libs/ssreflect/jvm/factorial_names
deleted file mode 100644
index 4f30297f..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/factorial_names
+++ /dev/null
@@ -1,6 +0,0 @@
-1 helper_fact_is_theta
-2 fn_fact_is_theta
-3 loop_is_helper_fact
-4 program_is_fn_fact
-5 program_correct_fact
-6 total_correctness_fact
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv
deleted file mode 100644
index 6009bc20..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/factorial_tactics.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;0;1;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104129110107.0;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;111112;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;113114;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;115116;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/fib.csv b/contrib/ML4PG/libs/ssreflect/jvm/fib.csv
deleted file mode 100644
index 0ddee49a..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/fib.csv
+++ /dev/null
@@ -1,6 +0,0 @@
--1131111110.0,10,2222226220.0,-1111111110.0,7,1,2,1,-4,-1,7,2,-11,2,-77,-11,7,2,20,1,780,-10,7,2,7770,4,4440,1021031470.0,6,1
-2,1,-4,-1,6,2,777770,6,444440,109110111147.0,6,1,-120,3,770,-110,6,0,0,0,0,0,0,0,0,0,0,0,0,0
--11311110,8,22226220,-11111110,6,1,2,1,-4,-1,6,2,-1570,4,9440,-110910,6,1,777,3,444,112113104,6,1,6,1,7777,4,4444,114115
-770,3,440,1181190,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1201210,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17770,5,94440,-11121220,7,1,20,2,40,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/fib_names b/contrib/ML4PG/libs/ssreflect/jvm/fib_names
deleted file mode 100644
index 9d5d2041..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/fib_names
+++ /dev/null
@@ -1,6 +0,0 @@
-1 helper_fib_is_theta
-2 fn_fib_is_theta
-3 loop_is_helper_fib
-4 program_is_fn_fib
-5 program_correct_fib
-6 total_correctness_fib
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv
deleted file mode 100644
index 6a12973c..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/fib_tactics.csv
+++ /dev/null
@@ -1,5 +0,0 @@
--7;0;1;6;1;-4;0;-1;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4444;109110111147.0;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-2;111;66;2;-4;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;-4;0;109;6;1;0;0;0;0;0;-4;44;1.1211310411411512e+35;666666;6;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;118119;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;120121;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--9;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;112122;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/lessp.csv b/contrib/ML4PG/libs/ssreflect/jvm/lessp.csv
deleted file mode 100644
index e63f16f1..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/lessp.csv
+++ /dev/null
@@ -1,6 +0,0 @@
--1311120,7,6666660,-1111110,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1020,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--13111210,8,2267228220.0,-11111110,6,1,7,1,4,103,6,1,6,1,770,3,440,1291040,6,0,0,0,0,0,0,0,0,0,0,0
-70,2,40,1050,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1061070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-17770,5,94440,-11081090,7,1,20,2,40,-10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/lessp_names b/contrib/ML4PG/libs/ssreflect/jvm/lessp_names
deleted file mode 100644
index 2597bfc9..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/lessp_names
+++ /dev/null
@@ -1,6 +0,0 @@
-1 helper_less_is_theta
-2 fn_less_is_theta
-3 loop_is_helper_less
-4 program_is_fn_less
-5 program_correct_less
-6 total_correctness_less
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv
deleted file mode 100644
index fbed8ac4..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/lessp_tactics.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;102;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;0;1;6;1;-2;0;-1;6;1;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;103129104;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;105;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--9;0;-1;7;1;-4;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;108109;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/m1.csv b/contrib/ML4PG/libs/ssreflect/jvm/m1.csv
deleted file mode 100644
index 292833aa..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/m1.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--113111110,10,678269670.0,-111111110,6,1,70,2,40,1020,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-0,2,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/m1_names b/contrib/ML4PG/libs/ssreflect/jvm/m1_names
deleted file mode 100644
index b4b885f6..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/m1_names
+++ /dev/null
@@ -1,3 +0,0 @@
-1 step_opener
-2 run_app
-3 run_opener
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv
deleted file mode 100644
index 6b5a32b2..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/m1_tactics.csv
+++ /dev/null
@@ -1,2 +0,0 @@
--6;-7;11;6;1;0;0;0;0;0;-8;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;1;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv b/contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv
deleted file mode 100644
index 22b76d2d..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/multiplication.csv
+++ /dev/null
@@ -1,6 +0,0 @@
--11311110,9,22226220,-11111110,6,1,777770,6,444440,102103182107.0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1041470,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--11311110,8,22226220,-11111110,6,1,7,1,4,102,6,1,6,1,770,3,440,1291050,6,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1061070,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1081090,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,7440,-11101110,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/multiplication_names b/contrib/ML4PG/libs/ssreflect/jvm/multiplication_names
deleted file mode 100644
index f3303d78..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/multiplication_names
+++ /dev/null
@@ -1,6 +0,0 @@
-1 helper_mul_is_theta
-2 fn_mul_is_theta
-3 loop_is_helper_mul
-4 program_is_fn_mul
-5 program_correct_mul
-6 total_correctness_mul
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv
deleted file mode 100644
index 5048c718..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/multiplication_tactics.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;104147;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;-2;11;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;102129105;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;106107;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;108109;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--7;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;110111;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/power.csv b/contrib/ML4PG/libs/ssreflect/jvm/power.csv
deleted file mode 100644
index cda62b6f..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/power.csv
+++ /dev/null
@@ -1,6 +0,0 @@
--1311110,7,2626620,-1111110,6,2,7770,4,4440,1021030,6,1,777777770.0,9,444444440,1.0410510610710711e+200,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-7770,4,4440,1091100,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
--131110,6,222720,-111110,6,1,7,1,4,104,6,1,6,1,770,3,440,1291110,6,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1121130,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-770,3,440,1141150,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1770,4,6440,-11161170,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/power_names b/contrib/ML4PG/libs/ssreflect/jvm/power_names
deleted file mode 100644
index 026bd36d..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/power_names
+++ /dev/null
@@ -1,6 +0,0 @@
-1 helper_power_is_theta
-2 fn_power_is_theta
-3 loop_is_helper_power
-4 program_is_fn_power
-5 program_correct_power
-6 total_correctness_power
diff --git a/contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv b/contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv
deleted file mode 100644
index 1c056429..00000000
--- a/contrib/ML4PG/libs/ssreflect/jvm/power_tactics.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;44;109110;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--2;0;1;6;1;0;0;0;0;0;-2;0;-1;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;0;104129111;66;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;112113;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
-0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;114115;6;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
--6;0;-1;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;-4;4;116117;7;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
diff --git a/contrib/ML4PG/ml4pg.el b/contrib/ML4PG/ml4pg.el
deleted file mode 100644
index e2d06e00..00000000
--- a/contrib/ML4PG/ml4pg.el
+++ /dev/null
@@ -1,56 +0,0 @@
-(defvar ml4pg-home-dir (concatenate 'string proof-home-directory "contrib/ML4PG/"))
-(defconst *matlab-program* nil)
-(defconst *weka-dir* (concatenate 'string proof-home-directory "contrib/ML4PG/weka.jar"))
-
-
-(defvar ml4pg-mode nil)
-
-(defun ml4pg-select-mode ()
- (interactive)
- (let ((smode (read-string "What mode do you want to use (Coq -> c (default), SSReflect -> s): ")))
- (setq ml4pg-mode smode)
- (cond ((string= ml4pg-mode "s")
- (progn (load-file (concat ml4pg-home-dir "ssreflect/auxiliary_files.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/feature_extraction_2.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/matlab_interaction.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/shortcuts.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/menus.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/storage.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/save_lemmas.el"))
- (load-file (concat ml4pg-home-dir "ssreflect/weka.el"))
- (ml4pg-init-clusters)
- (ml4pg-activate-icons)
- (ml4pg-exported-libraries)
- ))
- (t (progn (load-file (concat ml4pg-home-dir "coq/auxiliary_files.el"))
- (load-file (concat ml4pg-home-dir "coq/feature_extraction.el"))
- (load-file (concat ml4pg-home-dir "coq/matlab_interaction.el"))
- (load-file (concat ml4pg-home-dir "coq/shortcuts.el"))
- (load-file (concat ml4pg-home-dir "coq/menus.el"))
- (load-file (concat ml4pg-home-dir "coq/storage.el"))
- (load-file (concat ml4pg-home-dir "coq/save_lemmas.el"))
- (load-file (concat ml4pg-home-dir "coq/weka.el"))
- (ml4pg-init-clusters)
- (ml4pg-activate-icons)
- (ml4pg-exported-libraries)
- ))
- ))
- (let ((ex? (read-string "Do you want to extract the features of the lemmas of this library (Yes -> y, No -> n): ")))
- (if (string= ex? "y")
- (progn (let ((b (buffer-name)))
- (ml4pg-extract-theorems-library)
- (delete-other-windows)
- (switch-to-buffer-other-window "*display*")
- (delete-other-windows)
- (switch-to-buffer-other-window b)
- (delete-other-windows)
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
- ))
- nil
- )))
-
-
-
-
-
-
diff --git a/contrib/ML4PG/out.arff b/contrib/ML4PG/out.arff
deleted file mode 100644
index 1b038403..00000000
--- a/contrib/ML4PG/out.arff
+++ /dev/null
@@ -1,108 +0,0 @@
-@relation 'empty-weka.filters.unsupervised.attribute.AddCluster-Wweka.clusterers.EM -I 100 -N 8 -M 1.0E-6 -S 42-Ilast'
-
-@attribute 1 numeric
-@attribute 2 numeric
-@attribute 3 numeric
-@attribute 4 numeric
-@attribute 5 numeric
-@attribute 6 numeric
-@attribute 7 numeric
-@attribute 8 numeric
-@attribute 9 numeric
-@attribute 10 numeric
-@attribute 11 numeric
-@attribute 12 numeric
-@attribute 13 numeric
-@attribute 14 numeric
-@attribute 15 numeric
-@attribute 16 numeric
-@attribute 17 numeric
-@attribute 18 numeric
-@attribute 19 numeric
-@attribute 20 numeric
-@attribute 21 numeric
-@attribute 22 numeric
-@attribute 23 numeric
-@attribute 24 numeric
-@attribute 25 numeric
-@attribute 26 numeric
-@attribute 27 numeric
-@attribute 28 numeric
-@attribute 29 numeric
-@attribute 30 numeric
-@attribute cluster {cluster1,cluster2,cluster3,cluster4,cluster5,cluster6,cluster7,cluster8}
-
-@data
-
-1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0,cluster2
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,cluster2
-5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster5
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
-34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1,cluster2
-5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1,cluster2
-111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.15,6,1,6,1,-4,100.15,6,1,cluster2
-1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,cluster2
-11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster3
-1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,cluster2
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0,cluster3
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-5,1,-2,-1,5,2,6,1,-4,100.196875,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,cluster2
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-5,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199609,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951,6,1,6,1,-4,100.199951,6,1,cluster2
-1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.199988,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.199219,6,1,cluster6
-1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster7
-111,3,-354,-1,557,1,6,1,-4,100.199994,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
diff --git a/contrib/ML4PG/out_bis.arff b/contrib/ML4PG/out_bis.arff
deleted file mode 100644
index 0583ec87..00000000
--- a/contrib/ML4PG/out_bis.arff
+++ /dev/null
@@ -1,72 +0,0 @@
-1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0,cluster2
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,cluster2
-5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster5
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster5
-5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
-34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster1
-5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1,cluster2
-5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster7
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0,cluster2
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1,cluster2
-111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.15,6,1,6,1,-4,100.15,6,1,cluster2
-1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,cluster2
-11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster3
-1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster3
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,cluster2
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0,cluster3
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-5,1,-2,-1,5,2,6,1,-4,100.196875,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0,cluster2
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,cluster2
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.196875,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199609,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,6,1,-4,100.196875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-5,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199609,6,1,6,1,-4,100.199219,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951,6,1,6,1,-4,100.199951,6,1,cluster2
-1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-25,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.198438,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-52,-1,55,1,6,1,-4,100.199805,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-11,2,-22,-1,55,1,6,1,-4,100.199902,6,1,6,1,-4,100.199976,6,1,4,1,0,0,6,0,0,0,0,0,0,0,cluster8
-1,1,-2,-1,5,1,6,1,-4,100.199219,6,1,6,1,-4,100.199988,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.199219,6,1,cluster6
-1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,cluster7
-111,3,-354,-1,557,1,6,1,-4,100.199994,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,cluster4
diff --git a/contrib/ML4PG/ssreflect/auxiliary_files.el b/contrib/ML4PG/ssreflect/auxiliary_files.el
deleted file mode 100644
index 95a4ce0a..00000000
--- a/contrib/ML4PG/ssreflect/auxiliary_files.el
+++ /dev/null
@@ -1,23 +0,0 @@
-(defun ml4pg-quicksort-pair (list)
- (if (<= (length list) 1)
- list
- (let ((pivot (cadar list)))
- (append (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (> (cadr x) pivot)) list))
- (remove-if-not #'(lambda (x) (= (cadr x) pivot)) list)
- (ml4pg-quicksort-pair (remove-if-not #'(lambda (x) (< (cadr x) pivot)) list))))))
-
-
-(defun ml4pg-zip (l1 l2)
- (do ((temp1 l1 (cdr temp1))
- (temp2 l2 (cdr temp2))
- (res nil))
- ((endp temp1) res)
- (setf res (append res (list (append (list (car temp1)) (list (car temp2))))))))
-
-(defun ml4pg-unzip (l)
- (do ((temp l (cdr temp))
- (res1 nil)
- (res2 nil))
- ((endp temp) (list (reverse res1) (reverse res2)))
- (progn (setf res1 (cons (caar temp) res1))
- (setf res2 (cons (cadr (car temp)) res2)))))
diff --git a/contrib/ML4PG/ssreflect/feature_extraction_2.el b/contrib/ML4PG/ssreflect/feature_extraction_2.el
deleted file mode 100644
index 36cc53b2..00000000
--- a/contrib/ML4PG/ssreflect/feature_extraction_2.el
+++ /dev/null
@@ -1,1282 +0,0 @@
-;;; This is the feature vector extraction file for SSReflect
-
-;; Different variables which are used to store information about
-;; the numbers associated with tactics, rewrite rules, types, ...
-
-(defvar ml4pg-hypothesis nil)
-
-(defvar ml4pg-saved-theorems nil)
-(defvar ml4pg-goal-level-temp nil)
-(defvar ml4pg-tactic-level nil)
-(defvar ml4pg-proof-tree-level nil)
-
-;; Variables to store the different values associated with the tactics, the
-;; types or the rewrite rules
-
-(defvar ml4pg-tactic_id '(("move" . 1)
- ("case" . 2)
- ("elim" . 3)
- ("apply" . 4)
- ("apply/" . 5)
- ("move/" . -5)
- ("case/" . 6)
- ("rewrite" . 7)
- ("exists" . 8)
- ("[]" . 0)
- ("exact" . 9)))
-
-
-(defvar ml4pg-move nil)
-(defvar ml4pg-case nil)
-(defvar ml4pg-elim nil)
-(defvar ml4pg-apply nil)
-(defvar ml4pg-apply/ nil)
-(defvar ml4pg-move/ nil)
-(defvar ml4pg-case/ nil)
-(defvar ml4pg-rewrite nil)
-(defvar ml4pg-exists nil)
-(defvar ml4pg-done nil)
-(defvar ml4pg-exact nil)
-
-
-(defvar ml4pg-types_id '(("nat" . -2)
- ("Prop" . -4)
- ("bool" . -3)
- ("T" . -1)
- ("seq" . -5)))
-
-(defvar ml4pg-types_id_n -6)
-(defvar ml4pg-views_id nil)
-(defvar ml4pg-theorems_id nil)
-
-(defvar ml4pg-top-symbol-id
- '(("forall" . 5)
- ("@eq" . 6)
- ("and" . 4)
- ("iff" . 8)
- ("or" . 3)
- ("is_true" . 2)
- ("reflect" . 9)
- ))
-
-(defvar ml4pg-top-symbol-n 10)
-
-
-(defvar ml4pg-add_to 0.1)
-(defvar ml4pg-start 100)
-
-(defvar ml4pg-start_view 101)
-(defvar ml4pg-start_thm 101)
-
-
-(defvar ml4pg-init 0)
-
-(defvar ml4pg-current-level 1)
-(defvar ml4pg-dot-level nil)
-
-;;; Proof tree levels
-
-(defvar ml4pg-tdl1 nil)
-(defvar ml4pg-tdl2 nil)
-(defvar ml4pg-tdl3 nil)
-(defvar ml4pg-tdl4 nil)
-(defvar ml4pg-tdl5 nil)
-
-(defun ml4pg-add-info-to-level-aux (info list)
- (if (not list)
- info
- (do ((temp list (cdr temp))
- (temp1 info (cdr temp1))
- (temp2 nil))
- ((endp temp) temp2)
- (cond ((= (car temp) 0) (setf temp2 (append temp2 (list (car temp1)))))
- ((= (car temp1) 0) (setf temp2 (append temp2 (list (car temp)))))
- (t (setf temp2 (append temp2 (list (string-to-number (format "%s%s" (car temp) (car temp1)))))))))))
-
-(defun ml4pg-add-info-to-level (info level)
- (cond ((= level 1) (setf ml4pg-tdl1 (ml4pg-add-info-to-level-aux info ml4pg-tdl1)))
- ((= level 2) (setf ml4pg-tdl2 (ml4pg-add-info-to-level-aux info ml4pg-tdl2)))
- ((= level 3) (setf ml4pg-tdl3 (ml4pg-add-info-to-level-aux info ml4pg-tdl3)))
- ((= level 4) (setf ml4pg-tdl4 (ml4pg-add-info-to-level-aux info ml4pg-tdl4)))
- ((= level 5) (setf ml4pg-tdl5 (ml4pg-add-info-to-level-aux info ml4pg-tdl5)))
- (t nil)
- ))
-
-;;; Main function of this file, it is in charge of extracting the
-;;; information associated with a theorem
-
-
-(defun ml4pg-export-theorem ()
- (interactive)
- (progn (setf ml4pg-tdl1 nil
- ml4pg-tdl2 nil
- ml4pg-tdl3 nil
- ml4pg-tdl4 nil
- ml4pg-tdl5 nil
- ml4pg-move nil
- ml4pg-case nil
- ml4pg-elim nil
- ml4pg-apply nil
- ml4pg-apply/ nil
- ml4pg-move/ nil
- ml4pg-case/ nil
- ml4pg-rewrite nil
- ml4pg-exists nil
- ml4pg-done nil
- ml4pg-exact nil
- ml4pg-current-level 1
- ml4pg-dot-level nil
- ml4pg-hypothesis nil
- ml4pg-goal-level nil)
- (if (equal ml4pg-init 0)
- (progn (ml4pg-read-lemmas)
- (ml4pg-read-views)
- (setq ml4pg-init 1)))
- (ml4pg-export-theorem-aux nil nil)
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
- ))
-
-
-
-;; A function to obtain the type associated with an object
-
-(defun ml4pg-remove-jumps-aux (string res)
- (let ((jump (search "
-" string)))
- (if jump
- (ml4pg-remove-jumps-aux (subseq string (1+ jump)) (concatenate 'string res (subseq string 0 jump)))
- (concatenate 'string res string))))
-
-(defun ml4pg-remove-jumps (string)
- (ml4pg-remove-jumps-aux string ""))
-
-
-(defun ml4pg-get-type-id (object)
- (if (string= "(" (subseq object 0 1))
- -4
- (let* ((a (ml4pg-remove-jumps (proof-shell-invisible-cmd-get-result (concat "Check " object))))
- (pos_jump (search "
-" a :start2 (+ 2 (search " " a))))
- (pos_space (search " " a :start2 (+ 2 (search ": " a))))
- (type (if pos_space
- (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
- (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
- (if type type
- (progn (setf ml4pg-types_id
- (append ml4pg-types_id (list (cons (if pos_space
- (subseq a (+ 2 (search ": " a)) pos_space)
- (subseq a (+ 2 (search ": " a)) pos_jump))
- ml4pg-types_id_n))))
-
- (setf ml4pg-types_id_n (1- ml4pg-types_id_n))
- (1+ ml4pg-types_id_n))
- ))))
-
-(defun ml4pg-get-type-id2 (object)
- (let* ((a (proof-shell-invisible-cmd-get-result (concat "Check " object)))
- (pos_jump (search "
-" a :start2 (+ 2 (search " " a))))
- (pos_space (search " " a :start2 (+ 2 (search ": " a))))
- (type (if pos_space
- (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_space) ml4pg-types_id))
- (cdr (assoc (subseq a (+ 2 (search ": " a)) pos_jump) ml4pg-types_id)))))
- (if type type
- (progn (setf ml4pg-types_id
- (append ml4pg-types_id (list (cons (if pos_space
- (subseq a (+ 2 (search ": " a)) pos_space)
- (subseq a (+ 2 (search ": " a)) pos_jump))
- ml4pg-types_id_n))))
-
- (setf ml4pg-types_id_n (1- ml4pg-types_id_n))
- (1+ ml4pg-types_id_n))
- )))
-
-
-;; A function to obtain the value of a top symbol
-
-(defun ml4pg-get-top-symbol ()
- (proof-shell-invisible-cmd-get-result (format "Set Printing All"))
- (let* ((res (proof-shell-invisible-cmd-get-result (format "Focus")))
- (res2 (subseq res (+ 32 (search "============================" res))))
- (fst-symbol (subseq res2 0 (search " " res2))))
- (cond ((search "->" res2) 7)
- (t (let ((is (assoc fst-symbol ml4pg-top-symbol-id)))
- (if is
- (cdr is)
- (progn (setf ml4pg-top-symbol-id
- (append ml4pg-top-symbol-id (list (cons fst-symbol ml4pg-top-symbol-n))))
-
- (setf ml4pg-top-symbol-n (1+ ml4pg-top-symbol-n))
- (1- ml4pg-top-symbol-n))))))))
-
-
-
-
-;; In some cases the intro tactic does not have parameters, the following function
-;; obtain the type of the object introduced with the intro tactic in those cases
-;; Sobra
-(defun ml4pg-get-obj-intro ()
- (let* ((undo (proof-undo-last-successful-command))
- (obj (proof-shell-invisible-cmd-get-result (format "Show Intro")))
- (object (subseq obj 0 (search "
-" obj)))
- (dod (proof-assert-next-command-interactive))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis (list object)))))
-
- (ml4pg-get-type-id object)
- ))
-
-(defun ml4pg-extract-params (seq res)
- (let ((pos_space (search " " seq))
- (pos_jump (search "
-" seq)))
- (if pos_space
- (ml4pg-extract-params (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
- (reverse (cons (subseq seq 0 pos_jump) res)))))
-
-(defun ml4pg-extract-params2 (seq res)
- (let ((pos_space (search " " seq))
- (pos_jump (search "." seq)))
- (if pos_space
- (ml4pg-extract-params2 (subseq seq (+ 1 pos_space)) (cons (subseq seq 0 pos_space) res))
- (reverse (cons (subseq seq 0 pos_jump) res)))))
-
-;; Given a list of objects, it obtains the value associated with their types
-
-(defun ml4pg-get-types-list (list res)
- (if (endp list)
- (* -1 res)
- (if (search "_" (car list))
- (ml4pg-get-types-list (cdr list) res)
- (ml4pg-get-types-list (cdr list) (+ (* -1 (ml4pg-get-type-id (car list)) (expt 10 (- (length list) 1))) res)))))
-
-
-(defun ml4pg-get-types-list-exists (list res)
- (if (endp list)
- (* -1 res)
- (ml4pg-get-types-list-exists (cdr list) (+ (* -1 (ml4pg-get-type-id2 (car list)) (expt 10 (- (length list) 1))) res))))
-
-;; To obtain the number of tactics applied
-
-(defun ml4pg-get-number-list (list)
- (if (endp list)
- 0
- (+ (expt 10 (- (length list) 1)) (ml4pg-get-number-list (cdr list)))))
-
-(defun ml4pg-get-number-list2 (list n)
- (if (endp list)
- 0
- (+ (* n (expt 10 (- (length list) 1))) (ml4pg-get-number-list2 (cdr list) n))))
-
-;; To obtain the value associated with top symbol in the case of move
-
-(defun ml4pg-get-top-symbols-list (len res)
- (if (= len 0)
- res
- (let ((gs (ml4pg-get-top-symbol))
- (ps (proof-shell-invisible-cmd-get-result (format "intro"))))
- (+ (ml4pg-get-top-symbols-list (- len 1) (+ (* gs (expt 10 (- len 1))) res))))))
-
-(defun ml4pg-get-top-symbols-seq (seq res)
- (if (endp seq)
- res
- (let ((gs (ml4pg-get-top-symbol))
- (ps (proof-shell-invisible-cmd-get-result (format (concat "intro " (car seq))))))
- (+ (ml4pg-get-top-symbols-seq (cdr seq) (+ (* gs (expt 10 (- (length seq) 1))) res))))))
-
-;; To obtain the value associated with a theorem
-
-(defun ml4pg-search-in-hyp (obj hyp)
- (if (endp hyp)
- nil
- (if (string= obj (car hyp))
- t
- (ml4pg-search-in-hyp obj (cdr hyp)))))
-
-;;; Auxiliary functions
-
-(defun ml4pg-remove=> (string)
- (let ((d (search "=>" string)))
- (if d
- (ml4pg-remove=> (concatenate 'string (subseq string 0 d) (subseq string (+ 2 d))))
- string)))
-
-
-(defun ml4pg-extract-views (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (and (string= (subseq (car temp) 0 1) "/") (not (string= (car temp) "//")) (not (string= (car temp) "/=")) (not (string= (car temp) "//=")))
- (if (not (string= (subseq (car temp) 0 2) "/("))
- (setf temp2 (append temp2 (list (subseq (car temp) 1))))
- (setf temp2 (append temp2 (list (subseq (car temp) 2 (search " " (car temp))))))))))
-
-
-(defun ml4pg-extract-real-params (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (not (or (string= (subseq (car temp) 0 1) "/") (string= (car temp) "//") (string= (car temp) "_")
- (search "->" (car temp)) (search "<-" (car temp)) (string= (car temp) "/=") (string= (car temp) "//=")))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-(defun ml4pg-extract-rewrites (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (or (search "->" (car temp)) (search "<-" (car temp)))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-(defun ml4pg-extract-simplifications (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (or (string= (car temp) "//") (string= (car temp) "/=") (string= (car temp) "//="))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-(defun ml4pg-compute-value-simpl (list)
- (list 0 (length list) 0 0))
-
-
-(defun ml4pg-extract-views-id (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (if (assoc (car temp) ml4pg-views_id)
- (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc (car temp) ml4pg-views_id))) ))
- (progn (setf ml4pg-start_view (+ ml4pg-start_view 1))
- (ml4pg-save-view (car temp) ml4pg-start_view)
- (setf ml4pg-views_id
- (append ml4pg-views_id (list (cons (car temp) ml4pg-start_view))))
- (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc (car temp) ml4pg-views_id)))))))))
-
-
-
-(defun ml4pg-compute-values-rewrite-tactic (list)
- (do ((temp (ml4pg-extract-real-params list) (cdr temp))
- (temp2 ""))
- ((endp temp) (string-to-number temp2))
- (let* ((obj1 (if (string= "-" (subseq (car temp) 0 1)) (subseq (car temp) 1) (car temp)))
- (obj (if (string= "(" (subseq obj1 0 1)) (subseq obj1 1 (search " " obj1)) obj1)))
- (if (assoc obj ml4pg-theorems_id)
- (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))) )
- (progn (setf ml4pg-start_thm (+ ml4pg-start_thm 1))
- (ml4pg-save-lemma obj ml4pg-start_thm)
- (setf ml4pg-theorems_id
- (append ml4pg-theorems_id (list (cons obj ml4pg-start_thm))))
- (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id))))))))))
-
-
-(defun ml4pg-compute-values-apply-tactic (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) (string-to-number temp2))
- (let ((obj (if (string= "(" (subseq (car temp) 0 1)) (subseq (car temp) 1) (car temp))))
- (if (member obj ml4pg-hypothesis)
- (setf temp2 (concatenate 'string temp2 "1"))
- (if (assoc obj ml4pg-theorems_id)
- (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))) )
- (progn (setf ml4pg-start_thm (+ ml4pg-start_thm 1))
- (setf ml4pg-theorems_id
- (append ml4pg-theorems_id (list (cons obj ml4pg-start_thm))))
- (setf temp2 (concatenate 'string temp2 (format "%s" (cdr (assoc obj ml4pg-theorems_id)))))))))))
-
-
-(defun ml4pg-compute-value-views-move (list)
- (list (* -1 (ml4pg-get-number-list2 list 5)) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
-
-(defun ml4pg-compute-value-views-apply (list)
- (list (ml4pg-get-number-list2 list 5) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
-
-(defun ml4pg-compute-value-views-case (list)
- (list (ml4pg-get-number-list2 list 6) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
-
-(defun ml4pg-compute-value-views-exact (list)
- (list (ml4pg-get-number-list2 list 9) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (string-to-number (ml4pg-extract-views-id list))))
-
-(defun ml4pg-compute-value-rewrites (list)
- (list (ml4pg-get-number-list2 list 7) (length list) (* -1 (ml4pg-get-number-list2 list 4)) (ml4pg-get-number-list list)))
-
-
-
-(defun ml4pg-remove-empties (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (not (string= (car temp) ""))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-
-(defun ml4pg-occurrences (c string)
- (do ((temp string)
- (n 0))
- ((not (search c temp)) n)
- (progn (setf n (1+ n))
- (setf temp (subseq temp (1+ (search c temp)))))))
-
-
-(defun ml4pg-put-together-parenthesis (list)
- (do ((temp list (cdr temp))
- (n 0)
- (temp2 nil)
- (aux ""))
- ((endp temp) temp2)
- (cond ((search "(" (car temp))
- (progn (setf n (1+ n))
- (setf aux (concatenate 'string aux (car temp) " "))))
- ((and (search ")" (car temp)) (not (= (- n (ml4pg-occurrences ")" (car temp))) 0)))
- (progn (setf n (- n (ml4pg-occurrences ")" (car temp))))
- (setf aux (concatenate 'string aux (car temp) " "))))
- ((search ")" (car temp))
- (progn (setf n (1- n))
- (setf aux (concatenate 'string aux (car temp)))
- (setf temp2 (append temp2 (list aux)))
- (setf aux "")))
- ((not (= n 0))
- (progn (setf aux (concatenate 'string aux (car temp) " "))))
- (t (setf temp2 (append temp2 (list (car temp))))
- ))))
-
-
-(defun ml4pg-remove-squared-parenthesis (string res)
- (let ((pos1 (search "[" string))
- (pos2 (search "{" string)))
- (cond ((and pos1 pos2)
- (if (< pos1 pos2)
- (ml4pg-remove-squared-parenthesis
- (subseq string (1+ (search "]" string :start2 pos1)))
- (concatenate 'string res (subseq string 0 pos1)))
- (ml4pg-remove-squared-parenthesis
- (subseq string (1+ (search "}" string :start2 pos2)))
- (concatenate 'string res (subseq string 0 pos2)))))
- (pos1 (ml4pg-remove-squared-parenthesis
- (subseq string (1+ (search "]" string :start2 pos1)))
- (concatenate 'string res (subseq string 0 pos1))))
- (pos2 (ml4pg-remove-squared-parenthesis
- (subseq string (1+ (search "}" string :start2 pos2)))
- (concatenate 'string res (subseq string 0 pos2))))
- (t (concatenate 'string res string)))))
-
-
-(defun ml4pg-remove-iterations (string)
- (do ((temp string)
- (temp2 ""))
- ((= (length temp) 0) temp2)
- (if (or (string= (subseq temp 0 1) "!") (string= (subseq temp 0 1) "?"))
- (setf temp (subseq temp 1))
- (progn (setf temp2 (concatenate 'string temp2 (subseq temp 0 1)))
- (setf temp (subseq temp 1))
- ))))
-
-
-
-(defun ml4pg-remove-squared-parenthesis2 (string)
- (do ((temp string)
- (temp2 ""))
- ((= (length temp) 0) temp2)
- (if (or (string= (subseq temp 0 1) "[") (string= (subseq temp 0 1) "]") (string= (subseq temp 0 1) "|"))
- (setf temp (subseq temp 1))
- (progn (setf temp2 (concatenate 'string temp2 (subseq temp 0 1)))
- (setf temp (subseq temp 1))
- ))))
-
-
-(defun ml4pg-extract-params3 (cmd)
- (let* ((res (ml4pg-extract-params2 (ml4pg-remove-iterations (ml4pg-remove-squared-parenthesis cmd "") ) nil))
- (res1 (ml4pg-remove-empties res)))
- (ml4pg-put-together-parenthesis res1)))
-
-
-(defun ml4pg-extract-params4 (cmd)
- (let* ((res (ml4pg-extract-params2 (ml4pg-remove-squared-parenthesis2 cmd) nil))
- (res1 (ml4pg-remove-empties res)))
- (ml4pg-put-together-parenthesis res1)))
-
-
-
-;;; The following functions provide the numbers associated with a concrete tactic
-
-
-(defun ml4pg-numbers-move=> (cmd top level)
- (let* ((params (ml4pg-extract-params3 (ml4pg-remove=> (subseq cmd (+ 2 (search "=>" cmd)))) ))
- (views (ml4pg-extract-views params))
- (simpl (ml4pg-extract-simplifications params))
- (rewrites (ml4pg-extract-rewrites params))
- (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (views-nums (ml4pg-compute-value-views-move views))
- (real-params (ml4pg-extract-real-params params))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
- (types-params (ml4pg-get-types-list real-params 0))
- (foo3 (ml4pg-add-info-to-level (list (ml4pg-get-types-list real-params 0) 0 0 0 0 0 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-move (append ml4pg-move (list (list (ml4pg-get-types-list (if real-params (list (car real-params)) nil) 0) (ml4pg-get-types-list (cdr real-params) 0)
- (* -1 (ml4pg-get-number-list real-params)) top))))))
- (append (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params))))
- (if simpl (list simpl-nums) nil)
- (if views (list views-nums) nil)
- (if rewrites (list rewrites-nums) nil))))
-
-(defun ml4pg-numbers-move/ (cmd top level)
- (let* ((params (ml4pg-extract-params3 (ml4pg-remove=> (subseq cmd 4)) ))
- (views (ml4pg-extract-views params))
- (simpl (ml4pg-extract-simplifications params))
- (rewrites (ml4pg-extract-rewrites params))
- (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (views-nums (ml4pg-compute-value-views-move views))
- (real-params (ml4pg-extract-real-params params))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-move/ (append ml4pg-move/ (list (list -4 (* -4 (ml4pg-get-number-list real-params)) (nth 3 views-nums) top)))))
- (types-params (ml4pg-get-types-list real-params 0)))
- (append (list views-nums)
- (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
- (if simpl (list simpl-nums) nil)
- (if rewrites (list rewrites-nums) nil)))
-)
-
-(defun ml4pg-numbers-move: (cmd top level)
- (let* ((params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)))) )
- (views (ml4pg-extract-views params))
- (simpl (ml4pg-extract-simplifications params))
- (rewrites (ml4pg-extract-rewrites params))
- (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (views-nums (ml4pg-compute-value-views-move views))
- (real-params (ml4pg-extract-real-params params))
- (types-params (ml4pg-get-types-list real-params 0))
- (foo3 (ml4pg-add-info-to-level (list (ml4pg-get-types-list real-params 0) 0 0 0 0 0 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-move (append ml4pg-move (list (list (ml4pg-get-types-list (if real-params (list (car real-params)) nil) 0) (ml4pg-get-types-list (cdr real-params) 0)
- (* 1 (ml4pg-get-number-list real-params)) top))))))
- (append (list (list (* -1 (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id)))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params))))
- (if views (list views-nums) nil)
- (if simpl (list simpl-nums) nil)
- (if rewrites (list rewrites-nums) nil)))
-
-)
-
-(defun ml4pg-numbers-move< (cmd top level)
- (let* ((foo (list (ml4pg-compute-value-rewrites (list 1))))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 top 0 0 0 0 0) level))
- (foo2 (setf ml4pg-rewrite (append ml4pg-rewrite (list (list 4 0 1 top))))))
- foo
- )
-)
-
-(defun ml4pg-numbers-apply: (cmd top level)
- (if (string= cmd "apply")
- (list (list (cdr (assoc "apply" ml4pg-tactic_id)) 1 0 0))
- (let ((moves (search "=>" cmd))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 100 0 0 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-apply (append ml4pg-apply (list (list -4 0 100 top))))))
- (if (not moves)
- (list (list (cdr (assoc "apply" ml4pg-tactic_id))
- 1
- -4
- (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (if (search ":" cmd) (search ":" cmd) (search " " cmd)))))))))
- (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
- (simpl (ml4pg-extract-simplifications args0))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (args (ml4pg-extract-real-params args0))
- )
- (append (list (list (cdr (assoc "apply" ml4pg-tactic_id))
- 1 -4
- (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (if (search ":" cmd) (search ":" cmd) (search " " cmd))) moves))))
- ))
- (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
- (if simpl (list simpl-nums) nil)))))
-))
-
-(defun ml4pg-numbers-elim (cmd top level)
- (let* ((moves (search "=>" cmd))
- (foo3 (ml4pg-add-info-to-level (list 0 0 (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))))) 0) 0 0 0 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-elim (append ml4pg-elim (list (list (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))))) 0) 0 -1 top))))))
- (if (not moves)
- (list (list (cdr (assoc "elim" ml4pg-tactic_id))
- 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd))))) 0) -1))
- (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
- (simpl (ml4pg-extract-simplifications args0))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (args (ml4pg-extract-real-params args0)))
- (append (list (list (cdr (assoc "elim" ml4pg-tactic_id))
- 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (subseq cmd (+ 1 (search ":" cmd)) moves))) 0) -1))
- (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
- (if simpl (list simpl-nums) nil))))))
-
-(defun ml4pg-numbers-case (cmd top level)
- (if (string= cmd "case")
- (list (list (cdr (assoc "case" ml4pg-tactic_id)) 1 0 0))
- (let ((moves (search "=>" cmd))
- (foo3 (ml4pg-add-info-to-level (list 0 (if (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd))))))
- (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))))) 0) 1) 0 0 0 0 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-case (append ml4pg-case (list (list (if (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd))))))
- (ml4pg-get-types-list (list (car (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))))) 0) 1)
- 0 -1 top))))))
- (if (not moves)
- (list (list (cdr (assoc "case" ml4pg-tactic_id))
- 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))) 0) -1))
- (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
- (simpl (ml4pg-extract-simplifications args0))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (args (ml4pg-extract-real-params args0)))
- (if (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))
- (append (list (list (cdr (assoc "case" ml4pg-tactic_id))
- 1 (ml4pg-get-types-list (ml4pg-extract-real-params (ml4pg-extract-params3 (if (search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))) (subseq cmd (+ 1 (search " " cmd)))))) 0) -1))
- (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
- (if simpl (list simpl-nums) nil))
- (append (list (list (cdr (assoc "case" ml4pg-tactic_id))
- 1 0 0))
- (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
- (if simpl (list simpl-nums) nil))))))))
-
-(defun ml4pg-numbers-case/ (cmd top level)
- (let* ((params (ml4pg-extract-params4 (ml4pg-separate-/ (ml4pg-remove=> (subseq cmd 5)) "")))
- (views (ml4pg-extract-views params))
- (simpl (ml4pg-extract-simplifications params))
- (rewrites (ml4pg-extract-rewrites params))
- (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (views-nums (ml4pg-compute-value-views-case views))
- (real-params (ml4pg-extract-real-params params))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
- (types-params (ml4pg-get-types-list real-params 0))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-case/ (append ml4pg-case/ (list (list -4 (/ (nth 2 views-nums) 10) (nth 3 views-nums) top))))))
- (append (list views-nums)
- (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
- (if simpl (list simpl-nums) nil)
- (if rewrites (list rewrites-nums) nil)))
-)
-
-(defun ml4pg-separate-/ (string res)
- (let ((pos (search "/" string)))
- (if (not pos)
- (concatenate 'string res string)
- (cond ((= pos 0) (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string "/" res (subseq string 0 pos))))
- ((not (string= " " (subseq string (1- pos) pos)))
- (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string res (subseq string 0 pos) " /")))
- (t (ml4pg-separate-/ (subseq string (1+ pos)) (concatenate 'string res (subseq string 0 pos))))))))
-
-
-(defun ml4pg-numbers-apply/ (cmd top level)
- (let* ((params (ml4pg-extract-params4 (ml4pg-separate-/ (ml4pg-remove=> (subseq cmd 5)) "")))
- (views (ml4pg-extract-views params))
- (simpl (ml4pg-extract-simplifications params))
- (rewrites (ml4pg-extract-rewrites params))
- (rewrites-nums (ml4pg-compute-value-rewrites rewrites))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (views-nums (ml4pg-compute-value-views-apply views))
- (real-params (ml4pg-extract-real-params params))
- (foo (setf ml4pg-hypothesis (append ml4pg-hypothesis real-params)))
- (types-params (ml4pg-get-types-list real-params 0))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 (nth 2 views-nums) 0 0 0 0 0 0 0 0) level))
- (foo2 (setf ml4pg-apply/ (append ml4pg-apply/ (list (list -4 (/ (nth 2 views-nums) 10) (nth 3 views-nums) top))))))
- (append (list views-nums)
- (if real-params (list (list (ml4pg-get-number-list2 real-params (cdr (assoc "move" ml4pg-tactic_id))) (length real-params) types-params (* -1 (ml4pg-get-number-list real-params)))))
- (if simpl (list simpl-nums) nil)
- (if rewrites (list rewrites-nums) nil)))
-)
-
-(defun ml4pg-numbers-exact (cmd top level)
- (if (string= cmd "exact")
- (list (list (cdr (assoc "exact" ml4pg-tactic_id)) 1 0 0))
- (let* ((params (ml4pg-extract-params3 (cond ((search ":" cmd) (subseq cmd (+ 1 (search ":" cmd))))
- ((search "/" cmd) (subseq cmd (search "/" cmd)))
- (t (subseq cmd (+ 1 (search " " cmd)))))))
- (views (ml4pg-extract-views params))
- (views-nums (ml4pg-compute-value-views-exact views))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 100 0 0) level))
- (foo2 (setf ml4pg-exact (append ml4pg-exact (list (list -4 0 100 top))))))
- (if views
- (list views-nums)
- (list (list (cdr (assoc "exact" ml4pg-tactic_id))
- 1
- -4
- (ml4pg-compute-values-apply-tactic (ml4pg-extract-real-params params))))))))
-
-(defun ml4pg-numbers-rewrite (cmd top level)
- (let* ((params (ml4pg-extract-params3 (subseq cmd (+ 1 (search " " cmd)))) )
- (views (ml4pg-extract-views params))
- (simpl (ml4pg-extract-simplifications params))
- (simpl-nums (ml4pg-compute-value-simpl simpl))
- (views-nums (ml4pg-compute-value-views-move views))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 (ml4pg-get-number-list2 (cdr params) 4) 0 0 0 0 0) level))
- (foo2 (setf ml4pg-rewrite (append ml4pg-rewrite (list (list -4 (ml4pg-get-number-list2 (cdr params) 4) (ml4pg-compute-values-rewrite-tactic params) top))))))
- (append (list (list (ml4pg-get-number-list2 params (cdr (assoc "rewrite" ml4pg-tactic_id)))
- (length params)
- (ml4pg-get-number-list2 params 4)
- (ml4pg-compute-values-rewrite-tactic params)))
- (if simpl (list simpl-nums) nil)
- ))
-)
-
-(defun ml4pg-numbers-exists (cmd top level)
- (let ((moves (search "=>" cmd))
- (foo3 (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 1 0 0 0 0) level))
- (foo2 (setf ml4pg-exists (append ml4pg-exists (list (list 8 0 1 top))))))
- (if (not moves)
- (let* ((params (ml4pg-extract-params3 (subseq cmd 7)) )
- (types-params (ml4pg-get-types-list-exists params 0))
- )
- (list (list (cdr (assoc "exists" ml4pg-tactic_id)) 1 types-params 0)))
- (let* ((args0 (ml4pg-extract-params4 (subseq cmd (+ 2 moves))))
- (simpl (ml4pg-extract-simplifications args0))
- (simpl-nums (cml4pg-ompute-value-simpl simpl))
- (args (ml4pg-extract-real-params args0)))
- (append (list (list (cdr (assoc "exists" ml4pg-tactic_id))
- 1 (ml4pg-get-types-list-exists (ml4pg-extract-params3 (subseq cmd 7 moves)) 0) -1))
- (list (list (* -1 (ml4pg-get-number-list2 args (cdr (assoc "move" ml4pg-tactic_id)))) (length args) (ml4pg-get-types-list args 0) (* -1 (ml4pg-get-number-list args))))
- (if simpl (list simpl-nums) nil)))))
- )
-
-
-(defun ml4pg-numbers-done (cmd top level)
- (progn
- (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 top 0 0 0) level)
- (setf ml4pg-done (append ml4pg-done (list (list 0 0 0 top))))
- (list (list (cdr (assoc "[]" ml4pg-tactic_id)) 1 0 0) ) )
-)
-
-
-(defun ml4pg-remove-multiple-spaces (string)
- (let ((d (search " " string)))
- (if d
- (ml4pg-remove-multiple-spaces (concatenate 'string (subseq string 0 d) (subseq string (1+ d))))
- string)))
-
-
-
-(defun ml4pg-compute-numbers-cmd (cmd top level)
- (let* ((cmd1 (ml4pg-remove-multiple-spaces cmd)))
- (cond ((search "symmetry" cmd) nil)
- ((search "last by" cmd) (ml4pg-compute-numbers-cmd (subseq cmd (+ 3 (search "by" cmd))) top level))
- ((search "first by" cmd) (ml4pg-compute-numbers-cmd (subseq cmd (+ 3 (search "by" cmd))) top level))
- ((string= "try" (subseq cmd 0 2)) (ml4pg-compute-numbers-cmd (subseq cmd (+ 4 (search "try" cmd))) top level))
- ((string= "do" (subseq cmd 0 2)) (ml4pg-compute-numbers-cmd (subseq cmd (cond ((search "!" cmd) (1+ (search "!" cmd)))
- ((search "?" cmd) (1+ (search "?" cmd)))
- (t (+ 3 (search "do" cmd))))) top level))
- ((search "have" cmd) nil)
- ((or (search "move=>" cmd1) (search "move =>" cmd1)) (ml4pg-numbers-move=> cmd1 top level))
- ((or (search "move:" cmd1) (search "move :" cmd1)) (ml4pg-numbers-move: cmd1 top level))
- ((or (search "move/" cmd1) (search "move /" cmd1)) (ml4pg-numbers-move/ cmd1 top level))
- ((or (search "move<-" cmd1) (search "move->" cmd1) (search "move ->" cmd1) (search "move <-" cmd1)) (ml4pg-numbers-move< cmd1 top level))
- ((or (search "apply/" cmd1) (search "apply /" cmd1)) (ml4pg-numbers-apply/ cmd1 top level))
- ((or (search "apply:" cmd1) (search "apply :" cmd1) (search "apply" cmd1)) (ml4pg-numbers-apply: cmd1 top level))
- ((or (search "elim:" cmd1) (search "elim :" cmd1)) (ml4pg-numbers-elim cmd1 top level))
- ((or (search "case/" cmd1) (search "case /" cmd1)) (ml4pg-numbers-case/ cmd1 top level))
- ((or (search "case:" cmd1) (search "case" cmd1)) (ml4pg-numbers-case cmd1 top level))
- ((or (search "exact" cmd1) (search "exact :" cmd1)) (ml4pg-numbers-exact cmd1 top level))
- ((search "rewrite" cmd1) (ml4pg-numbers-rewrite cmd1 top level))
- ((search "exists" cmd1) (ml4pg-numbers-exists cmd1 top level))
- ((or (search "[]" cmd1) (search "done" cmd1) (search "constructor" cmd1)) (ml4pg-numbers-done cmd1 top level))
-
- ((string= (subseq cmd1 0 4) "pose") nil)
- ((string= (subseq cmd1 0 3) "set") nil)
- ((string= (subseq cmd1 0 4) "left") nil)
- ((string= (subseq cmd1 0 4) "righ") nil)
- )
- )
- )
-
-
-(defun ml4pg-split-command (cmd result end)
- (if (or (string= " " (subseq cmd 0 1)) (string= "-" (subseq cmd 0 1)))
- (ml4pg-split-command (subseq cmd 1) result end)
- (let ((is_by (string= "by" (subseq cmd 0 2))))
- (if is_by
- (ml4pg-split-command (subseq cmd 3) result 1)
- (let ((comma (search ";" cmd)))
- (if comma
- (ml4pg-split-command (subseq cmd (1+ comma)) (append result (list (subseq cmd 0 comma))) end)
- (list (append result (list (subseq cmd 0 (1- (length cmd))))) end)))))))
-
-
-
-
-(defun ml4pg-add-tactics (tactics end top level)
- (do ((temp tactics (cdr temp))
- (temp2 nil))
- ((endp temp) (if (> end 0) (append temp2 (list (list 0 1 0 0))) temp2))
- (let ((res (ml4pg-compute-numbers-cmd (car temp) top level)))
- (if res (setf temp2 (append temp2 res))))))
-
-
-;The first value is the tactic, the second one is the number of tactics,
-;the third one is the argument type, the fourth one is if the
-;argument is a hypothesis of a theorem, the fifth one is the top-symbol
-;and the last one the number of subgoals
-
-
-(defun ml4pg-get-numbers (cmd top level)
- (let* ((res (ml4pg-split-command cmd nil 0))
- (tactics (car res))
- (end (cadr res))
- (nums (ml4pg-add-tactics tactics end top level)))
- (if nums (do ((temp (cdr nums) (cdr temp))
- (temp2 (list (format "%s" (nth 0 (car nums))) (nth 1 (car nums)) (format "%s" (nth 2 (car nums))) (format "%s" (nth 3 (car nums))))))
- ((endp temp) (list (string-to-number (nth 0 temp2)) (nth 1 temp2) (string-to-number (nth 2 temp2)) (string-to-number (nth 3 temp2))) )
- (setf temp2 (list (if (or (< (string-to-number(nth 0 temp2)) 0) (< (nth 0 (car temp)) 0))
- (concatenate 'string (format "-%s" (abs (string-to-number(nth 0 temp2)))) (format "%s" (abs (nth 0 (car temp)))))
- (concatenate 'string (format "%s" (abs (string-to-number(nth 0 temp2))) ) (format "%s" (abs (nth 0 (car temp))))))
- (+ (nth 1 temp2) (nth 1 (car temp)))
- (if (or (< (abs (string-to-number(nth 2 temp2))) 0) (< (nth 2 (car temp)) 0))
- (concatenate 'string (format "-%s" (abs (abs (string-to-number(nth 2 temp2))))) (format "%s" (abs (nth 2 (car temp)))))
- (concatenate 'string (format "%s" (abs (abs (string-to-number(nth 2 temp2))))) (format "%s" (abs (nth 2 (car temp))))))
- (if (or (< (string-to-number (nth 3 temp2)) 0) (< (nth 3 (car temp)) 0))
- (concatenate 'string (format "-%s" (abs (string-to-number (nth 3 temp2)))) (format "%s" (abs (nth 3 (car temp)))))
- (concatenate 'string (format "%s" (abs (string-to-number (nth 3 temp2)))) (format "%s" (abs (nth 3 (car temp))))))
- ))
- )
- )))
-
-;; Function to obtain the information just about the goals.
-
-(defun ml4pg-count-seq (item seq)
- (let ((is? (search item seq)))
- (if is?
- (+ 1 (ml4pg-count-seq item (subseq seq (+ 1 is?))))
- 0)))
-
-(defun ml4pg-get-number-of-goals ()
- (let ((r (proof-shell-invisible-cmd-get-result (format "Show Proof"))))
- (ml4pg-count-seq "?" r)))
-
-
-(defun ml4pg-flat (ll)
- (if (endp ll)
- nil
- (append (car ll) (ml4pg-flat (cdr ll)))))
-
-
-
-
-;; The following function computes the result of the tactic
-
-
-(defun ml4pg-digits (n)
- (if (= (mod n 10) 0)
- 0
- (1+ (ml4pg-digits (/ n 10)))))
-
-(defun ml4pg-first-digit (n digits)
- (/ n (expt 10 (1- digits))))
-
-(defun ml4pg-rest-of-digits (n digits)
- (- n (* (ml4pg-first-digit n digits) (expt 10 (1- digits)))))
-
-(defun ml4pg-obtain-tactic-result (tactic)
- (do ((temp (cdr tactic) (cdr temp))
- (temp2 (if (endp tactic) (list 0 0 0 0 0)
- (list (ml4pg-first-digit (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic))))
- (* (ml4pg-rest-of-digits (nth 0 (car tactic)) (ml4pg-digits (nth 0 (car tactic)))) (expt 10 (length (cdr tactic))))
- (* (nth 1 (car tactic)) (expt 10 (length (cdr tactic))))
- (nth 2 (car tactic))
- (nth 3 (car tactic))))))
- ((endp temp) temp2)
- (setf temp2 (list (nth 0 temp2)
- (+ (nth 1 temp2) (* (expt 10 (length (cdr temp))) (nth 0 (car temp))))
- (+ (nth 2 temp2) (* (expt 10 (length (cdr temp))) (nth 1 (car temp))))
- (concat (format "%s" (nth 3 temp2)) (format "%s" (nth 2 (car temp))))
- (+ (nth 4 temp2) (nth 3 (car temp))))
- )
- ))
-
-
-
-
-(defvar ml4pg-useless-terms '("Definition" "Defined" "Fixpoint" "Structure" "Section" "Add Ring" "Hypothesis" "Hypotheses" "Include" "Export" "Parameter" "Axiom"
-"End" "Notation" "Hint" "Inductive" "Variable" "Implicit" "Import" "Canonical" "Coercion"
-"Module" "Ltac" "Let" "Opaque" "Bind" "Scope" "Require" "Infix" "Record" "Fact" "Print"))
-
-(defun ml4pg-is-in-search (cmd)
- (do ((temp ml4pg-useless-terms (cdr temp))
- (is nil))
- ((or (endp temp) is) is)
- (if (search (car temp) cmd) (setf is t))))
-
-
-
-(defun ml4pg-compute-tactic-value (list)
- (if (not list) (list 0 0 0 0 0)
- (let ((len (length list))
- (arg0 (car (car list)))
- (arg1 (format "%s" (nth 1 (car list))))
- (hyp (format "%s" (nth 2 (car list))))
- (top (format "%s" (nth 3 (car list)))))
- (do ((temp (cdr list) (cdr temp)))
- ((endp temp) (list arg0 (string-to-number arg1) (string-to-number hyp) (string-to-number top) len))
- (progn (setf arg1 (format "%s%s%s" arg1 (nth 0 (car temp)) (nth 1 (car temp))))
- (setf hyp (format "%s%s" hyp (nth 2 (car temp))))
- (setf top (format "%s%s" top (nth 3 (car temp))))
- )))))
-
-
-
-(defun ml4pg-compute-tactic-result (name)
- (append (list name) (list (append
- (ml4pg-compute-tactic-value ml4pg-move)
- (ml4pg-compute-tactic-value ml4pg-case)
- (ml4pg-compute-tactic-value ml4pg-elim)
- (ml4pg-compute-tactic-value ml4pg-apply/)
- (ml4pg-compute-tactic-value ml4pg-move/)
- (ml4pg-compute-tactic-value ml4pg-case/)
- (ml4pg-compute-tactic-value ml4pg-rewrite)
- (ml4pg-compute-tactic-value ml4pg-exists)
- (ml4pg-compute-tactic-value ml4pg-done)
- (ml4pg-compute-tactic-value ml4pg-exact)))))
-
-(defun ml4pg-compute-proof-tree-result (name)
- (append (list name) (list (append
- (if ml4pg-tdl1 ml4pg-tdl1 (ml4pg-generate-zeros 13))
- (if ml4pg-tdl2 ml4pg-tdl2 (ml4pg-generate-zeros 13))
- (if ml4pg-tdl3 ml4pg-tdl3 (ml4pg-generate-zeros 13))
- (if ml4pg-tdl4 ml4pg-tdl4 (ml4pg-generate-zeros 13))
- (if ml4pg-tdl5 ml4pg-tdl5 (ml4pg-generate-zeros 13))))))
-
-
-
-
-
-(defun ml4pg-export-theorem-aux (result name)
- (let* ((semis (save-excursion
- (skip-chars-backward " \t\n"
- (proof-queue-or-locked-end))
- (proof-segment-up-to-using-cache (point))))
- (comment (caar semis))
- (cmd (cadar semis))
- (pos_dot (search "." cmd))
- (pos_space (search " " cmd))
- (ts nil))
- (if semis
- (cond ((or (string= comment "comment")
- (ml4pg-is-in-search cmd))
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result name)))
- ((search "Lemma" cmd)
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result
- (subseq cmd (1+ (search " " cmd))
- (search " " cmd :start2 (1+ (search " " cmd))))
- )))
- ((search "Proof" cmd)
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result name )))
- ((search "Theorem" cmd)
- (progn (proof-assert-next-command-interactive)
- (ml4pg-export-theorem-aux result
- (subseq cmd (1+ (search " " cmd))
- (search " " cmd :start2 (1+ (search " " cmd))))
- )))
- ((search "Qed." cmd)
- (progn (proof-assert-next-command-interactive)
- ; (insert (format "\n(* %s *)\n" (reverse result)))
- ;(setf proof-tree-level (append proof-tree-level (list (compute-proof-result))))
- ;(setf tactic-level (append tactic-level (list (compute-tactic-result))))
- (setf ml4pg-tactic-level (append ml4pg-tactic-level (list (ml4pg-compute-tactic-result name))))
- (setf ml4pg-proof-tree-level (append ml4pg-proof-tree-level (list (ml4pg-compute-proof-tree-result name))))
- (if name
- ; (split-feature-vector name (flat (reverse result)))
- (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
- (list (list name (ml4pg-flat (reverse result))))))
- )))
- (t (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (ml4pg-export-theorem-aux (cons (append (ml4pg-get-numbers cmd ts ml4pg-current-level) (list ts) (list ng2)) result)
- name)
- (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 0 ng2 (if (< ng2 ng) 1 0)) ml4pg-current-level)
- (setf ml4pg-current-level (1+ ml4pg-current-level))
-
- ))))))
-
-
-
-
-(defun ml4pg-split-feature-vector (name fv)
- (let ((len (1+ (floor (length fv) 30))))
- (do ((i 0 (+ i 1)))
- ((equal i len) nil)
- (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
- (list (list name (ml4pg-take-30-from fv i))))))
- ))
-
-
-(defun ml4pg-take-30-from (list pos)
- (let ((j (* 30 pos)))
- (do ((i j (1+ i))
- (temp2 nil (if (nth i list) (cons (nth i list) temp2) (cons 0 temp2))))
- ((= i (+ j 30)) (reverse temp2)))))
-
-
-
-
-;;; Functions to save the files
-
-(defun ml4pg-save-file-conventions1 ()
- (interactive)
- (let ((file (read-file-name "Save in file (don't include the extension): ")))
- (progn (with-temp-file (concat file "_goals.csv") (insert (ml4pg-extract-features-1)))
- (with-temp-file (concat file "_tactics.csv") (insert (ml4pg-extract-features-2 tactic-level)))
- (with-temp-file (concat file (format "_summary.txt")) (insert (ml4pg-extract-names))))))
-
-
-(defun ml4pg-extract-names ()
- (do ((temp ml4pg-saved-theorems (cdr temp))
- (temp2 "")
- (i 1 (1+ i)))
- ((endp temp) temp2)
- (setf temp2 (concat temp2 (format "%s %s\n" i (ml4pg-remove_last_colon (caar temp)))) )))
-
-
-
-
-
-(defun ml4pg-print-list (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) (subseq temp2 0 (1- (length temp2))))
- (setf temp2 (concat temp2 (format "%s," (car temp))) )))
-
-
-(defun ml4pg-last-part-of-lists (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (setf temp2 (append temp2 (list (cadar temp))))))
-
-
-
-
-(defun ml4pg-extract-features-1 ()
- (let ((fm (ml4pg-find-max-length)))
- (do ((temp (ml4pg-last-part-of-lists ml4pg-saved-theorems) (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2
- (format "%s\n"
- (ml4pg-print-list (ml4pg-take-30 (append (car temp)
- (ml4pg-generate-zeros 30))) ))))
- )
- ))
-
-
-
-
-
-
-(defun ml4pg-extract-features-2 (list)
- (do ((temp (ml4pg-last-part-of-lists (cdr list)) (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2 (format "%s\n" (ml4pg-print-list (car temp)))))))
-
-
-
-(defun ml4pg-generate-zeros (n)
- (do ((i 0 (1+ i))
- (temp nil (cons 0 temp)))
- ((= i n) temp)))
-
-(defun ml4pg-find-max-length ()
- (do ((temp ml4pg-saved-theorems (cdr temp))
- (i 0))
- ((endp temp) i)
- (if (< i (length (cadar temp)))
- (setf i (length (cadar temp)))
- nil)))
-
-(defun ml4pg-take-30 (list)
- (do ((i 0 (1+ i))
- (temp list (cdr temp))
- (temp2 nil (cons (car temp) temp2)))
- ((= i 30) (reverse temp2))))
-
-
-;; Function which extract the info of a theorem up to a concrete point
-
-(defvar ml4pg-tactic-temp nil)
-(defvar ml4pg-proof-tree-temp nil)
-
-(defun ml4pg-extract-info-up-to-here ()
- (interactive)
- (setf ml4pg-move nil
- ml4pg-case nil
- ml4pg-elim nil
- ml4pg-apply nil
- ml4pg-apply/ nil
- ml4pg-move/ nil
- ml4pg-case/ nil
- ml4pg-rewrite nil
- ml4pg-exists nil
- ml4pg-done nil
- ml4pg-exact nil
- ml4pg-tactic-temp nil
- ml4pg-tdl1 nil
- ml4pg-tdl2 nil
- ml4pg-tdl3 nil
- ml4pg-tdl4 nil
- ml4pg-tdl5 nil
- ml4pg-current-level 1
- ml4pg-dot-level nil)
- (let ((final (point))
- (result nil)
- (end nil))
- (search-backward "Proof.")
- (proof-goto-point)
- (while (< (point) final)
- (let* ((semis (save-excursion
- (skip-chars-backward " \t\n"
- (proof-queue-or-locked-end))
- (proof-segment-up-to-using-cache (point))))
- (comment (caar semis))
- (cmd (cadar semis))
- (ts nil))
- (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (if cmd
- (setf result (cons (append (ml4pg-get-numbers cmd ts ml4pg-current-level) (list ts) (list ng2)) result)))
- (ml4pg-add-info-to-level (list 0 0 0 0 0 0 0 0 0 0 0 ng2 (if (< ng2 ng) 1 0)) ml4pg-current-level)
- (setf ml4pg-current-level (1+ ml4pg-current-level))
- )
-
- )
- )
- (setf ml4pg-tactic-temp (cadr (ml4pg-compute-tactic-result "")))
- (setf ml4pg-proof-tree-temp (cadr (ml4pg-compute-proof-tree-result "")))
- (ml4pg-take-30 (append (ml4pg-flat (reverse result)) (ml4pg-generate-zeros 30) ))
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
- ))
-
-
-
-(defun ml4pg-extract-features-1-bis (thm)
- (let ((fm (ml4pg-find-max-length)))
- (do ((temp (append (ml4pg-last-part-of-lists ml4pg-saved-theorems) (list thm)) (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2
- (format "%s\n"
- (ml4pg-print-list (ml4pg-take-30 (append (car temp)
- (ml4pg-generate-zeros 30))) ))))
- )
- ))
-
-
-(defun ml4pg-extract-features-2-bis (thm list)
- (let ((fm (find-max-length)))
- (do ((temp (append (ml4pg-last-part-of-lists (cdr list)) (list thm)) (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2
- (format "%s\n"
- (ml4pg-print-list (car temp)))))
- )
- ))
-
-
-
-
-
-
-;; Function which extract the information from all the theorems up to a point
-
-(defun ml4pg-extract-feature-theorems ()
- (interactive)
- (let ((final (point))
- (current-level 1)
- (last-point -1))
- (ml4pg-export-theorem)
- (while (and (< (point) final) (not (= (point) last-point)))
- (progn (setq last-point (point))
- (ml4pg-export-theorem)))))
-
-
-
-
-
-(defun ml4pg-extract-theorems-library ()
- (interactive)
- (search-backward "Qed.")
- (forward-char)
- (forward-char)
- (forward-char)
- (forward-char)
- (let ((final (point))
- (last-point -1))
- (beginning-of-buffer)
- (proof-goto-point)
- (ml4pg-export-theorem)
- (while (and (< (point) final) (not (= (point) last-point)))
- (progn (setq last-point (point))
- (ml4pg-export-theorem)))
- )
-
- )
-
-
-
-;;; Function to normalize the results
-
-(defun ml4pg-max-two-lists (list1 list2)
- (do ((temp1 (ml4pg-take-30 (append list1 (ml4pg-generate-zeros 24))) (cdr temp1))
- (temp2 (ml4pg-take-30 (append list2 (ml4pg-generate-zeros 24))) (cdr temp2))
- (temp nil))
- ((endp temp1) temp)
- (if (< (car temp1) (car temp2))
- (setf temp (append temp (list (car temp2))))
- (setf temp (append temp (list (car temp1))))
- )))
-
-(defun ml4pg-min-two-lists (list1 list2)
- (do ((temp1 (ml4pg-take-30 (append list1 (ml4pg-generate-zeros 24))) (cdr temp1))
- (temp2 (ml4pg-take-30 (append list2 (ml4pg-generate-zeros 24))) (cdr temp2))
- (temp nil))
- ((endp temp1) temp)
- (if (> (car temp1) (car temp2))
- (setf temp (append temp (list (car temp2))))
- (setf temp (append temp (list (car temp1))))
- )))
-
-(defun ml4pg-max-position (list )
- (do ((temp list (cdr temp))
- (max (ml4pg-generate-zeros (length (car list)))))
- ((endp temp) max)
- (setf max (ml4pg-max-two-lists max (car temp)))))
-
-(defun ml4pg-min-position (list )
- (do ((temp list (cdr temp))
- (min (ml4pg-generate-zeros (length (car list)))))
- ((endp temp) min)
- (setf min (ml4pg-min-two-lists min (car temp)))))
-
-
-(defun ml4pg-normalize-list (list max min)
- (do ((temp (ml4pg-take-30 (append list (ml4pg-generate-zeros 24))) (cdr temp))
- (temp-max max (cdr temp-max))
- (temp-min min (cdr temp-min))
- (temp2 nil))
- ((endp temp) temp2)
- (cond ((< 0 (car temp)) (setf temp2 (append temp2 (list (/ (+ (car temp) .0) (car temp-max))))))
- ((= 0 (car temp)) (setf temp2 (append temp2 (list 0))))
- (t (setf temp2 (append temp2 (list (- (/ (+ (car temp) .0) (car temp-min))))))))))
-
-(defun ml4pg-normalize (list)
-
- (let ((max (ml4pg-max-position list))
- (min (ml4pg-min-position list)))
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (setf temp2 (append temp2 (list (ml4pg-normalize-list (car temp) max min)))))))
-
-
-
-
-
-
-
-
diff --git a/contrib/ML4PG/ssreflect/lemmas.txt b/contrib/ML4PG/ssreflect/lemmas.txt
deleted file mode 100644
index c818e3b0..00000000
--- a/contrib/ML4PG/ssreflect/lemmas.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-size_ncons&102$addn0&103$IHs&104$cats1&105$size_cat&106$addnC&107$last_cat&108$lastI&109$belast_cat&110$catA&111$|&112$rewrite&113$cat0s&114$cats0&115$cat_rcons&116$last_nth&119$nth_nil&120$eq_s12&122$IHs1&123$=>&124$i&125$addn1&126$maxn0&127$maxnE&128$subn1&129$add1n&130$addn_maxr&131$nth_ncons&132$eqSS&133$subnn&134$nth_default&135$subn_gt0&136$size_set_nth&138$maxnA&139$maxnn&140$nth_set_nth&141$maxnCA&142$eq_sym&143$if_neg&144$ne_n12&145$add0n&147$eqn_leq&148$andbC&149$ltnNge&150$count_size&151$leqnn&154$fun_if&155$filter_cat&159$count_filter&160$orbA&161$has_cat&162$has_seq1&163$orbC&164$andbA&165$all_cat&166$all_seq1&167$Ea&168$eq_filter&169$has_count&170$eq_count&171$all_count&172$has_find&173$s12&177$filter_pred0&179$filter_predT&180$addnCA&181$addnA&182$addn_negb&183$count_pred0&184$count_predT&185$negb_and&187$has_predC&188$has_predU&189$iterSr&191$IHn&192$drop_oversize&194$drop0&195$take_oversize&196$cat_take_drop&198$size_drop&199$size_takel&200$ltnW&201$ltnS&202$subSS&203$take0&204$take_cat&205$ltn_neqAle&206$Hn0&207$take_size&208$nth_cat&209$size_take&210$lt_n0_s&211$addKn&212$leq_addr&213$eqnP&216$lt_i_n0&217$1IHs&218$take_size_cat&220$drop_size_cat&221$size_rot&222$rot_size_cat&223$catrev_catr&225$catrevE&226$rev_cons&227$size_rcons&228$catrev_catl&229$rev_cat&230$rev_rcons&231$subn0&232$ltnn&233$subnK&234$addSnnS&235$eqseq_cons&237$andbF&238$1andbA&239$in_cons&241$inE&242$mem_cat&243$mem_seq1&244$mem_rcons&246$mem_head&247$mem_behead&249$s0x&250$s0'x&251$orbT&252$ay&254$eq_a&258$y&259$s_y&260$eq_a12&261$s'y&262$eq_in_count&263$has_filter&264$Es12&265$in&266$Hx&267$*&268$eqxx&270$all_pred1_nseq&271$def_s&273$has_pred0&274$has_sym&275$negb_or&276$cat_uniq&277$andbCA&278$uniq_catC&279$mem_filter&280$negbTE&281$mem_rev&282$Hy&283$all_pred1P&284$count_uniq_mem&285$s_x&286$mem_undup&287$size_undup&288$find_size&290$has_pred1&291$find_cat&292$lt_i_s&293$mem_nth&294$rcons_uniq&295$index_cat&296$size_belast&297$index_uniq&298$eq_sij&299$cat_cons&302$i.+1&304$nax&305$exists&306$i]&307$eq_all&308$a_s&309$IHv&310$count_cat&312$addn_eq0&313$count_predC&314$filter_predI&315$cnt_a'&316$leq_add2r&318$eq12&319$perm_eq_sym&321$eqn_add2l&322$perm_catC&324$perm_cat2r&326$cat1s&328$perm_catCA&329$perm_cons&330$def_s2&331$mem_rot&332$negPf&333$rot_uniq&334$le_s21&335$leqNgt&337$s3x&338$uniq_leq_size&339$eqs12&340$eqs12,&342$uniq_size_uniq&343$@uniq_leq_size&345$s2x&346$Hs12&347$x&352$\in&353$s1&354$by&355$/(rot i s1)&356$def_s1&357$FcatCA&359$addnK&360$rot1_cons&361$rotK&362$has_rot&363$subKn&364$rot0&365$size_rev&367$size_rotr&370$@size_takel&371$5(catA, =^~ rot_size_cat)&372$leq_addl&373$rot_addn&375$addnBA&376$@rot_oversize&377$1ltnW&378$rot_add_mod&379$1addnC&380$rot_rot&381$has_mask_cons&382$Hsn0:&383$size&384$take&385$=&386$Hs&387$size_mask&388$mask_cat&389$mask_rot&392$size_nseq&393$mask_false&394$sz_m&396$geq_min&397$nth_take&398$negb_add&399$addbF&400$addbT&401$negb_eqb&402$before_find&403$def_m_i&404$lt_i_m&405$subnKC&406$congr1&407$drop_nth&410$nth_index&411$index_mem&412$mask0&413$sz_m1&414$sz_m2&415$cat_subseq&416$sub0seq&417$mask_true&419$all_predC&428$map_cat&429$map_take&430$map_drop&431$map_rot&433$size_map&434$filter_mask&435$a_x&436$size_subseq_leqif&438$subseq_filter&439$introT&440$uniq_perm_eq&441$filter_uniq&442$Ds2&444$perm_rcons&445$eqP&446$x']&447$map_mask&449$inj_in_eq&450$count_map&453$Est&454$eq_sz&457$ltis&458$nth_map&459$Ef&460$eq_f12&461$eqf12&462$eqxx,&463$sy&464$gK&466$fK&467$mem_map&468$pmap_filter&469$size_pmap&471$IHn1&475$addnS&476$iota_add&477$size_iota&478$andbN&479$leq_eqVlt&480$mem_iota&482$nth_iota&484$size_mkseq&486$Hi&487$nth_mkseq&488$mkseq_nth&490$perm_map&491$perm_eq_small&492$s&493$Ds&494$iota_addl&495$map_rotr&496$map_comp&497$@eq_map&498$mulnC&499$sumn_nseq&500$foldr_cat&501$revK&502$Hfg&503$Hgf&504$addn_minr&505$size_zip&506$zip_cat&507$zip_rcons&508$IHss&509$IHsh&510$leq_subLR&511$leq_add2l&513$leq_max&514$def_z&515$def_x'&516$map_f&517$not_fxt_z&518$eq_s&519$eq_t&520$fpz&521$sp2&522$Ut&526$:&527$z.1,&528$x,&529$Dz1&530$s1z&531$s1'x&532$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$andb_false_r&108$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$i:&174$F&175$=&176$G&177$by&178$big_const_seq&179$cardE&180$size_iota&181$big_const&182$card_ord&183$big1&186$big_mkcond&187$mul1m,&188$filter_index_enum&189$enum1&190$big_seq1&191$big_cat&193$iota_add&194$leq_sub&195$big_geq&196$@big_cat_nat&197$leqnSn&198$big_nat1&199$big_nat_recr&200$leqW&202$val_enum_ord&204$map_cat&205$map_comp&206$eqxx&207$r2i:&208$\in&209$r2&210$has_pred1&211$eq_r12&212$count_cat&214$uniq_perm_eq&217$enum_uniq&218$big_tnth&219$index_uniq&220$valK&221$filter_undup&222$IHr&223$big_rem&224$idM&225$big_undup&226$undup_uniq&227$mem_undup&228$eq_r&229$big_split&230$simpm&231$bigID&232$orbK&233$cardD1&235$Aj&236$Qp&238$Q0&239$cardD1x&240$bigD1&241$Qj,&242$j&243$P0&244$IH&245$h'K&246$reindex_onto&247$hK&248$reindex_inj&251$addSn&252$subnDr&253$addnBA&254$partition_big&255$Pi&256$andbT&257$andb_idl&259$exchange_big_dep&260$Qi&261$2(big_seq_cond _ _ _ xQ)&262$exchange_big_dep_nat&263$big_endo&264$mulm0&266$x&267$y&268$big_distrl&270$big_distrr&271$f&276$ffunE&277$nri&278$eqP&279$big_distr_big_dep&280$mul0m&282$bigA_distr_big&284$big_has_cond&285$big_all_cond&286$allB&287$sum_nat_const&289$muln1&290$Monoid&291$big_const_nat&292$big_andE&293$@leqif_sum&296$muln_gt0&297$leq_maxl&299$geq_max&304$dvdn_lcm&307$in&308$dvFm&309$p_m&310$dvdn_trans&311$dvdn_lcml&312$dvdn_gcd&313$dvmF&314$m_p&315$dvdn_gcdl&316$mul0n&317$muln0&318$mulnDr&319$mulnDl&320$mulnC&321$addn2&322$exp0n&323$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$mxE&102$ord1&105$perm1&106$permM&107$eq_axiomK&108$cast_ord_id&109$castmx_id&110$mxE,&113$unsplitK&116$row_mxEl&117$row_mxEr&118$col_mxEu&120$col_mxEd&121$row_mxKl,&122$col_mxKu,&123$tr_col_mx&125$trmx_usub&126$trmx_dsub&127$hsubmxK&128$castmxE&130$j&131$&&&132$by&133$def_j&134$lshift_subproof&135$mxE]&136$~~&137$j2&138$leqNgt&139$j1&140$<&141$n2&142$ltn_add2l&143$leq_add2l&144$trmx_cast&145$row_mxA&146$tr_col,&147$tr_col',&148$row_mxEl,&149$row_mxEr,&150$col_mxEu,&151$col_mxEd,&152$2mxE&153$def_j'&155$addSn&156$ltn_addr&157$@tr_row'&158$@tr_col_mx&159$col'Kl&160$addnS&161$tr_row',&162$col'Kr&163$vsubmxK&164$col_mxKu&165$row_mxKl&166$row_mxKr&167$col_mxKd&168$submxK&169$trmx_ulsub&170$trmx_ursub&171$trmx_dlsub&172$trmx_drsub&173$block_mxKul&174$block_mxKur&175$block_mxKdl&176$block_mxKdr&177$tr_block_mx&178$tr_row_mx&179$2tr_col_mx&180$block_mxEh&181$col_mxA&182$cast_row_mx&183$block_mxEv&184$cast_col_mx&185$castmx_comp&186$etrans_id&187$card_prod&188$card_ord&189$cast_ordK&190$enum_valK&191$enum_rankK&192$mxvecE&193$castmxE,&194$conform_mx_id&195$neq_mn&196$B&197$nonconform_mx&198$addrA&199$addrC&200$add0r&201$addNr&202$mulrS&203$IHd&204$can2_eq&208$raddf0&209$opp_col_mx&213$opp_row_mx&214$add_col_mx&215$add_row_mx&216$negbTE&217$row0&220$eqxx&221$map_const_mx&222$raddfN&223$raddfD&224$map_mxD&225$map_mxN&226$mul1r&227$mulrDl&228$mulrDr&229$mulrA&230$summxE&231$bigD1&232$mulr1&233$big1&234$addr0&235$diff&236$j'&237$mulr0&238$matrix_sum_delta&239$big_ord1&240$can_eq&241$inj_eq&242$vec_mx_delta&243$vec_mxK&244$scale_col_mx&245$scale_row_mx&246$mulrnAr&247$mulrnDl&248$mulr_natr&249$i'&250$ne_i'i&251$diag_const_mx&253$raddfB&254$scale_scalar_mx&255$diag_mx_sum_delta&256$scalar_mx_sum_delta&258$scaler_sumr&259$scale1r&260$A&262$eqxx]&263$eqn0Ngt&264$n0&265$in&266$*&267$flatmx0&268$val_eqE&269$eqn_add2l&270$big_distrr&271$exchange_big&272$big_distrl&273$mul0r&274$sumrN&275$mulrN&276$mulNr&277$big_split&278$mulmxDl&279$mulNmx&280$mulmxDr&281$mulmxN&282$mul0mx&284$mulmx0&286$rowE&287$mulmxA&288$mulmxnE&289$andbT&290$natrM&291$mulrnA&292$mulnb&293$andbAC&294$mul_delta_mx_cond&295$mulrnAl&296$mul_diag_mx&297$mul_scalar_mx&298$mul_mx_diag&299$reindex_inj&300$permKV&301$mul_col_perm&302$invgK&303$tpermV&304$mul_row_perm&305$mulmx1&306$mul1mx&307$col_permE&308$trmx1&310$tr_perm_mx&311$row_permM&313$perm_mx1&315$perm_mx_is_perm&316$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$x&229$\in&230$s1&231$by&232$/(rot i s1)&233$def_s1&234$FcatCA&236$addnK&237$rot1_cons&238$rotK&239$has_rot&240$subKn&241$rot0&242$size_rev&244$size_rotr&247$@size_takel&248$5(catA, =^~ rot_size_cat)&249$leq_addl&250$rot_addn&252$addnBA&253$@rot_oversize&254$1ltnW&255$rot_add_mod&256$1addnC&257$rot_rot&258$has_mask_cons&259$Hsn0:&260$size&261$take&262$=&263$Hs&264$size_mask&265$mask_cat&266$mask_rot&269$size_nseq&270$mask_false&271$sz_m&273$geq_min&274$nth_take&275$negb_add&276$addbF&277$addbT&278$negb_eqb&279$before_find&280$def_m_i&281$lt_i_m&282$subnKC&283$congr1&284$drop_nth&287$nth_index&288$index_mem&289$mask0&290$sz_m1&291$sz_m2&292$cat_subseq&293$sub0seq&294$mask_true&296$all_predC&305$map_cat&306$map_take&307$map_drop&308$map_rot&310$size_map&311$filter_mask&312$a_x&313$size_subseq_leqif&315$subseq_filter&316$introT&317$uniq_perm_eq&318$filter_uniq&319$Ds2&321$perm_rcons&322$eqP&323$x']&324$map_mask&326$inj_in_eq&327$count_map&330$Est&331$eq_sz&334$ltis&335$nth_map&336$Ef&337$eq_f12&338$eqf12&339$eqxx,&340$sy&341$gK&343$fK&344$mem_map&345$pmap_filter&346$size_pmap&348$IHn1&352$addnS&353$iota_add&354$size_iota&355$andbN&356$leq_eqVlt&357$mem_iota&359$nth_iota&361$size_mkseq&363$Hi&364$nth_mkseq&365$mkseq_nth&367$perm_map&368$perm_eq_small&369$s&370$Ds&371$iota_addl&372$map_rotr&373$map_comp&374$@eq_map&375$mulnC&376$sumn_nseq&377$foldr_cat&378$revK&379$Hfg&380$Hgf&381$addn_minr&382$size_zip&383$zip_cat&384$zip_rcons&385$IHss&386$IHsh&387$leq_subLR&388$leq_add2l&390$leq_max&391$def_z&392$def_x'&393$map_f&394$not_fxt_z&395$eq_s&396$eq_t&397$fpz&398$sp2&399$Ut&403$:&404$z.1,&405$x,&406$Dz1&407$s1z&408$s1'x&409$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$m1_lb&186$m2_lb,&187$eqPQ&188$max_i&189$max_j&190$eq_f&191$mulSn&193$mulnS&194$mulnSr&195$muln0&196$muln0,&197$mulnC&198$mulnDl&199$mulnBl&200$mulnA&201$mulnCA&202$mulnBr&203$muln_eq0&204$leq_mul2l&205$le_mn2&207$orbT&208$leq_mul2r&209$le_mn1&210$orb_andr&211$eqn_mul2l&212$eqn_mul2r&213$ltn_mul2l&214$ltn_mul2r&215$mul1n&216$ltn_pmul2r&217$ltn_Pmull&218$maxn_mulr&220$minn_mulr&221$muln1&222$expnS&223$mul1n,&224$exp1n&225$expnD&226$expnMn&227$expnM&228$addn_gt0&229$eqn0Ngt&230$expn_gt0&231$leq_pmul2l&232$leq_pmulr&233$leq_exp2l&234$eqn_exp2l&235$leq_exp2l]&236$ltn_exp2l]&237$leq_mul&239$expn1&240$ltn_mul&241$IHe&242$ltn_exp2r&243$leq_exp2r&244$eqn_exp2r&245$muln_gt0&246$addTb&247$addbA&248$odd_add&251$odd_sub&252$andb_addl&253$odd_mul&254$addnn&255$mul2n&256$doubleB&257$2ltnNge&258$leq_double&259$doubleS&260$ltn_Sdouble&261$addbb&262$muln2&263$uphalf_half&264$doubleD&265$half_double,&266$odd_double_half&267$half_double&268$uphalf_double&269$halfD&270$mulnn&271$mulnDr&272$def_m&273$sqrnD&274$2addnA&275$/(2 * 2)&276$sqrn_sub&277$lte&280$ltm12&281$ltm23&282$andbT&283$eqm12&284$f_mono&285$in&286$hyp&287$*&288$lemn&289$le_ab&290$geq_leqif&291$n12_0&294$le2&295$m2_0&296$n1_gt0&297$n2_gt0&298$sqrn_gt0&299$ne_mn&300$ltn_add2r&301$nat_Cauchy&302$addE&303$add_mulE&304$mulE&305$mul_expE&306$sub2nn&307$:&308$n.*2&309$def_b&106$mem_topred&130$symR&132$Rxy&133$eqiR&134$fK&135$hf&140$fgK&141$mf&143$fgK_on&144$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$le_i_mj&186$:&187$subnBA&188$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$le_i_mj:&184$<=&185$subnBA&186$:&187$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big1&181$big_mkcond&182$mul1m,&183$filter_index_enum&184$enum1&185$big_seq1&186$big_cat&188$iota_add&189$leq_sub&190$big_geq&191$@big_cat_nat&192$leqnSn&193$big_nat1&194$big_nat_recr&195$leqW&197$val_enum_ord&199$map_cat&200$map_comp&201$eqxx&202$count_cat&204$uniq_perm_eq&207$enum_uniq&208$big_tnth&209$index_uniq&210$valK&211$filter_undup&212$IHr&213$big_rem&214$idM&215$big_undup&216$undup_uniq&217$mem_undup&218$eq_r&219$big_split&220$simpm&221$bigID&222$orbK&223$cardD1&225$Aj&226$Qp&228$Q0&229$cardD1x&230$bigD1&231$Qj,&232$j&233$P0&234$IH&235$h'K&236$reindex_onto&237$hK&238$reindex_inj&241$addSn&242$subnDr&243$addnBA&244$partition_big&245$Pi&246$andbT&247$andb_idl&249$exchange_big_dep&250$Qi&251$2(big_seq_cond _ _ _ xQ)&252$exchange_big_dep_nat&253$big_endo&254$mulm0&256$x&257$y&258$big_distrl&260$big_distrr&261$f&263$ffunE&264$nri&265$eqP&266$big_distr_big_dep&267$mul0m&269$bigA_distr_big&271$big_has_cond&272$big_all_cond&273$allB&274$sum_nat_const&276$muln1&277$Monoid&278$big_const_nat&279$big_andE&280$@leqif_sum&283$muln_gt0&284$leq_maxl&286$geq_max&291$dvdn_lcm&294$in&295$dvFm&296$p_m&297$dvdn_trans&298$dvdn_lcml&299$dvdn_gcd&300$dvmF&301$m_p&302$dvdn_gcdl&303$mul0n&304$muln0&305$mulnDr&306$mulnDl&307$mulnC&308$addn2&309$exp0n&310$big1_seq&311$in_nil&312$big_cat_nested,&313$op_idx'&314$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$big_endo&256$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$mul0n&306$muln0&307$mulnDr&308$mulnDl&309$mulnC&310$addn2&311$exp0n&312$big1_seq&313$in_nil&314$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$is_perm_mx_tr&312$is_perm_mxMl&313$perm_mx_is_perm,&314$ltn_ord&315$lshift_subproof&316$row_mx0&317$leq_min&318$tr_pid_mx&319$pid_mx_minv&320$pid_mx_minh&321$le_n_i&322$andbCA&323$mul_pid_mx&324$minnn&325$minn_idPr&326$mulmxBl&327$pid_mx_id&328$subrr&329$mulmxBr&330$mul_pid_mx_copid&331$oppr0&332$defk&333$defi&334$big_split_ord&335$mul_col_mx&336$mul_mx_row&337$mul_row_col&338$mul_row_block&339$linear_sum&340$linearZ&341$mul_rV_lin&343$mxvecK&344$scalemxAl&345$linearP&346$row_mul&347$raddf0]&348$mulr_sumr&349$mxtrace_diag&351$mx11_scalar&353$block_mxEul,&354$oner_eq0&355$lift_permV&359$permK&360$canF_eq&361$split1&362$lift0_perm_lift&363$lift0_perm0&364$lift0_mx_perm&365$rmorphM&366$rmorph_sum&367$rmorph_nat&368$rmorphMn&369$map_scalar_mx&370$rmorph1&371$rmorph_sign&373$rmorph_prod&374$det_map_mx&375$map_row'&376$map_col'&377$cofactor_map_mx&378$map_mx_sub&379$map_mx1&380$map_pid_mx&381$map_delta_mx&385$def_gf&386$map_mxvec&388$map_vec_mx&389$trmx_mul_rev&390$mulrC&391$trmx_mul&392$scalemxAr&393$reindex&394$pair_bigA&395$mulrAC&396$mulmx_sum_row&397$scaler_suml&398$mulmx_diag&399$row_id&402$mulrCA&403$BA&404$CA&405$bigID&406$oddMt&410$mulN1r&411$tpermK&412$eqA12&413$odd_permV&414$t&415$Dst&416$det_perm&417$odd_perm1&418$det1&419$prodr_const&420$scale0r&421$detZ&422$exprS&423$bigA_distr_bigA&425$valP&427$signr_addb&428$odd_permM&429$pvalE&430$determinant_alternate&431$simp&432$Ef12&433$p_i&437$ulsfK&439$liftK&440$permE&441$si0&442$signr_odd&443$odd_add&444$odd_lift_perm&445$_]&446$neq_lift&447$partition_big&448$expand_cofactor&449$tr_row'&451$tr_col'&452$det_tr&453$expand_det_row&454$cofactor_tr&455$cofactorZ&456$eqP&457$Di&458$eq_refl&459$trmx_adj&460$mul_mx_adj&461$mul_adj_mx&462$kA:&463$A'&464$*m&465$=&466$1%:M&467$by&468$kA&469$AB1&470$def_m&471$mul_col_row&472$scalar_mx_block&473$BlAu1&474$AuBr0&475$oner_neq0&476$expand_det_col&477$1simp&478$block_mxEdl&479$block_mxEul&480$col'_col_mx&481$row'Ku&482$row'_row_mx&483$IHn1&484$trmx0&485$det_ublock&486$unitmxE&487$unitr1&488$unitrX&489$unitrN&490$unitrM&491$invr1&492$adj1&493$if_same&494$Ua&495$U_A&496$adjZ&497$scalerA&498$invrM&499$unitrX_pos&500$mulrK&501$exprSr&502$prednK&503$divrK&504$scalemx1&505$invmxZ&506$invmx1&507$invr_out&508$nsA&509$mulVr&510$mulVmx&511$mulmxV&512$uA&513$negbT&514$divrr&516$det_inv&517$unitrV&518$unitmx_tr&519$unitmx_inv&521$unitmx_mul&522$unitmx1&523$perm_mxM&526$mulVg&527$unitr0&531$mulf_eq0&533$nz_a&534$subr_eq0&536$orbF&537$scalemx_eq0&538$linearB&539$eq_aAB&540$mul_mx_scalar&542$vA0&543$detA0&544$thinmx0&545$signr_eq0&546$unlift_none&547$wjA'0&548$reindex_onto&551$defA&552$@mul_mx_row&553$/aj&554$aj0&555$wjA'&556$wj0_0&558$subr0&559$negPf&560$w0A'&561$linear0&562$fmorph_unit&565$unitfE&566$map_mxZ&568$map_mx_adj&569$fmorphV&570$is_perm_mxMr&573$mulmxE&575$xrowE&576$/A1&577$/(1 + n.+1)%N&578$mulmx_block&579$subrK&580$lshift0&581$tpermL&582$mulVf&583$_&584$elimNf&585$@det_lblock&586$def_t&589$trmxK&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$andb_false_r&120$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mulC&116$mulm1&117$iteropS&118$mulmA&119$mulmC&120$mulmCA&121$mem_iota&124$leq_subLR&125$subSn&126$subnDA&127$subnKC&128$enumT&129$mem_enum&130$unlock&131$f_op&136$big_filter&139$filter_predI&140$mkseq_nth&143$big_map&144$eqn0Ngt&145$big_hasC&146$has_pred0&147$foldr_cat&149$big_cat_nested&150$big_seq_cond&152$big_andbC&153$big_seq&154$eq_bigr&155$mem_index_iota&156$big_nat_cond&157$big_nil&160$big_cons&161$iota_addl&163$big_addn&164$big_ltn&165$big_add1&166$val_ord_enum&167$sorted_filter&169$iota_ltn_sorted&170$mem_filter&171$andbCA&172$andb_idr&173$big_mkord&174$len12&175$big_ord_widen_cond&176$inord_val&177$big_pred0&178$]&179$big_ord0&180$big_nth&181$tnth_nth&182$big_ord_widen_leq&183$inordK&186$eqFG&187$big_const_seq&188$cardE&189$size_iota&190$big_const&191$card_ord&192$big_cat_nested,&193$op_idx'&194$big1&197$mul1m,&198$filter_index_enum&199$enum1&200$big_seq1&201$big_cat&203$iota_add&204$leq_sub&205$big_geq&206$@big_cat_nat&207$leqnSn&208$leqW&210$val_enum_ord&212$map_cat&213$map_comp&214$eqxx&215$count_cat&217$uniq_perm_eq&220$enum_uniq&221$big_tnth&222$index_uniq&223$valK&224$filter_undup&225$IHr&226$big_rem&227$idM&228$big_undup&229$undup_uniq&230$mem_undup&231$eq_r&232$big_split&233$simpm&234$bigID&235$orbK&236$cardD1&238$Aj&239$Qp&241$Q0&242$cardD1x&243$bigD1&244$Qj,&245$j&246$P0&247$h'K&248$reindex_onto&249$hK&250$reindex_inj&253$addSn&254$subnDr&255$addnBA&256$partition_big&257$Pi&258$andbT&259$andb_idl&261$exchange_big_dep&262$Qi&263$2(big_seq_cond _ _ _ xQ)&264$exchange_big_dep_nat&265$big_endo&266$mulm0&268$x&269$y&270$big_distrl&272$big_distrr&273$f&275$ffunE&276$nri&277$eqP&278$big_distr_big_dep&279$mul0m&281$bigA_distr_big&283$big_has_cond&284$big_all_cond&285$allB&286$sum_nat_const&288$Monoid&289$big_const_nat&290$big_andE&291$@leqif_sum&294$muln_gt0&295$leq_maxl&297$geq_max&302$dvdn_lcm&305$in&306$dvFm&307$p_m&308$dvdn_trans&309$dvdn_lcml&310$dvdn_gcd&311$dvmF&312$m_p&313$dvdn_gcdl&314$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$by&143$nth_nseq&144$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mulnDl&108$mulnC&109$addn2&110$exp0n&111$big1_seq&112$in_nil&113$big_mkcond&114$muln1&115$mul1n&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.Theory.sumrB&115$big_ltn&116$@big_add1&117$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$min0n&155$big_mkord&156$big_ord0&157$GRing&158$minn0&159$mulE&160$addE&161$minSS&162$big_nat_recl&163$GRing.addrC&164$GRing.add0r&165$addnS&167$nth_take&168$nth_drop&170$ltn_add2l&171$lsubseqmxE&172$usubseqmxE&173$rsubseqmxE&174$dsubseqmxE&175$size_row_row_seqmx&176$ltn_add2r&177$leqNgt&178$size_row_col_seqmx&179$ord1&180$row_seqmxE&181$col_seqmxE&182$H2&183$H1&184$H2=>&185$H3&186$H4&187$castmx_id&188$size_iota&189$mkseqmxE&191$oneE&192$scalar_seqmxE&193$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mxE&102$ord1&103$hjj&104$tpermR&105$hxx&106$hjjj&107$tpermL&108$tpermD&109$hx&110$leq0n&111$hy&112$xcolE&113$xcol_tool&114$vsubmxK&115$lshift0&116$eqP&117$hM00&118$unitmx1&119$mulmx1&120$block_mxEv&121$rshift1&122$unitmxE&123$det_ublock&124$det1&125$mul1r&126$unitr1&127$submxK&128$mulmx_block&129$mulmx0&130$addr0&131$mul_scalar_mx&132$scalerA&133$mulrN&134$mulfV&135$scaleN1r&136$addrC&137$subrr&138$scalemxAr&139$scaleNr&140$unitmx_mul&141$unitmx_perm&142$mul1r
-&143$h1&144$hsubmxK&145$mulmxA&146$@mul_row_block&147$mulmx0
-&148$add0r&149$h3&150$block_mxEh&151$tperm01_tool&152$_(1 + n)]row_mx0&153$dl&154$h&155$row_mx0&156$addsmxC&158$trmx0&160$trmxK&161$trmx_eq0&162$tr_block_mx&163$tr_col_mx&164$mulr1n&167$mxrank_tr&168$mxrank_disjoint_sum&169$rank_rV&170$rank0M&171$trmx_neq0&172$hC&173$tr_scalar_mx&174$sub_capmx&175$hB&176$big1&177$mulr0&178$hb&179$@mul0r&180$scale0r&181$rankaMc&182$M&183$mxrankMfree&184$subnDr&185$subSn&186$rank_leq_row&187$mulmxV&188$mul0mx&189$by&190$hY&191$mul_mx_scalar&192$@mul_row_col&193$@mul_col_mx&194$col_mx0&195$mul1mx&196$@mulmx_block&197$scalar_mx_block&198$m&199$n&200$castmx_mul&201$castmxE&202$thinmx0&203$X&204$hX&205$@mul_mx_row&206$mulmxN&207$addr_eq0&208$scalerN&209$opprK&210$mulVf&211$scale1r&212$hM&213$hR&214$hZ&215$ker0MS&217$dsubseqmxE&218$seqmx0E&219$@seqmxE&220$rsubseqmxE&221$dlsubseqmxE&222$row_seqmxE&223$ursubseqmxE&224$mulseqmxE&225$drsubseqmxE&226$cinvE&227$scaleseqmxE&228$subseqmxE&229$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$HH1&163$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$expn0&102$expnS&103$H&104$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$H&114$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$H&117$addnsubn1&118$addSn&119$mulnDr&120$addn2&121$IH0&122$H1&123$expn_gt0&124$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$IHl&102$H&103$addSn&104$IHm&105$plus_Sn_m&106$plus_n_Sm&107$app_nil_l2&108$mult_n_O&109$O_minus&110$mult_O_n&111$IHa&112$plus_n_O&113$aux12&114$aux7&115$aux10&116$mulSn&117$aux11&118$mulnS&119$andb_false_r&120$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$IHl&102$muln1&103$plus_Sn_m&104$plus_n_Sm&105$app_nil_l2&106$mult_n_O&107$O_minus&108$mult_O_n&109$mul1n&110$aux12&111$aux7&112$aux10&113$plus_n_O&114$mulSn&115$addSn&116$IHm&117$aux11&118$mulnS&119$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$fact0&102$muln1&103$factS&104$IH&105$fact_auxP&106$mul1n&107$expn0&108$expnS&109$exponential_auxP&110$muln0&111$mulnS&112$multiplication_auxP&113$prednK&114$addnS&115$pred_Sn&116$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$fact_auxP&113$prednK&114$addnS&115$pred_Sn&116$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$mulSn&103$helper_mul_is_theta&104$IH&102$IH&102$IH&102$pred_Sn&103$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$factS&112$expn0&102$muln1&103$expnS&104$IH&105$exponential_auxP&106$mul1n&107$muln0&108$mulnS&109$multiplication_auxP&110$fact0&111$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$factS&113$fact0&114$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
-&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&291$le2&292$m2_0&293$n1_gt0&294$n2_gt0&295$sqrn_gt0&297$ne_mn&298$ltn_add2r&299$nat_Cauchy&300$addE&301$add_mulE&302$mulE&303$mul_expE&304$sub2nn&305$natTrecE&306$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$thinmx0&102$=>&103$H&104$det1&105$det0&106$H1&107$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mulC&102$mulm1&103$iteropS&104$mulmA&105$mulmC&106$mulmCA&107$mem_iota&110$leq_subLR&111$subSn&112$subnDA&113$subnKC&114$enumT&115$mem_enum&116$unlock&117$f_op&122$big_filter&125$filter_predI&126$mkseq_nth&129$big_map&130$eqn0Ngt&131$big_hasC&132$has_pred0&133$foldr_cat&135$big_cat_nested&136$big_seq_cond&138$big_andbC&139$big_seq&140$eq_bigr&141$mem_index_iota&142$big_nat_cond&143$big_nil&146$big_cons&147$iota_addl&149$big_addn&150$big_ltn&151$big_add1&152$val_ord_enum&153$sorted_filter&155$iota_ltn_sorted&156$mem_filter&157$andbCA&158$andb_idr&159$big_mkord&160$len12&161$big_ord_widen_cond&162$inord_val&163$big_pred0&164$]&165$big_ord0&166$big_nth&167$tnth_nth&168$big_ord_widen_leq&169$inordK&172$eqFG&173$big_const_seq&174$cardE&175$size_iota&176$big_const&177$card_ord&178$big_cat_nested,&179$op_idx'&180$big1&183$big_mkcond&184$mul1m,&185$filter_index_enum&186$enum1&187$big_seq1&188$big_cat&190$iota_add&191$leq_sub&192$big_geq&193$@big_cat_nat&194$leqnSn&195$big_nat1&196$big_nat_recr&197$leqW&199$val_enum_ord&201$map_cat&202$map_comp&203$eqxx&204$count_cat&206$uniq_perm_eq&209$enum_uniq&210$big_tnth&211$index_uniq&212$valK&213$filter_undup&214$IHr&215$big_rem&216$idM&217$big_undup&218$undup_uniq&219$mem_undup&220$eq_r&221$big_split&222$simpm&223$bigID&224$orbK&225$cardD1&227$Aj&228$Qp&230$Q0&231$cardD1x&232$bigD1&233$Qj,&234$j&235$P0&236$IH&237$h'K&238$reindex_onto&239$hK&240$reindex_inj&243$addSn&244$subnDr&245$addnBA&246$partition_big&247$Pi&248$andbT&249$andb_idl&251$exchange_big_dep&252$Qi&253$ffunE&102$2(big_seq_cond _ _ _ xQ)&254$exchange_big_dep_nat&255$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$big_endo&256$mxE&108$mulm0&258$x&259$y&260$big_distrl&262$big_distrr&263$f&265$ffunE&266$nri&267$eqP&268$big_distr_big_dep&269$mul0m&271$bigA_distr_big&273$big_has_cond&274$big_all_cond&275$allB&276$sum_nat_const&278$muln1&279$Monoid&280$big_const_nat&281$big_andE&282$@leqif_sum&285$muln_gt0&286$leq_maxl&288$geq_max&293$dvdn_lcm&296$in&297$dvFm&298$p_m&299$dvdn_trans&300$dvdn_lcml&301$dvdn_gcd&302$dvmF&303$m_p&304$dvdn_gcdl&305$ffunE&102$card_sub&104$card_ffun&105$card_prod&106$card_ord&107$mxE&108$ord1&111$perm1&112$permM&113$eq_axiomK&114$cast_ord_id&115$castmx_id&116$mxE,&119$unsplitK&122$row_mxEl&123$row_mxEr&124$col_mxEu&126$col_mxEd&127$row_mxKl,&128$col_mxKu,&129$tr_col_mx&131$trmx_usub&132$trmx_dsub&133$hsubmxK&134$castmxE&136$mxE]&137$trmx_cast&138$row_mxA&139$tr_col,&140$tr_col',&141$row_mxEl,&142$row_mxEr,&143$col_mxEu,&144$col_mxEd,&145$2mxE&146$def_j'&148$addSn&149$ltn_addr&150$@tr_row'&151$@tr_col_mx&152$col'Kl&153$addnS&154$def_j&155$leqNgt&156$leq_add2l&157$tr_row',&158$col'Kr&159$vsubmxK&160$col_mxKu&161$row_mxKl&162$row_mxKr&163$col_mxKd&164$submxK&165$trmx_ulsub&166$trmx_ursub&167$trmx_dlsub&168$trmx_drsub&169$block_mxKul&170$block_mxKur&171$block_mxKdl&172$block_mxKdr&173$tr_block_mx&174$tr_row_mx&175$2tr_col_mx&176$block_mxEh&177$col_mxA&178$cast_row_mx&179$block_mxEv&180$cast_col_mx&181$castmx_comp&182$etrans_id&183$cast_ordK&184$enum_valK&185$enum_rankK&186$mxvecE&187$castmxE,&188$conform_mx_id&189$neq_mn&190$B&191$nonconform_mx&192$addrA&193$addrC&194$add0r&195$addNr&196$mulrS&197$IHd&198$can2_eq&202$raddf0&203$opp_col_mx&207$opp_row_mx&208$add_col_mx&209$add_row_mx&210$negbTE&211$row0&214$eqxx&215$map_const_mx&216$raddfN&217$raddfD&218$map_mxD&219$map_mxN&220$mul1r&221$mulrDl&222$mulrDr&223$mulrA&224$summxE&225$bigD1&226$mulr1&227$big1&228$addr0&229$diff&230$j'&231$mulr0&232$matrix_sum_delta&233$big_ord1&234$can_eq&235$inj_eq&236$vec_mx_delta&237$vec_mxK&238$scale_col_mx&239$scale_row_mx&240$mulrnAr&241$mulrnDl&242$mulr_natr&243$i'&244$ne_i'i&245$diag_const_mx&247$raddfB&248$scale_scalar_mx&249$diag_mx_sum_delta&250$scalar_mx_sum_delta&252$scaler_sumr&253$scale1r&254$A&256$eqxx]&257$eqn0Ngt&258$n0&259$in&260$*&261$flatmx0&262$val_eqE&263$eqn_add2l&264$big_distrr&265$exchange_big&266$big_distrl&267$j&268$mul0r&269$sumrN&270$mulrN&271$mulNr&272$big_split&273$mulmxDl&274$mulNmx&275$mulmxDr&276$mulmxN&277$mul0mx&279$mulmx0&281$rowE&282$mulmxA&283$mulmxnE&284$andbT&285$natrM&286$mulrnA&287$mulnb&288$andbAC&289$mul_delta_mx_cond&290$mulrnAl&291$mul_diag_mx&292$mul_scalar_mx&293$mul_mx_diag&294$reindex_inj&295$permKV&296$mul_col_perm&297$invgK&298$tpermV&299$mul_row_perm&300$mulmx1&301$mul1mx&302$col_permE&303$trmx1&305$tr_perm_mx&306$row_permM&308$perm_mx1&310$perm_mx_is_perm&311$perm_mxM&312$def_t&313$mulVg&314$trmxK&315$is_perm_mx_tr&316$is_perm_mxMl&317$perm_mx_is_perm,&318$ltn_ord&319$lshift_subproof&320$row_mx0&321$leq_min&322$tr_pid_mx&323$pid_mx_minv&324$pid_mx_minh&325$le_n_i&326$andbCA&327$mul_pid_mx&328$minnn&329$minn_idPr&330$mulmxBl&331$pid_mx_id&332$subrr&333$mulmxBr&334$mul_pid_mx_copid&335$oppr0&336$defk&337$defi&338$big_split_ord&339$mul_col_mx&340$mul_mx_row&341$mul_row_col&342$mul_row_block&343$linear_sum&344$linearZ&345$mul_rV_lin&347$mxvecK&348$scalemxAl&349$linearP&350$row_mul&351$raddf0]&352$mulr_sumr&353$mxtrace_diag&355$mx11_scalar&357$block_mxEul,&358$oner_eq0&359$lift_permV&363$permK&364$canF_eq&365$split1&366$lift0_perm_lift&367$lift0_perm0&368$lift0_mx_perm&369$rmorphM&370$rmorph_sum&371$rmorph_nat&372$rmorphMn&373$map_scalar_mx&374$rmorph1&375$rmorph_sign&377$rmorph_prod&378$det_map_mx&379$map_row'&380$map_col'&381$cofactor_map_mx&382$map_mx_sub&383$map_mx1&384$map_pid_mx&385$map_delta_mx&389$def_gf&390$map_mxvec&392$map_vec_mx&393$trmx_mul_rev&394$mulrC&395$trmx_mul&396$scalemxAr&397$reindex&398$pair_bigA&399$mulrAC&400$mulmx_sum_row&401$scaler_suml&402$mulmx_diag&403$row_id&406$mulrCA&407$BA&408$CA&409$bigID&410$oddMt&414$mulN1r&415$tpermK&416$eqA12&417$odd_permV&418$t&419$Dst&420$det_perm&421$odd_perm1&422$det1&423$prodr_const&424$scale0r&425$detZ&426$exprS&427$bigA_distr_bigA&429$valP&431$signr_addb&432$odd_permM&433$pvalE&434$determinant_alternate&435$simp&436$Ef12&437$p_i&441$ulsfK&443$liftK&444$permE&445$si0&446$signr_odd&447$odd_add&448$odd_lift_perm&449$_]&450$neq_lift&451$partition_big&452$expand_cofactor&453$tr_row'&455$tr_col'&456$det_tr&457$expand_det_row&458$cofactor_tr&459$cofactorZ&460$eqP&461$Di&462$eq_refl&463$trmx_adj&464$mul_mx_adj&465$mul_adj_mx&466$kA:&467$A'&468$*m&469$=&470$1%:M&471$by&472$kA&473$AB1&474$def_m&475$mul_col_row&476$scalar_mx_block&477$BlAu1&478$AuBr0&479$oner_neq0&480$expand_det_col&481$1simp&482$block_mxEdl&483$block_mxEul&484$col'_col_mx&485$row'Ku&486$row'_row_mx&487$IHn1&488$trmx0&489$det_ublock&490$unitmxE&491$unitr1&492$unitrX&493$unitrN&494$unitrM&495$invr1&496$adj1&497$if_same&498$Ua&499$U_A&500$adjZ&501$scalerA&502$invrM&503$unitrX_pos&504$mulrK&505$exprSr&506$prednK&507$divrK&508$scalemx1&509$invmxZ&510$invmx1&511$invr_out&512$nsA&513$mulVr&514$mulVmx&515$mulmxV&516$uA&517$negbT&518$divrr&520$det_inv&521$unitrV&522$unitmx_tr&523$unitmx_inv&525$unitmx_mul&526$unitmx1&527$invrK&530$defA&531$perm_mxV&532$unitr0&536$mulf_eq0&538$nz_a&539$subr_eq0&541$orbF&542$scalemx_eq0&543$linearB&544$eq_aAB&545$mul_mx_scalar&547$vA0&548$detA0&549$thinmx0&550$signr_eq0&551$unlift_none&552$wjA'0&553$reindex_onto&556$@mul_mx_row&557$/aj&558$aj0&559$wjA'&560$wj0_0&562$subr0&563$negPf&564$w0A'&565$linear0&566$fmorph_unit&569$unitfE&570$map_mxZ&572$map_mx_adj&573$fmorphV&574$is_perm_mxMr&577$mulmxE&579$xrowE&580$/A1&581$/(1 + n.+1)%N&582$mulmx_block&583$subrK&584$lshift0&585$tpermL&586$mulVf&587$_&588$elimNf&589$@det_lblock&590$enumT&102$unlock&103$nth_mkseq&107$size_map&108$size_enum_ord&109$nth_map&110$ltn_ord&111$nth_ord_enum&112$map_comp&113$size0nil&114$seqmxE&116$H&117$ltn0&118$size_mkseq&119$size_seqmx&121$Hm&122$in&123$Hi&124$Hn&126$size_row_seqmx&127$fun_of_seqmxE&128$HMN&129$ord_enum_eqE&130$mxE&131$Hf&132$size_zipwith&133$minnn&134$nth_zipwith&135$M&136$N&137$zipwithseqmxE&138$map_seqmxE&139$size_nseq&140$size_seqmx=>&141$leq_min&142$nth_nseq&143$size_trseqmx&144$size_row_trseqmx&145$Hk&146$const_seqmxE&147$zeroE&148$hn0&149$flatmx0&150$thinmx0&151$mul0mx&152$seqmx0E&153$trseqmxE&154$addnS&155$nth_take&156$nth_drop&158$ltn_add2l&159$lsubseqmxE&160$usubseqmxE&161$rsubseqmxE&162$dsubseqmxE&163$size_row_row_seqmx&164$ltn_add2r&165$leqNgt&166$size_row_col_seqmx&167$ord1&168$row_seqmxE&169$col_seqmxE&170$H2&171$H1&172$H2=>&173$H3&174$H4&175$castmx_id&176$size_iota&177$mkseqmxE&179$oneE&180$scalar_seqmxE&181$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$helper_expt_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_expt&112$program_is_fn_expt&113$fn_expt_is_theta&114$H&115$program_correct_expt&116$fact0&102$muln1&103$IH&104$factS&105$mulnA&106$mulnC&107$helper_fact_is_theta&108$mul1n&109$pred_Sn&110$run_app&111$loop_is_helper_fact&112$program_is_fn_fact&113$fn_fact_is_theta&114$H&115$program_correct_fact&116$mul0n&102$mul1n&103$IH&104$pred_Sn&105$mulnDr&106$mulnDl&107$
-&108$helper_fib_is_theta&109$muln0&110$muln1&111$H&112$in&113$/fib_locals&114$/helper_fib&115$prednK&116$H1&117$run_app&118$loop_is_helper_fib&119$program_is_fn_fib&120$fn_fib_is_theta&121$program_correct_fib&122$helper_less_is_theta&102$IH&103$pred_Sn&104$loop_is_helper_less&105$program_is_fn_less&106$fn_less_is_theta&107$H&108$program_correct_less&109$IH&102$IH&102$mulSn&103$helper_mul_is_theta&104$pred_Sn&105$run_app&106$loop_is_helper_mul&107$program_is_fn_mul&108$fn_mul_is_theta&109$H&110$program_correct_mul&111$expn0&102$muln1&103$IH&104$expnS&105$mulnA&106$mulnC&107$mulnS&108$helper_power_is_theta&109$mul1n&110$pred_Sn&111$run_app&112$loop_is_helper_power&113$program_is_fn_power&114$fn_power_is_theta&115$H&116$program_correct_power&117$addn0&102$addn0&102$addn0&102$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$addn0&102$IH&103$addn0&102$IH&103$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$fact0&102$muln1&103$fact0&102$muln1&103$res&104$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$addn0&102$IH&103$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$addnS&104$eqn_add2l&105$Heq&107$eqxx&108$subnDl&110$subnDA&114$subnS&115$leqNgt&119$leq_eqVlt&120$negb_or&121$implyNb&125$eq_axiomK&126$def_n2&127$le_mn&129$@leq_trans&133$lt0n&135$addn_eq0&136$subn_eq0&137$leq_subLR&138$addnK&140$subnDr&141$addSn&143$maxnC&144$maxnAC&145$orb_idr&147$leq_max&148$leq_maxl&149$gtn_max&150$addnAC&151$addn_maxl&152$addn_min_max&153$minnC&154$minnE&155$subnAC&156$minnAC&157$minnA&158$minnCA&159$sameP&160$eqn_add2r&161$le_n21&163$leq_min&164$gtn_min&165$geq_min&166$geq_minl&167$addnBA&168$leq_subr&169$addn_minr&170$minn_idPr&171$geq_max&172$leq_maxr&173$le_m21&174$maxn_minl&175$maxn_minr&176$maxnK&177$minn_maxl&178$Pm&180$m_lb&181$subKn&182$ubP&183$subnBA&184$m1_lb&185$m2_lb,&186$eqPQ&187$max_i&188$max_j&189$eq_f&190$mulSn&192$mulnS&193$mulnSr&194$muln0&195$muln0,&196$mulnC&197$mulnDl&198$mulnBl&199$mulnA&200$mulnCA&201$mulnBr&202$muln_eq0&203$leq_mul2l&204$le_mn2&206$orbT&207$leq_mul2r&208$le_mn1&209$orb_andr&210$eqn_mul2l&211$eqn_mul2r&212$ltn_mul2l&213$ltn_mul2r&214$mul1n&215$ltn_pmul2r&216$ltn_Pmull&217$maxn_mulr&219$minn_mulr&220$muln1&221$expnS&222$mul1n,&223$exp1n&224$expnD&225$expnMn&226$expnM&227$addn_gt0&228$eqn0Ngt&229$expn_gt0&230$leq_pmul2l&231$leq_pmulr&232$leq_exp2l&233$eqn_exp2l&234$leq_exp2l]&235$ltn_exp2l]&236$leq_mul&238$expn1&239$ltn_mul&240$IHe&241$ltn_exp2r&242$leq_exp2r&243$eqn_exp2r&244$muln_gt0&245$addTb&246$addbA&247$odd_add&250$odd_sub&251$andb_addl&252$odd_mul&253$addnn&254$mul2n&255$doubleB&256$2ltnNge&257$leq_double&258$doubleS&259$ltn_Sdouble&260$addbb&261$muln2&262$uphalf_half&263$doubleD&264$half_double,&265$odd_double_half&266$half_double&267$uphalf_double&268$halfD&269$mulnn&270$mulnDr&271$def_m&272$sqrnD&273$2addnA&274$/(2 * 2)&275$sqrn_sub&276$lte&279$ltm12&280$ltm23&281$andbT&282$eqm12&283$f_mono&284$in&285$hyp&286$*&287$lemn&288$le_ab&289$geq_leqif&290$n12_0&293$le2&294$m2_0&295$n1_gt0&296$n2_gt0&297$sqrn_gt0&298$ne_mn&299$ltn_add2r&300$nat_Cauchy&301$addE&302$add_mulE&303$mulE&304$mul_expE&305$sub2nn&306$natTrecE&307$by&310$IHp&311$nat_of_succ_gt0&312$doubleS,&313$doubleMl&315$def_b&106$mem_topred&129$symR&131$Rxy&132$eqiR&133$fK&134$hf&139$fgK&140$mf&142$fgK_on&143$s0'x&128$orbT&129$ay&131$eq_a&135$y&136$s_y&137$eq_a12&138$s'y&139$eq_in_count&140$has_filter&141$Es12&142$in&143$Hx&144$*&145$eqxx&147$all_pred1_nseq&148$def_s&150$has_pred0&151$has_sym&152$negb_or&153$cat_uniq&154$andbCA&155$uniq_catC&156$mem_filter&157$negbTE&158$mem_rev&159$Hy&160$all_pred1P&161$count_uniq_mem&162$s_x&163$mem_undup&164$size_undup&165$find_size&167$has_pred1&168$find_cat&169$lt_i_s&170$mem_nth&171$rcons_uniq&172$index_cat&173$size_belast&174$index_uniq&175$eq_sij&176$cat_cons&179$i.+1&181$nax&182$exists&183$i]&184$eq_all&185$a_s&186$IHv&187$count_cat&189$addn_eq0&190$count_predC&191$filter_predI&192$cnt_a'&193$leq_add2r&195$eq12&196$perm_eq_sym&198$eqn_add2l&199$perm_catC&201$perm_cat2r&203$cat1s&205$perm_catCA&206$perm_cons&207$def_s2&208$mem_rot&209$negPf&210$rot_uniq&211$le_s21&212$leqNgt&214$s3x&215$uniq_leq_size&216$eqs12&217$eqs12,&219$uniq_size_uniq&220$@uniq_leq_size&222$s2x&223$Hs12&224$/(rot i s1)&229$def_s1&230$FcatCA&232$addnK&233$rot1_cons&234$rotK&235$has_rot&236$subKn&237$rot0&238$size_rev&240$size_rotr&243$@size_takel&244$5(catA, =^~ rot_size_cat)&245$leq_addl&246$rot_addn&248$addnBA&249$@rot_oversize&250$1ltnW&251$rot_add_mod&252$1addnC&253$rot_rot&254$has_mask_cons&255$size_mask&256$mask_cat&257$Hs&258$mask_rot&261$size_nseq&262$mask_false&263$sz_m&265$geq_min&266$nth_take&267$negb_add&268$addbF&269$addbT&270$negb_eqb&271$before_find&272$def_m_i&273$lt_i_m&274$subnKC&275$congr1&276$drop_nth&277$nth_index&278$index_mem&279$mask0&280$sz_m1&281$sz_m2&282$cat_subseq&283$sub0seq&284$mask_true&286$all_predC&295$map_cat&296$map_take&297$map_drop&298$map_rot&300$size_map&301$filter_mask&302$a_x&303$size_subseq_leqif&305$subseq_filter&306$introT&307$uniq_perm_eq&308$filter_uniq&309$x&310$Ds2&312$perm_rcons&313$eqP&315$x']&316$map_mask&318$inj_in_eq&319$count_map&322$Est&323$eq_sz&326$ltis&327$nth_map&328$Ef&329$eq_f12&330$eqf12&331$eqxx,&332$sy&333$gK&335$fK&336$mem_map&337$pmap_filter&338$size_pmap&340$IHn1&344$addnS&345$iota_add&346$size_iota&347$andbN&348$leq_eqVlt&349$mem_iota&351$nth_iota&353$size_mkseq&355$Hi&356$nth_mkseq&357$mkseq_nth&359$perm_map&360$perm_eq_small&361$Ds&362$iota_addl&363$map_rotr&364$map_comp&365$@eq_map&366$mulnC&367$sumn_nseq&368$foldr_cat&369$revK&370$Hfg&371$Hgf&372$addn_minr&373$size_zip&374$zip_cat&375$zip_rcons&376$IHss&377$IHsh&378$leq_subLR&379$leq_add2l&381$leq_max&382$def_z&383$def_x'&384$map_f&385$not_fxt_z&386$eq_s&387$eq_t&388$fpz&389$sp2&390$Ut&391$:&392$z.1,&393$=&394$x,&395$by&396$Dz1&397$s1z&398$s1'x&399$muln1&102$leq_mul&103$fact_gt0&104$ltn_mul&105$big_nil&106$factS&108$big_add1&109$big_nat_recr&110$mulnC&111$logn1&112$big_geq&113$lognM&114$logn_count_dvd&116$big_mkcond&117$big_nat_widen&118$1ltnW&119$exchange_big_nat&122$divn_count_dvd&124$big_filter&125$fact_prod&126$prednK&128$all_predC&129$has_pred1&130$mem_iota&131$leq_eqVlt&132$bigD1&133$lt0n&134$dvdn_gt0&135$dvdn_addr&136$dvdn_mulr&137$dvdn1&138$1((1 =P p.-1)&139$modnMml&141$modnMmr&142$mulnA&143$mul1n&144$val_eqE&145$i_gt0&146$modnMDl&147$modn_small&148$coprime_sym&149$prime_coprime&150$leqNgt&151$ltn_ord&152$vFp0&153$mod0n&154$mFp1r&155$vFpV&156$mFpA&157$vFp0,&158$eqn_mod_dvd&162$modnDl,&163$subnKC&164$2eqFp&165$Euclid_dvdM&166$addnS&167$addnBA&168$mulnDl&169$subn_sqr&170$leq_sqr&171$mulnS&172$mulnn&173$/(Fp1 : nat)&174$dvdn_addl&175$eqFp&176$Fp_mod&177$eqn0Ngt&178$lt0i&179$modnDl&180$eqxx&181$modnDml&182$mod_fact&183$modnn&184$modnMm&185$big_mkord&186$bigID&187$/mFpM&188$mFpC&189$vFpId&190$mFp1&191$lt1p&192$orbT&193$eqF1n1&194$reindex_onto&195$2negb_or&196$E&197$vFpK&198$big_split&199$big1&200$ffactn1&201$ffactSS&202$muln_gt0&203$ffact_gt0&204$ffactnS&205$mulnK&206$binS&207$bin0&208$addn_gt0&209$IHm&210$andKb&211$leq_add&212$bin_gt0&213$bin_small&214$bin1&215$mulSn&216$mulnDr&217$mulnCA&218$mul_Sm_binm&219$divnMA&220$divn_small&221$fact_smonotone&222$ffact_small&223$eqn_pmul2r&224$bin_ffact&225$subKn&226$bin_fact&227$mulnAC&228$bin_sub&229$leqnSn&230$subSnn&231$mul2n&232$half_double&233$bin2&234$divn2&235$muln_divA&236$dvdn2&237$def_p&238$gtnNdvd&239$bin1]&240$addnn&242$big_nat_rev&243$sum_nat_const&244$card_ord&245$big_ord_recl&246$big_ord0&247$expnS&248$big_distrr&249$big_ord_recr&250$binn&251$subnSK&252$2mulnA&253$expnSr&254$/(f _ _)&255$fxx&256$IHk&257$big1_eq&258$mulnBl&259$subnDA&260$addnK&261$exp1n&262$subn_exp&263$reindex_inj&264$@eq_card1&265$t&266$tuple0&267$sum1dep_card&268$partition_big&269$cardD1&270$Ax&271$reindex&272$tuple_eta&273$theadE&274$andbT&275$all_predI&276$card_uniq_tuples&277$on_card_preimset&278$codom_ffun&280$has_map&282$enumT&283$has_filter&284$size_eq0&285$cardE&286$card_inj_ffuns_on&287$2inE&288$eq_card0&289$A&290$leq_ltn_trans&291$sum_nat_dep_const&292$card_inj_ffuns&293$card_imset&294$cardAk&295$enum_rankK_in&298$ffunE&299$inj_eq&300$im_f0&301$ffactnn&302$eq_pij&303$eqEcard&304$mem_imset&305$card_draws&307$mkseq_nth&308$Am&309$sorted_filter&310$unlock&311$val_ord_enum&312$iota_ltn_sorted&313$mem_enum&314$val_fA&315$cardsE&316$card_uniqP&317$size_tuple&318$map_inj_uniq&319$ft_m&321$in&323$t_x&324$*&325$addSn&326$tnth_nth&327$card_ltn_sorted_tuples&328$map_comp&329$eq_map&330$m0&331$def_m&332$drop_nth&333$leq_addl&334$drop_size&335$leq_add2l&336$tnth_ord_tuple,&338$inord_val&339$inc_t&340$tnth_map&341$tnth_ord_tuple&342$inordK&343$leq_subLR&344$nth_map&345$def_e&346$size_map&347$IHj&349$card_sorted_tuples&351$/(val x0)&352$big_cons&353$IHt&354$val_insubd&355$leq_add2r&356$add_mn&357$s&358$sub_mn&359$=&360$x&361$by&362$card_partial_ord_partitions&363$sameP&364$def_n&365$rowK&107$tnth_nth&108$genmx_id&109$gen_vs2mx&111$sameP&113$memvK&115$linear0&116$genmx0&117$genmx_adds&118$genmx_cap&119$genmx1&120$tvalK&121$mulmx_sum_row&122$linear_sum&123$row_b2mx&125$linearZ&126$mul_b2mx&127$mxE&128$span_b2mx&129$size_tuple&130$scalemx_sub&132$sub0mx&133$Uu&134$Uv&135$linearP&136$addmx_sub&137$scale1r&144$memvE&146$subv_refl&147$eqUV&148$row_sub&150$eqEsubv&152$sub0v&153$andbT&154$scaler0,&155$vs2mxF&156$submx1&157$mem_r2v&159$nz_row_sub&160$memv0&161$subv0&162$vs2mx0&163$submx0&164$nz_row_eq0&165$vs2mxD&166$addsmx_sub&167$addsmxSl&169$addsmxSr&170$addsmxC&171$submx_refl&172$addsmxA&173$addvC&175$linearD&177$submxMl&180$bigD1&181$addvSl&182$subv_add&187$vs2mx_sum&189$vs2mxI&190$sub_capmx&191$capmxSl&193$capmxSr&194$capmxC&195$capmxA&196$capvC&197$subv_cap&199$memv_cap&200$vs2mxD,&202$capvSl&204$bigcapv_inf&205$sub1mx&206$capmx_compl&208$diffmxSl&209$capmx_diff&210$addv_diff_cap&211$addvA&212$addv_idPr&213$mxrank0&214$mxrank_eq0&215$mxrank1&216$mxrank_gen&217$rank_rV&218$can2_eq&219$dimvf&223$mxrank_compl&224$mxrank_cap_compl&225$mxrank_sum_cap&226$dimv_sum_cap&227$dxUV&228$dimv0&229$dimv_eq0&231$eqn_add2l&232$dimv_leqif_eq&233$dim_vline&234$eqxx&235$leq_add2l&237$directvE&239$leq_eqVlt&242$dimv_sum_leqif&243$orbF&244$mxdirectE&245$mxdirect_addsE&246$directv_addE&247$directv_trivial&248$subr_eq0&250$opprD&251$addrACA&252$addr_eq0&253$xpair_eqE&254$eq_uv&255$oppr_eq0&256$andbb&257$memvN&258$memvB&259$addrC&260$vs2mx0]&262$2vs2mx_sum&263$dxU&266$sub0r&267$u_0&268$addKr&269$j&270$Dv&271$sumrB&272$big1&273$negPf&274$subrr&275$Pj&276$big1_eq&278$eq_row_sub&279$memv_span&280$rank_leq_row&281$sXU&283$mem_tnth&284$sub_span&286$u&287$eqXY&288$big_rem&289$big_tnth&290$span_def&291$big_nil&292$big_seq1&293$big_cons&294$big_cat&295$mulmxDl&296$scalemxAl&297$Xv&298$mulmxKpV&299$span_nil&300$span_seq1&301$perm_eq_size&302$eq_span&303$seq1_free&304$sum1_card&305$card_ord&306$has_pred1&307$all_predC&308$big_all&309$big_andE&310$free_directv&311$free_b2mx&312$\row_i&313$k&314$=&315$0&316$by&317$mul0mx&318$lin_b2mx&319$kt0&320$kermx_eq0&321$t_free&322$row_mul&323$mulmx1&324$CtK&325$2mulmxA&326$coord_free&327$mulr1&328$addr0&329$j'i&330$mulr0&331$negb_or&332$cat_free&333$perm_free&334$directvEgeq&336$geq_leqif&337$nil_free&338$big_ord0&339$free_cons&340$IH_X&341$big_ord_recl&342$freeE&343$negb_exists&344$negbK&345$in_tupleE&346$freeX&347$def_v&348$big_nth&349$big_mkord&350$index_uniq&351$free_uniq&352$valK&353$insubT&354$coord_sum_free&355$scaler_sumr&356$big_split&357$scalerA&358$scalerDl&359$size_map&360$eq_szX&361$ltiX&362$nth_map&363$neqji&364$scale0r&365$span_cat&367$defU&368$defV&369$freeY&370$eqEdim&371$sUX&372$dimvS&373$tnth_mktuple&375$row_base_free&376$eq_row_base&377$big_morph&381$span_bigcat&382$freeXs&383$bigcat_free&384$directvP&385$mul_rV_lin1&386$rowE&387$fun_of_lfunK&388$eq_fg&389$lfunE&390$addrA&391$add0r&392$addNr&393$scalerDr&394$/(f2mx (Vector.Hom _))&395$mulmxDr&396$scalemxAr&397$mxvecK&401$linearN&402$eqmxMr&404$limg_line&405$limgS&406$mulmxA&408$Drw&409$capvSr&411$big_map&412$limg_sum&413$opp_lfunE&416$add_lfunE&417$fg0&418$memvf&419$comp_lfunE&420$inv_lfun_def&421$lkerE&422$mxrank_mul_ker&423$limg_ker_dim&424$limg_span&425$limg_dim_eq&426$injf&428$memv_ker&429$linearB&430$eq_fuv&431$inj_eq&432$limg_ker0&433$limg_lfunVK&434$fK&435$capv0&436$lker0_limgf&437$lker0_lfunVK&438$comp_lfunA&439$lker0_compfV&440$comp_lfun1l&441$lker0_compVf&442$comp_lfun1r&443$map_id_in&444$map_comp&445$capvA&446$capvv&447$cap0v&448$limg0&449$add0v&450$addvS&451$capvS&452$limg_add&453$limg_comp&454$addv0&455$defW&456$x&457$Xx&458$lpreim_cap_limg&460$lpreimK&461$addNKr&462$Wfu&463$oner_eq0&464$proj_mx_sub&465$subvP&467$proj_mx_id&468$add_proj_mx&469$daddv_pi_add&473$projv_id&475$dimv_compl&476$limg_proj&477$addnK&478$capfv&479$subr0&480$capv_diff&482$addv_pi2_id&483$memv_pi2&484$addv_diff&485$memv_pi1&486$big_filter&487$IHr&488$coord_vbasis&494$vsprojK&495$basis_free&496$vbasis_mem&497$memt_nth&498$rmorphD&501$scale_scalar_mx&502$mx11_scalar&503$hsubmxK&504$row_mxKl&505$row_mxKr&506$ffunE&508$enum_rankK&509$enum_valK&510$sol_u&512$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$andb_false_r&100.19999694824219$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$h'&102$mulVmx&103$mulmx1&104$mulmxV&105$mulmxA&106$invmx_left&107$mul1mx&108$mxE&109$rshift1&110$H&111$lshift0&112$ord1&113$thinmx0&114$M&115$hM&116$submxK&117$@mulmx_block&118$mulmx0&119$add0r&120$ih&121$urlower1&122$mul0mx&123$addr0&124$mulmxN&125$mulNmx&126$subrr&127$ullower1&128$scalar_mx_block&129$fast_invmxE&130$seqmx1E&131$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$factS&114$expn0&102$muln1&103$expnS&104$IH&105$mulnA&106$mulnC&107$exponential_auxP&108$mul1n&109$muln0&110$mulnS&111$multiplication_auxP&112$fact0&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$exp0n&102$subn0&103$big1_seq&104$muln0&105$in_nil&106$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul1n&114$GRing.subr_eq&115$GRing.addrA&116$GRing.addrC&117$GRing&118$GRing.Theory.sumrB&119$big_nat_recl&120$subr_sub&121$@eq_bigr&122$@big1&123$GRing.subr_eq0&124$in&125$H1&126$eqP&127$big_ltn&128$@big_add1&129$big_addn&130$H&131$ltn_predK&132$pred_Sn&133$subnDA&134$subnS&135$H4&136$addnBA&137$subnDl&138$lemma2_aux&139$subn_eq0&140$big_nil&141$leq_eqVlt&142$lemma1&143$lemma2'&144$lemma2&145$h'&146$mulVmx&147$mulmx1&148$mulmxV&149$mulmxA&150$invmx_left&151$mul1mx&152$/pot_matrix&153$thinmx0&154$det1&155$det0&156$mulmxBr&157$pot_1&158$big_nat_recr
-&159$submx_sub&160$GRing.sub0r&161$p&162$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$exp0n&108$big1_seq&109$in_nil&110$big_mkcond&111$muln1&112$addn2&113$mul0n&102$big_nat1&103$muln0&104$big_nat_recr&105$mulnDr&106$IH&107$addSn&100.1$plus_Sn_m&100.14999999999999$plus_n_Sm&100.175$app_nil_l2&100.1875$mult_n_O&100.19375$O_minus&100.19687499999999$mult_O_n&100.1984375$plus_n_O&100.19921875$aux12&100.199609375$aux7&100.19980468749999$aux10&100.19990234375$mulSn&100.199951171875$addnCA&100.1999755859375$aux11&100.19998779296874$mulnS&100.19999389648437$ \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/matlab_interaction.el b/contrib/ML4PG/ssreflect/matlab_interaction.el
deleted file mode 100644
index 6aab9def..00000000
--- a/contrib/ML4PG/ssreflect/matlab_interaction.el
+++ /dev/null
@@ -1,646 +0,0 @@
-;; This function starts Matlab
-
-(defun ml4pg-init-clusters ()
- (interactive)
- (ml4pg-my-config-display)
- (require 'comint)
- (apply 'make-comint "matlab" *matlab-program* nil
- (list "-nodesktop -r 0")))
- ;(apply 'make-comint "matlab" *matlab-program* nil (list "-nodesktop -r")))
- ; (shell-command "/home/jonathan/Matlab/bin/matlab -nodesktop -r
- ; \"load /home/jonathan/Desktop/Research/Matlab/expt1_complete_goals.csv; kmeans_clusters_and_frequencies(expt1_complete_goals,3,1000)\"")
-
-(defvar ml4pg-my-buffer "")
-
-(defun ml4pg-my-config-display ()
- (delete-other-windows)
- (switch-to-buffer-other-window "*display*")
- (erase-buffer)
- (other-window -1))
-
-;; This function is in charge of processing the output produced by Matlab
-;; The variable signal is used to indicate the function which has called to matlab and to process the result
-
-(defvar ml4pg-signal 0)
-
-(defun ml4pg-my-output-filter (output)
- (setq ml4pg-my-buffer (concat ml4pg-my-buffer output))
- (when (and output (get-buffer "*display*"))
- (with-current-buffer "*display*"
- (progn (erase-buffer)
- (cond ((equal ml4pg-signal 0) nil)
- ((equal ml4pg-signal 1) (ml4pg-print-similarities (ml4pg-split-clusters-aux2 ml4pg-my-buffer nil)))
- ((equal ml4pg-signal 4) (ml4pg-print-clusters-bis (ml4pg-split-clusters-aux ml4pg-my-buffer nil) (ml4pg-split-frequencies ml4pg-my-buffer nil)))
- ((equal ml4pg-signal 3) (ml4pg-compute-clusters-and-values (ml4pg-split-clusters-aux (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)
- (ml4pg-split-frequencies (ml4pg-remove-jumps (subseq ml4pg-my-buffer (search "load" ml4pg-my-buffer :from-end t))) nil)))
- (t nil)))))
- output)
-
-(add-hook 'comint-preoutput-filter-functions 'ml4pg-my-output-filter)
-
-
-(defun ml4pg-split-clusters-aux2 (str res)
- (let ((init (search "ans =" str)))
- (if init
- (list (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) (search ">>" str :from-end t)))))
- nil)))
-
-(defun ml4pg-split-clusters-aux (str res)
- (let ((init (search "ans =" str)))
- (if init
- (let ((end (search "[" str :start2 (1+ init))))
- (ml4pg-split-clusters-aux (subseq str (1+ end))
- (cons (ml4pg-cluster-string-to-list (ml4pg-remove-jumps (subseq str (+ 5 init) end))) res)))
- res)))
-
-
-(defun ml4pg-split-frequencies (str res)
-(let ((init (search "[" str)))
- (if init
- (let ((end (search "]" str :start2 (1+ init))))
- (if (not (search "char" (subseq str init end)))
- (ml4pg-split-frequencies (subseq str (1+ end))
- (cons (string-to-number (ml4pg-remove-jumps (subseq str (1+ init) end))) res))
- (ml4pg-split-frequencies (subseq str (1+ (search "[" str :start2 (1+ end)))) res)
- ))
- res)))
-
-
-
-
-(defun ml4pg-search-cluster (res n)
- (do ((temp res (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (member (format "%s" n) (car temp))
- (append temp2 (list (car temp))))))
-
-
-
-(defun ml4pg-cluster-string-to-list (cluster)
- (do ((temp cluster)
- (temp2 nil))
- ((not (search "," temp)) (append temp2 (list temp)))
- (progn (setf temp2 (append temp2 (list (subseq temp 0 (search "," temp)))))
- (setf temp (subseq temp (1+ (search "," temp)))))))
-
-
-
-
-
-(defun ml4pg-remove-occurrence (list n)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (not (equal (format "%s" n) (car temp)))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-(defvar ml4pg-granularity-level-temp 1)
-
-(defun ml4pg-print-similarities (res)
- (interactive)
- (cond ((not (caar res)) (insert (format "Searching similarities...\n")))
- ((search "None" (caar res))
- (if (not ml4pg-iterative)
- (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
- (if (eq ml4pg-granularity-level-temp 5)
- (format "Sorry, but we have not found any similarity at any ganularity level\n")
- (progn (setf ml4pg-granularity-level-temp (1+ ml4pg-granularity-level-temp))
- (ml4pg-show-clusters-of-theorem-iterative)))))
- (t (progn (insert (format "Similarities:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (insert (format "This lemma is similar to the lemmas: \n"))
- (do ((temp2 (ml4pg-remove-occurrence (car res) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
- ((endp temp2) )
- (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "- "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
- (insert (format "- "))
- (ml4pg-insert-button-lemma temp-res)))))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
- )))
-
-
-
-;
-(defun ml4pg-print-similarities-matlab ()
- (with-current-buffer "*display*"
- (while (string= "0" (car (ml4pg-read-lines (expand-file-name "available.txt"))))
-
- (progn (erase-buffer)
- (insert (format "Searching clusters...\n"))
- (sleep-for 1))
- )
- (erase-buffer)
- (let* ((clu (car (ml4pg-read-lines (expand-file-name "matlab_res.txt")))))
- (cond
- ((search "None" clu)
- (if (not ml4pg-iterative)
- (insert (format "Sorry, but we have not found any similarity using granularity %s\n" ml4pg-granularity-level))
- (if (eq ml4pg-granularity-level-temp 5)
- (format "Sorry, but we have not found any similarity at any ganularity level\n")
- (progn (setf ml4pg-granularity-level-temp (1+ granularity-level-temp))
- (ml4pg-show-clusters-of-theorem-iterative)))))
- (t (progn (insert (format "Similarities:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (insert (format "This lemma is similar to the lemmas:\n "))
- (do ((temp2 (ml4pg-remove-occurrence (ml4pg-cluster-string-to-list clu) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
- ((endp temp2) )
- (if (<= (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "- "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
- (insert (format "- "))
- (ml4pg-insert-button-lemma temp-res)))))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (if ml4pg-iterative (insert (format "Similarities found using granularity level %s\n" ml4pg-granularity-level-temp)))
- ))
-)))
-
-
-
-
-
-(defun ml4pg-print-similarities-weka (n)
- (let ((clusters (ml4pg-extract-clusters-from-file n)))
- (with-current-buffer "*display*"
- (erase-buffer)
- (insert (format "Similarities:\n"))
- (insert (format "-----------------------------------------------------------------------------------\n"))
- (insert (format "This lemma is similar to the lemmas:\n"))
- (do ((temp2 (ml4pg-remove-occurrence (ml4pg-clusters-of-n clusters (nth (1- (length ml4pg-saved-theorems)) clusters)) (1+ (length ml4pg-saved-theorems))) (cdr temp2)))
- ((endp temp2) )
- (if (<= (car temp2) (length ml4pg-saved-theorems))
- (progn (insert (format "- "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon(car (nth (- (car temp2) 1) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (ml4pg-remove_last_colon (format "%s" (read (current-buffer))))))
- (insert (format "- "))
- (ml4pg-insert-button-lemma temp-res)
- )))
- (insert (format "-----------------------------------------------------------------------------------\n") )
- )
- ))
-
-
-
-(defun ml4pg-insert-button-lemma (lemma)
- (progn (insert-button lemma 'action (ml4pg-insert-button-lemma-macro lemma)
- 'face (list 'link)
- 'follow-link t)
- (insert (format "\n"))))
-
-
-
-(defun ml4pg-insert-button-lemma-macro (test)
- (list 'lambda '(x)
- (list 'progn
- (list 'proof-shell-invisible-cmd-get-result (list 'format '"Unset Printing All."))
- (list 'if (list 'get-buffer '"*display2*") (list 'with-current-buffer '"*display2*" (list 'delete-window)))
- (list 'with-current-buffer '"*display*" (list 'split-window-vertically))
- (list 'switch-to-buffer-other-window '"*display2*")
- (list 'with-current-buffer '"*display2*" (list 'erase-buffer))
- (list 'with-current-buffer '"*display2*"
- (list 'insert (list 'proof-shell-invisible-cmd-get-result
- (list 'format '"Print %s." test))))
- )))
-
-
-
-
-
-
-(defvar ml4pg-times 0)
-
-(defun ml4pg-print-clusters (res freq)
- (interactive)
- (setf ml4pg-times (1+ ml4pg-times))
- (if (not (caar res))
- (insert (format "Searching clusters...\n"))
- (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma
- (ml4pg-remove_last_colon
- (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))))))))
-
-
-(defun ml4pg-print-clusters-bis (res freq)
- (interactive)
- (setf ml4pg-times (1+ ml4pg-times))
- (if (not (caar res))
- (insert (format "Searching clusters...\n"))
- (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (if (< (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
- (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (format "%s" (read (current-buffer)))))
- (insert (format "Lemma " ))
- (ml4pg-insert-button-lemma temp-res))
- )))))))
-
-
-(defun ml4pg-extract_clusters_freq (list)
- (do ((temp list (cdr temp))
- (clusters nil)
- (freq nil))
- ((endp temp) (list clusters freq))
- (if (not (string= (subseq (car temp) 0 1) "["))
- (setf clusters (append clusters (list (car temp))))
- (setf freq (append freq (list (string-to-number (subseq (car temp) 1 (search "]" (car temp))))))))))
-
-
-
-
-
-
-(defun ml4pg-print-clusters-matlab ()
- (with-current-buffer "*display*"
- (while (string= "0" (car (read-lines (expand-file-name "available.txt"))))
-
- (progn (erase-buffer)
- (insert (format "Searching clusters...\n"))
- (sleep-for 1))
- )
- (erase-buffer)
- (let* ((clu-freq (ml4pg-extract_clusters_freq (read-lines (expand-file-name "matlab_res.txt"))))
- (clu (car clu-freq))
- (freq (cadr clu-freq))
- (temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip clu freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (ml4pg-cluster-string-to-list (car temp)) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (if (< (string-to-number (car temp2)) (length ml4pg-saved-theorems))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
- (car (nth (string-to-number (car temp2)) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (string-to-number (car temp2)) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (format "%s" (read (current-buffer)))))
- (insert (format "Lemma " ))
- (ml4pg-insert-button-lemma temp-res))
- ))))
- )))
-
-
-
-
-(defun ml4pg-print-clusters-weka (gra)
- (let* ((clusters (ml4pg-extract-clusters-from-file gra))
- (res1 (ml4pg-remove-alone (cdr (ml4pg-form-clusters clusters gra)))))
- (with-current-buffer "*display*"
- (erase-buffer)
- (insert (format "We have found the following clusters:\n" ))
- (insert (format "-------------------------------------------------------------------------------------\n"))
-
- (do ((temp res1 (cdr temp))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "-------------------------------------------------------------------------------------\n")) )
- (progn (insert (format "Cluster %s\n" i ))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (if (< (car temp2) (length ml4pg-saved-theorems))
- (progn (insert (format "Lemma "))
- (ml4pg-insert-button-lemma (ml4pg-remove_last_colon
- (car (nth (car temp2) ml4pg-saved-theorems)))))
- (progn (shell-command (concat "cat "(expand-file-name "names_temp.txt") " | sed -n '"
- (format "%s" (- (car temp2) (length ml4pg-saved-theorems)))
- "p'"))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (read (current-buffer))
- (setf temp-res (format "%s" (read (current-buffer)))))
- (insert (format "Lemma " ))
- (if (not (search "home" temp-res) )(ml4pg-insert-button-lemma temp-res)))
- ))))
-
-
-
-
- )))
-
-
-
-
-
-
-
-(defun ml4pg-remove_last_colon (str)
- (if (string= (subseq str (1- (length str))) ":")
- (subseq str 0 (1- (length str)))
- str))
-
-
-;; This functions shows the cluster of a theorem
-
-
-(defun ml4pg-show-clusters-of-theorem-iterative ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
- (gra (if (not ml4pg-iterative)
- (cond ((eq 2 ml4pg-granularity-level) 5)
- ((eq 3 ml4pg-granularity-level) 10)
- ((eq 4 ml4pg-granularity-level) 15)
- ((eq 5 ml4pg-granularity-level) 20)
- (t 3))
- (cond ((eq 2 ml4pg-granularity-level-temp) 5)
- ((eq 3 ml4pg-granularity-level-temp) 10)
- ((eq 4 ml4pg-granularity-level-temp) 15)
- ((eq 5 ml4pg-granularity-level-temp) 20)
- (t 3)))))
- (progn (setf signal 1)
- (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp.csv")
- (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
- (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
- (ml4pg-print-similarities-matlab)
- )))
-
-(defun ml4pg-show-clusters-of-theorem ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "find_cluster_with_gaussian") (t "find_cluster_with_kmeans")))
- (gra (if (not ml4pg-iterative)
- (cond ((eq 2 ml4pg-granularity-level) 8)
- ((eq 3 ml4pg-granularity-level) 15)
- ((eq 4 ml4pg-granularity-level) 25)
- ((eq 5 ml4pg-granularity-level) 50)
- (t 5))
- (cond ((eq 2 ml4pg-granularity-level-temp) 8)
- ((eq 3 ml4pg-granularity-level-temp) 15)
- ((eq 4 ml4pg-granularity-level-temp) 25)
- ((eq 5 ml4pg-granularity-level-temp) 50)
- (t 5)))))
- (progn
- (setq ml4pg-my-buffer "")
- (setf res (ml4pg-extract-info-up-to-here))
- (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1-bis res)))
- ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2-bis ml4pg-tactic-temp ml4pg-tactic-level)))
- ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2-bis ml4pg-proof-tree-temp ml4pg-proof-tree-level)))))
- (if ml4pg-libs-menus
- (progn (ml4pg-add-libraries-temp)
- (ml4pg-add-names)))
- (switch-to-buffer-other-window "*display*")
- (cond ((string= ml4pg-ml-system "m")
- (progn (setf ml4pg-signal 1)
- (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp.csv")
- (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra (1+ (length ml4pg-saved-theorems))
- (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
- (ml4pg-print-similarities-matlab)
- ))
-
- ((string= ml4pg-ml-system "w")
- (progn (setf ml4pg-signal 5)
- (ml4pg-weka gra)
- (sleep-for 1)
- (ml4pg-print-similarities-weka gra))
- )
- )))
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All")))
-
-;; The following function shows all the clusters which have been obtained from all the theorems exported up to now
-
-(defun ml4pg-show-clusters ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
- (gra (cond ((eq 2 ml4pg-granularity-level) 5)
- ((eq 3 ml4pg-granularity-level) 10)
- ((eq 4 ml4pg-granularity-level) 15)
- ((eq 5 ml4pg-granularity-level) 20)
- (t 3)))
- (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
- ((eq 3 ml4pg-frequency-precision) 1000)
- (t 100))))
-
- (progn
- (setf ml4pg-signal 2)
- (setf ml4pg-my-buffer "")
- (progn (with-temp-file (expand-file-name "temp1.csv") (insert (ml4pg-extract-features-1)))
- (switch-to-buffer-other-window "*display*")
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp1.csv") (format "; %s(temp1,%s,%s)\n" alg gra freq))))
- )))
-
-
-
-(defun ml4pg-show-clusters-bis ()
- (interactive)
- (let* ((alg (cond ((string= "g" ml4pg-algorithm) "gaussian_clusters") (t "kmeans_clusters_and_frequencies")))
- (gra (cond ((eq 2 ml4pg-granularity-level) 5)
- ((eq 3 ml4pg-granularity-level) 10)
- ((eq 4 ml4pg-granularity-level) 15)
- ((eq 5 ml4pg-granularity-level) 20)
- (t 3)))
- (freq (cond ((eq 2 ml4pg-frequency-precision) 500)
- ((eq 3 ml4pg-frequency-precision) 1000)
- (t 100))))
-
- (progn
- (setf ml4pg-signal 4)
- (setf ml4pg-my-buffer "")
- (if ml4pg-libs-menus
- (progn (with-temp-file (expand-file-name "temp.csv") (cond ((string= ml4pg-level "g") (insert (ml4pg-extract-features-1)))
- ((string= ml4pg-level "t") (insert (ml4pg-extract-features-2 ml4pg-tactic-level)))
- ((string= ml4pg-level "p") (insert (ml4pg-extract-features-2 ml4pg-proof-tree-level)))))
- (ml4pg-add-libraries-temp)
- (ml4pg-add-names))
- (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-1))))
- (switch-to-buffer-other-window "*display*")
- (cond ((string= ml4pg-ml-system "m")
- (progn
- (shell-command (concat "echo 0 > " (expand-file-name "available.txt")))
- (require 'comint)
- (comint-send-string (get-buffer-process "*matlab*")
- (concat "load " (expand-file-name "temp.csv") (format "; %s(temp,%s,%s,'%s'); csvwrite('%s',1)\n" alg gra freq
- (expand-file-name "matlab_res.txt") (expand-file-name "available.txt"))))
- (ml4pg-print-clusters-matlab)))
- ((string= ml4pg-ml-system "w")
- (progn (setf ml4pg-signal 5)
- (ml4pg-weka gra)
- (sleep-for 1)
- (ml4pg-print-clusters-weka gra))
- )
-
- )))
- (proof-shell-invisible-cmd-get-result (format "Unset Printing All"))
-)
-
-
-
-
-(defun ml4pg-add-libraries ()
- (do ((temp ml4pg-libs-menus (cdr temp)))
- ((endp temp) nil)
- (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) ".csv >> " (expand-file-name "temp1.csv"))))
- ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tactics.csv >> " (expand-file-name "temp1.csv"))))
- ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tree.csv >> " (expand-file-name "temp1.csv")))))))
-
-(defun ml4pg-add-libraries-temp ()
- (do ((temp ml4pg-libs-menus (cdr temp)))
- ((endp temp) nil)
- (cond ((string= ml4pg-level "g") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) ".csv >> " (expand-file-name "temp.csv"))))
- ((string= ml4pg-level "t") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tactics.csv >> " (expand-file-name "temp.csv"))))
- ((string= ml4pg-level "p") (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_tree.csv >> " (expand-file-name "temp.csv")))))))
-
-(defun ml4pg-add-names ()
- (shell-command (concat "rm " (expand-file-name "names_temp.txt")))
- (shell-command (concat "touch " (expand-file-name "names_temp.txt")))
- (do ((temp ml4pg-libs-menus (cdr temp)))
- ((endp temp) nil)
- (shell-command (concat "cat " ml4pg-home-dir "libs/ssreflect/" (car temp) "_names >> " (expand-file-name "names_temp.txt")))))
-
-
-
-
-
-
-
-(defvar ml4pg-names-values nil)
-
-(defun ml4pg-print-clusters2 (res freq)
- (interactive)
- (let* ((temp0 (ml4pg-unzip (ml4pg-quicksort-pair (ml4pg-zip res freq))))
- (res1 (car temp0))
- (freq1 (cadr temp0)))
- (insert (format "We have found the following clusters:\n"))
- (insert (format "------------------------------------------------------------------------------------------------------------\n"))
- (do ((temp res1 (cdr temp))
- (temp-freq freq1 (cdr temp-freq))
- (i 1 (1+ i)))
- ((endp temp) (insert (format "------------------------------------------------------------------------------------------------------------\n")))
- (progn (insert (format "Cluster %s with frequency %s%%\n" i (car temp-freq)))
- (do ((temp2 (car temp) (cdr temp2)))
- ((endp temp2) (insert (format "\n")))
- (insert (format "Lemma %s\n"
- (ml4pg-remove_last_colon
- (car (nth (- (string-to-number (car temp2)) 1) ml4pg-saved-theorems2))))))))))
-
-
-(defun ml4pg-compute-clusters-and-values (list fr)
- (if (not (ml4pg-left-strings ml4pg-saved-theorems2))
- (ml4pg-print-clusters2 list fr)
- (progn (setf ml4pg-names-values (ml4pg-extract-names-dynamic))
- (do ((temp list (cdr temp))
- (n 200 (+ n 5)))
- ((endp temp) (progn (setf ml4pg-names-values (ml4pg-complete-names-values ml4pg-names-values n))
- (setf ml4pg-saved-theorems2 (ml4pg-recompute-saved-theorems ml4pg-saved-theorems2))
- (setf ml4pg-my-buffer "")
- (ml4pg-show-clusters-dynamic-b)
- )
-nil
-)
- (ml4pg-assign-values (car temp) n))
- )))
-
-(defvar ml4pg-granularity-dynamic 0)
-
-(defun ml4pg-show-clusters-dynamic ()
- (interactive)
- (setf ml4pg-granularity-dynamic (read-string "Introduce the granularity level (values from 1 to 5): "))
- (progn
- (setf ml4pg-signal 3)
- (setf ml4pg-my-buffer "")
- (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
- (switch-to-buffer-other-window "*display*")
- (require 'comint)
- (cond ((string= "1" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
- ((string= "2" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
- ((string= "3" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
- ((string= "4" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
- ((string= "5" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
- (t (ml4pg-show-clusters-dynamic)))
-
- ))
-
-(defun ml4pg-show-clusters-dynamic-b ()
- (interactive)
- (progn
- (setf ml4pg-signal 3)
- (setf ml4pg-my-buffer "")
- (with-temp-file (expand-file-name "temp.csv") (insert (ml4pg-extract-features-dynamic)))
- (require 'comint)
- (cond ((string= "1" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,3,100)\n")))
- ((string= "2" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,5,100)\n")))
- ((string= "3" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,10,100)\n")))
- ((string= "4" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,15,100)\n")))
- ((string= "5" ml4pg-granularity-dynamic)
- (comint-send-string (get-buffer-process "*matlab*") (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,20,100)\n")))
- (t (ml4pg-show-clusters-dynamic)))
- ;(comint-send-string (get-buffer-process "*matlab*")
-; (concat "load " (expand-file-name "temp.csv") "; kmeans_clusters_and_frequencies(temp,"
-; (format "%s" (floor (length (extract-list-without-strings saved-theorems2)) 5) ) ",100)\n"))
- )) \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/menus.el b/contrib/ML4PG/ssreflect/menus.el
deleted file mode 100644
index 226c1212..00000000
--- a/contrib/ML4PG/ssreflect/menus.el
+++ /dev/null
@@ -1,308 +0,0 @@
-;;; The menu interaction
-
-(easy-menu-define ml4pg-menu global-map "Statistics"
- '("Statistics"
- ("Configuration"
- ("Algorithm"
- ["K-means" (ml4pg-change-algorithm "k")
- :selected (string= ml4pg-algorithm "k")
- :style toggle
- :help "Use k-means algorithm"]
- ["Gaussian" (ml4pg-change-algorithm "g")
- :selected (string= ml4pg-algorithm "g")
- :style toggle
- :active (string= ml4pg-ml-system "m")
- :help "Use Gaussian algorithm"]
- ["EM" (ml4pg-change-algorithm "e")
- :selected (string= ml4pg-algorithm "e")
- :style toggle
- :active (string= ml4pg-ml-system "w")
- :help "Use Simple EM algorithm"]
- ["FarthestFirst" (ml4pg-change-algorithm "f")
- :selected (string= ml4pg-algorithm "f")
- :style toggle
- :active (string= ml4pg-ml-system "w")
- :help "Use FarhestFirst algorithm"])
- ("Granularity"
- ["1" (ml4pg-change-granularity 1)
- :selected (eq ml4pg-granularity-level 1)
- :style toggle
- :help "We will use 3 clusters"]
- ["2" (ml4pg-change-granularity 2)
- :selected (eq ml4pg-granularity-level 2)
- :style toggle
- :help "We will use 5 clusters"]
- ["3" (ml4pg-change-granularity 3)
- :selected (eq ml4pg-granularity-level 3)
- :style toggle
- :help "We will use 10 clusters"]
- ["4" (ml4pg-change-granularity 4)
- :selected (eq ml4pg-granularity-level 4)
- :style toggle
- :help "We will use 15 clusters"]
- ["5" (ml4pg-change-granularity 5)
- :selected (eq ml4pg-granularity-level 5)
- :style toggle
- :help "We will use 20 clusters"])
- ("Frequencies"
- ["1" (ml4pg-change-frequency 1)
- :selected (eq ml4pg-frequency-precision 1)
- :style toggle
- :help "The experiments will be run 100 times"]
- ["2" (ml4pg-change-frequency 2)
- :selected (eq ml4pg-frequency-precision 2)
- :style toggle
- :help "The experiments will be run 500 times"]
- ["3" (ml4pg-change-frequency 3)
- :selected (eq ml4pg-frequency-precision 3)
- :style toggle
- :help "The experiments will be run 1000 times"]))
- ["Extract info up to point" (ml4pg-extract-feature-theorems)
- :keys "C-c SPC"]
- ["Show clusters" (ml4pg-show-clusters-bis)
- :keys "C-c c"]
- ["Show similar theorems" (ml4pg-show-clusters-of-theorem)
- :keys "C-c m"]
- ["Export library" (ml4pg-save-numbers)
- :keys "C-c n"]
- ["Show cluster libraries" (ml4pg-exported-libraries)]
- ["Activate Icons" (ml4pg-activate-icons)]
-))
-
-(easy-menu-remove-item global-map '("menu-bar") "Statistics")
-
-(easy-menu-add-item nil nil ml4pg-menu "help-menu")
-
-(defun ml4pg-activate-icons ()
- (interactive)
- (progn
- (easy-menu-remove-item nil '("Statistics") "Activate Icons")
- (define-key coq-mode-map [tool-bar statistical-hint]
- (list 'menu-item "Statistical Hint" 'ml4pg-show-clusters-of-theorem
- :help "Statistical Hint"
- :image (list 'image :type 'xpm
- :file (concat ml4pg-home-dir "icons/sh-hint.xpm"))))
- (define-key coq-mode-map [tool-bar clustering]
- (list 'menu-item "Clustering" 'ml4pg-show-clusters-bis
- :help "Clustering"
- :image (list 'image :type 'xpm
- :file (concat ml4pg-home-dir "icons/clustering.xpm"))))))
-
-
-(defvar ml4pg-ml-system "w")
-(defvar ml4pg-algorithm "k")
-(defvar ml4pg-granularity-level 3)
-(defvar ml4pg-frequency-precision 1)
-(defvar ml4pg-iterative nil)
-(defvar ml4pg-save-automatically nil)
-(defvar ml4pg-level "g")
-
-
-(defun ml4pg-change-level (n)
- (setq ml4pg-level n))
-
-(defun ml4pg-change-algorithm (s)
- (setq ml4pg-algorithm s))
-
-(defun ml4pg-change-ml-system (s)
- (setq ml4pg-ml-system s)
- (setq ml4pg-algorithm "k")
- (cond ((string= s "w")
- (setq ml4pg-iterative nil)
- ))
- )
-
-(defun ml4pg-change-granularity (n)
- (setq ml4pg-granularity-level n))
-
-(defun ml4pg-change-frequency (n)
- (setq ml4pg-frequency-precision n))
-
-(defun ml4pg-change-iterative-search ()
- (setq ml4pg-iterative (not ml4pg-iterative)))
-
-(defun ml4pg-change-save ()
- (setq ml4pg-save-automatically (not ml4pg-save-automatically)))
-
-
-;(easy-menu-add-item nil '("Statistics") statistics-menu "help-menu")
-
-(defun ml4pg-change-algorithm-interactive ()
- (interactive)
- (let ((alg (read-string
- "What algorithm do you want to use (k-means -> k, Gaussian -> g): ")))
- (setf ml4pg-algorithm (cond ((string= "g" alg) "g")
- ((string= "k" alg) "k")
- (t ml4pg-algorithm)))))
-
-(defun ml4pg-change-granularity-interactive ()
- (interactive)
- (let ((alg (read-string
- "Introduce the granularity level (values from 1 to 5): ")))
- (setf ml4pg-granularity-level (cond ((string= "1" alg) 1)
- ((string= "2" alg) 2)
- ((string= "3" alg) 3)
- ((string= "4" alg) 4)
- ((string= "5" alg) 5)
- (t granularity-level)))))
-
-(defun ml4pg-change-frequency-interactive ()
- (interactive)
- (let ((alg (read-string
- "Introduce the precision of the frequencies that you want to obtain (values from 1 to 3): ")))
- (setf ml4pg-frequency-precision (cond ((string= "1" alg) 1)
- ((string= "2" alg) 2)
- ((string= "3" alg) 3)
- (t ml4pg-frequency-precision)))))
-
-(defun change-iterative-interactive ()
- (interactive)
- (let ((alg (read-string
- "Do you want to perform iterative search? (yes -> y, no -> n): ")))
- (setf ml4pg-iterative (cond ((string= "y" alg) 1)
- ((string= "n" alg) 2)
- (t ml4pg-iterative)))))
-
-
-
-(defun ml4pg-exported-libraries ()
- (interactive)
- (easy-menu-remove-item nil '("Statistics") "Show cluster libraries")
- (easy-menu-add-item nil '("Statistics")
- (cons "Available libraries for clustering:"
- (cons ["Current" nil
- :selected t
- :style toggle
- :help "Use the current library for clustering"]
- (ml4pg-select-libraries)))))
-
-
-(defun ml4pg-select-libraries ()
- (ml4pg-available-libraries)
- (ml4pg-available-dirs)
- (append (ml4pg-select-libraries-aux ml4pg-libs nil) (ml4pg-libraries-dirs)))
-
-
-(defun ml4pg-select-libraries-aux (temp temp2)
- (if (endp temp)
- temp2
- (ml4pg-select-libraries-aux (cdr temp) (append temp2 (list (ml4pg-menu-library (car temp)))))))
-
-
-
-
-(defvar ml4pg-libs nil)
-
-(defun ml4pg-available-libraries ()
- (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect | grep .csv | wc -l"))
- (let ((n nil)
- (i 0))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (setq n (string-to-number (format "%s" (read (current-buffer))))))
- (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect | grep .csv"))
- (with-current-buffer "*Shell Command Output*"
- (progn (beginning-of-buffer)
- (while (< i n)
- (let ((r (format "%s" (read (current-buffer)))))
- (progn (setq i (1+ i))
- (setq ml4pg-libs (append ml4pg-libs (list (subseq r 0 (search "." r))))))))))))
-
-
-
-(defvar ml4pg-dirs nil)
-
-(defun ml4pg-available-dirs ()
- (shell-command (concat "ls -d " ml4pg-home-dir "libs/ssreflect/*/ | wc -l"))
- (let ((n nil)
- (i 0))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (setq n (string-to-number (format "%s" (read (current-buffer))))))
- (shell-command (concat "ls -d " ml4pg-home-dir "libs/ssreflect/*/"))
- (with-current-buffer "*Shell Command Output*"
- (progn (beginning-of-buffer)
- (while (< i n)
- (let ((r (format "%s" (read (current-buffer)))))
- (progn (setq i (1+ i))
- (setq ml4pg-dirs (append ml4pg-dirs (list (subseq r (length (concat ml4pg-home-dir "libs/ssreflect/")) (1- (length r)))))))))))
- ))
-
-
-
-
-(defun ml4pg-libraries-dirs ()
- (do ((temp ml4pg-dirs (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (setf temp2 (append temp2 (list (append (list (car temp)) (ml4pg-libraries-dir (car temp))))))))
-
-
-
-(defun ml4pg-libraries-dir (dir)
- (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect/" dir "/ | grep _names | wc -l"))
- (let ((n nil)
- (i 0)
- (temp nil))
- (with-current-buffer "*Shell Command Output*"
- (beginning-of-buffer)
- (setq n (string-to-number (format "%s" (read (current-buffer))))))
- (shell-command (concat "ls " ml4pg-home-dir "libs/ssreflect/" dir "/ | grep _names"))
- (with-current-buffer "*Shell Command Output*"
- (progn (beginning-of-buffer)
- (while (< i n)
- (let* ((r1 (format "%s" (read (current-buffer))))
- (r (subseq r1 0 (search "_names" r1))))
- (progn (setq i (1+ i))
- (setq temp (append temp (list (ml4pg-menu-library-dir (subseq r 0 (search "." r)) dir)))))))
-))
- temp))
-
-
-
-(defun ml4pg-menu-library-dir (item dir)
- (vector item (list 'ml4pg-change-library (concat dir "/" item))
- :selected (list 'ml4pg-string-member (concat dir "/" item) 'ml4pg-libs-menus)
- :style 'toggle
- :help (format "Use the %s library for clustering" item)))
-
-(defun ml4pg-menu-library (item)
- (vector item (list 'change-library item)
- :selected (list 'ml4pg-string-member item 'ml4pg-libs-menus)
- :style 'toggle
- :help (format "Use the %s library for clustering" item)))
-
-
-
-(defvar ml4pg-libs-menus nil)
-
-(defun ml4pg-string-member (string list)
- (do ((temp list (cdr temp))
- (is nil))
- ((or (endp temp) is) is)
- (if (string= string (car temp))
- (setf is t))))
-
-
-(defun ml4pg-change-library (string)
- (if (ml4pg-string-member string ml4pg-libs-menus)
- (ml4pg-remove-from-menus string)
- (setq ml4pg-libs-menus (append ml4pg-libs-menus (list string)))))
-
-
-(defun ml4pg-remove-from-menus (string)
- (do ((temp ml4pg-libs-menus (cdr temp))
- (temp2 nil))
- ((endp temp) (setf ml4pg-libs-menus temp2))
- (if (not (string= string (car temp)))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-
-
-
-
-
-
-
-
diff --git a/contrib/ML4PG/ssreflect/save_lemmas.el b/contrib/ML4PG/ssreflect/save_lemmas.el
deleted file mode 100644
index 531532fb..00000000
--- a/contrib/ML4PG/ssreflect/save_lemmas.el
+++ /dev/null
@@ -1,121 +0,0 @@
-(defun ml4pg-proof-assert-next-command-interactive3 ()
- (interactive)
- (if (get-buffer "*response*")
- (if (eq ml4pg-save-automatically 0)
- (proof-assert-next-command-interactive)
- (progn (with-current-buffer "*response*"
- (beginning-of-buffer)
- (if (zerop (buffer-size))
- (setf temp nil)
- (setf temp (search "No"
- (format "%s" (read (current-buffer)))))))
- (if temp
- (ml4pg-export-previous-lemm)
- (proof-assert-next-command-interactive)
- ))
-
- )
- (proof-assert-next-command-interactive)))
-
-
-(defun ml4pg-export-previous-lemm ()
- (interactive)
- (let ((final (point))
- (result nil)
- (end nil))
- (search-backward "Proof.")
- (proof-goto-point)
- (while (< (point) final)
- (let* ((semis (save-excursion
- (skip-chars-backward " \t\n"
- (proof-queue-or-locked-end))
- (proof-segment-up-to-using-cache (point))))
- (comment (caar semis))
- (cmd (cadar semis))
- (ts nil))
- (progn (setf ts (ml4pg-get-top-symbol))
- (setf ng (ml4pg-get-number-of-goals))
- (proof-assert-next-command-interactive)
- (setf ng2 (ml4pg-get-number-of-goals))
- (if cmd
- (setf result (cons (append (ml4pg-get-numbers cmd) (list ts) (list ng2)) result))
- )
- )
-
- )
- )
- (proof-assert-next-command-interactive)
- (setf ml4pg-saved-theorems (append ml4pg-saved-theorems
- (list (list (format "%s" (ml4pg-get-name))
- (flat (reverse result))))))
- (search-forward "Qed.")
-
- ))
-
-
-(defun ml4pg-get-name ()
- (search-backward "Lemma")
- (read (current-buffer))
- (read (current-buffer)))
-
-
-(defun ml4pg-list-to-string (list)
- (do ((temp list (cdr temp))
- (temp2 ""))
- ((endp temp) temp2)
- (setf temp2 (concat temp2 (car temp) ", "))))
-
-
-
-
-
-
-
-(defun ml4pg-save-numbers ()
- (interactive)
- (progn (beginning-of-buffer)
- (proof-goto-point)
- (end-of-buffer)
- (ml4pg-extract-feature-theorems)
- (let ((d (read-string (concat "Where do you want to store this library (" (ml4pg-list-to-string ml4pg-dirs) "n (create new directory)): ")))
- (d2 nil))
- (cond ((ml4pg-string-member d ml4pg-dirs)
- (progn (with-temp-file
- (concat ml4pg-home-dir "libs/ssreflect/" d "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- ".csv") (insert (ml4pg-extract-features-1)))
-
-
- (with-temp-file (concat ml4pg-home-dir "libs/ssreflect/" d "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- "_names") (insert (ml4pg-extract-names)))))
- ((string= d "n")
- (progn
- (setf d2 (read-string (concat "Introduce a name for the directory: ")))
- (shell-command (concat "mkdir " ml4pg-home-dir "libs/ssreflect/" d2))
- (with-temp-file
- (concat ml4pg-home-dir "libs/ssreflect/" d2 "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- ".csv") (insert (ml4pg-extract-features-1)))
-
-
- (with-temp-file (concat ml4pg-home-dir "libs/ssreflect/" d2 "/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- "_names") (insert (ml4pg-extract-names)))))
- (t
- (progn (with-temp-file
- (concat ml4pg-home-dir "libs/ssreflect/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- ".csv") (insert (ml4pg-extract-features-1)))
-
-
- (with-temp-file (concat ml4pg-home-dir "libs/ssreflect/"
- (subseq (buffer-name (current-buffer)) 0
- (search "." (buffer-name (current-buffer))))
- "_names") (insert (ml4pg-extract-names))))))
- ))) \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/shortcuts.el b/contrib/ML4PG/ssreflect/shortcuts.el
deleted file mode 100644
index d67a7f50..00000000
--- a/contrib/ML4PG/ssreflect/shortcuts.el
+++ /dev/null
@@ -1,14 +0,0 @@
-(global-set-key (kbd "C-c C-d") 'ml4pg-export-theorem)
-(global-set-key (kbd "C-c C-e") 'ml4pg-save-file-conventions1)
-(global-set-key (kbd "C-c m") 'ml4pg-show-clusters-of-theorem)
-(global-set-key (kbd "C-c C-SPC") 'ml4pg-extract-feature-theorems)
-(global-set-key (kbd "C-c c") 'ml4pg-show-clusters)
-(global-set-key (kbd "C-c e") 'ml4pg-extract-feature-theorems-dynamic)
-(global-set-key (kbd "C-c d") 'ml4pg-show-clusters-dynamic)
-(global-set-key (kbd "C-c a") 'ml4pg-change-algorithm-interactive)
-(global-set-key (kbd "C-c g") 'ml4pg-change-granularity-interactive)
-(global-set-key (kbd "C-c f") 'ml4pg-change-frequency-interactive)
-(global-set-key (kbd "C-c i") 'ml4pg-change-iterative-interactive)
-(global-set-key (kbd "C-c C-m") 'ml4pg-proof-assert-next-command-interactive3)
-(global-set-key (kbd "C-c n") 'ml4pg-save-numbers)
-
diff --git a/contrib/ML4PG/ssreflect/storage.el b/contrib/ML4PG/ssreflect/storage.el
deleted file mode 100644
index fde72694..00000000
--- a/contrib/ML4PG/ssreflect/storage.el
+++ /dev/null
@@ -1,51 +0,0 @@
-(defun ml4pg-save-lemma-aux (string)
- (append-to-file string nil (concat ml4pg-home-dir "lemmas.txt"))
-)
-
-(defun ml4pg-save-lemma (name value)
- (ml4pg-save-lemma-aux (format "%s&%s$" name value)))
-
-
-(defun ml4pg-save-view-aux (string)
- (append-to-file string nil (concat ml4pg-home-dir "views.txt"))
-)
-
-(defun ml4pg-save-view (name value)
- (ml4pg-save-view-aux (format "%s&%s$" name value)))
-
-
-(defun ml4pg-read-lemmas ()
- (if (file-exists-p (concat ml4pg-home-dir "ssreflect/lemmas.txt"))
- (with-temp-buffer
- (insert-file-contents (concat ml4pg-home-dir "ssreflect/lemmas.txt"))
- (let ((temp (format "%s" (read (current-buffer)))))
- (setf ml4pg-theorems_id (ml4pg-extract-info-from-files temp))
- ))))
-
-(defun ml4pg-read-views ()
- (if (file-exists-p (concat ml4pg-home-dir "ssreflect/views.txt"))
- (with-temp-buffer
- (insert-file-contents (concat ml4pg-home-dir "ssreflect/views.txt"))
- (let ((temp (format "%s" (read (current-buffer)))))
- (setf ml4pg-views_id (ml4pg-extract-info-from-files temp))
- ))))
-
-(defun ml4pg-extract-info-from-files (string)
- (do ((temp string)
- (temp2 nil))
- ((not (search "$" temp)) temp2)
- (let ((dollar (search "$" temp))
- (amper (search "&" temp)))
- (progn
- (setf temp2 (append temp2 (list (cons (subseq temp 0 amper)
- (string-to-number (subseq temp (1+ amper) dollar))))))
- (setf temp (subseq temp (1+ dollar)))))))
-
-
-
-
-
-
-
-
-
diff --git a/contrib/ML4PG/ssreflect/views.txt b/contrib/ML4PG/ssreflect/views.txt
deleted file mode 100644
index 1f40a052..00000000
--- a/contrib/ML4PG/ssreflect/views.txt
+++ /dev/null
@@ -1 +0,0 @@
-all_filterP&102$leq_trans->&103$subnKC&104$addIn&105$rot&106$rotr&107$/eqP&108$eqP&109$hasP&110$negP&111$predU1P&112$eq_in_filter&113$allP&114$all_pred1P&115$index&116$nth_find&117$andP&118$i&119$idPn&120$perm_eqP&121$idP&122$perm_eq_trans&123$perm_eqlP&124$perm_eq_size:&125$eqP->&126$uniq_leq_size&127$/idP&128$ss12&129$rot_to:&130$PcatCA&131$PcatCA/IHs/PcatCA&132$catCA_perm_ind&133$has_mask&134$all_nthP&135$subseqP&136$@all_pred1P&137$perm_to_rem/perm_eq_size->&138$esym&139$rem_filter&140$perm_eq_size&141$mapP&142$/mapP&143$@eq_from_nth&144$eq_in_map->&145$filter_uniq&146$map_inj_uniq->&147$It&148$allpairsP&149$orP&150$hasPn&151$eq_bigl&102$eq_bigr->&103$index_iota&104$nilP->&105$eq_bigl->&106$reducebig&107$big_hasC->&108$index_enum&109$big_nat_widen&110$g&111$G&112$eq_bigr&113$_&114$perm_to_rem/(eq_big_perm _)->&115$eq_big_perm&116$big_rem->&117$rem_filter->&118$IHn&119$familyP&120$ffunP&121$eqP/Df&122$IHr&123$familyP/(_ i)&124$existsP&125$forallP&126$bigmax_leqP&127$eq_card0->&128$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$matrixP&102$rowP&103$rowP/(_ j):&104$colP&105$canLR&106$conform_mx&107$ord_inj->&108$addnI/val_inj->&109$bump&110$block_mx&111$ulsubmx&112$ursubmx&113$dlsubmx&114$drsubmx&115$nz_row&116$row_matrixP&117$eqP:&118$negbTE&119$is_scalar_mx&120$is_scalar_mxP&121$negbTE->&122$xcol&123$is_perm_mxP&124$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$perm_to_rem/(eq_big_perm _)->&102$eq_big_perm&103$big_rem->&104$rem_filter->&105$IHn&106$familyP&107$ffunP&108$eqP/Df&109$IHr&110$familyP/(_ i)&111$existsP&112$forallP&113$bigmax_leqP&114$eq_card0->&115$lastP:&116$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$b&102$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$rowP&102$1&103$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$matrixP&102$ord_inj&103$bump&104$rowP&105$colP&106$block_mx&107$rowV0P&108$mulIf&109$1&110$ker&111$tool&112$row_freeP&113$kernel&114$eq_row_mx&115$eqP:&116$ker_base&117$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$fact&102$exponential&103$fact&102$exponential&103$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$fact&102$exponential&103$multiplication&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$fact&102$exponential&103$multiplication&104$exponential&102$multiplication&103$fact&104$b&102$a&103$pot_matrix&104$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_mul&102$fn_mul&103$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_less&102$theta_power&102$fn_power&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$fn_fib&102$fib_locals&103$helper_fib&104$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$pot_matrix&102$eqP&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$val_inj&102$ffunP&103$matrixP&104$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$existsP&113$forallP&114$bigmax_leqP&115$eq_card0->&116$val_inj&102$ffunP&103$matrixP&104$rowP&105$rowP/(_ j):&106$colP&107$canLR&108$conform_mx&109$ord_inj->&110$addnI/val_inj->&111$bump&112$block_mx&113$ulsubmx&114$ursubmx&115$dlsubmx&116$drsubmx&117$nz_row&118$row_matrixP&119$eqP:&120$negbTE&121$is_scalar_mx&122$is_scalar_mxP&123$negbTE->&124$xcol&125$is_perm_mxP&126$\tr&127$lift0_perm&128$row_eq&129$row'_eq&130$negPf->&131$t&132$permP&133$\det&134$subsetP&135$p1&136$ulsf&137$s&138$cofactor&139$invmx&140$matrixP/(_ i j)/eqP:&141$negPf<-&142$rowP/(_ j)/eqP:&143$rowP/(_ (lift j k')):&144$rowP/(_ j)/eqP&145$matrixP/(_ i j):&146$A1&147$k&148$fun_of_seqmx&102$rowseqmx&103$seqmx_of_mx&104$matrixP&105$iffP&106$mkseqmx_ord&107$seqmxP&108$addseqmx=>&109$oppseqmx=>&110$subseqmx=>&111$trseqmx&112$seqmx0&113$minn&114$mulseqmx&115$row_seqmx&116$col_seqmx&117$block_seqmx&118$eq_op&119$seqmx1&120$scaleseqmx&121$trans&122$theta_expt&102$fn_expt&103$theta_fact&102$fn_fact&103$fn_fib&102$fib_locals&103$helper_fib&104$fn_less&102$theta_mul&102$fn_mul&103$theta_power&102$fn_power&103$theta_sum&102$theta_sum&102$theta_sum&102$b&102$a&103$pot_matrix&104$theta_sum&102$theta_sum&102$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$theta_sum&102$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$contraR&102$negbT&103$contra&104$contraL&105$b_notc/negbTE&106$notb_notc/negbTE&107$contraFN&108$bF_notc/negbTE&109$introNTF&110$introT&111$nP&112$IH&113$mem&114$sym_left_transitive&115$sub1&116$sub2&117$sub3&118$fK<-&119$subD&120$Hf&121$primeP&102$vFpV&103$dvdn&104$/eqxx&105$ffact_fact&106$eqP:&107$f&108$F&109$injectiveP&110$setP&111$imsetP&112$ffunP&113$ff0'&114$inj_f0&115$subsetP&116$add_mn_nat&117$sub_mn&118$add_mn&119$vs2mx&102$free&103$dimv&104$v2r_inj->&105$vlineP&106$subsetv&107$sU12&108$subvP&109$sVW&110$vs2mxP&111$subv_anti&112$vlinePk&113$subV&114$addv_idPl&115$addv_idPr&116$sub0v&117$subvf&118$sub_addsmxP&119$subv_trans->&120$rpred_sum&121$sumv_sup&122$Uv&123$sub_sumsmxP&124$subV(sameP capmx_idPl eqmxP)&125$capv_idPl&126$capv_idPr&127$eqmxP/matrix_modl&128$val_inj&129$eqmxP/addsmx_diff_cap_eq&130$eq_op&131$dimv_leqif_eq&132$geq_leqif&133$directv_def&134$andP]&135$dxU/(_ i Pi)&136$forall_inP&137$eqP/dxU&138$seq_tnthP&139$span_subvP&140$memv_span&141$subv_sumP&142$leqif_eq&143$dim_span&144$rowP/(_ i):&145$row_free_inj&146$r2v_inj&147$rowV0P&148$rowP&149$row_freeP&150$negPf&151$and3P&152$coord_span&153$sumX&154$k&155$f&156$span_basis&157$basis_of&158$basis_free/free_not0&159$eq_span&160$row_matrixP&161$directvP->&162$/]&163$directvP&164$lfunP&165$submxP&166$memv_imgP&167$lker0P&168$lker0_lfunK&169$eq_map&170$lfun_preim&171$memv_capP&172$canRL&173$rowP/(_ (Ordinal vT_proper))/eqP&174$daddv_pi_id&175$vspaceP&176$sumv_pi_for&177$addv_pi1_pi2&178$iota_uniq&179$val_inj/vsprojK/subvsP&180$p2r&181$r2p&182$fr&183$matrixP&184$ffunP&185$canLR&186$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$rowP&102$1&103$drlower1&104$invmx_uniq&105$b&102$a&103$pot_matrix&104$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$exponential&102$multiplication&103$index_iota&102$andP&103$index_iota&102$andP&103$b&102$a&103$pot_matrix&104$ \ No newline at end of file
diff --git a/contrib/ML4PG/ssreflect/weka.el b/contrib/ML4PG/ssreflect/weka.el
deleted file mode 100644
index ba220c1d..00000000
--- a/contrib/ML4PG/ssreflect/weka.el
+++ /dev/null
@@ -1,112 +0,0 @@
-(defun ml4pg-weka (n)
- (let ((alg (cond ((string= "k" ml4pg-algorithm) "SimpleKMeans")
- ((string= "e" ml4pg-algorithm) "EM")
- ((string= "f" ml4pg-algorithm) "FarthestFirst")
- )))
- ;(comint-send-string (get-buffer-process "*matlab*")
-; (concat "load " (expand-file-name "temp.csv") "; [t1,X,t3] = princomp(temp); X=normalize(X); csvwrite('"
-; (expand-file-name "temp2.csv") "',X);
-;"))
-
- (shell-command (concat "sleep 1; cat " ml4pg-home-dir "aux_files/headers.txt " (expand-file-name "temp.csv") " > " (expand-file-name "temp3.arff")))
- (shell-command (concat "java -classpath "
- *weka-dir*
- " weka.filters.unsupervised.attribute.AddCluster -W \"weka.clusterers." alg " -N " (format "%s" n) " -S 42\" -I last -i "
- (expand-file-name "temp3.arff") " -o " (expand-file-name "out.arff")))
- (shell-command (concat "tail -n +37 "
- (expand-file-name "out.arff") " > " (expand-file-name "out_bis.arff")))
- ;(shell-command (concat "java -classpath "
-; *weka-dir*
-; " weka.attributeSelection.CfsSubsetEval -M -s \"weka.attributeSelection.BestFirst -D 1 -N 5\" -i "
-; (expand-file-name "temp3.arff") " > " (expand-file-name "res.txt")))
- ))
-
-
-(defun ml4pg-why-are-similar ()
- (with-temp-buffer
- (insert-file-contents (expand-file-name "res.txt"))
- (setf foo nil)
- (while (not foo)
- (setf foo (string= "attributes:" (format "%s" (read (current-buffer))))))
- (ml4pg-extract-selected-attributes (format "%s" (read (current-buffer))) nil))
- )
-
-
-(defun ml4pg-extract-selected-attributes (temp res)
- (let ((comma (search "," temp)))
- (if comma
- (ml4pg-extract-selected-attributes (subseq temp (+ 1 comma))
- (append res (list (car (read-from-string (subseq temp 0 comma))))))
- (append res (list (car (read-from-string temp)))))))
-
-
-
-
-
-
-
-
-
-
-
-(defun ml4pg-0_n (n)
- (do ((i 0 (1+ i))
- (temp nil))
- ((= i n) temp)
- (setf temp (append temp (list (list i nil))))))
-
-
-(defun ml4pg-read-lines (file)
- "Return a list of lines in FILE."
- (with-temp-buffer
- (insert-file-contents file)
- (split-string
- (buffer-string) "\n" t)
- ))
-
-
-(defun ml4pg-lines-to-clusters (lines)
- (do ((temp lines (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (setf temp2 (append temp2 (list (string-to-number (subseq (car temp) (+ 7 (search "cluster" (car temp) :from-end t)))))))
- ))
-
-
-
-(defun ml4pg-extract-clusters-from-file (clusters)
- (let* ((temp (ml4pg-0_n clusters))
- (lines (ml4pg-read-lines (expand-file-name "out_bis.arff"))))
- (ml4pg-lines-to-clusters lines)))
-
-
-
-
-
-(defun ml4pg-form-clusters (list n)
- (do ((i 0 (1+ i))
- (temp nil))
- ((= i n) temp)
- (setf temp (append temp (list (ml4pg-clusters-of-n list i))))))
-
-
-
-
-(defun ml4pg-clusters-of-n (list n)
- (do ((temp list (cdr temp))
- (i 1 (1+ i))
- (temp2 nil))
- ((endp temp) temp2)
- (if (equal (car temp) n)
- (setf temp2 (append temp2 (list i))))))
-
-
-(defun ml4pg-remove-alone (list)
- (do ((temp list (cdr temp))
- (temp2 nil))
- ((endp temp) temp2)
- (if (not (= (length (car temp)) 1))
- (setf temp2 (append temp2 (list (car temp)))))))
-
-
-
diff --git a/contrib/ML4PG/temp.csv b/contrib/ML4PG/temp.csv
deleted file mode 100644
index 90fe381e..00000000
--- a/contrib/ML4PG/temp.csv
+++ /dev/null
@@ -1,72 +0,0 @@
-1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1
-5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
-34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1
-5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1
-111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.14999999999999,6,1,6,1,-4,100.14999999999999,6,1
-1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0
-11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0
-1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,6,1,-4,100.19687499999999,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.199609375,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951171875,6,1,6,1,-4,100.199951171875,6,1
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19998779296874,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.19921875,6,1
-1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0
-111,3,-354,-1,557,1,6,1,-4,100.19999389648437,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/temp3.arff b/contrib/ML4PG/temp3.arff
deleted file mode 100644
index d354c0ab..00000000
--- a/contrib/ML4PG/temp3.arff
+++ /dev/null
@@ -1,107 +0,0 @@
-@relation empty
-
-@attribute '1' real
-@attribute '2' real
-@attribute '3' real
-@attribute '4' real
-@attribute '5' real
-@attribute '6' real
-@attribute '7' real
-@attribute '8' real
-@attribute '9' real
-@attribute '10' real
-@attribute '11' real
-@attribute '12' real
-@attribute '13' real
-@attribute '14' real
-@attribute '15' real
-@attribute '16' real
-@attribute '17' real
-@attribute '18' real
-@attribute '19' real
-@attribute '20' real
-@attribute '21' real
-@attribute '22' real
-@attribute '23' real
-@attribute '24' real
-@attribute '25' real
-@attribute '26' real
-@attribute '27' real
-@attribute '28' real
-@attribute '29' real
-@attribute '30' real
-
-@data
-
-1,1,-5,-1,5,1,2,1,-5,1,6,2,34,2,0,0,6,1,11,2,-15,-1,55,1,34,2,0,0,6,0
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,5,1,-5,1,6,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1
-5,1,-5,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-24,-1,57,1,6,1,-4,1,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,4,1,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
-34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-4,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,5,1,3,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,192,6,1
-5,1,-2,-1,5,2,34,2,0,0,5,1,34,2,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,192,6,1,4,1,0,0,6,0
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.1,6,1,6,1,-4,100.1,6,1
-111,3,-222,-1,555,1,5,1,-2,1,6,2,4,1,0,0,6,1,6,1,-4,100.14999999999999,6,1,6,1,-4,100.14999999999999,6,1
-1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0
-11,2,-54,-1,57,1,6,1,-4,1,6,1,6,1,-4,100.1875,6,1,34,2,0,0,6,0,0,0,0,0,0,0
-1,1,-1,-1,5,1,6,1,-4,100.1875,6,1,3,1,0,0,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,3,1,0,0,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,1,1,-4,-1,7,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0
-1,1,-2,-1,5,1,1,1,-5,-1,5,1,6,1,-4,100.19375,7,1,4,1,0,0,7,0,0,0,0,0,0,0
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-111,3,-254,-1,557,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,6,1,-4,100.19687499999999,6,2,4,1,0,0,6,1,6,1,-4,10,6,1,4,1,0,0,6,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,34,2,0,0,6,1,3,1,0,0,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0
-1,1,-2,-1,5,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.199609375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19687499999999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-5,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19375,6,1,34,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.199609375,6,1,6,1,-4,100.19921875,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-5,1,-2,-1,5,2,4,1,0,0,5,1,1,1,-2,-1,5,1,6,1,-4,100.199951171875,6,1,6,1,-4,100.199951171875,6,1
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-25,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.1984375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-52,-1,55,1,6,1,-4,100.19980468749999,6,1,6,1,-4,100.19375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-11,2,-22,-1,55,1,6,1,-4,100.19990234375,6,1,6,1,-4,100.1999755859375,6,1,4,1,0,0,6,0,0,0,0,0,0,0
-1,1,-2,-1,5,1,6,1,-4,100.19921875,6,1,6,1,-4,100.19998779296874,6,1,6,1,-4,100.19375,6,1,6,1,-4,100.19921875,6,1
-1,1,-3,-1,5,1,2,1,-3,1,6,2,34,2,0,0,6,1,34,2,0,0,6,0,0,0,0,0,0,0
-111,3,-354,-1,557,1,6,1,-4,100.19999389648437,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/contrib/ML4PG/views.txt b/contrib/ML4PG/views.txt
deleted file mode 100644
index 4b8dfa6a..00000000
--- a/contrib/ML4PG/views.txt
+++ /dev/null
@@ -1 +0,0 @@
-theta_fact&102$fn_fact&103$theta_fact&102$fn_fact&103$theta_fact&102$fn_fact&103$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$leqif&131$eqP:&132$leqif_refl&133$rowP&102$1&103$drlower1&104$invmx_uniq&105$rowP&102$1&103$drlower1&104$invmx_uniq&105$fn_fact&102$b&106$a&107$pot_matrix&108$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$theta_fact&102$fn_fact&103$fn_fact&102$theta_fact&103$fn_fact&104$theta_fact&102$fn_fact&103$fn_fact&102$theta_fact&102$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$theta_fact&102$fn_fact&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$gtn_eqF&102$ltnW&103$implyP&104$leP:&105$eqnP&106$leq_trans&107$subnBA->&108$addnBA&109$subSn&110$leq_sub2r&111$leq_sub2l&112$subnSK&113$maxn&114$maxn_idPl&115$minn&116$minn_idPl&117$minn_idPr/leq_maxl&118$minn_idPl/leq_maxr&119$maxn_idPr/geq_minl&120$maxn_idPl/geq_minr&121$orP:&122$minn_idPr&123$ex_minn&124$ex_maxn&125$prednK&126$leq_pmull&127$leq&128$subnK&129$leqifP&130$monotone_leqif&131$eqP:&132$leqif_refl&133$leq_pmul2l:&134$Mn1:&135$leq_pmul2r:&136$Mm2:&137$lastP:&102$perm_to_rem/(eq_big_perm _)->&103$eq_big_perm&104$big_rem->&105$rem_filter->&106$IHn&107$familyP&108$ffunP&109$eqP/Df&110$IHr&111$familyP/(_ i)&112$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$b&102$a&103$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$b&102$a&103$pot_matrix&104$ \ No newline at end of file
diff --git a/contrib/ML4PG/weka.jar b/contrib/ML4PG/weka.jar
deleted file mode 100644
index 24e8bc68..00000000
--- a/contrib/ML4PG/weka.jar
+++ /dev/null
Binary files differ
diff --git a/contrib/mmm/AUTHORS b/contrib/mmm/AUTHORS
deleted file mode 100644
index 332e958a..00000000
--- a/contrib/mmm/AUTHORS
+++ /dev/null
@@ -1,16 +0,0 @@
-MMM Mode was originally designed and written by Michael Shulman
-<viritrilbia@users.sourceforge.net>.
-
-It was inspired by mmm.el for XEmacs by Gongquan Chen <chen@posc.org>.
-
-Recent contributors have included:
-
-bishop <bishop@platypus.bc.ca>
-Joe Kelsey <joe@zircon.seattle.wa.us>
-Alan Shutko <ats@acm.org>
-Michael Alan Dorman <mdorman@users.sourceforge.net>
-Brian P Templeton <plovre@users.sourceforge.net>
-Yann Dirson <ydirson@fr.alcove.com>
-Marcus Harnisch
-
-and others...
diff --git a/contrib/mmm/COPYING b/contrib/mmm/COPYING
deleted file mode 100644
index d60c31a9..00000000
--- a/contrib/mmm/COPYING
+++ /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.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- 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/contrib/mmm/FAQ b/contrib/mmm/FAQ
deleted file mode 100644
index 20cb8e01..00000000
--- a/contrib/mmm/FAQ
+++ /dev/null
@@ -1,181 +0,0 @@
--*-outline-*-
- Frequently Asked Questions about MMM Mode
- =========================================
-
-* How do I write/capitalize the name of this package/mode?
-
-However you want. The author says `MMM Mode' (and occasionally `MMM')
-when discussing the entire package, and `mmm-mode' when discussing the
-emacs mode or function. He does think, however, that `Mmm' looks
-rather ugly, although that is how SourceForge insists on capitalizing
-the name of the mailing list.
-
-
-* How do I get rid of that ugly gray background color?
-
-Put the following line in your Emacs initialization file:
-
- (setq mmm-submode-decoration-level 0)
-
-You may want to try using MMM Mode for a while with the background
-highlight, however, or merely changing it to a different color. There
-are two reasons it's there by default:
-
-1. MMM Mode isn't as smart as you might hope it would be about
- recognizing new submode regions, so the presence or absence of the
- highlight can let you know at a glance where it thinks they are.
-
-2. Just like the rest of font-lock, it helps you mentally organize the
- code; you can see at a glance that THIS code is executed as Perl,
- but THAT code is straight HTML (or whatever). You can get even
- more help by setting the above variable to 2, in which case regions
- will get a background color according to their function.
-
-
-* I typed `<%' (or other delimiter) but I'm still in the wrong mode.
-
-MMM Mode isn't that smart yet. You have to tell it explicitly to
-reparse (`C-c % C-5' or `C-c % C-b') when you add new submode regions,
-and both delimiters have to be present. Hopefully a future version
-will be able to automatically recognize new regions an you type them,
-but that version is not yet here.
-
-However, most submode classes provide insertion commands that remove
-the need to type the delimiters as well as the need to reparse the
-block: type `C-c % h' for a list of available insertion commands for
-current submode class(es).
-
-
-* Why is the first character of the end delimiter in the submode region?
-
-It isn't. When your cursor looks like it is over that character, it
-is actually *before* that character and therefore inside the submode
-region. You can check that the offending character does not have the
-background highlight--that is, if you haven't set the decoration level
-to 0. For example, in the following text (where -!- represents the
-cursor position)
-
- print <<END_TEXT;
- here is some text
- -!-END_TEXT
-
-The 'E' at the beginning of the END_TEXT line is not actually part of
-the submode region. But with the cursor as indicated (that is, the
-box is blinking over the `E' which follows the actual cursor
-position), Emacs is in text-mode.
-
-
-* Why won't MMM Mode work with `foo-mode'?
-
-Foo-mode probably has extra variables or states that need to be set
-up, that MMM Mode doesn't yet know about. Often this sort of problem
-can be fixed by adding elements to `mmm-save-local-variables'. If you
-know some Elisp, you may want to try and track down the problem
-yourself, or you can contact the mailing list and ask for help.
-Either way, please contact the maintainer or the mailing list when
-(if) you find something that works, so that in the future, folks can
-use MMM Mode and foo-mode together more easily.
-
-
-* I'm getting an emacs error, what did I do wrong?
-
-Most likely nothing. MMM Mode is still more or less alpha software
-and is quite likely to contain bugs; probably something in your
-configuration has brought a new bug to light. Please send the text of
-the error, along with a stack backtrace (1) and the relevant portions
-of your emacs initialization file, to either the maintainer or the
-mailing list, and hopefully a fix can be worked out.
-
-Of course, it's also possible that there is an error in your
-configuration. Double-check the elisp syntax in your init file, or
-inspect the backtrace yourself. If the error happens while loading
-your init code, try manually evaluating it line by line (`C-x C-e') to
-see where the error occurs. Folks on the mailing list can also help
-point out errors, but only with your init code and a backtrace.
-
-(1) To get a stack backtrace of an error, set the emacs variable
- `debug-on-error' to non-nil (type `M-x set-variable RET
- debug-on-error RET t RET' or `M-: (setq debug-on-error t) RET'),
- then repeat the actions which caused the error. A stack backtrace
- should pop up which you can select and copy. If the error occurs
- while loading emacs, invoke emacs with the `--debug-init' (Emacs)
- or `-debug-init' (XEmacs) switch.
-
-
-* Will MMM Mode work with (Emacs 19 / XEmacs 20 / XEmacs 21 / etc...)?
-
-MMM Mode was designed for FSF Emacs 20 and 21 and works best there.
-But don't let that stop you from trying it under other variants of
-emacs. If you encounter problems, feel free to ask the mailing list,
-but success is not guaranteed.
-
-For example, the font-lock support in XEmacs 20 is known to be broken
-and well-nigh unfixable; consider upgrading. XEmacs 21 also has
-problems with font-lock: for example, often apostrophes in a different
-submode region can cause code to be incorrectly font-locked as a
-string. I have given up trying to support Emacs 19; you should
-upgrade to Emacs 20 or 21.
-
-
-* XEmacs says `Symbol's function definition is void: make-indirect-buffer'.
-
-You probably used FSF Emacs to compile MMM as it is the one used by
-default if both are installed. To explicitly set the emacs to use
-when byte compiling, do the following:
-
-$ cd mmm-mode-x.x.x
-$ make distclean
-$ ./configure --with-xemacs=/path/to/xemacs
-$ make
-$ make install
-
-Running `make distclean' is only necessary if you have already
-compiled MMM Mode for the wrong emacs, but can never hurt. The exact
-error message this problem produces may change with newer versions of
-MMM Mode; always be sure you have compiled for the correct emacsen.
-
-
-* I want to install the CVS version, but there's no `configure' script.
-
-The `configure' script which is included in the official distributions
-is not present in CVS, because it is automatically generated by GNU
-Automake/Autoconf from files like `Makefile.am' and `configure.in'.
-To build the CVS version the same way as the official distributions,
-you must first run `autogen.sh':
-
-$ cd mmm-mode
-$ ./autogen.sh
-
-and then you can continue as usual:
-
-$ ./configure
-$ make
-$ make install
-
-Note that autogen.sh requires aclocal, automake, and autoconf, which
-may or may not be installed on your system, since they are considered
-developer tools rather than end-user tools. If you can't or don't
-want to install them, however, you can still use the CVS version of
-MMM Mode by manually copying all the `.el' files into a directory in
-your `load-path'. Optionally, you may also byte-compile them manually
-(this is what `make' normally does). Byte-compiling gives some speed
-improvement, but if you experience problems, the stack traces are
-sometimes more informative if you are using the source files only.
-
-The Info files `mmm.info-*' are also not included in CVS, since they
-are generated from `mmm.texinfo' by the program `makeinfo'. If you
-want to install the Info documentation from CVS, you will have to run
-this manually as well, and copy the resulting info files into the
-appropriate location for your system.
-
-The CVS version is, of course, even less guaranteed to be bug-free
-than the official distributions. But please report any problems you
-have with it, so they can be fixed for the next release.
-
-
-* You haven't answered my question; how can I get more help?
-
-At the MMM Mode web site, <http://mmm-mode.sourceforge.net>, there is
-a link to the subscription page for the MMM Mode mailing list. When
-asking a question on the list, be sure to give the versions of emacs
-and MMM Mode you are using, and any other relevant information.
diff --git a/contrib/mmm/INSTALL b/contrib/mmm/INSTALL
deleted file mode 100644
index b42a17ac..00000000
--- a/contrib/mmm/INSTALL
+++ /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/contrib/mmm/NEWS b/contrib/mmm/NEWS
deleted file mode 100644
index 41a15125..00000000
--- a/contrib/mmm/NEWS
+++ /dev/null
@@ -1,247 +0,0 @@
-MMM Mode NEWS -- history of user-visible changes. -*-outline-*-
-Copyright (C) 2003, 2004 Michael Abraham Shulman
-See the file COPYING for copying conditions.
-
-Please submit bug reports at http://sourceforge.net/projects/mmm-mode/
-
-* Changes in MMM Mode 0.4.8
-
-** Delimiter Regions
-
-The delimiters which mark off submode regions now have their own
-overlays. They can be highlighted if you so desire using appropriate
-class arguments and/or the variable mmm-delimiter-face. They are also
-in an appropriate major mode, or non-mode as the case may be.
-
-** Nested Submodes
-
-Nested submodes are now vaguely supported.
-
-** RPM Spec File
-
-An RPM spec file, contributed by <bishop@platypus.bc.ca>, is now
-included for people who wish to build their own SRPM to install from.
-
-** New Submode Classes
-
-Many thanks to Joe Kelsey for writing a very intelligent class for
-editing Noweb files, and to Alan Shutko for one for CWeb files. We
-also have a mode for SGML DTD definitions from Yann Dirson.
-
-** Numerous bugfixes and small improvements
-
-
-* Changes in MMM Mode 0.4.7
-
-** Multiple Decoration Levels
-
-You now have finer control over how colorful your submode regions are,
-via `mmm-submode-decoration-level'. Level 0 turns coloring off--no
-messing around with faces required. Level 1 (default) is the same as
-in previous versions. Level 2 colors regions according to function:
-initialization, cleanup, output, declaration, comment, etc.
-
-** Preferred Major Modes
-
-The variable `mmm-major-mode-preferences' lets you tell MMM what modes
-you prefer for different programming languages and they will be used
-by all submode classes.
-
-** New Submode Classes
-
-New submode classes for JSP and ePerl are included. A major bug in
-the handling of embedded Java (and other C-type languages) was fixed,
-so the JSP class should work consistently.
-
-
-* MMM Mode 0.4.6 is a bug-fix release with one user-visible change:
-
-** New Submode Class for RPM Spec Files
-
-Contributed by Marcus Harnisch, the `rpm' submode class allows editing
-appropriate parts of RPM spec files in shell-script mode.
-
-
-* Changes in MMM Mode 0.4.5
-
-** Font-Lock works again in XEmacs
-
-The MMM code to handle font-locking broke in XEmacs several versions
-back due to differences in the font-lock implementation between Emacs
-and XEmacs. It appears to be working once again.
-
-** Here-Document submode class improved
-
-Here-document names such as <<TEXT_EOF and <<END_PERL_CODE are now
-correctly recognized, and `mmm-here-doc-mode-alist' allows you to
-define your own mappings from here-document names to submodes.
-
-
-* Changes in MMM Mode 0.4.4
-
-** Tab Completion in `mmm-ify-by-class' (`C-c % C-c')
-
-When interactively specifying a submode class, completion on all
-defined public (not internal/private) submode classes is available.
-
-** Submode classes can now be autoloaded
-
-You don't need (require 'mmm-mason) or (require 'mmm-sample) in your
-.emacs file any more; all the supplied submode classes that are not
-automatically loaded are autoloaded from their files of definition.
-
-** Here-Document submode class can now recognize any submode
-
-As long as the name of the here-document is or begins with the name of
-the appropriate submode, suitably mangled, such as <<HTML or
-<<HTML_MODE or <<HTML_MODE_EOF, it should be correctly recognized.
-
-** New File Variables submode class
-
-Actually, this is an old submode class that now works (better than
-before) with the new post-0.3.8 syntax for class definition. It is a
-good candidate for membership in `mmm-global-classes' if you use many
-file-local variables, but is not there by default.
-
-** New flags :include-{front,back}
-
-If the keywords INCLUDE-FRONT or INCLUDE-BACK are set to non-nil
-values in a submode class definition, the corresponding delimiter will
-be included inside the submode region.
-
-** New values for :{front,back}-offset
-
-The keywords FRONT-OFFSET and BACK-OFFSET can now be function to call,
-such as `beginning-of-line' or `end-of-line', or lists of values to
-apply in sequence, such as (end-of-line 1).
-
-** Search for next region now starts at end of previous one
-
-...rather than at the end of the previous region's ending delimiter.
-This allows matching regions ended only by the start of the next one.
-
-
-* Changes in MMM Mode 0.4.3
-
-** Syntax of Universal Class Changed
-
-Instead of %[MODE]% ... %[/MODE]%, the universal class now uses
-{%MODE%} ... {%/MODE%} which isn't quite as ugly and doesn't to my
-knowledge conflict with any other syntax.
-
-** Some Bugs under Emacs 19 and XEmacs Fixed
-
-
-* Changes in MMM Mode 0.4.2
-
-** Global Classes and `Universal' Class
-
-The new variable `mmm-global-classes' is the inverse of `mmm-classes'
-in that it contains submode classes which apply to all MMM Mode
-buffers unless turned off manually with file-local variables. By
-default, it contains the class `universal', which defines the syntax
-%[MODE]% ... %[/MODE]% to specify regions of any mode. This allows,
-for instance, example code embedded in an email to be both edited by
-the sender and viewed by the receiver in an appropriate mode.
-
-** New Embperl Submode Class
-
-The new supplied submode class `embperl', which can be loaded with
-(require 'mmm-sample), detects the Embperl syntax [+...+] (and so on)
-for embedded Perl code.
-
-
-* Changes in MMM Mode 0.4.1
-
-** Font Lock Parsing Speed Improved
-
-Extra regions were being parsed due to an error in finding the right
-regions, slowing down the parsing considerably. This has been fixed.
-
-
-* Changes in MMM Mode 0.4.0
-
-** Improved Local Variable Saving
-
-Local variables can now be saved for only some major modes, as well as
-both globally, per-buffer, or per-submode region. This facility is
-now used to save the font-lock cache state, possible improving the
-font-lock support. See the docs for `mmm-save-local-variables'.
-
-** Get and Set Class Parameters
-
-The functions `mmm-[get,set]-class-parameters' do just that. The
-latter modifies the definition of a submode class, affecting all
-subsequent applications of that class.
-
-** New Implementation for MMM Global Mode
-
-The implementation of MMM Global Mode has been changed from the
-"stack-walk" method to the "post-command-hook" method used by
-global-font-lock-mode. This is arguably cleaner, but more
-importantly, waits until after all local variables and text are loaded
-before trying to enabling MMM Mode.
-
-
-* MMM Mode 0.3.10 is a bug-fix release with no user-visible changes
-
-
-* MMM Mode 0.3.9 is a bug-fix release with no user-visible changes
-
-
-* Changes in MMM Mode 0.3.8
-
-** IMPORTANT: Default key bindings have changed.
-
-The MMM Mode commands, including interactive MMM-ification and
-re-parsing buffer regions, are now bound by default to key sequences
-of the form `C-c % C-<letter>', rather than `C-c % <letter>' as
-in previous versions. Key sequences of the form `C-c % <letter>' are
-now reserved for submode region insertion. The old behavior can be
-restored by setting the variable `mmm-use-old-command-keys' to a
-non-nil value before MMM Mode is loaded--then insertion commands are
-bound to `C-c % C-<letter>' sequences.
-
-** New Global Mode added
-
-MMM Global Mode can now turn MMM Mode on automatically in all buffers,
-or only in buffers that have associated submode classes. It replaces
-the previous function `mmm-add-find-file-hook', which still works for
-now. A side effect of this change is that it is no longer necessary
-to use `mmm-add-mode-ext-class': `mmm-mode-ext-classes-alist' can be
-modified directly.
-
-The hack used by MMM Global Mode to insinuate itself into all buffers
-is different from, but vaguely similar to, the one used by FSF Emacs'
-Global Font Lock Mode. In order that future writers of global modes
-don't have to reinvent the wheel, MMM Global Mode provides the hook
-`mmm-major-mode-hook' which is run (in theory) whenever a major mode
-starts up. Perhaps in future this will be provided in a separate
-package.
-
-** Automatic submode region insertion commands
-
-Submode classes can now define skeletons for automatic insertion of
-submode regions with delimiters. For example, when using the Mason
-class, the key sequence `C-c % %' will (by default) insert the text
-`<% -!- %>' with point where indicated and submode region already
-present. These commands also wrap around words as described in the
-documentation of `skeleton-insert'.
-
-** Info Documentation File
-
-MMM Mode now has an (admittedly incomplete) manual in Texinfo format.
-It can be found in the files `mmm.info' or `mmm.texinfo' in the
-distribution.
-
-** Automatic Installation
-
-MMM Mode now uses GNU automake/autoconf for ease of installation. See
-the files README and INSTALL for more information.
-
-** Changed submode class specification format
-
-This change affects only people who define their own submode classes.
-The format for defining submode classes has changed; it now uses
-keyword arguments for clarity and has a few more possible arguments,
-including skeletons for submode region insertion.
diff --git a/contrib/mmm/README b/contrib/mmm/README
deleted file mode 100644
index fdcb8744..00000000
--- a/contrib/mmm/README
+++ /dev/null
@@ -1,122 +0,0 @@
-
- MMM Mode for Emacs
- ==================
-
-OVERVIEW
-
- MMM Mode is a minor mode for Emacs that allows Multiple Major Modes
- to coexist in one buffer. It is well-suited to editing:
-
- * Preprocessed code, such as server-side Perl or PHP embedded in HTML
- * Code generating code, such as HTML output by CGI scripts
- * Embedded code, such as Javascript in HTML
- * Literate programming: code interspersed with documentation, e.g. Noweb
-
-INSTALLATION
-
- MMM Mode has a standard GNU configure-driven installation. (See the
- file INSTALL for generic instructions, most of which don't apply.)
- To install in the standard locations, unpack the archive, `cd' to
- the mmm-mode-X.X.X directory created, and run these commands:
-
- ./configure
- make
- make install
-
- Alternately, since currently MMM Mode is written in pure Emacs Lisp,
- you could just copy all the *.el files in the distribution to a
- directory in your `load-path', and optionally byte-compile them
- manually (see the Emacs Manual). The configure installation also
- installs the MMM Mode info manual in your site info directory, so if
- you're installing manually, you might want to do that too.
-
- If you're installing from the CVS version, you won't have the
- configure script. If you have the automake/autoconf tools
- installed, you can run the script `autogen.sh' first, and then
- proceed as above. Otherwise, you'll have to copy the *.el files
- manually as described above.
-
- If you have more than one version of emacs installed and want to
- use MMM in a version other than /usr/bin/emacs, you must set the
- environment variable EMACS before running `configure', e.g.
-
- EMACS=/usr/bin/xemacs ./configure
- make
- make install
-
- If you want to use MMM in more than one version of emacs, you must
- either have separate site-lisp directories (such as Debian does), or
- load it from source every time; byte-compiled files are not portable
- between emacsen.
-
-CONFIGURATION
-
- Once MMM Mode is installed, it has to be configured correctly. This
- can be done in a site-start file or in user's initialization files;
- usually the latter is preferable, except possibly for autoloads.
- First the package needs to be loaded, with either
-
- (require 'mmm-mode)
-
- or instead, to save time during emacs startup,
-
- (require 'mmm-auto)
-
- Then you will probably want to set something like this:
-
- (setq mmm-global-mode 'maybe)
- (mmm-add-mode-ext-class 'html-mode "\\.php\\'" 'html-php)
-
- The first line tells MMM Mode to load itself whenever you open an
- appropriate file, and the second is an example which says to notice
- PHP regions in html-mode files having a `.php' extension. Both
- lines are necessary.
-
- You will, of course, want to change and duplicate the second line
- according to your needs. either of the first two parameters can be
- `nil', meaning not to consider that criterion. For example, if all
- your html files, regardless of extension, are Mason components, you
- will want something like:
-
- (mmm-add-mode-ext-class 'html-mode nil 'mason)
-
- whereas if all your files with a `.nw' extension, regardless of
- primary mode (some may be LaTeX, others HTML, say) are Noweb, you
- will prefer
-
- (mmm-add-mode-ext-class nil "\\.nw\\'" 'noweb)
-
- See the info file for more extensive documentation, and for other
- configuration options.
-
-DOCUMENTATION
-
- For further information, see (in order) the accompanying info file,
- the documentation strings of functions and variables, the comments
- in the source code, and the source code itself.
-
-UPDATES
-
- The latest version of MMM Mode should always be available from
- http://sourceforge.net/projects/mmm-mode
-
-BUG REPORTS
-
- Bug reports and suggestions can be submitted at
- <http://sourceforge.net/tracker/?group_id=8658&atid=108658>, or
- through email to <viritrilbia@users.sourceforge.net>.
-
-CONTACT INFO
-
- MMM Mode is written and maintained by Michael Shulman,
- <viritrilbia@users.sourceforge.net>, and others; a list of some
- contributors can be found on the Sourceforge project.
-
-MAILING LIST
-
- To subscribe to the MMM Mode mailing list, visit
- <http://lists.sourceforge.net/mailman/listinfo/mmm-mode-discuss>.
- The mailing list receives announcements of new releases and provides
- a forum for discussion of bugs and features.
-
- Thanks for using MMM Mode!
diff --git a/contrib/mmm/README.mmm-for-ProofGeneral b/contrib/mmm/README.mmm-for-ProofGeneral
deleted file mode 100644
index 346e407b..00000000
--- a/contrib/mmm/README.mmm-for-ProofGeneral
+++ /dev/null
@@ -1,26 +0,0 @@
-The code in this directory is taken from
-
- http://mmm-mode.sourceforge.net/
-
-This is version 0.4.8.
-
-Some minor changes have been made for Proof General to
-remove compilation warnings.
-
-Some files have not be included here.
-
-
-=================================================================
-
-
- MMM Mode for Emacs
-
-MMM Mode is an emacs add-on package providing a minor mode that allows
-Multiple Major Modes to coexist in one buffer. It is particularly
-well-suited to editing embedded code or code that generates other
-code, such as Mason or Embperl server-side Perl code, or HTML output
-by CGI scripts.
-
-It is written and maintained by Michael Abraham Shulman .
-
-
diff --git a/contrib/mmm/TODO b/contrib/mmm/TODO
deleted file mode 100644
index e631145f..00000000
--- a/contrib/mmm/TODO
+++ /dev/null
@@ -1,67 +0,0 @@
-Hey Emacs, this is a -*-text-*- file!
-
- To Do List for MMM Mode
- =======================
-
-It would be nice to have a "split region" command which would insert
-a _back_ delimiter followed by a _front_ delimiter at point and split
-the current region into two regions. Say for PHP.
-
-Custom mode functions like `mason-mode'.
-
-Make Mason work a little better with PSGML. The fix I've found works,
-but it would be nifty if MMM could do it automatically. Maybe the
-custom-mode thing could set the variables, or a hook somewhere.
-
-Apostrophes mess up Perl parsing in XEmacs but not Emacs. I thought
-it was because XEmacs sets `font-lock-beginning-of-syntax-function'
-after MMM does, but changing that that didn't fix it.
-
-Improve re-parsing current region to use inclusion/offsets/etc.
-
-Support for: ASP, PHP
-
-DEB and/or RPM packages would be nice.
-
-The local-variables improvements can probably be used to set minor
-modes locally to submode regions. This could replace tmmofl,
-especially if we search for regions other than by regexps, say by
-syntax properties.
-
-Trap paragraph motion commands to stop at submode boundaries?
-
-On text insertion (in `after-change-functions'), do two things.
-First, if inside in a region, or after a hanging one, scan for its
-back and adjust if necessary. Second, scan both for complete regions
-and for hanging fronts. In the latter case, we may insert the back or
-start a hanging region; user option. Don't just scan the inserted
-text, but backwards, using `mmm-looking-back-at'. Remember to handle
-delimiter inclusion and offsets as best possible.
-
-It would be nice if C-j ended a Mason one-liner and began a new one on
-the next line. This is a rather Mason-specific thing, but other
-classes might have similar single-line regions. Add a new submode
-class argument, such as KEYMAP, or even ONE-LINE?
-
-Allow a submode class to specify its allowable "parent" submode
-classes. This could also be used to implement htp.p, by first
-scanning for the function calls as a major-mode submode region, then
-requiring that parent type for the HTML mode class. Nested submodes
-alternate highlight colors, say with `mmm-secondary-submode-face'.
-
-Ought %text in Mason to be a non-submode, since any Mason tags inside
-it will probably be /edited/ as Perl (being, say, code examples)?
-Only problem is it might confuse the programmer into thinking that
-code will get executed. Maybe use a different face. Could do that
-with another grouping class, say uneval-mason, that overrides the
-faces of mason and has :parent mason-text, and allow a mode to specify
-what about it changes depending on its parent, or a parent to specify
-changes to its children, or a group to specify changes to its members.
-
-If font-locking needs more help, try narrowing the region before
-fontifying, or even advising `parse-partial-sexp' and friends. At
-present, it seems good enough, though.
-
-It'd be nice if submode regions could preserve the indentation of the
-dominant major mode code around them. For example, Perl code embedded
-in HTML where the HTML is indented such as for a table.
diff --git a/contrib/mmm/mmm-auto.el b/contrib/mmm/mmm-auto.el
deleted file mode 100644
index 69e95a26..00000000
--- a/contrib/mmm/mmm-auto.el
+++ /dev/null
@@ -1,177 +0,0 @@
-;;; mmm-auto.el --- loading and enabling MMM Mode automatically
-
-;; Copyright (C) 2000 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <mas@kurukshetra.cjb.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains functions and hooks to load and enable MMM Mode
-;; automatically. It sets up autoloads for the main MMM Mode functions
-;; and interactive commands, and also sets up MMM Global Mode.
-
-;;{{{ Comments on MMM Global Mode
-
-;; This is a kludge borrowed from `global-font-lock-mode'. The idea
-;; is the same: we have a function (here `mmm-mode-on-maybe') that we
-;; want to be run whenever a major mode starts. Unfortunately, there
-;; is no hook (like, say `major-mode-hook') that all major modes run
-;; when they are finished. `post-command-hook', however, is run after
-;; *every* command, so we do our work in there. (Actually, using
-;; `post-command-hook' is even better than being run by major mode
-;; functions, since it is run after all local variables and text are
-;; loaded, which may not be true in certain cases for the other.)
-
-;; In order to do this magic, we rely on the fact that there *is* a
-;; hook that all major modes run when *beginning* their work. They
-;; call `kill-all-local-variables' (unless they are broken), which in
-;; turn runs `change-major-mode-hook'. So we add a function to *that*
-;; hook which saves the current buffer and temporarily adds a function
-;; to `post-command-hook' which processes that buffer.
-
-;; Actually, in the interests of generality, what that function does
-;; is run the hook `mmm-major-mode-hook'. Our desired function
-;; `mmm-mode-on-maybe' is then added to that hook. This way, if the
-;; user wants to run something else on every major mode, they can just
-;; add it to `mmm-major-mode-hook' and take advantage of this hack.
-
-;;}}}
-
-;;; Code:
-
-(require 'cl)
-(require 'mmm-vars)
-
-;;{{{ Autoload Submode Classes
-
-(defvar mmm-autoloaded-classes
- '((mason "mmm-mason" nil)
- (embedded-css "mmm-sample" nil)
- (html-js "mmm-sample" nil)
- (here-doc "mmm-sample" nil)
- (embperl "mmm-sample" nil)
- (eperl "mmm-sample" nil)
- (jsp "mmm-sample" nil)
- (file-variables "mmm-sample" nil)
- (rpm-sh "mmm-rpm" t)
- (rpm "mmm-rpm" nil)
- (cweb "mmm-cweb" nil)
- (sgml-dtd "mmm-sample" nil)
- (noweb "mmm-noweb" nil)
- (html-php "mmm-sample" nil)
- )
- "Alist of submode classes autoloaded from files.
-Elements look like \(CLASS FILE PRIVATE) where CLASS is a submode
-class symbol, FILE is a string suitable for passing to `load', and
-PRIVATE is non-nil if the class is invisible to the user. Classes can
-be added to this list with `mmm-autoload-class'.")
-
-(defun mmm-autoload-class (class file &optional private)
- "Autoload submode class CLASS from file FILE.
-PRIVATE, if non-nil, means the class is user-invisible. In general,
-private classes need not be autoloaded, since they will usually be
-invoked by a public class in the same file."
- ;; Don't autoload already defined classes
- (unless (assq class mmm-classes-alist)
- (add-to-list 'mmm-autoloaded-classes
- (list class file private))))
-
-;;}}}
-;;{{{ Autoload Functions
-
-;; To shut up the byte compiler.
-(eval-and-compile
- (autoload 'mmm-mode-on "mmm-mode" "Turn on MMM Mode. See `mmm-mode'.")
- (autoload 'mmm-mode-off "mmm-mode" "Turn off MMM Mode. See `mmm-mode'.")
- (autoload 'mmm-update-font-lock-buffer "mmm-region")
- (autoload 'mmm-ensure-fboundp "mmm-utils")
- (autoload 'mmm-mode "mmm-mode"
- "Minor mode to allow multiple major modes in one buffer.
-Without ARG, toggle MMM Mode. With ARG, turn MMM Mode on iff ARG is
-positive and off otherwise." t))
-
-;; These may actually be used.
-(autoload 'mmm-ify-by-class "mmm-cmds" "" t)
-(autoload 'mmm-ify-by-regexp "mmm-cmds" "" t)
-(autoload 'mmm-ify-region "mmm-cmds" "" t)
-(autoload 'mmm-parse-buffer "mmm-cmds" "" t)
-(autoload 'mmm-parse-region "mmm-cmds" "" t)
-(autoload 'mmm-parse-block "mmm-cmds" "" t)
-(autoload 'mmm-clear-current-region "mmm-cmds" "" t)
-(autoload 'mmm-reparse-current-region "mmm-cmds" "" t)
-(autoload 'mmm-end-current-region "mmm-cmds" "" t)
-(autoload 'mmm-insertion-help "mmm-cmds" "" t)
-(autoload 'mmm-insert-region "mmm-cmds" "" t)
-
-;;}}}
-;;{{{ MMM Global Mode
-
-(defvar mmm-changed-buffers-list ()
- "Buffers that need to be checked for running the major mode hook.")
-
-(defun mmm-major-mode-change ()
- "Add this buffer to `mmm-changed-buffers-list' for checking.
-When the current command is over, MMM Mode will be turned on in this
-buffer depending on the value of `mmm-global-mode'. Actually,
-everything in `mmm-major-mode-hook' will be run."
- (and (boundp 'mmm-mode)
- mmm-mode
- (mmm-mode-off))
- (add-to-list 'mmm-changed-buffers-list (current-buffer))
- (add-hook 'post-command-hook 'mmm-check-changed-buffers))
-
-(add-hook 'change-major-mode-hook 'mmm-major-mode-change)
-
-(defun mmm-check-changed-buffers ()
- "Run major mode hook for the buffers in `mmm-changed-buffers-list'."
- (remove-hook 'post-command-hook 'mmm-check-changed-buffers)
- (dolist (buffer mmm-changed-buffers-list)
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (mmm-run-major-mode-hook))))
- (setq mmm-changed-buffers-list '()))
-
-(defun mmm-mode-on-maybe ()
- "Conditionally turn on MMM Mode.
-Turn on MMM Mode if `global-mmm-mode' is non-nil and there are classes
-to apply, or always if `global-mmm-mode' is t."
- (cond ((eq mmm-global-mode t) (mmm-mode-on))
- ((not mmm-global-mode))
- ((mmm-get-all-classes nil) (mmm-mode-on)))
- (when mmm-mode
- (mmm-update-font-lock-buffer)))
-
-(add-hook 'mmm-major-mode-hook 'mmm-mode-on-maybe)
-
-(defalias 'mmm-add-find-file-hooks 'mmm-add-find-file-hook)
-(defun mmm-add-find-file-hook ()
- "Equivalent to \(setq mmm-global-mode 'maybe).
-This function is deprecated and may be removed in future."
- (message "Warning: `mmm-add-find-file-hook' is deprecated.")
- (setq mmm-global-mode 'maybe))
-
-;;}}}
-
-(provide 'mmm-auto)
-
-;;; mmm-auto.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-class.el b/contrib/mmm/mmm-class.el
deleted file mode 100644
index cc192f13..00000000
--- a/contrib/mmm/mmm-class.el
+++ /dev/null
@@ -1,328 +0,0 @@
-;;; mmm-class.el --- MMM submode class variables and functions
-
-;; Copyright (C) 2000, 2004 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains variable and function definitions for
-;; manipulating and applying MMM submode classes. See `mmm-vars.el'
-;; for variables that list classes.
-
-;;; Code:
-
-(require 'cl)
-(require 'mmm-vars)
-(require 'mmm-region)
-
-;;; CLASS SPECIFICATIONS
-;;{{{ Get Class Specifications
-
-(defun mmm-get-class-spec (class)
- "Get the class specification for CLASS.
-CLASS can be either a symbol to look up in `mmm-classes-alist' or a
-class specifier itself."
- (cond ((symbolp class) ; A symbol must be looked up
- (or (cdr (assq class mmm-classes-alist))
- (and (cadr (assq class mmm-autoloaded-classes))
- (load (cadr (assq class mmm-autoloaded-classes)))
- (cdr (assq class mmm-classes-alist)))
- (signal 'mmm-invalid-submode-class (list class))))
- ((listp class) ; A list must be a class spec
- class)
- (t (signal 'mmm-invalid-submode-class (list class)))))
-
-;;}}}
-;;{{{ Get and Set Class Parameters
-
-(defun mmm-get-class-parameter (class param)
- "Get the value of the parameter PARAM for CLASS, or nil if none."
- (cadr (member param (mmm-get-class-spec class))))
-
-(defun mmm-set-class-parameter (class param value)
- "Set the value of the parameter PARAM for CLASS to VALUE.
-Creates a new parameter if one is not present."
- (let* ((spec (mmm-get-class-spec class))
- (current (member param spec)))
- (if current
- (setcar (cdr current) value)
- (nconc spec (list param value)))))
-
-;;}}}
-;;{{{ Apply Classes
-
-(defun* mmm-apply-class
- (class &optional (start (point-min)) (stop (point-max)) face)
- "Apply the submode class CLASS from START to STOP in FACE.
-If FACE is nil, the face for CLASS is used, or the default face if
-none is specified by CLASS."
- ;; The "special" class t means do nothing. It is used to turn on
- ;; MMM Mode without applying any classes.
- (unless (eq class t)
- (apply #'mmm-ify :start start :stop stop
- (append (mmm-get-class-spec class)
- (list :face face)))
- (mmm-run-class-hook class)
- ;; Hack in case class hook sets mmm-buffer-mode-display-name etc.
- (mmm-set-mode-line)))
-
-(defun* mmm-apply-classes
- (classes &key (start (point-min)) (stop (point-max)) face)
- "Apply all submode classes in CLASSES, in order.
-All classes are applied regardless of any errors that may occur in
-other classes. If any errors occur, `mmm-apply-classes' exits with an
-error once all classes have been applied."
- (let (invalid-classes)
- (dolist (class classes)
- (condition-case err
- (mmm-apply-class class start stop face)
- (mmm-invalid-submode-class
- ;; Save the name of the invalid class, so we can report them
- ;; all together at the end.
- (add-to-list 'invalid-classes (second err)))))
- (when invalid-classes
- (signal 'mmm-invalid-submode-class invalid-classes))))
-
-;;}}}
-;;{{{ Apply All Classes
-
-(defun* mmm-apply-all (&key (start (point-min)) (stop (point-max)))
- "MMM-ify from START to STOP by all submode classes.
-The classes come from mode/ext, `mmm-classes', `mmm-global-classes',
-and interactive history."
- (mmm-clear-overlays start stop 'strict)
- (mmm-apply-classes (mmm-get-all-classes t) :start start :stop stop)
- (mmm-update-submode-region)
- (mmm-refontify-maybe start stop))
-
-;;}}}
-
-;;; BUFFER SCANNING
-;;{{{ Scan for Regions
-
-(defun* mmm-ify
- (&rest all &key classes handler
- submode match-submode
- (start (point-min)) (stop (point-max))
- front back save-matches (case-fold-search t)
- (beg-sticky (not (number-or-marker-p front)))
- (end-sticky (not (number-or-marker-p back)))
- include-front include-back
- (front-offset 0) (back-offset 0)
- (front-delim nil) (back-delim nil)
- (delimiter-mode mmm-delimiter-mode)
- front-face back-face
- front-verify back-verify
- front-form back-form
- creation-hook
- face match-face
- save-name match-name
- (front-match 0) (back-match 0)
- end-not-begin
- ;insert private
- &allow-other-keys
- )
- "Create submode regions from START to STOP according to arguments.
-If CLASSES is supplied, it must be a list of valid CLASSes. Otherwise,
-the rest of the arguments are for an actual class being applied. See
-`mmm-classes-alist' for information on what they all mean."
- ;; Make sure we get the default values in the `all' list.
- (setq all (append
- all
- (list :start start :stop stop
- :beg-sticky beg-sticky :end-sticky end-sticky
- :front-offset front-offset :back-offset back-offset
- :front-delim front-delim :back-delim back-delim
- :front-match 0 :back-match 0
- )))
- (cond
- ;; If we have a class list, apply them all.
- (classes
- (mmm-apply-classes classes :start start :stop stop :face face))
- ;; Otherwise, apply this class.
- ;; If we have a handler, call it.
- (handler
- (apply handler all))
- ;; Otherwise, we search from START to STOP for submode regions,
- ;; continuining over errors, until we don't find any more. If FRONT
- ;; and BACK are number-or-markers, this should only execute once.
- (t
- (mmm-save-all
- (goto-char start)
- (loop for (beg end front-pos back-pos matched-front matched-back
- matched-submode matched-face matched-name
- invalid-resume ok-resume) =
- (apply #'mmm-match-region :start (point) all)
- while beg
- if end ; match-submode, if present, succeeded.
- do
- (condition-case nil
- (progn
- (mmm-make-region
- (or matched-submode submode) beg end
- :face (or matched-face face)
- :front front-pos :back back-pos
- :evaporation 'front
- :match-front matched-front :match-back matched-back
- :beg-sticky beg-sticky :end-sticky end-sticky
- :name matched-name
- :delimiter-mode delimiter-mode
- :front-face front-face :back-face back-face
- :creation-hook creation-hook
- )
- (goto-char ok-resume))
- ;; If our region is invalid, go back to the end of the
- ;; front match and continue on.
- (mmm-error (goto-char invalid-resume)))
- ;; If match-submode was unable to find a match, go back to
- ;; the end of the front match and continue on.
- else do (goto-char invalid-resume)
- )))))
-
-;;}}}
-;;{{{ Match Regions
-
-(defun* mmm-match-region
- (&key start stop front back front-verify back-verify
- include-front include-back front-offset back-offset
- front-form back-form save-matches match-submode match-face
- front-match back-match end-not-begin
- save-name match-name
- &allow-other-keys)
- "Find the first valid region between point and STOP.
-Return \(BEG END FRONT-POS BACK-POS FRONT-FORM BACK-FORM SUBMODE FACE
-NAME INVALID-RESUME OK-RESUME) specifying the region. See
-`mmm-match-and-verify' for the valid values of FRONT and BACK
-\(markers, regexps, or functions). A nil value for END means that
-MATCH-SUBMODE failed to find a valid submode. INVALID-RESUME is the
-point at which the search should continue if the region is invalid,
-and OK-RESUME if the region is valid."
- (when (mmm-match-and-verify front start stop front-verify)
- (let ((beg (mmm-match->point include-front front-offset front-match))
- (front-pos (with-no-warnings ; da: front-delim dyn scope?
- (if front-delim
- (mmm-match->point t front-delim front-match)
- nil)))
- (invalid-resume (match-end front-match))
- (front-form (mmm-get-form front-form)))
- (let ((submode (if match-submode
- (condition-case nil
- (mmm-save-all
- (funcall match-submode front-form))
- (mmm-no-matching-submode
- (return-from
- mmm-match-region
- (values beg nil nil nil nil nil nil nil nil
- invalid-resume nil))))
- nil))
- (name (cond ((functionp match-name)
- (mmm-save-all (funcall match-name front-form)))
- ((stringp match-name)
- (if save-name
- (mmm-format-matches match-name)
- match-name))))
- (face (cond ((functionp match-face)
- (mmm-save-all
- (funcall match-face front-form)))
- (match-face
- (cdr (assoc front-form match-face))))))
- (when (mmm-match-and-verify
- (if save-matches
- (mmm-format-matches back)
- back)
- beg stop back-verify)
- (let* ((end (mmm-match->point (not include-back)
- back-offset back-match))
- (back-pos (with-no-warnings ; da: as above
- (if back-delim
- (mmm-match->point nil back-delim back-match)
- nil)))
- (back-form (mmm-get-form back-form))
- (ok-resume (if end-not-begin
- (match-end back-match)
- end)))
- (values beg end front-pos back-pos front-form back-form
- submode face name
- invalid-resume ok-resume)))))))
-
-(defun mmm-match->point (beginp offset match)
- "Find a point of starting or stopping from the match data. If
-BEGINP, start at \(match-beginning MATCH), else \(match-end MATCH),
-and move OFFSET. Handles all values of OFFSET--see `mmm-classes-alist'."
- (save-excursion
- (goto-char (with-no-warnings ; da: front/back-match dyn binding?
- (if beginp
- (match-beginning front-match)
- (match-end back-match))))
- (dolist (spec (if (listp offset) offset (list offset)))
- (if (numberp spec)
- (forward-char (or spec 0))
- (funcall spec)))
- (point)))
-
-(defun mmm-match-and-verify (pos start stop &optional verify)
- "Find first match for POS between point and STOP satisfying VERIFY.
-Return non-nil if a match was found, and set match data. POS can be a
-number-or-marker, a regexp, or a function.
-
-If POS is a number-or-marker, it is used as-is. If it is a string, it
-is searched for as a regexp until VERIFY returns non-nil. If it is a
-function, it is called with argument STOP and must return non-nil iff
-a match is found, and set the match data. Note that VERIFY is ignored
-unless POS is a regexp."
- (cond
- ;; A marker can be used as-is, but only if it's in bounds.
- ((and (number-or-marker-p pos) (>= pos start) (<= pos stop))
- (goto-char pos)
- (looking-at "")) ; Set the match data
- ;; Strings are searched for as regexps.
- ((stringp pos)
- (loop always (re-search-forward pos stop 'limit)
- until (or (not verify) (mmm-save-all (funcall verify)))))
- ;; Otherwise it must be a function.
- ((functionp pos)
- (funcall pos stop))))
-
-;;}}}
-;;{{{ Get Delimiter Forms
-
-(defun mmm-get-form (form)
- "Return the delimiter form specified by FORM.
-If FORM is nil, call `mmm-default-get-form'. If FORM is a string,
-return it. If FORM is a function, call it. If FORM is a list, return
-its `car' \(usually in this case, FORM is a one-element list
-containing a function to be used as the delimiter form."
- (cond ((stringp form) form)
- ((not form) (mmm-default-get-form))
- ((functionp form) (mmm-save-all (funcall form)))
- ((listp form) (car form))))
-
-(defun mmm-default-get-form ()
- (regexp-quote (match-string 0)))
-
-;;}}}
-
-(provide 'mmm-class)
-
-;;; mmm-class.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-cmds.el b/contrib/mmm/mmm-cmds.el
deleted file mode 100644
index f39da066..00000000
--- a/contrib/mmm/mmm-cmds.el
+++ /dev/null
@@ -1,449 +0,0 @@
-;;; mmm-cmds.el --- MMM Mode interactive commands and keymap
-
-;; Copyright (C) 2000 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains the interactive commands for MMM Mode.
-
-;;; Code:
-
-(require 'font-lock)
-(require 'mmm-compat)
-(require 'mmm-vars)
-(require 'mmm-class)
-
-;; APPLYING CLASSES
-;;{{{ Applying Predefined Classes
-
-(defun mmm-ify-by-class (class)
- "Add submode regions according to an existing submode class."
- (interactive
- (list (intern
- (completing-read
- "Submode Class: "
- (remove-duplicates
- (mapcar #'(lambda (spec) (list (symbol-name (car spec))))
- (append
- (remove-if #'(lambda (spec) (plist-get (cdr spec) :private))
- mmm-classes-alist)
- (remove-if #'caddr mmm-autoloaded-classes)))
- :test #'equal)
- nil t))))
- (unless (eq class (intern ""))
- (mmm-apply-class class)
- (mmm-add-to-history class)
- (mmm-update-font-lock-buffer)))
-
-;;}}}
-;;{{{ Applying by the Region
-
-(defun mmm-ify-region (submode front back)
- "Add a submode region for SUBMODE coinciding with current region."
- (interactive "aSubmode: \nr")
- (mmm-ify :submode submode :front front :back back)
- (setq front (mmm-make-marker front t nil)
- back (mmm-make-marker back nil nil))
- (mmm-add-to-history `(:submode ,submode :front ,front :back ,back))
- (mmm-enable-font-lock submode))
-
-;;}}}
-;;{{{ Applying Simple Regexps
-
-(defun mmm-ify-by-regexp
- (submode front front-offset back back-offset save-matches)
- "Add SUBMODE regions to the buffer delimited by FRONT and BACK.
-With prefix argument, prompts for all additional keywords arguments.
-See `mmm-classes-alist'."
- (interactive "aSubmode:
-sFront Regexp:
-nOffset from Front Regexp:
-sBack Regexp:
-nOffset from Back Regexp:
-nNumber of matched substrings to save: ")
- (let ((args (mmm-save-keywords submode front back front-offset
- back-offset save-matches)))
- (apply #'mmm-ify args)
- (mmm-add-to-history args))
- (mmm-enable-font-lock submode))
-
-;;}}}
-
-;; EDITING WITH REGIONS
-;;{{{ Re-parsing Areas
-
-(defun mmm-parse-buffer ()
- "Re-apply all applicable submode classes to current buffer.
-Clears all current submode regions, reapplies all past interactive
-mmm-ification, and applies `mmm-classes' and mode-extension classes."
- (interactive)
- (message "MMM-ifying buffer...")
- (mmm-apply-all)
- (message "MMM-ifying buffer...done"))
-
-(defun mmm-parse-region (start stop)
- "Re-apply all applicable submode classes between START and STOP.
-Clears all current submode regions, reapplies all past interactive
-mmm-ification, and applies `mmm-classes' and mode-extension classes."
- (interactive "r")
- (message "MMM-ifying region...")
- (mmm-apply-all :start start :stop stop)
- (message "MMM-ifying region...done"))
-
-(defun mmm-parse-block (&optional lines)
- "Re-parse LINES lines before and after point \(default 1).
-Clears all current submode regions, reapplies all past interactive
-mmm-ification, and applies `mmm-classes' and mode-extension classes.
-
-This command is intended for use when you have just typed what should
-be the delimiters of a submode region and you want to create the
-region. However, you may want to look into the various types of
-delimiter auto-insertion that MMM Mode provides. See, for example,
-`mmm-insert-region'."
- (interactive "p")
- (message "MMM-ifying block...")
- (destructuring-bind (start stop) (mmm-get-block lines)
- (when (< start stop)
- (mmm-apply-all :start start :stop stop)))
- (message "MMM-ifying block...done"))
-
-(defun mmm-get-block (lines)
- (let ((inhibit-point-motion-hooks t))
- (list (save-excursion
- (forward-line (- lines))
- (beginning-of-line)
- (point))
- (save-excursion
- (forward-line lines)
- (end-of-line)
- (point)))))
-
-;;}}}
-;;{{{ Reparse Current Region
-
-(defun mmm-reparse-current-region ()
- "Clear and reparse the area of the current submode region.
-Use this command if a submode region's boundaries have become wrong."
- (interactive)
- (let ((ovl (mmm-overlay-at (point) 'all)))
- (when ovl
- (let ((beg (save-excursion
- (goto-char (mmm-front-start ovl))
- (forward-line -1)
- (point)))
- (end (save-excursion
- (goto-char (mmm-back-end ovl))
- (forward-line 1)
- (point))))
- (mmm-parse-region beg end)))))
-
-;;}}}
-;;{{{ Clear Submode Regions
-
-;; See also `mmm-clear-history' which is interactive.
-
-(defun mmm-clear-current-region ()
- "Deletes the submode region point is currently in, if any."
- (interactive)
- (delete-overlay (mmm-overlay-at (point) 'all)))
-
-(defun mmm-clear-regions (start stop)
- "Deletes all submode regions from START to STOP."
- (interactive "r")
- (mmm-clear-overlays start stop))
-
-(defun mmm-clear-all-regions ()
- "Deletes all submode regions in the current buffer."
- (interactive)
- (mmm-clear-overlays))
-
-;;}}}
-;;{{{ End Current Region
-
-(defun* mmm-end-current-region (&optional arg)
- "End current submode region.
-If ARG is nil, end it at the most appropriate place, usually its
-current back boundary. If ARG is non-nil, end it at point. If the
-current region is correctly bounded, the first does nothing, but the
-second deletes that delimiter as well.
-
-If the region's BACK property is a string, it is inserted as above and
-the overlay moved if necessary. If it is a function, it is called with
-two arguments--the overlay, and \(if ARG 'middle t)--and must do the
-entire job of this function."
- (interactive "P")
- (let ((ovl (mmm-overlay-at)))
- (when ovl
- (combine-after-change-calls
- (save-match-data
- (save-excursion
- (when (mmm-match-back ovl)
- (if arg
- (replace-match "")
- (return-from mmm-end-current-region)))))
- (let ((back (overlay-get ovl 'back)))
- (cond ((stringp back)
- (save-excursion
- (unless arg (goto-char (overlay-end ovl)))
- (save-excursion (insert back))
- (move-overlay ovl (overlay-start ovl) (point))))
- ((functionp back)
- (funcall back ovl (if arg 'middle t))))))
- (mmm-refontify-maybe (save-excursion (forward-line -1) (point))
- (save-excursion (forward-line 1) (point))))))
-
-;;}}}
-;;{{{ Narrow to Region
-
-(defun mmm-narrow-to-submode-region (&optional pos)
- "Narrow to the submode region at point."
- (interactive)
- ;; Probably don't use mmm-current-overlay here, because this is
- ;; sometimes called from inside messy functions.
- (let ((ovl (mmm-overlay-at pos)))
- (when ovl
- (narrow-to-region (overlay-start ovl) (overlay-end ovl)))))
-
-;; The inverse command is `widen', usually on `C-x n w'
-
-;;}}}
-
-;; INSERTING REGIONS
-;;{{{ Insert regions by keystroke
-
-;; This is the "default" binding in the MMM Mode keymap. Keys defined
-;; by classes should be control keys, to avoid conflicts with MMM
-;; commands.
-(defun mmm-insert-region (arg)
- "Insert a submode region based on last character in invoking keys.
-Keystrokes after `mmm-mode-prefix-key' which are not bound to an MMM
-Mode command \(see `mmm-command-modifiers') are passed on to this
-function. If they have the modifiers `mmm-insert-modifiers', then they
-are looked up, sans those modifiers, in all current submode classes to
-find an insert skeleton. For example, in Mason, `p' \(with appropriate
-prefix and modifiers) will insert a <%perl>...</%perl> region."
- (interactive "P")
- (let* ((seq (this-command-keys))
- (event (aref seq (1- (length seq))))
- (mods (event-modifiers event))
- (key (mmm-event-key event)))
- (if (subsetp mmm-insert-modifiers mods)
- (mmm-insert-by-key
- (append (set-difference mods mmm-insert-modifiers)
- key)
- arg))))
-
-(defun mmm-insert-by-key (key &optional arg)
- "Insert a submode region based on event KEY.
-Inspects all the classes of the current buffer to find a matching
-:insert key sequence. See `mmm-classes-alist'. ARG, if present, is
-passed on to `skeleton-proxy-new' to control wrapping.
-
-KEY must be a list \(MODIFIERS... . BASIC-KEY) where MODIFIERS are
-symbols such as shift, control, etc. and BASIC-KEY is a character code
-or a symbol such as tab, return, etc. Note that if there are no
-MODIFIERS, the dotted list becomes simply BASIC-KEY."
- (multiple-value-bind (class skel str) (mmm-get-insertion-spec key)
- (when skel
- (let ((after-change-functions nil)
- (old-undo buffer-undo-list) undo
- ;; da: Proof General patch for compatibility with holes.el,
- ;; bind this variable to prevent inserting holes here.
- mmm-inside-insert-by-key)
- ;; XEmacs' skeleton doesn't manage positions by itself, so we
- ;; have to do it.
- (if mmm-xemacs (setq skeleton-positions nil))
- (skeleton-proxy-new skel str arg)
- (destructuring-bind (back end beg front) skeleton-positions
- ;; TODO: Find a way to trap invalid-parent signals from
- ;; make-region and undo the skeleton insertion.
- (let ((match-submode (plist-get class :match-submode))
- (match-face (plist-get class :match-face))
- (match-name (plist-get class :match-name))
- (front-form (regexp-quote (buffer-substring front beg)))
- (back-form (regexp-quote (buffer-substring end back)))
- submode face name)
- (setq submode
- (mmm-modename->function
- (if match-submode
- (mmm-save-all (funcall match-submode front-form))
- (plist-get class :submode))))
- (setq face
- (cond ((functionp match-face)
- (mmm-save-all
- (funcall match-face front-form)))
- (match-face
- (cdr (assoc front-form match-face)))
- (t
- (plist-get class :face))))
- (setq name
- (cond ((plist-get class :skel-name)
- ;; Optimize the name to the user-supplied str
- ;; if we are so instructed.
- str)
- ;; Call it if it is a function
- ((functionp match-name)
- (mmm-save-all (funcall match-name front-form)))
- ;; Now we know it's a string, does it need to
- ;; be formatted?
- ((plist-get class :save-name)
- ;; Yes. Haven't done a match before, so
- ;; match the front regexp against the given
- ;; form to format the string
- (string-match (plist-get class :front)
- front-form)
- (mmm-format-matches match-name front-form))
- (t
- ;; No, just use it as-is
- match-name)))
- (mmm-make-region
- submode beg end
- :face face
- :name name
- :front front :back back
- :match-front front-form :match-back back-form
- :evaporation 'front
-;;; :beg-sticky (plist-get class :beg-sticky)
-;;; :end-sticky (plist-get class :end-sticky)
- :beg-sticky t :end-sticky t
- :creation-hook (plist-get class :creation-hook))
- (mmm-enable-font-lock submode)))
- ;; Now get rid of intermediate undo boundaries, so that the entire
- ;; insertion can be undone as one action. This should really be
- ;; skeleton's job, but it doesn't do it.
- (setq undo buffer-undo-list)
- (while (not (eq (cdr undo) old-undo))
- (when (eq (cadr undo) nil)
- (setcdr undo (cddr undo)))
- (setq undo (cdr undo)))))))
-
-(defun mmm-get-insertion-spec (key &optional classlist)
- "Get the insertion info for KEY from all classes in CLASSLIST.
-Return \(CLASS SKEL STR) where CLASS is the class spec a match was
-found in, SKEL is the skeleton to insert, and STR is the argument.
-CLASSLIST defaults to the return value of `mmm-get-all-classes',
-including global classes."
- (loop for classname in (or classlist (mmm-get-all-classes t))
- for class = (mmm-get-class-spec classname)
- for inserts = (plist-get class :insert)
- for skel = (cddr (assoc key inserts))
- with str
- ;; If SKEL is a dotted pair, it means call another key's
- ;; insertion spec with an argument.
- unless (consp (cdr skel))
- do (setq str (cdr skel)
- skel (cddr (assoc (car skel) inserts)))
- if skel return (list class skel str)
- ;; If we have a group class, recurse.
- if (plist-get class :classes)
- if (mmm-get-insertion-spec key it)
- return it
- else
- return nil))
-
-;;}}}
-;;{{{ Help on Insertion
-
-(defun mmm-insertion-help ()
- "Display help on currently available MMM insertion commands."
- (interactive)
- (with-output-to-temp-buffer "*Help*"
- (princ "Available MMM Mode Insertion Commands:\n")
- (princ "Key Inserts\n")
- (princ "--- -------\n\n")
- (mapcar #'mmm-display-insertion-key
- (mmm-get-all-insertion-keys))))
-
-(defun mmm-display-insertion-key (spec)
- "Print an insertion binding to standard output.
-SPEC should be \(KEY NAME ...) where KEY is an insertion key and NAME
-is a symbol naming the insertion."
- (let* ((str (make-string 16 ?\ ))
- ;; This gets us a dotted list, because of the way insertion
- ;; keys are specified.
- (key (append mmm-insert-modifiers (car spec)))
- (lastkey (nthcdr (max (1- (safe-length key)) 0) key)))
- ;; Now we make it a true list
- (if (consp key)
- (setcdr lastkey (list (cdr lastkey)))
- (setq key (list key)))
- ;; Get the spacing right
- (store-substring str 0
- (key-description
- (apply #'vector (append mmm-mode-prefix-key (list key)))))
- (princ str)
- ;; Now print the binding symbol
- (princ (cadr spec))
- (princ "\n")))
-
-(defun mmm-get-all-insertion-keys (&optional classlist)
- "Return an alist of all currently available insertion keys.
-Elements look like \(KEY NAME ...) where KEY is an insertion key and
-NAME is a symbol naming the insertion."
- (remove-duplicates
- (loop for classname in (or classlist (mmm-get-all-classes t))
- for class = (mmm-get-class-spec classname)
- append (plist-get class :insert) into keys
- ;; If we have a group class, recurse.
- if (plist-get class :classes)
- do (setq keys (append keys (mmm-get-all-insertion-keys it)))
- finally return keys)
- :test #'equal
- :key #'(lambda (x) (cons (car x) (cadr x)))
- :from-end t))
-
-;;}}}
-
-;;{{{ Auto Insertion (copied from interactive session);-COM-
-;-COM-
-;-COM-;; Don't use `mmm-ify-region' of course. And rather than having
-;-COM-;; classes define their own functions, we should have them pass a
-;-COM-;; skeleton as an attribute. Then our insert function can turn off
-;-COM-;; after-change hooks and add the submode region afterward.
-;-COM-
-;-COM-(define-skeleton mmm-see-inline
-;-COM- "" nil
-;-COM- -1 @ " " _ " " @ "%>"
-;-COM- '(apply #'mmm-ify-region 'cperl-mode (reverse skeleton-positions)))
-;-COM-
-;-COM-(define-skeleton mmm-see-other
-;-COM- "" nil
-;-COM- @ ";\n" _ "\n" @ "<%/" str ">"
-;-COM- '(apply #'mmm-ify-region 'cperl-mode (reverse skeleton-positions)))
-;-COM-
-;-COM-(make-local-hook 'after-change-functions)
-;-COM-(add-hook 'after-change-functions 'mmm-detect t)
-;-COM-
-;-COM-(defun mmm-detect (beg end length)
-;-COM- (when (mmm-looking-back-at "<% ")
-;-COM- (mmm-see-inline))
-;-COM- (when (mmm-looking-back-at "<%\\(\\w+\\)>")
-;-COM- (mmm-see-other (match-string 1))))
-;-COM-
-;;}}}
-
-(provide 'mmm-cmds)
-
-;;; mmm-cmds.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-compat.el b/contrib/mmm/mmm-compat.el
deleted file mode 100644
index 096233c6..00000000
--- a/contrib/mmm/mmm-compat.el
+++ /dev/null
@@ -1,194 +0,0 @@
-;;; mmm-compat.el --- MMM Hacks for compatibility with other Emacsen
-
-;; Copyright (C) 2000 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file provides a number of hacks that are necessary for MMM
-;; Mode to function in different Emacsen. MMM Mode is designed for
-;; FSF Emacs 20 and 21, but these hacks usually enable it to work
-;; almost perfectly in Emacs 19 and XEmacs 20 or 21.
-
-;;; Code:
-
-(require 'cl)
-
-;;{{{ Emacsen Detection
-
-(defvar mmm-xemacs (featurep 'xemacs)
- "Whether we are running XEmacs.")
-
-;;}}}
-;;{{{ Keywords (Emacs 19)
-
-;; Emacs 19 doesn't automatically set keyword variables to themselves.
-;; We shouldn't have to do any more than these, since CL automatically
-;; defines all keywords used for function arguments.
-(defvar mmm-keywords-used
- '(:group :regexp :region :function :insert :classes :private)
- "List of extra keywords used by MMM Mode.")
-
-(dolist (keyword mmm-keywords-used)
- (set keyword keyword))
-
-;;}}}
-;;{{{ Customization (Emacs 19)
-
-(condition-case ()
- (require 'custom)
- (error nil))
-
-(unless (and (featurep 'custom)
- (fboundp 'custom-declare-variable))
- (defmacro defgroup (&rest args)
- nil)
- ;; da: backquote syntax updated, so not Emacs <19.29 compatible
- (defmacro defface (var values doc &rest args)
- `(make-face (quote ,var)))
- (defmacro defcustom (var value doc &rest args)
- `(defvar ,var ,value ,doc)))
-
-;;}}}
-;;{{{ Regexp-Opt (Emacs 19)
-
-(condition-case ()
- (require 'regexp-opt)
- (error nil))
-
-(unless (and (featurep 'regexp-opt)
- (fboundp 'regexp-opt))
- ;; No regexp-opt; create one
- (defun regexp-opt (strings &optional paren)
- (concat (if paren "\\(" "")
- (mapconcat 'regexp-quote strings "\\|")
- (if paren "\\)" ""))))
-
-;;}}}
-;;{{{ Regexp-Opt (XEmacs)
-
-(defmacro mmm-regexp-opt (strings paren)
- "Act like FSF Emacs' `regexp-opt', whichever Emacs we're in.
-XEmacs' `regexp-opt' requires an extra parameter to do grouping."
- (if (featurep 'xemacs)
- `(regexp-opt ,strings ,paren t)
- `(regexp-opt ,strings ,paren)))
-
-;;}}}
-;;{{{ Overlays (XEmacs)
-
-;; The main thing we use from FSF Emacs that XEmacs doesn't support
-;; are overlays. XEmacs uses extents instead, but comes with a package
-;; to emulate overlays.
-(when mmm-xemacs
- ;; This does almost everything we need.
- (require 'overlay))
-
-;; We also use a couple "special" overlay properties which have
-;; different names for XEmacs extents.
-(defvar mmm-evaporate-property
- (if (featurep 'xemacs) 'detachable 'evaporate)
- "The name of the overlay property controlling evaporation.")
-
-;; We don't use this any more, since its behavior is different in FSF
-;; and XEmacs: in the one it replaces the buffer's local map, but in
-;; the other it gets stacked on top of it. Instead we just set the
-;; buffer's local map temporarily.
-;;;(defvar mmm-keymap-property
-;;; (if (featurep 'xemacs) 'keymap 'local-map)
-;;; "The name of the overlay property controlling keymaps.")
-
-;;}}}
-;;{{{ Keymaps and Events (XEmacs)
-
-;; In XEmacs, keymaps are a primitive type, while in FSF Emacs, they
-;; are a list whose car is the symbol `keymap'. Among other things,
-;; this means that they handle default bindings differently.
-(defmacro mmm-set-keymap-default (keymap binding)
- (if (featurep 'xemacs)
- `(set-keymap-default-binding ,keymap ,binding)
- `(define-key ,keymap [t] ,binding)))
-
-;; In XEmacs, events are a primitive type, while in FSF Emacs, they
-;; are represented by characters or vectors. We treat them as vectors.
-;; We can use `event-modifiers' in both Emacsen to extract the
-;; modifiers, but the function to extract the basic key is different.
-(defmacro mmm-event-key (event)
- (if (featurep 'xemacs)
- `(event-key ,event)
- `(event-basic-type ,event)))
-
-;;}}}
-;;{{{ Skeleton (XEmacs)
-
-;; XEmacs' `skeleton' package doesn't provide `@' to record positions.
-(defvar skeleton-positions ())
-(defun mmm-fixup-skeleton ()
- "Add `@' to `skeleton-further-elements' if XEmacs and not there.
-This makes `@' in skeletons act approximately like it does in FSF."
- (and (featurep 'xemacs)
- (defvar skeleton-further-elements ())
- (not (assoc '@ skeleton-further-elements))
- (add-to-list 'skeleton-further-elements
- '(@ ''(push (point) skeleton-positions)))))
-
-;;}}}
-;;{{{ Make Temp Buffers (XEmacs)
-
-(defmacro mmm-make-temp-buffer (buffer name)
- "Return a buffer called NAME including the text of BUFFER.
-This text should not be modified."
- (if (fboundp 'make-indirect-buffer)
- `(make-indirect-buffer ,buffer ,name)
- `(save-excursion
- (set-buffer (get-buffer-create ,name))
- (insert-buffer ,buffer)
- (current-buffer))))
-
-;;}}}
-;;{{{ Font Lock Available (Emacs w/o X)
-
-(defvar mmm-font-lock-available-p (or window-system mmm-xemacs)
- "Whether font-locking is available.
-Emacs 19 and 20 only provide font-lock with a window system in use.")
-
-;;}}}
-;;{{{ Font Lock Defaults (XEmacs)
-
-(defmacro mmm-set-font-lock-defaults ()
- "Set font-lock defaults without trying to turn font-lock on.
-In XEmacs, `font-lock-set-defaults' calls `font-lock-set-defaults-1'
-to do the real work but then `turn-on-font-lock', which in turn calls
-`font-lock-mode', which unsets the defaults if running in a hidden
-buffer \(name begins with a space). So in XEmacs, we just call
-`font-lock-set-defaults-1' directly."
- (if mmm-xemacs
- `(font-lock-set-defaults-1)
- `(font-lock-set-defaults)))
-
-;;}}}
-
-(provide 'mmm-compat)
-
-;;; mmm-compat.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-cweb.el b/contrib/mmm/mmm-cweb.el
deleted file mode 100644
index ac976344..00000000
--- a/contrib/mmm/mmm-cweb.el
+++ /dev/null
@@ -1,101 +0,0 @@
-;;; mmm-cweb.el --- MMM submode class for CWeb programs
-
-;; Copyright (C) 2001 by Alan Shutko
-
-;; Author: Alan Shutko <ats@acm.org>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains the definition of an MMM Mode submode class for
-;; editing CWeb programs.
-
-;;; Code:
-
-(require 'mmm-compat)
-(require 'mmm-vars)
-(require 'mmm-auto)
-
-(defvar mmm-cweb-section-tags
- '("@ " "@*"))
-
-(defvar mmm-cweb-section-regexp
- (concat "^" (mmm-regexp-opt mmm-cweb-section-tags t)))
-
-(defvar mmm-cweb-c-part-tags
- '("@c" "@>=" "@>+=" "@p"))
-
-(defvar mmm-cweb-c-part-regexp
- (concat (mmm-regexp-opt mmm-cweb-c-part-tags t)))
-
-(defun mmm-cweb-in-limbo (pos)
- "Check to see if POS is in limbo, ie before any cweb sections."
- (save-match-data
- (save-excursion
- (goto-char pos)
- (not (re-search-backward mmm-cweb-section-regexp nil t)))))
-
-(defun mmm-cweb-verify-brief-c ()
- "Verify function for cweb-brief-c class.
-Checks whether the match is in limbo."
- (not (mmm-cweb-in-limbo (match-beginning 0))))
-
-(mmm-add-group
- 'cweb
- `(
- (cweb-c-part
- :submode c-mode
- :front ,mmm-cweb-c-part-regexp
- :back ,mmm-cweb-section-regexp)
- (cweb-label
- :submode tex-mode
- :front "@<"
- :back "@>"
- :face mmm-comment-submode-face
- :insert ((?l cweb-label nil @ "@<" @ "@>")))
- (cweb-brief-c
- :submode c-mode
- :front "[^\\|]\\(|\\)[^|]"
- :front-match 1
- :front-verify mmm-cweb-verify-brief-c
-; :front-offset -1
- :back "[^\\|]\\(|\\)"
- :back-match 1
-; :back-offset 1
- :end-not-begin t
- :insert ((?| cweb-c-in-tex nil "|" @ "|")))
- (cweb-comment
- :submode tex-mode
- :front "/[*]"
- :back "[*]/"
- :face mmm-comment-submode-face)
-))
-
-;; (add-to-list 'mmm-mode-ext-classes-alist
-;; '(plain-tex-mode "\\.w\\'" cweb))
-;; (add-to-list 'mmm-mode-ext-classes-alist
-;; '(latex-mode "\\.w\\'" cweb))
-;; (add-to-list 'auto-mode-alist '("\\.w\\'" . tex-mode))
-
-(provide 'mmm-cweb)
-
-;;; mmm-cweb.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-mason.el b/contrib/mmm/mmm-mason.el
deleted file mode 100644
index 62f0642a..00000000
--- a/contrib/mmm/mmm-mason.el
+++ /dev/null
@@ -1,176 +0,0 @@
-;;; mmm-mason.el --- MMM submode class for Mason components
-
-;; Copyright (C) 2000 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains the definition of an MMM Mode submode class for
-;; editing Mason components. See the file README.Mason for more
-;; details.
-
-;;; Code:
-
-(require 'mmm-compat)
-(require 'mmm-vars)
-(require 'mmm-auto)
-
-;;{{{ Perl Tags
-
-(defvar mmm-mason-perl-tags
- '("perl" "init" "cleanup" "once" "filter" "shared"
- "perl_init" "perl_cleanup" "perl_once" "perl_filter"))
-
-(defvar mmm-mason-pseudo-perl-tags
- '("args" "perl_args" "attr" "flags"))
-
-(defvar mmm-mason-non-perl-tags
- '("doc" "perl_doc" "text" "perl_text" "def" "perl_def" "method"))
-
-(defvar mmm-mason-perl-tags-regexp
- (concat "<%" (mmm-regexp-opt mmm-mason-perl-tags t) ">")
- "Matches tags beginning Mason sections containing Perl code.
-Saves the name of the tag matched.")
-
-(defvar mmm-mason-pseudo-perl-tags-regexp
- (concat "<%" (mmm-regexp-opt mmm-mason-pseudo-perl-tags t) ">")
- "Match tags beginning Mason sections that look like Perl but aren't.
-Saves the name of the tag matched.")
-
-(defvar mmm-mason-tag-names-regexp
- (regexp-opt (append mmm-mason-perl-tags mmm-mason-non-perl-tags) t)
- "Matches any Mason tag name after the \"<%\". Used to verify that a
-\"<%\" sequence starts an inline section.")
-
-(defun mmm-mason-verify-inline ()
- (not (looking-at mmm-mason-tag-names-regexp)))
-
-;;}}}
-;;{{{ Add Classes
-
-(mmm-add-group
- 'mason
- `((mason-text
- :submode nil
- :front "<%text>"
- :back "</%text>"
- :insert ((?t mason-<%text> nil @ "<%text>" @ "\n"
- _ "\n" @ "</%text>" @)))
- (mason-doc
- :submode text-mode
- :face mmm-comment-submode-face
- :front "<%doc>"
- :back "</%doc>"
- :face nil
- :insert ((?d mason-<%doc> nil @ "<%doc>" @ "\n"
- _ "\n" @ "</%doc>" @)))
- (mason-perl
- :submode perl
- :match-face (("<%perl>" . mmm-code-submode-face)
- ("<%init>" . mmm-init-submode-face)
- ("<%cleanup>" . mmm-cleanup-submode-face)
- ("<%once>" . mmm-init-submode-face)
- ("<%filter>" . mmm-special-submode-face)
- ("<%shared>" . mmm-init-submode-face))
- :front ,mmm-mason-perl-tags-regexp
- :back "</%~1>"
- :save-matches 1
- :match-name "~1"
- :save-name 1
- :insert ((?, mason-<%TAG> "Perl section: " @ "<%" str ">" @
- ";\n" _ "\n" @ "</%" str ">" @)
- (?< mason-<%TAG> ?, . nil)
- (?p mason-<%perl> ?, . "perl")
- (?i mason-<%init> ?, . "init")
- (?c mason-<%cleanup> ?, . "cleanup")
- (?o mason-<%once> ?, . "once")
- (?l mason-<%filter> ?, . "filter")
- (?s mason-<%shared> ?, . "shared")))
- (mason-pseudo-perl
- :submode perl
- :face mmm-declaration-submode-face
- :front ,mmm-mason-pseudo-perl-tags-regexp
- :back "</%~1>"
- :save-matches 1
- :insert ((?. mason-pseudo-<%TAG> "Pseudo-perl section: " @ "<%" str ">" @
- "\n" _ "\n" @ "</%" str ">" @)
- (?> mason-pseudo-<%TAG> ?, . nil)
- (?a mason-<%args> ?. . "args")
- (?f mason-<%flags> ?. . "flags")
- (?r mason-<%attr> ?. . "attr")))
- (mason-inline
- :submode perl
- :face mmm-output-submode-face
- :front "<%"
- :front-verify mmm-mason-verify-inline
- :back "%>"
- :insert ((?% mason-<%-%> nil @ "<%" @ " " _ " " @ "%>" @)
- (?5 mason-<%-%> ?% . nil)))
- (mason-call
- :submode perl
- :face mmm-special-submode-face
- :front "<&"
- :back "&>"
- :insert ((?& mason-<&-&> nil @ "<&" @ " " _ " " @ "&>" @)
- (?7 mason-<&-&> ?% . nil)))
- (mason-one-line-comment
- :submode text-mode
- :face mmm-comment-submode-face
- :front "^%#"
- :back "\n"
- :insert ((?# mason-%-comment nil (mmm-mason-start-line)
- @ "%" @ "# " _ @ '(mmm-mason-end-line) "\n" @)
- (?3 mason-%-comment ?# . nil)))
- (mason-one-line
- :submode perl
- :face mmm-code-submode-face
- :front "^%"
- :back "\n"
- :insert ((return mason-%-line nil (mmm-mason-start-line)
- @ "%" @ " " _ @ '(mmm-mason-end-line) "\n" @)))))
-
-;;}}}
-;;{{{ One-line Sections
-
-(defun mmm-mason-start-line ()
- (if (bolp)
- ""
- "\n"))
-
-(defun mmm-mason-end-line ()
- (if (eolp)
- (delete-char 1)))
-
-;;}}}
-;;{{{ Set Mode Line
-
-(defun mmm-mason-set-mode-line ()
- (setq mmm-buffer-mode-display-name "Mason"))
-(add-hook 'mmm-mason-class-hook 'mmm-mason-set-mode-line)
-
-;;}}}
-
-(provide 'mmm-mason)
-
-;;; mmm-mason.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-mode.el b/contrib/mmm/mmm-mode.el
deleted file mode 100644
index 45bf062a..00000000
--- a/contrib/mmm/mmm-mode.el
+++ /dev/null
@@ -1,299 +0,0 @@
-;;; mmm-mode.el --- Allow Multiple Major Modes in a buffer
-
-;; Copyright (C) 1999, 2004 by Michael Abraham Shulman
-
-;; Emacs Lisp Archive Entry
-;; Package: mmm-mode
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Keywords: convenience, faces, languages, tools
-;; Version: 0.4.8
-
-;; Revision: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your
-;; option) any later version.
-
-;; This file is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;;; MMM Mode is a minor mode that allows multiple major modes to
-;;; coexist in a single buffer. Refer to the documentation of the
-;;; function `mmm-mode' for more detailed information. This file
-;;; contains mode on/off functions and the mode keymap, but mostly
-;;; just loads all the subsidiary files.
-
-;;{{{ Parameter Naming
-
-;;; Since version 0.3.7, I've tried to use a uniform scheme for naming
-;;; parameters. Here's a brief summary.
-
-;;; BEG and END refer to the beginning and end of a region.
-;;; FRONT and BACK refer to the respective delimiters of a region.
-;;; FRONT- and BACK-OFFSET are the offsets from delimiter matches.
-;;; FRONT-BEG through BACK-END are the endings of the delimiters.
-;;; START and STOP bound actions, like searching, fontification, etc.
-
-;;}}}
-;;{{{ CL and Parameters
-
-;;; Keyword parameters can be nice because it makes it easier to see
-;;; what's getting passed as what. But I try not to use them in user
-;;; functions, because CL doesn't make good documentation strings.
-;;; Similarly, any hook or callback function can't take keywords,
-;;; since Emacs as a whole doesn't use them. And for small parameter
-;;; lists, they are overkill. So I use them only for a large number of
-;;; optional parameters, such as `mmm-make-region'.
-
-;;; An exception is the various submode class application functions,
-;;; which all take all their arguments as keywords, for consistency
-;;; and so the classes alist looks nice.
-
-;;; When using keyword arguments, defaults should *always* be supplied
-;;; in all arglists. (This pertains mostly to :start and :stop
-;;; arguments, usually defaulting to (point-min) and (point-max)
-;;; respectively.) `mmm-save-keywords' should only be used for lists
-;;; with more than four arguments, such as in `mmm-ify-by-regexp'.
-
-;;; In general, while I have no qualms about using things from CL like
-;;; `mapl', `loop' and `destructuring-bind', I try not to use `defun*'
-;;; more than I have to. For one, it sometimes makes bad documentation
-;;; strings. Furthermore, to a `defun'ned function, a nil argument is
-;;; the same as no argument, so it will use its (manual) default, but
-;;; to a `defun*'ned function, a nil argument *is* the argument, so
-;;; any default specified in the arglist will be ignored. Confusion of
-;;; this type should be avoided when at all possible.
-
-;;}}}
-
-;;; Code:
-
-(require 'cl)
-;; If we don't load font-lock now, but it is loaded later, the
-;; necessary mmm-font-lock-* properties may not be there.
-(require 'font-lock)
-(require 'mmm-compat)
-(require 'mmm-utils)
-(require 'mmm-vars)
-(require 'mmm-auto)
-(require 'mmm-region)
-(require 'mmm-class)
-;; This file is set up to autoload by `mmm-auto.el'.
-;; (require 'mmm-cmds)
-(require 'mmm-univ)
-
-;;{{{ Toggle Function
-
-(defun mmm-mode (&optional arg)
- "Minor mode to allow multiple major modes in one buffer.
-Without ARG, toggle MMM Mode. With ARG, turn MMM Mode on iff ARG is
-positive and off otherwise.
-
-Commands Available:
-\\<mmm-mode-map>
-\\{mmm-mode-map}
-
-BASIC CONCEPTS
-
-The idea of MMM Mode is to allow multiple major modes to coexist in
-the same buffer. There is one \"primary\" major mode that controls
-most of the buffer, and a number of \"submodes\" that each hold sway
-over certain regions. The submode regions are usually highlighted by
-a background color for ease of recognition. While the point is in a
-submode region, the following changes \(are supposed to) occur:
-
-1. The local keymap is that of the submode.
-2. The mode line changes to show what submode region is active.
-3. The major mode menu and mouse popup menu are that of the submode.
-4. Some local variables of the submode shadow the default mode's.
-5. The syntax table and indentation are those of the submode.
-6. Font-lock fontifies correctly for the submode.
-
-For further information, including installation and configuration
-instructions, see the Info file mmm.info which is included with the
-distribution of MMM Mode. Many of MMM's configuration variables are
-available through M-x customize under Programming | Tools | Mmm."
- (interactive "P")
- (if (if arg (> (prefix-numeric-value arg) 0) (not mmm-mode))
- (mmm-mode-on)
- (mmm-mode-off)))
-
-(add-to-list 'minor-mode-alist (list 'mmm-mode mmm-mode-string))
-
-;;}}}
-;;{{{ Mode On
-
-(defun mmm-mode-on ()
- "Turn on MMM Mode. See `mmm-mode'."
- (interactive)
- ;; This function is called from mode hooks, so we need to make sure
- ;; we're not in a temporary buffer. We don't need to worry about
- ;; recursively ending up in ourself, however, since by that time the
- ;; variable `mmm-mode' will already be set.
- (mmm-valid-buffer
- (unless mmm-mode
- (setq mmm-primary-mode major-mode)
- (when (fboundp 'c-make-styles-buffer-local)
- (c-make-styles-buffer-local t))
- (mmm-update-mode-info major-mode)
- (setq mmm-region-saved-locals-for-dominant
- (list* (list 'font-lock-cache-state nil)
- (list 'font-lock-cache-position (make-marker))
- (copy-tree (cdr (assq major-mode mmm-region-saved-locals-defaults)))))
- ;; Without the next line, the (make-marker) above gets replaced
- ;; with the starting value of nil, and all comes to naught.
- (mmm-set-local-variables major-mode)
- (mmm-add-hooks)
- (mmm-fixup-skeleton)
- (make-local-variable 'font-lock-fontify-region-function)
- ;(make-local-variable 'font-lock-beginning-of-syntax-function)
- (make-local-variable 'syntax-beginning-function)
- (setq font-lock-fontify-region-function 'mmm-fontify-region
- ; font-lock-beginning-of-syntax-function 'mmm-beginning-of-syntax
- syntax-begin-function 'mmm-beginning-of-syntax)
- (setq mmm-mode t)
- (condition-case err
- (mmm-apply-all)
- (mmm-error
- ;; Complain, but don't die, since we want files to go ahead
- ;; and be opened anyway, and the mode to go ahead and be
- ;; turned on. Should we delete all previously made submode
- ;; regions when we find an invalid one?
- (message "%s" (error-message-string err))))
- (run-hooks 'mmm-mode-hook)
- (mmm-run-major-hook))))
-
-;;}}}
-;;{{{ Mode Off
-
-(defun mmm-mode-off ()
- "Turn off MMM Mode. See `mmm-mode'."
- (interactive)
- (when mmm-mode
- (mmm-remove-hooks)
- (mmm-clear-overlays)
- (mmm-clear-history)
- (mmm-clear-mode-ext-classes)
- (mmm-clear-local-variables)
- (mmm-update-submode-region)
- (setq font-lock-fontify-region-function
- (get mmm-primary-mode 'mmm-fontify-region-function)
- ; font-lock-beginning-of-syntax-function
- syntax-begin-function
- (get mmm-primary-mode 'mmm-beginning-of-syntax-function))
- (mmm-update-font-lock-buffer)
- (mmm-refontify-maybe)
- (setq mmm-mode nil)
- ;; Restore the mode line
- (setq mmm-primary-mode-display-name nil
- mmm-buffer-mode-display-name nil)
- (mmm-set-mode-line)))
-
-;;}}}
-;;{{{ Mode Keymap
-
-(defvar mmm-mode-map (make-sparse-keymap)
- "Keymap for MMM Minor Mode.")
-
-(defvar mmm-mode-prefix-map (make-sparse-keymap)
- "Keymap for MMM Minor Mode after `mmm-mode-prefix-key'.")
-
-(defvar mmm-mode-menu-map (make-sparse-keymap "MMM")
- "Keymap for MMM Minor Mode menu.")
-
-(defun mmm-define-key (key binding &optional keymap)
- (define-key (or keymap mmm-mode-prefix-map)
- (vector (append mmm-command-modifiers (list key)))
- binding))
-
-(when mmm-use-old-command-keys
- (mmm-use-old-command-keys))
-
-(mmm-define-key ?c 'mmm-ify-by-class)
-(mmm-define-key ?x 'mmm-ify-by-regexp)
-(mmm-define-key ?r 'mmm-ify-region)
-
-(mmm-define-key ?b 'mmm-parse-buffer)
-(mmm-define-key ?g 'mmm-parse-region)
-(mmm-define-key ?% 'mmm-parse-block)
-(mmm-define-key ?5 'mmm-parse-block)
-
-(mmm-define-key ?k 'mmm-clear-current-region)
-(mmm-define-key ?\ 'mmm-reparse-current-region)
-(mmm-define-key ?e 'mmm-end-current-region)
-
-(mmm-define-key ?z 'mmm-narrow-to-submode-region)
-
-;; This one is exact, since C-h is (usually) already used for help.
-(define-key mmm-mode-prefix-map [?h] 'mmm-insertion-help)
-
-;; Default bindings to do insertion (dynamic)
-(mmm-set-keymap-default mmm-mode-prefix-map 'mmm-insert-region)
-
-;; Set up the prefix help command, since otherwise the default binding
-;; overrides it.
-(define-key mmm-mode-prefix-map (vector help-char) prefix-help-command)
-
-;; And put it all onto the prefix key
-(define-key mmm-mode-map mmm-mode-prefix-key mmm-mode-prefix-map)
-
-;; Order matters for the menu bar.
-(define-key mmm-mode-menu-map [off]
- '("MMM Mode Off" . mmm-mode-off))
-(define-key mmm-mode-menu-map [sep0] '(menu-item "----"))
-
-(define-key mmm-mode-menu-map [clhist]
- '("Clear History" . mmm-clear-history))
-(define-key mmm-mode-menu-map [end]
- '("End Current" . mmm-end-current-region))
-(define-key mmm-mode-menu-map [clear]
- '("Clear Current" . mmm-clear-current-region))
-(define-key mmm-mode-menu-map [reparse]
- '("Reparse Current" . mmm-reparse-current-region))
-
-(define-key mmm-mode-menu-map [sep10] '(menu-item "----"))
-
-(define-key mmm-mode-menu-map [ins-help]
- '("List Insertion Keys" . mmm-insertion-help))
-
-(define-key mmm-mode-menu-map [sep20] '(menu-item "----"))
-
-(define-key mmm-mode-menu-map [region]
- '(menu-item "MMM-ify Region" mmm-ify-region :enable mark-active))
-(define-key mmm-mode-menu-map [regexp]
- '("MMM-ify by Regexp" . mmm-ify-by-regexp))
-(define-key mmm-mode-menu-map [class]
- '("Apply Submode Class" . mmm-ify-by-class))
-
-(define-key mmm-mode-menu-map [sep30] '(menu-item "----"))
-
-(define-key mmm-mode-menu-map [parse-region]
- '(menu-item "Parse Region" mmm-parse-region :enable mark-active))
-(define-key mmm-mode-menu-map [parse-buffer]
- '("Parse Buffer" . mmm-parse-buffer))
-(define-key mmm-mode-menu-map [parse-block]
- '("Parse Block" . mmm-parse-block))
-
-(define-key mmm-mode-map [menu-bar mmm] (cons "MMM" mmm-mode-menu-map))
-
-(add-to-list 'minor-mode-map-alist (cons 'mmm-mode mmm-mode-map))
-
-;;}}}
-
-(provide 'mmm-mode)
-
-;;; mmm-mode.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-region.el b/contrib/mmm/mmm-region.el
deleted file mode 100644
index 1b4975df..00000000
--- a/contrib/mmm/mmm-region.el
+++ /dev/null
@@ -1,818 +0,0 @@
-;;; mmm-region.el --- Manipulating and behavior of MMM submode regions
-
-;; Copyright (C) 2000 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file provides the functions and variables to create, delete,
-;; and inspect submode regions, as well as functions that make them
-;; behave like the submode with respect to syntax tables, local maps,
-;; font lock, etc.
-
-;; See mmm-class.el for functions which scan the buffer and decide
-;; where to create regions.
-
-;;; Code:
-
-(require 'cl)
-(require 'font-lock)
-(require 'mmm-compat)
-(require 'mmm-utils)
-(require 'mmm-auto)
-(require 'mmm-vars)
-
-;; INSPECTION
-;;{{{ Current Overlays
-
-;; Emacs counts an overlay starting at POS as "at" POS, but not an
-;; overlay ending at POS. XEmacs is more sensible and uses beg- and
-;; end-stickiness to determine whether an endpoint is within an
-;; extent. Here we want to act like XEmacs does.
-
-(defsubst mmm-overlay-at (&optional pos type)
- "Return the highest-priority MMM Mode overlay at POS.
-See `mmm-included-p' for the values of TYPE."
- (car (mmm-overlays-at pos type)))
-
-(defun mmm-overlays-at (&optional pos type)
- "Return a list of the MMM overlays at POS, in decreasing priority.
-See `mmm-included-p' for the values of TYPE."
- (or pos (setq pos (point)))
- (mmm-sort-overlays
- (remove-if-not
- #'(lambda (ovl)
- (and (overlay-get ovl 'mmm)
- (mmm-included-p ovl pos type)))
- ;; XEmacs complains about positions outside the buffer
- (overlays-in (max (1- pos) (point-min))
- (min (1+ pos) (point-max))))))
-
-(defun mmm-included-p (ovl pos &optional type)
- "Return true if the overlay OVL contains POS.
-
-If OVL strictly contains POS, always return true. If OVL starts or
-ends at POS, return true or false based on the value of TYPE, which
-should be one of nil, `beg', `end', `none', or `all'.
-* If TYPE is nil, return true for an overlay starting at POS only if
- it is beg-sticky, and for one ending at POS only if it is end-sticky.
-* If TYPE is `beg', return true for any overlay starting at POS but
- false for any ending at POS.
-* If TYPE is `end', return true for any overlay ending at POS but
- false for any starting at POS.
-* If TYPE is `all', return true for any overlay starting or ending at POS.
-* If TYPE is `none' \(or any other value), return false for any
- overlay starting or ending at POS."
- (let ((beg (overlay-start ovl))
- (end (overlay-end ovl)))
- (cond ((and (= beg pos) (= end pos))
- ;; Do the Right Thing for zero-width overlays
- (case type
- ((nil) (and (overlay-get ovl 'beg-sticky)
- (overlay-get ovl 'end-sticky)))
- ((none) nil)
- (t t)))
- ((= beg pos)
- (case type
- ((nil) (overlay-get ovl 'beg-sticky))
- ((beg all) t)
- (t nil)))
- ((= end pos)
- (case type
- ((nil) (overlay-get ovl 'end-sticky))
- ((end all) t)
- (t nil)))
- ((and (> end pos) (< beg pos))
- t))))
-
-;;; `mmm-overlays-in' has been retired as altogether too confusing a
-;;; name, when what is really meant is one of the following three:
-
-(defun mmm-overlays-containing (start stop)
- "Return all MMM overlays containing the region START to STOP.
-The overlays are returned in order of decreasing priority. No
-attention is paid to stickiness."
- (mmm-sort-overlays
- (remove-if-not
- #'(lambda (ovl)
- (and (overlay-get ovl 'mmm)
- (<= (overlay-start ovl) start)
- (>= (overlay-end ovl) stop)))
- (overlays-in (max start (point-min))
- (min stop (point-max))))))
-
-(defun mmm-overlays-contained-in (start stop)
- "Return all MMM overlays entirely contained in START to STOP.
-The overlays are returned in order of decreasing priority. No
-attention is paid to stickiness."
- (mmm-sort-overlays
- (remove-if-not
- #'(lambda (ovl)
- (and (overlay-get ovl 'mmm)
- (>= (overlay-start ovl) start)
- (<= (overlay-end ovl) stop)))
- (overlays-in (max start (point-min))
- (min stop (point-max))))))
-
-(defun mmm-overlays-overlapping (start stop)
- "Return all MMM overlays overlapping the region START to STOP.
-The overlays are returned in order of decreasing priority. No
-attention is paid to stickiness."
- (mmm-sort-overlays
- (remove-if-not
- #'(lambda (ovl)
- (overlay-get ovl 'mmm))
- (overlays-in (max start (point-min))
- (min stop (point-max))))))
-
-(defun mmm-sort-overlays (overlays)
- "Sort OVERLAYS in order of decreasing priority."
- (sort (copy-list overlays)
- #'(lambda (x y) (> (or (overlay-get x 'priority) 0)
- (or (overlay-get y 'priority) 0)))))
-
-;;}}}
-;;{{{ Current Submode
-
-(defvar mmm-current-overlay nil
- "What submode region overlay we think we are currently in.
-May be out of date; call `mmm-update-current-submode' to correct it.")
-(make-variable-buffer-local 'mmm-current-overlay)
-
-(defvar mmm-previous-overlay nil
- "What submode region overlay we were in just before this one.
-Set by `mmm-update-current-submode'.")
-(make-variable-buffer-local 'mmm-previous-overlay)
-
-(defvar mmm-current-submode nil
- "What submode we think we are currently in.
-May be out of date; call `mmm-update-current-submode' to correct it.")
-(make-variable-buffer-local 'mmm-current-submode)
-
-(defvar mmm-previous-submode nil
- "What submode we were in just before this one.
-Set by `mmm-update-current-submode'.")
-(make-variable-buffer-local 'mmm-previous-submode)
-
-(defun mmm-update-current-submode (&optional pos)
- "Update current and previous position variables to POS, or point.
-Return non-nil if the current region changed.
-
-Also deletes overlays that ought to evaporate because their delimiters
-have disappeared."
- (mapc #'delete-overlay
- (remove-if #'(lambda (ovl)
- (or (not (eq (overlay-get ovl 'mmm-evap) 'front))
- (overlay-buffer (overlay-get ovl 'front))))
- (mmm-overlays-at pos)))
- (let ((ovl (mmm-overlay-at pos)))
- (if (eq ovl mmm-current-overlay)
- nil
- (setq mmm-previous-overlay mmm-current-overlay
- mmm-previous-submode mmm-current-submode)
- (setq mmm-current-overlay ovl
- mmm-current-submode (if ovl (overlay-get ovl 'mmm-mode)))
- t)))
-
-;; This function is, I think, mostly for hacking font-lock.
-(defun mmm-set-current-submode (mode &optional pos)
- "Set the current submode to MODE and the current region to whatever
-region of that mode is present at POS, or nil if none."
- (setq mmm-previous-overlay mmm-current-overlay
- mmm-previous-submode mmm-current-submode)
- (setq mmm-current-submode mode
- mmm-current-overlay
- (find-if #'(lambda (ovl)
- (eq (overlay-get ovl 'mmm-mode) mode))
- (mmm-overlays-at (or pos (point)) 'all))))
-
-(defun mmm-submode-at (&optional pos type)
- "Return the submode at POS \(or point), or NIL if none.
-See `mmm-included-p' for values of TYPE."
- (let ((ovl (mmm-overlay-at pos type)))
- (if ovl (overlay-get ovl 'mmm-mode))))
-
-;;}}}
-;;{{{ Delimiter Matching and Boundaries
-
-(defun mmm-match-front (ovl)
- "Return non-nil if the front delimiter of OVL matches as it should.
-Sets the match data to the front delimiter, if it is a regexp.
-Otherwise, calls it as a function with point at the beginning of the
-front delimiter overlay \(i.e. where the front delimiter ought to
-start) and one argument being the region overlay. The function should
-return non-nil if the front delimiter matches correctly, and set the
-match data appropriately."
- (let* ((front-ovl (overlay-get ovl 'front))
- (front (if front-ovl (overlay-get front-ovl 'match))))
- (when front
- (save-excursion
- (goto-char (overlay-start front-ovl))
- (if (stringp front)
- ;; It's a regexp
- (looking-at front)
- ;; It's a function
- (funcall front ovl))))))
-
-(defun mmm-match-back (ovl)
- "Return non-nil if the back delimiter of OVL matches as it should.
-Sets the match data to the back delimiter, if it is a regexp.
-Otherwise, calls it as a function with point at the beginning of the
-back delimiter overlay \(i.e. where the back delimiter ought to start)
-and one argument being the region overlay. The function should return
-non-nil if the back delimiter matches correctly, and set the match
-data appropriately."
- (let* ((back-ovl (overlay-get ovl 'back))
- (back (if back-ovl (overlay-get back-ovl 'match))))
- (when back
- (save-excursion
- (goto-char (overlay-start back-ovl))
- (if (stringp back)
- ;; It's a regexp
- (looking-at back)
- ;; It's a function
- (funcall back ovl))))))
-
-(defun mmm-front-start (ovl)
- "Return the position at which the front delimiter of OVL starts."
- (let ((front (overlay-get ovl 'front)))
- ;; Overlays which have evaporated become "overlays in no buffer"
- (if (and front (overlay-buffer front))
- (overlay-start front)
- (overlay-start ovl))))
-
-(defun mmm-back-end (ovl)
- "Return the position at which the back delimiter of OVL ends."
- (let ((back (overlay-get ovl 'back)))
- ;; Overlays which have evaporated become "overlays in no buffer"
- (if (and back (overlay-buffer back))
- (overlay-end back)
- (overlay-end ovl))))
-
-;;}}}
-
-;; CREATION & DELETION
-;;{{{ Make Submode Regions
-
-(defun mmm-valid-submode-region (submode beg end)
- "Check if the region between BEG and END is valid for SUBMODE.
-This region must be entirely contained within zero or more existing
-submode regions, none of which start or end inside it, and it must be
-a valid child of the highest-priority of those regions, if any.
-Signals errors, returns `t' if no error."
- ;; First check if the placement is valid. Every existing region
- ;; that overlaps this one must contain it in its entirety.
- (let ((violators (set-difference
- (mmm-overlays-overlapping beg end)
- (mmm-overlays-containing beg end))))
- (if violators
- (signal 'mmm-subregion-invalid-placement
- violators)))
- ;; Now check if it is inside a valid parent
- (let ((parent-mode (mmm-submode-at beg 'beg)))
- (and parent-mode
- ;; TODO: Actually check parents here. For present purposes,
- ;; we just make sure we aren't putting a submode inside one
- ;; of the same type. Actually, what we should really be
- ;; doing is checking classes/names of regions, not just the
- ;; submodes.
- (eq submode parent-mode)
- (signal 'mmm-subregion-invalid-parent
- (list parent-mode))))
- t)
-
-(defun* mmm-make-region
- (submode beg end &key face
- front back (evaporation 'front)
- delimiter-mode front-face back-face
- display-name
- (match-front "") (match-back "")
- (beg-sticky t) (end-sticky t)
- name creation-hook
- )
- "Make a submode region from BEG to END of SUBMODE.
-
-BEG and END are buffer positions or markers with BEG <= END \(although
-see EVAPORATION below). SUBMODE is a major mode function or a valid
-argument to `mmm-modename->function'. FACE is a valid display face.
-
-FRONT and BACK specify the positions of the front and back delimiters
-for this region, if any. If FRONT is a buffer position or marker, the
-front delimiter runs from it to BEG. FRONT can also be a two-element
-list \(FRONT-BEG FRONT-END) specifying the exact position of the front
-delimiter. One must have FRONT-BEG < FRONT-END <= BEG.
-
-Similarly, BACK may be a buffer position or marker, in which case the
-back delimiter runs from END to BACK. BACK can also be a two-element
-list \(BACK-BEG BACK-END) specifying the exact position, in which case
-we must have END <= BACK-BEG < BACK-END.
-
-EVAPORATION specifies under what conditions this submode region should
-disappear.
-* If `nil', the region never disappears. This can cause serious
- problems when using cut-and-paste and is not recommended.
-* If the value is t, the region disappears whenever it has zero
- length. This is recommended for manually created regions used for
- temporary editing convenience.
-* If the value is `front', the region will disappear whenever the text
- in its front delimiter disappears, that is, whenever the overlay
- which marks its front delimiter has zero width.
-The default value is `front'. However, if the parameter FRONT is nil,
-then this makes no sense, so the default becomes `t'. Note that if
-EVAPORATION is `t', then an error is signalled if BEG = END.
-
-MATCH-FRONT \(resp. MATCH-BACK) is a regexp or function to match the
-correct delimiters, see `mmm-match-front' \(resp. `mmm-match-back').
-It is ignored if FRONT \(resp. BACK) is nil. At present these are not
-used much.
-
-DELIMITER-MODE specifies the major mode to use for delimiter regions.
-A `nil' value means they remain in the primary mode.
-
-FACE, FRONT-FACE, and BACK-FACE, are faces to use for the region, the
-front delimiter, and the back delimiter, respectively, under high
-decoration \(see `mmm-submode-decoration-level').
-
-BEG-STICKY and END-STICKY determine whether the front and back of the
-region, respectively, are sticky with respect to new insertion. The
-default is yes.
-
-NAME is a string giving the \"name\" of this submode region. Submode
-regions with the same name are considered part of the same code
-fragment and formatted accordingly.
-
-DISPLAY-NAME is a string to display in the mode line when point is in
-this submode region. If nil or not given, the name associated with
-SUBMODE is used. In delimiter regions, \"--\" is shown.
-
-CREATION-HOOK should be a function to run after the region is created,
-with point at the start of the new region."
- ;; Check placement of region and delimiters
- (unless (if (eq evaporation t)
- (< beg end)
- (<= beg end))
- (signal 'mmm-subregion-invalid-placement (list beg end)))
- (when front
- (unless (listp front)
- (setq front (list front beg)))
- (unless (and (< (car front) (cadr front))
- (<= (cadr front) beg))
- (signal 'mmm-subregion-invalid-placement front)))
- (when back
- (unless (listp back)
- (setq back (list end back)))
- (unless (and (< (car back) (cadr back))
- (<= end (car back)))
- (signal 'mmm-subregion-invalid-placement back)))
- (setq submode (mmm-modename->function submode))
- ;; Check embedding in existing regions
- (mmm-valid-submode-region submode beg end)
- (mmm-mode-on)
- (when submode
- (mmm-update-mode-info submode))
- (and (not front) (eq evaporation 'front) (setq evaporation t))
- (let ((region-ovl
- (mmm-make-overlay submode beg end name face beg-sticky end-sticky
- (or (eq evaporation t) nil) display-name)))
- ;; Save evaporation type for checking later
- (overlay-put region-ovl 'mmm-evap evaporation)
- ;; Calculate priority to supersede anything already there.
- (overlay-put region-ovl 'priority (length (mmm-overlays-at beg)))
- ;; Make overlays for the delimiters, with appropriate pointers.
- (when front
- (let ((front-ovl
- (mmm-make-overlay delimiter-mode (car front) (cadr front)
- nil front-face nil nil t "--" t)))
- (overlay-put region-ovl 'front front-ovl)
- (overlay-put front-ovl 'region region-ovl)
- (overlay-put front-ovl 'match match-front)))
- (when back
- (let ((back-ovl
- (mmm-make-overlay delimiter-mode (car back) (cadr back)
- nil back-face nil nil t "--" t)))
- (overlay-put region-ovl 'back back-ovl)
- (overlay-put back-ovl 'region region-ovl)
- (overlay-put back-ovl 'match match-back)))
- ;; Update everything and run all the hooks
- (mmm-save-all
- (goto-char (overlay-start region-ovl))
- (mmm-set-current-submode submode)
- (mmm-set-local-variables submode)
- (mmm-run-submode-hook submode)
- (when creation-hook
- (funcall creation-hook))
- (mmm-save-changed-local-variables region-ovl submode))
- (setq mmm-previous-submode submode
- mmm-previous-overlay region-ovl)
- (mmm-update-submode-region)
- region-ovl))
-
-(defun mmm-make-overlay (submode beg end name face beg-sticky end-sticky evap
- &optional display-name delim)
- "Internal function to make submode overlays.
-Does not handle delimiters. Use `mmm-make-region'."
- (let ((ovl (make-overlay beg end nil (not beg-sticky) end-sticky)))
- (mapc
- #'(lambda (pair) (overlay-put ovl (car pair) (cadr pair)))
- `((mmm t) ; Mark all submode overlays
- (mmm-mode ,submode)
- ,@(if delim '((delim t)) nil)
- (mmm-local-variables
- ;; Have to be careful to make new list structure here
- ,(list* (list 'font-lock-cache-state nil)
- (list 'font-lock-cache-position (make-marker))
- (copy-tree
- (cdr (assq submode mmm-region-saved-locals-defaults)))))
- (name ,name)
- (display-name ,display-name)
- ;; Need to save these, because there's no way of accessing an
- ;; overlay's official "front-advance" parameter once it's created.
- (beg-sticky ,beg-sticky)
- (end-sticky ,end-sticky)
- ;; These have special meaning to Emacs
- (,mmm-evaporate-property ,evap)
- (face ,(mmm-get-face face submode delim))
- ))
- ovl))
-
-(defun mmm-get-face (face submode &optional delim)
- (cond ((= mmm-submode-decoration-level 0) nil)
- ((and (= mmm-submode-decoration-level 2) face) face)
- (delim 'mmm-delimiter-face)
- (submode 'mmm-default-submode-face)))
-
-;;}}}
-;;{{{ Clear Overlays
-
-;; See also `mmm-clear-current-region'.
-
-(defun mmm-clear-overlays (&optional start stop strict)
- "Clears all MMM overlays overlapping START and STOP.
-If STRICT, only clear those entirely included in that region."
- (mapc #'delete-overlay
- (if strict
- (mmm-overlays-contained-in (or start (point-min))
- (or stop (point-max)))
- (mmm-overlays-overlapping (or start (point-min))
- (or stop (point-max)))))
- (mmm-update-submode-region))
-
-;;}}}
-
-;; BASIC UPDATING
-;;{{{ Submode Info
-
-(defun mmm-update-mode-info (mode &optional force)
- "Save the global-saved and buffer-saved variables for MODE.
-Global saving is done on properties of the symbol MODE and buffer
-saving in `mmm-buffer-saved-locals'. This function must be called for
-both the dominant mode and all submodes, in each file. Region-saved
-variables are initialized from `mmm-region-saved-locals-defaults',
-which is set here as well. See `mmm-save-local-variables'. If FORCE
-is non-nil, don't quit if the info is already there."
- (let ((buffer-entry (assq mode mmm-buffer-saved-locals))
- (region-entry (assq mode mmm-region-saved-locals-defaults))
- global-vars buffer-vars region-vars
- ;; kludge for XEmacs 20
- (html-helper-build-new-buffer nil))
- (unless (and (not force)
- (get mode 'mmm-local-variables)
- buffer-entry
- region-entry)
- (save-excursion
- (let ((filename (buffer-file-name)))
- ;; On errors, the temporary buffers don't get deleted, so here
- ;; we get rid of any old ones that may be hanging around.
- (when (buffer-live-p (get-buffer mmm-temp-buffer-name))
- (with-current-buffer (get-buffer mmm-temp-buffer-name)
- (set-buffer-modified-p nil)
- (kill-buffer (current-buffer))))
- ;; Now make a new temporary buffer.
- (set-buffer (mmm-make-temp-buffer (current-buffer)
- mmm-temp-buffer-name))
- ;; Handle stupid modes that need the file name set
- (if (memq mode mmm-set-file-name-for-modes)
- (setq buffer-file-name filename)))
- (funcall mode)
- (when (featurep 'font-lock)
- ;; XEmacs doesn't have global-font-lock-mode (or rather, it
- ;; has nothing but global-font-lock-mode).
- (when (or mmm-xemacs
- ;; Code copied from font-lock.el to detect when font-lock
- ;; should be on via global-font-lock-mode.
- (and (or font-lock-defaults
- (with-no-warnings
- (assq major-mode font-lock-defaults-alist))
- (assq major-mode font-lock-keywords-alist))
- (or (eq font-lock-global-modes t)
- (if (eq (car-safe font-lock-global-modes) 'not)
- (not (memq major-mode
- (cdr font-lock-global-modes)))
- (memq major-mode font-lock-global-modes)))))
- ;; Don't actually fontify in the temp buffer, but note
- ;; that we should fontify when we use this mode.
- (put mode 'mmm-font-lock-mode t))
- ;; Get the font-lock variables
- (when mmm-font-lock-available-p
- ;; To fool `font-lock-add-keywords'
- (let ((font-lock-mode t))
- (mmm-set-font-lock-defaults)))
- ;; These can't be in the local variables list, because we
- ;; replace their actual values, but we want to use their
- ;; original values elsewhere.
- (unless (and mmm-xemacs (= emacs-major-version 20))
- ;; XEmacs 20 doesn't have this variable. This effectively
- ;; prevents the MMM font-lock support from working, but we
- ;; just ignore it and go on, to prevent an error message.
- (put mode 'mmm-fontify-region-function
- font-lock-fontify-region-function))
- (put mode 'mmm-beginning-of-syntax-function
- ;font-lock-beginning-of-syntax-function))
- syntax-begin-function))
- ;; Get variables
- (setq global-vars (mmm-get-locals 'global)
- buffer-vars (mmm-get-locals 'buffer)
- region-vars (mmm-get-locals 'region))
- (put mode 'mmm-mode-name mode-name)
- (set-buffer-modified-p nil)
- (kill-buffer (current-buffer)))
- (put mode 'mmm-local-variables global-vars)
- (if buffer-entry
- (setcdr buffer-entry buffer-vars)
- (push (cons mode buffer-vars) mmm-buffer-saved-locals))
- (if region-entry
- (setcdr region-entry region-vars)
- (push (cons mode region-vars)
- mmm-region-saved-locals-defaults)))))
-
-;;}}}
-;;{{{ Updating Hooks
-
-(defun mmm-update-submode-region ()
- "Update all MMM properties correctly for the current position.
-This function and those it calls do the actual work of setting the
-different keymaps, syntax tables, local variables, etc. for submodes."
- (when (mmm-update-current-submode)
- (mmm-save-changed-local-variables mmm-previous-overlay
- mmm-previous-submode)
- (let ((mode (or mmm-current-submode mmm-primary-mode)))
- (mmm-update-mode-info mode)
- (mmm-set-local-variables mode)
- (mmm-enable-font-lock mode))
- (mmm-set-mode-line)
- (dolist (func (if mmm-current-overlay
- (overlay-get mmm-current-overlay 'entry-hook)
- mmm-primary-mode-entry-hook))
- (ignore-errors (funcall func)))))
-
-(defun mmm-add-hooks ()
- (add-hook 'post-command-hook 'mmm-update-submode-region nil 'local))
-
-(defun mmm-remove-hooks ()
- (remove-hook 'post-command-hook 'mmm-update-submode-region 'local))
-
-;;}}}
-;;{{{ Local Variables
-
-(defun mmm-get-local-variables-list (type mode)
- "Filter `mmm-save-local-variables' to match TYPE and MODE.
-Return a list \(VAR ...). In some cases, VAR will be a cons cell
-\(GETTER . SETTER) -- see `mmm-save-local-variables'."
- (mapcan #'(lambda (element)
- (and (if (and (consp element)
- (cdr element)
- (cadr element))
- (eq (cadr element) type)
- (eq type 'global))
- (if (and (consp element)
- (cddr element)
- (not (eq (caddr element) t)))
- (if (functionp (caddr element))
- (funcall (caddr element))
- (member mode (caddr element)))
- t)
- (list (if (consp element) (car element) element))))
- mmm-save-local-variables))
-
-(defun mmm-get-locals (type)
- "Get the local variables and values for TYPE from this buffer.
-Return \((VAR VALUE) ...). In some cases, VAR will be of the form
-\(GETTER . SETTER) -- see `mmm-save-local-variables'."
- (mapcan #'(lambda (var)
- (if (consp var)
- `((,var ,(funcall (car var))))
- (and (boundp var)
- ;; This seems logical, but screws things up.
- ;;(local-variable-p var)
- `((,var ,(symbol-value var))))))
- (mmm-get-local-variables-list type major-mode)))
-
-(defun mmm-get-saved-local (mode var)
- "Get the value of the local variable VAR saved for MODE, if any."
- (cadr (assq var (mmm-get-saved-local-variables mode))))
-
-(defun mmm-set-local-variables (mode)
- "Set all the local variables saved for MODE.
-Looks up both global, buffer, and region saves."
- (mapcar #'(lambda (var)
- ;; (car VAR) may be (GETTER . SETTER)
- (if (consp (car var))
- (funcall (cdar var) (cadr var))
- (make-local-variable (car var))
- (set (car var) (cadr var))))
- (mmm-get-saved-local-variables mode)))
-
-(defun mmm-get-saved-local-variables (mode)
- (append (get mode 'mmm-local-variables)
- (cdr (assq mode mmm-buffer-saved-locals))
- (let ((ovl (mmm-overlay-at (point))))
- (if ovl
- (overlay-get ovl 'mmm-local-variables)
- mmm-region-saved-locals-for-dominant))))
-
-(defun mmm-save-changed-local-variables (ovl mode)
- "Save by-buffer and by-region variables for OVL and MODE.
-Called when we move to a new submode region, with OVL and MODE the
-region and mode for the previous position."
- (let ((buffer-vars (cdr (assq (or mode mmm-primary-mode)
- mmm-buffer-saved-locals)))
- (region-vars (if ovl
- (overlay-get ovl 'mmm-local-variables)
- mmm-region-saved-locals-for-dominant))
- (set-local-value
- #'(lambda (var)
- (setcar (cdr var)
- ;; (car VAR) may be (GETTER . SETTER)
- (if (consp (car var))
- (funcall (caar var))
- (symbol-value (car var)))))))
- (mapc set-local-value buffer-vars)
- (mapc set-local-value region-vars)))
-
-(defun mmm-clear-local-variables ()
- "Clear all buffer- and region-saved variables for current buffer."
- (setq mmm-buffer-saved-locals ()
- mmm-region-saved-locals-defaults ()
- mmm-region-saved-locals-for-dominant ()))
-
-;;}}}
-
-;; FONT LOCK
-;;{{{ Enable Font Lock
-
-(defun mmm-enable-font-lock (mode)
- "Turn on font lock if it is not already on and MODE enables it."
- (mmm-update-mode-info mode)
- (and mmm-font-lock-available-p
- (not font-lock-mode)
- (get mode 'mmm-font-lock-mode)
- (font-lock-mode 1)))
-
-(defun mmm-update-font-lock-buffer ()
- "Turn on font lock iff any mode in the buffer enables it."
- (when mmm-font-lock-available-p
- (if (some #'(lambda (mode)
- (get mode 'mmm-font-lock-mode))
- (cons mmm-primary-mode
- (mapcar #'(lambda (ovl)
- (overlay-get ovl 'mmm-mode))
- (mmm-overlays-overlapping
- (point-min) (point-max)))))
- (font-lock-mode 1)
- (font-lock-mode 0))))
-
-(defun mmm-refontify-maybe (&optional start stop)
- "Re-fontify from START to STOP, or entire buffer, if enabled."
- (and font-lock-mode
- (if (or start stop)
- (font-lock-fontify-region (or start (point-min))
- (or stop (point-max)))
- (font-lock-fontify-buffer))))
-
-;;}}}
-;;{{{ Get Submode Regions
-
-;;; In theory, these are general functions that have nothing to do
-;;; with font-lock, but they aren't used anywhere else, so we might as
-;;; well have them close.
-
-(defun mmm-submode-changes-in (start stop)
- "Return a list of all submode-change positions from START to STOP.
-The list is sorted in order of increasing buffer position."
- (sort (remove-duplicates
- (list* start stop
- (mapcan #'(lambda (ovl)
- `(,(overlay-start ovl)
- ,(overlay-end ovl)))
- (mmm-overlays-overlapping start stop))))
- #'<))
-
-(defun mmm-regions-in (start stop &optional flag delim)
- "Return a list of regions of the form (MODE BEG END) whose disjoint
-union covers the region from START to STOP, including delimiters."
- (let ((regions
- (maplist #'(lambda (pos-list)
- (if (cdr pos-list)
- (list (or (mmm-submode-at (car pos-list) 'beg)
- mmm-primary-mode)
- (car pos-list) (cadr pos-list))))
- (mmm-submode-changes-in start stop))))
- (setcdr (last regions 2) nil)
- regions))
-
-
-(defun mmm-regions-alist (start stop)
- "Return a list of lists of the form \(MODE . REGIONS) where REGIONS
-is a list of elements of the form \(BEG END). The disjoint union all
-of the REGIONS covers START to STOP."
- (let ((regions (mmm-regions-in start stop)))
- (mapcar #'(lambda (mode)
- (cons mode
- (mapcan #'(lambda (region)
- (if (eq mode (car region))
- (list (cdr region))))
- regions)))
- ;; All the modes
- (remove-duplicates (mapcar #'car regions)))))
-
-;;}}}
-;;{{{ Fontify Regions
-
-(defun mmm-fontify-region (start stop &optional loudly)
- "Fontify from START to STOP keeping track of submodes correctly."
- (when loudly
- (message "Fontifying %s with submode regions..." (buffer-name)))
- ;; Necessary to catch changes in font-lock cache state and position.
- (mmm-save-changed-local-variables
- mmm-current-overlay mmm-current-submode)
- ;; For some reason `font-lock-fontify-block' binds this to nil, thus
- ;; preventing `mmm-beginning-of-syntax' from doing The Right Thing.
- ;; I don't know why it does this, but let's undo it here.
- (let ((;font-lock-beginning-of-syntax-function
- syntax-begin-function 'mmm-beginning-of-syntax))
- (mapc #'(lambda (elt)
- (when (get (car elt) 'mmm-font-lock-mode)
- (mmm-fontify-region-list (car elt) (cdr elt))))
- (mmm-regions-alist start stop)))
- ;; With jit-lock, this causes blips in the mode line and menus.
- ;; Shouldn't be necessary here, since it's in post-command-hook too.
- ;;(mmm-update-submode-region)
- (when loudly (message nil)))
-
-(defun mmm-fontify-region-list (mode regions)
- "Fontify REGIONS, each like \(BEG END), in mode MODE."
- (save-excursion
- (let (;(major-mode mode)
- (func (get mode 'mmm-fontify-region-function)))
- (mapc #'(lambda (reg)
- (goto-char (car reg))
- ;; Here we do the same sort of thing that
- ;; `mmm-update-submode-region' does, but we force it
- ;; to use a specific mode, and don't save anything,
- ;; fontify, or change the mode line.
- (mmm-set-current-submode mode)
- (mmm-set-local-variables mode)
- (funcall func (car reg) (cadr reg) nil)
- ;; Catch changes in font-lock cache.
- (mmm-save-changed-local-variables
- mmm-current-overlay mmm-current-submode))
- regions))))
-
-;;}}}
-;;{{{ Beginning of Syntax
-
-(defun mmm-beginning-of-syntax ()
- (goto-char
- (let ((ovl (mmm-overlay-at (point)))
- (func (get (or mmm-current-submode mmm-primary-mode)
- 'mmm-beginning-of-syntax-function)))
- (max (if ovl (overlay-start ovl) (point-min))
- (if func (progn (funcall func) (point)) (point-min))
- (point-min)))))
-
-;;}}}
-
-(provide 'mmm-region)
-
-;;; mmm-region.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-rpm.el b/contrib/mmm/mmm-rpm.el
deleted file mode 100644
index 0661e1ad..00000000
--- a/contrib/mmm/mmm-rpm.el
+++ /dev/null
@@ -1,81 +0,0 @@
-;;; mmm-rpm.el --- MMM submode class for RPM spec files
-
-;; Copyright (C) 2000 by Marcus Harnisch <Marcus.Harnisch@gmx.net>
-
-;; Author: Marcus Harnisch <Marcus.Harnisch@gmx.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains the definition of an MMM Mode submode class for
-;; editing shell script sections within RPM (Redhat Package Manager)
-;; spec files. I recommend to use it in combination with
-;; rpm-spec-mode.el by Stig Bjørlykke <stigb@tihlde.hist.no> and Steve
-;; Sanbeg <sanbeg@dset.com> (http://www.xemacs.org/~stigb/rpm-spec-mode.el)
-
-;;; Installation:
-
-;; 1. Copy this file where Emacs can find it.
-;;
-;; 2. Add the following lines to one of your startup files (e.g. ~/.emacs):
-;;
-;; (add-to-list 'mmm-mode-ext-classes-alist
-;; '(rpm-spec-mode "\\.spec\\'" rpm-sh))
-
-;;; Code:
-
-(require 'mmm-auto)
-
-(defconst mmm-rpm-sh-start-tags
- '("prep" "build" "install" "clean" "preun" "postun" "pre"
- "post" "triggerin" "triggerun" "triggerpostun")
- "List containing RPM tags that start a shell-script section in a spec file")
-
-(defvar mmm-rpm-sh-end-tags
- (append '("files" "description" "package") mmm-rpm-sh-start-tags)
- "List containing RPM tags that end a shell-script section in a spec file")
-
-(defvar mmm-rpm-sh-start-regexp
- (concat "^%" (mmm-regexp-opt mmm-rpm-sh-start-tags t) "\\b.*$")
- "Regexp matching RPM tags that start a shell-script section in a spec file")
-
-(defvar mmm-rpm-sh-end-regexp
- (concat "\\'\\|^%" (mmm-regexp-opt mmm-rpm-sh-end-tags t) "\\b.*$")
- "Regexp matching RPM tags that end a shell-script section in a spec file")
-
-(mmm-add-group
- 'rpm
- `((rpm-sh
- :submode sh-mode
- :face mmm-code-submode-face
- ;; match tags that starts sh-script region
- :front ,mmm-rpm-sh-start-regexp
- ;; match end of buffer or next tag that ends sh-script region
- :back ,mmm-rpm-sh-end-regexp
- :front-offset 1
- :back-offset 0
- :save-matches 0
- )))
-
-(provide 'mmm-rpm)
-
-;;; mmm-rpm.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-sample.el b/contrib/mmm/mmm-sample.el
deleted file mode 100644
index daf663c4..00000000
--- a/contrib/mmm/mmm-sample.el
+++ /dev/null
@@ -1,374 +0,0 @@
-;;; mmm-sample.el --- Sample MMM submode classes
-
-;; Copyright (C) 2003, 2004 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file contains several sample submode classes for use with MMM
-;; Mode. For a more detailed and useful example, see `mmm-mason.el'.
-
-;;; Code:
-
-(require 'mmm-auto)
-(require 'mmm-vars)
-
-;;{{{ CSS embedded in HTML
-
-;; This is the simplest example. Many applications will need no more
-;; than a simple regexp.
-(mmm-add-classes
- '((embedded-css
- :submode css
- :face mmm-declaration-submode-face
- :delimiter-mode nil
- :front "<style[^>]*>"
- :back "</style>")))
-
-;;}}}
-;;{{{ Javascript in HTML
-
-;; We use two classes here, one for code in a <script> tag and another
-;; for code embedded as a property of an HTML tag, then another class
-;; to group them together.
-(mmm-add-group
- 'html-js
- '((js-tag
- :submode javascript
- :face mmm-code-submode-face
- :delimiter-mode nil
- :front "<script\[^>\]*\\(language=\"javascript\\([0-9.]*\\)\"\\|type=\"text/javascript\"\\)\[^>\]*>"
- :back"</script>"
- :insert ((?j js-tag nil @ "<script language=\"JavaScript\">"
- @ "\n" _ "\n" @ "</script>" @))
- )
- (js-inline
- :submode javascript
- :face mmm-code-submode-face
- :delimiter-mode nil
- :front "on\\w+=\""
- :back "\"")))
-
-;;}}}
-;;{{{ Here-documents
-
-;; Here we match the here-document syntax used by Perl and shell
-;; scripts. We try to be automagic about recognizing what mode the
-;; here-document should be in. To make sure that it is recognized
-;; correctly, the name of the mode, perhaps minus `-mode', in upper
-;; case, and/or with hyphens converted to underscores, should be
-;; separated from the rest of the here-document name by hyphens or
-;; underscores.
-
-(defvar mmm-here-doc-mode-alist '()
- "Alist associating here-document name regexps to submodes.
-Normally, this variable is unnecessary, as the `here-doc' submode
-class tries to automagically recognize the right submode. If you use
-here-document names that it doesn't recognize, however, then you can
-add elements to this alist. Each element is \(REGEXP . MODE) where
-REGEXP is a regular expression matched against the here-document name
-and MODE is a major mode function symbol.")
-
-(defun mmm-here-doc-get-mode (string)
- (string-match "[a-zA-Z_-]+" string)
- (setq string (match-string 0 string))
- (or (mmm-ensure-modename
- ;; First try the user override variable.
- (some #'(lambda (pair)
- (if (string-match (car pair) string) (cdr pair) nil))
- mmm-here-doc-mode-alist))
- (let ((words (split-string (downcase string) "[_-]+")))
- (or (mmm-ensure-modename
- ;; Try the whole name, stopping at "mode" if present.
- (intern
- (mapconcat #'identity
- (nconc (ldiff words (member "mode" words))
- (list "mode"))
- "-")))
- ;; Try each word by itself (preference list)
- (some #'(lambda (word)
- (mmm-ensure-modename (intern word)))
- words)
- ;; Try each word with -mode tacked on
- (some #'(lambda (word)
- (mmm-ensure-modename
- (intern (concat word "-mode"))))
- words)
- ;; Try each pair of words with -mode tacked on
- (loop for (one two) on words
- if (mmm-ensure-modename
- (intern (concat one two "-mode")))
- return it)
- ;; I'm unaware of any modes whose names, minus `-mode',
- ;; are more than two words long, and if the entire mode
- ;; name (perhaps minus `-mode') doesn't occur in the
- ;; here-document name, we can give up.
- (signal 'mmm-no-matching-submode nil)))))
-
-(mmm-add-classes
- '((here-doc
- :front "<<[\"\'\`]?\\([a-zA-Z0-9_-]+\\)"
- :front-offset (end-of-line 1)
- :back "^~1$"
- :save-matches 1
- :delimiter-mode nil
- :match-submode mmm-here-doc-get-mode
- :insert ((?d here-doc "Here-document Name: " @ "<<" str _ "\n"
- @ "\n" @ str "\n" @))
- )))
-
-;;}}}
-;;{{{ Embperl
-
-(mmm-add-group
- 'embperl
- '((embperl-perl
- :submode perl
- :front "\\[\\([-\\+!\\*\\$]\\)"
- :back "~1\\]"
- :save-matches 1
- :match-name "embperl"
- :match-face (("[+" . mmm-output-submode-face)
- ("[-" . mmm-code-submode-face)
- ("[!" . mmm-init-submode-face)
- ("[*" . mmm-code-submode-face)
- ("[$" . mmm-special-submode-face))
- :insert ((?p embperl "Region Type (Character): " @ "[" str
- @ " " _ " " @ str "]" @)
- (?+ embperl+ ?p . "+")
- (?- embperl- ?p . "-")
- (?! embperl! ?p . "!")
- (?* embperl* ?p . "*")
- (?$ embperl$ ?p . "$")
- )
- )
- (embperl-comment
- :submode text-mode
- :face mmm-comment-submode-face
- :front "\\[#"
- :back "#\\]"
- :insert ((?# embperl-comment nil @ "[#" @ " " _ " " @ "#]" @))
- )))
-
-;;}}}
-;;{{{ ePerl
-
-(mmm-add-group
- 'eperl
- '((eperl-expr
- :submode perl
- :face mmm-output-submode-face
- :front "<:="
- :back ":>"
- :insert ((?= eperl-expr nil @ "<:=" @ " " _ " " @ ":>" @)))
- (eperl-code
- :submode perl
- :face mmm-code-submode-face
- :front "<:"
- :back "_?:>"
- :match-name "eperl"
- :insert ((?p eperl-code nil @ "<:" @ " " _ " " @ ":>" @)
- (?: eperl-code ?p . nil)
- (?_ eperl-code_ nil @ "<:" @ " " _ " " @ "_:>" @)))
- (eperl-comment
- :submode text
- :face mmm-comment-submode-face
- :front ":>//"
- :back "\n")
- ))
-
-;;}}}
-;;{{{ File Variables
-
-;; This submode class puts file local variable values, specified with
-;; a `Local Variables:' line as in (emacs)File Variables, into Emacs
-;; Lisp Mode. It is a good candidate to put in `mmm-global-classes'.
-
-(defun mmm-file-variables-verify ()
- ;; It would be nice to cache this somehow, which could be done in a
- ;; buffer-local variable with markers for positions, but the trick
- ;; is knowing when to expire the cache.
- (let ((bounds
- (save-excursion
- (save-match-data
- (goto-char (point-max))
- (backward-page)
- (and (re-search-forward "^\\(.*\\)Local Variables:" nil t)
- (list (match-string 1)
- (progn (end-of-line) (point))
- (and (search-forward
- (format "%sEnd:" (match-string 1))
- nil t)
- (progn (beginning-of-line)
- (point)))))))))
- (and bounds (caddr bounds)
- (save-match-data
- (string-match (format "^%s" (regexp-quote (car bounds)))
- (match-string 0)))
- (> (match-beginning 0) (cadr bounds))
- (< (match-end 0) (caddr bounds)))))
-
-(defun mmm-file-variables-find-back (bound)
- (forward-sexp)
- (if (> (point) bound)
- nil
- (looking-at "")))
-
-(mmm-add-classes
- '((file-variables
- :front ".+:"
- :front-verify mmm-file-variables-verify
- :back mmm-file-variables-find-back
- :submode emacs-lisp-mode
- :delimiter-mode nil
- )))
-
-;;}}}
-;;{{{ JSP Pages
-
-(mmm-add-group 'jsp
- `((jsp-comment
- :submode text-mode
- :face mmm-comment-submode-face
- :front "<%--"
- :back "--%>"
- :insert ((?- jsp-comment nil @ "<%--" @ " " _ " " @ "--%>" @))
- )
- (jsp-code
- :submode java
- :match-face (("<%!" . mmm-declaration-submode-face)
- ("<%=" . mmm-output-submode-face)
- ("<%" . mmm-code-submode-face))
- :front "<%[!=]?"
- :back "%>"
- :match-name "jsp"
- :insert ((?% jsp-code nil @ "<%" @ " " _ " " @ "%>" @)
- (?! jsp-declaration nil @ "<%!" @ " " _ " " @ "%>" @)
- (?= jsp-expression nil @ "<%=" @ " " _ " " @ "%>" @))
- )
- (jsp-directive
- :submode text-mode
- :face mmm-special-submode-face
- :front "<%@"
- :back "%>"
- :insert ((?@ jsp-directive nil @ "<%@" @ " " _ " " @ "%>" @))
- )))
-
-;;}}}
-;;{{{ SGML DTD
-
-;; Thanks to Yann Dirson <ydirson@fr.alcove.com> for writing and
-;; contributing this submode class.
-
-(mmm-add-classes
- '((sgml-dtd
- :submode dtd-mode
- :face mmm-declaration-submode-face
- :delimiter-mode nil
- :front "<! *doctype[^>[]*\\["
- :back "]>")))
-
-;;}}}
-;;{{{ <Perl> in httpd.conf
-
-(mmm-add-classes
- '((httpd-conf-perl
- :submode perl
- :delimiter-mode nil
- :front "<Perl>"
- :back "</Perl>")))
-
-;; Suggested Use:
-;; (mmm-add-mode-ext-class 'apache-generic-mode nil 'httpd-conf-perl)
-
-;;}}}
-;;{{{ PHP in HTML
-
-(mmm-add-group 'html-php
- '((html-php-output
- :submode php-mode
- :face mmm-output-submode-face
- :front "<\\?php *echo "
- :back "\\?>"
- :include-front t
- :front-offset 5
- :insert ((?e php-echo nil @ "<?php" @ " echo " _ " " @ "?>" @))
- )
- (html-php-code
- :submode php-mode
- :face mmm-code-submode-face
- :front "<\\?\\(php\\)?"
- :back "\\?>"
- :insert ((?p php-section nil @ "<?php" @ " " _ " " @ "?>" @)
- (?b php-block nil @ "<?php" @ "\n" _ "\n" @ "?>" @))
- )))
-
-;;}}}
-
-;; NOT YET UPDATED
-;;{{{ HTML in PL/SQL;-COM-
-;-COM-
-;-COM-;; This one is the most complex example. In PL/SQL, HTML is generally
-;-COM-;; output as a (single quote delimited) string inside a call to htp.p or
-;-COM-;; its brethren. The problem is that there may be strings outside of
-;-COM-;; htp.p calls that should not be HTML, so we need to only look inside
-;-COM-;; these calls. The situation is complicated by PL/SQL's rule that two
-;-COM-;; sequential single quotes in a string mean to put a single quote
-;-COM-;; inside the string.
-;-COM-
-;-COM-;; These functions have not been thoroughly tested, and always search
-;-COM-;; the entire buffer, ignoring START and END.
-;-COM-
-;-COM-(defun mmm-html-in-plsql (start end)
-;-COM- (save-match-data
-;-COM- (let ((case-fold-search t))
-;-COM- (and (re-search-forward "htp.p\\(\\|rn\\|rint\\)1?(" nil t)
-;-COM- (mmm-html-in-plsql-in-htp
-;-COM- ;; Find the end of the procedure call
-;-COM- (save-excursion (forward-char -1) (forward-sexp) (point))
-;-COM- start end)))))
-;-COM-
-;-COM-(defun mmm-html-in-plsql-in-htp (htp-end start end)
-;-COM- (let (beg end)
-;-COM- (or (and (re-search-forward "'" htp-end 'limit)
-;-COM- (setf beg (match-end 0))
-;-COM- ;; Find an odd number of 's to end the string.
-;-COM- (do ((lgth 0 (length (match-string 0))))
-;-COM- ((oddp lgth) t)
-;-COM- (re-search-forward "'+" nil t))
-;-COM- (setf end (1- (match-end 0)))
-;-COM- (cons (cons beg end)
-;-COM- (mmm-html-in-plsql-in-htp htp-end start end)))
-;-COM- ;; No more strings in the procedure call; look for another.
-;-COM- (and (eql (point) htp-end)
-;-COM- (mmm-html-in-plsql start end)))))
-;-COM-
-;-COM-(add-to-list 'mmm-classes-alist
-;-COM- '(htp-p (:function html-mode mmm-html-in-plsql)))
-;-COM-
-;;}}}
-
-(provide 'mmm-sample)
-
-;;; mmm-sample.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-univ.el b/contrib/mmm/mmm-univ.el
deleted file mode 100644
index 02504383..00000000
--- a/contrib/mmm/mmm-univ.el
+++ /dev/null
@@ -1,64 +0,0 @@
-;;; mmm-univ.el --- The "Universal" Submode Class
-
-;; Copyright (C) 2000 by Free Software Foundation, Inc.
-
-;; Author: Michael Abraham Shulman <mas@kurukshetra.cjb.net>
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file defines the "universal" submode class, the default value
-;; of `mmm-global-classes', which specifies a standard way to indicate
-;; that part of a buffer should be in a different mode--for example,
-;; in an email message.
-
-;;; Code:
-
-(require 'mmm-auto)
-(require 'mmm-vars)
-
-(defun mmm-univ-get-mode (string)
- (string-match "[a-zA-Z-]+" string)
- (setq string (match-string 0 string))
- (let ((modestr (intern (if (string-match "mode\\'" string)
- string
- (concat string "-mode")))))
- (or (mmm-ensure-modename modestr)
- (signal 'mmm-no-matching-submode nil))))
-
-(mmm-add-classes
- `((universal
- :front "{%\\([a-zA-Z-]+\\)%}"
- :back "{%/~1%}"
- :insert ((?/ universal "Submode: " @ "{%" str "%}" @ "\n" _ "\n"
- @ "{%/" str "%}" @))
- :match-submode mmm-univ-get-mode
- :save-matches 1
- )))
-
-(provide 'mmm-univ)
-
-
-;;; Local Variables:
-;;; mmm-global-classes: nil
-;;; End:
-
-;;; mmm-univ.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-utils.el b/contrib/mmm/mmm-utils.el
deleted file mode 100644
index bdb9704f..00000000
--- a/contrib/mmm/mmm-utils.el
+++ /dev/null
@@ -1,159 +0,0 @@
-;;; mmm-utils.el --- Coding Utilities for MMM Mode
-
-;; Copyright (C) 2000 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file provides a number of macros and other coding utilities
-;; for MMM Mode.
-
-;;; Code:
-
-(eval-when-compile
- (require 'cl))
-
-;;{{{ Valid Buffer
-
-;; We used to wrap almost everything in this, but I realized that
-;; only `mmm-mode-on' really needs it. Kept it as a macro, though,
-;; for modularity and in case we need it somewhere else.
-(defmacro mmm-valid-buffer (&rest body)
- "Execute BODY if in a valid buffer for MMM Mode to be enabled. This
-means not hidden, not a minibuffer, not in batch mode, and not in of
-`mmm-never-modes'."
- `(unless (or (eq (aref (buffer-name) 0) ?\ )
- (window-minibuffer-p (selected-window))
- (memq major-mode mmm-never-modes)
- noninteractive
- ;; Unnecessary as now hidden
-;;; (equal (buffer-name) mmm-temp-buffer-name)
- )
- ,@body))
-
-;;;(def-edebug-spec mmm-valid-buffer t)
-
-;;}}}
-;;{{{ Save Everything
-
-;; Never trust callback functions to preserve anything.
-(defmacro mmm-save-all (&rest body)
- "Execute BODY forms, then restoring point, mark, current buffer,
-restrictions, and match data."
- `(save-excursion
- (save-restriction
- (save-match-data
- ,@body))))
-
-;;;(def-edebug-spec mmm-save-all t)
-
-;;}}}
-;;{{{ String Formatting
-
-(defun mmm-format-string (string arg-pairs)
- "Format STRING by replacing arguments as specified by ARG-PAIRS.
-Each element of ARG-PAIRS is \(REGEXP . STR) where each STR is to be
-substituted for the corresponding REGEXP wherever it matches."
- (let ((case-fold-search nil))
- (save-match-data
- (dolist (pair arg-pairs)
- (while (string-match (car pair) string)
- (setq string (replace-match (cdr pair) t t string))))))
- string)
-
-(defun mmm-format-matches (string &optional on-string)
- "Format STRING by matches from the current match data.
-Strings like ~N are replaced by the Nth subexpression from the last
-global match. Does nothing if STRING is not a string.
-
-ON-STRING, if supplied, means to use the match data from a
-`string-match' on that string, rather than the global match data."
- (when (stringp string)
- (let ((old-data (match-data))
- subexp)
- (save-match-data
- (while (string-match "~\\([0-9]\\)" string)
- (setq subexp (string-to-number (match-string-no-properties 1 string))
- string (replace-match
- (save-match-data
- (set-match-data old-data)
- (match-string-no-properties subexp on-string))
- t t string))))))
- string)
-
-;;}}}
-;;{{{ Save Keywords
-
-(defmacro mmm-save-keyword (param)
- "If the value of PARAM as a variable is non-nil, return the list
-\(:PARAM (symbol-value PARAM)), otherwise NIL. Best used only when it
-is important that nil values disappear."
- `(if (and (boundp ',param) ,param)
- (list (intern (concat ":" (symbol-name ',param))) ,param)
- nil))
-
-(defmacro mmm-save-keywords (&rest params)
- "Return a list saving the non-nil elements of PARAMS. E.g.
-\(let \(\(a 1) \(c 2)) \(mmm-save-keywords a b c)) ==> \(:a 1 :c 2)
-Use of this macro can make code more readable when there are a lot of
-PARAMS, but less readable when there are only a few. Also best used
-only when it is important that nil values disappear."
- `(append ,@(mapcar #'(lambda (param)
- (macroexpand `(mmm-save-keyword ,param)))
- params)))
-
-;;}}}
-;;{{{ Looking Back At
-
-(defun mmm-looking-back-at (regexp &optional bound)
- "Return t if text before point matches REGEXP.
-Modifies the match data. If supplied, BOUND means not to look farther
-back that that many characters before point. Otherwise, it defaults to
-\(length REGEXP), which is good enough when REGEXP is a simple
-string."
- (eq (point)
- (save-excursion
- (and (re-search-backward regexp
- (- (point) (or bound (length regexp)))
- t)
- (match-end 0)))))
-
-;;}}}
-;;{{{ Markers
-
-;; Mostly for remembering interactively made regions
-(defun mmm-make-marker (pos beg-p sticky-p)
- "Make, and return, a marker at POS that is or isn't sticky.
-BEG-P represents whether the marker delimits the beginning of a
-region \(or the end of it). STICKY-P is whether it should be sticky,
-i.e. whether text inserted at the marker should be inside the region."
- (let ((mkr (set-marker (make-marker) pos)))
- (set-marker-insertion-type mkr (if beg-p (not sticky-p) sticky-p))
- mkr))
-
-;;}}}
-
-(provide 'mmm-utils)
-
-;;; mmm-utils.el ends here \ No newline at end of file
diff --git a/contrib/mmm/mmm-vars.el b/contrib/mmm/mmm-vars.el
deleted file mode 100644
index cb653dc4..00000000
--- a/contrib/mmm/mmm-vars.el
+++ /dev/null
@@ -1,1055 +0,0 @@
-;;; mmm-vars.el --- Variables for MMM Mode
-
-;; Copyright (C) 2000, 2004 by Michael Abraham Shulman
-
-;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
-;; Version: $Id$
-
-;;{{{ GPL
-
-;; 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, or (at your option)
-;; any later version.
-
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;}}}
-
-;;; Commentary:
-
-;; This file provides the definitions for the variables used by MMM
-;; Mode, as well as several functions to manipulate them. It also
-;; defines the errors that MMM Mode can signal.
-
-;;; Code:
-
-(require 'cl)
-(require 'mmm-compat)
-(require 'mmm-utils)
-
-;; MISCELLANEOUS
-;;{{{ Shut up the Byte Compiler
-
-;; Otherwise it complains about undefined variables.
-(eval-when-compile
- (defvar mmm-current-submode)
- (defvar mmm-current-overlay)
- (defvar mmm-save-local-variables)
- (defvar mmm-mode-string)
- (defvar mmm-submode-mode-line-format)
- (defvar mmm-mode-ext-classes-alist)
- (defvar mmm-mode-prefix-key)
- (defvar mmm-global-mode)
- (defvar mmm-primary-mode)
- (defvar mmm-classes-alist)
- (defvar mmm-current-submode))
- (declare-function mmm-set-class-parameter "mmm-class")
- (declare-function mmm-get-class-parameter "mmm-class")
-;;}}}
-;;{{{ Error Conditions
-
-;; Most of these should be caught internally and never seen by the
-;; user, except when the user is creating submode regions manually.
-
-;; Signalled when we try to put a submode region inside one where it
-;; isn't meant to go.
-(put 'mmm-subregion-invalid-parent
- 'error-conditions
- '(mmm-subregion-invalid-parent mmm-error error))
-(put 'mmm-subregion-invalid-parent
- 'error-message
- "Invalid submode region parent")
-
-;; Signalled when we try to put a submode region overlapping others in
-;; an invalid way.
-(put 'mmm-subregion-invalid-placement
- 'error-conditions
- '(mmm-subregion-invalid-placement mmm-error error))
-(put 'mmm-subregion-invalid-placement
- 'error-message
- "Submode region placement invalid")
-
-;; Signalled when we try to apply a submode class that doesn't exist.
-(put 'mmm-invalid-submode-class
- 'error-conditions
- '(mmm-invalid-submode-class mmm-error error))
-(put 'mmm-invalid-submode-class
- 'error-message
- "Invalid or undefined submode class")
-
-;; Signalled by :match-submode functions when they are unable to
-;; resolve a submode. This error should *always* be caught internally
-;; and never seen by the user.
-(put 'mmm-no-matching-submode
- 'error-conditions
- '(mmm-no-matching-submode mmm-error error))
-(put 'mmm-no-matching-submode
- 'error-message
- "Internal error: no matching submode.")
-
-;;}}}
-
-;; USER VARIABLES
-;;{{{ Customization Group
-
-(defgroup mmm nil
- "Multiple Major Modes in one buffer."
- :group 'tools)
-
-;;}}}
-;;{{{ Save Local Variables
-
-(defvar mmm-c-derived-modes
- '(c-mode c++-mode objc-mode pike-mode java-mode jde-mode javascript-mode
- php-mode))
-
-(defvar mmm-save-local-variables
- `(;; Don't use `function' (#') here!! We're already inside `quote'!
- major-mode
- comment-start
- comment-end
- (comment-line-start-skip buffer (fortran-mode))
- comment-start-skip
- (comment-column buffer)
- comment-indent-function
- comment-line-break-function
- sentence-end
- ,@(when mmm-xemacs
- '(mode-popup-menu
- (((lambda () current-menubar) . set-buffer-menubar))
- ))
- font-lock-keywords
- font-lock-keywords-only
- font-lock-keywords-case-fold-search
- font-lock-syntax-table
- font-lock-mark-block-function ; Override this?
- font-lock-syntactic-keywords
- indent-line-function
- parse-sexp-ignore-comments ; Fixes indentation in PHP-mode?
- ;; Can be different in different buffers
- (c-basic-offset
- buffer (c-mode c++-mode objc-mode pike-mode java-mode jde-mode))
- ;; These are necessary for C syntax parsing
- (c-class-key nil ,mmm-c-derived-modes)
- (c-extra-toplevel-key nil ,mmm-c-derived-modes)
- (c-inexpr-class-key nil ,mmm-c-derived-modes)
- (c-conditional-key nil ,mmm-c-derived-modes)
- semantic-bovinate-toplevel-override
- semantic-toplevel-bovine-table
- ;; Indentation style control variables.
- ;; These have to be localized in Emacs: see `mmm-mode-on'.
- ,@(mapcar
- #'(lambda (var) (list var nil mmm-c-derived-modes))
- '(c++-template-syntax-table
- c-<-op-cont-regexp
- c->-op-cont-regexp
- c-after-suffixed-type-decl-key
- c-after-suffixed-type-maybe-decl-key
- c-any-class-key
- c-any-class-key
- c-asm-stmt-kwds
- c-assignment-op-regexp
- c-backslash-column
- c-basic-offset
- c-bitfield-kwds
- c-block-comment-prefix
- c-block-decls-with-vars
- c-block-stmt-1-key
- c-block-stmt-1-key
- c-block-stmt-1-kwds
- c-block-stmt-2-key
- c-block-stmt-2-key
- c-block-stmt-2-kwds
- c-brace-list-key
- c-cast-parens
- c-class-key
- c-class-key
- c-class-kwds
- c-cleanup-list
- c-colon-type-list-re
- c-comment-only-line-offset
- c-comment-prefix-regexp
- c-comment-start-regexp
- c-comment-start-regexp
- c-cpp-defined-fns
- c-current-comment-prefix
- c-decl-block-key
- c-decl-block-key
- c-decl-prefix-re
- c-decl-spec-kwds
- c-doc-comment-start-regexp
- c-expr-kwds
- c-file-offsets
- c-file-style
- c-hanging-braces-alist
- c-hanging-colons-alist
- c-hanging-comment-ender-p
- c-hanging-comment-starter-p
- c-hanging-semi\&comma-criteria
- c-identifier-key
- c-identifier-last-sym-match
- c-identifier-start
- c-identifier-syntax-modifications
- c-identifier-syntax-table
- c-in-comment-lc-prefix
- c-indent-comment-alist
- c-indent-comments-syntactically-p
- c-indentation-style
- c-inexpr-block-kwds
- c-inexpr-class-kwds
- c-keywords
- c-keywords-obarray
- c-keywords-regexp
- c-keywords-regexp
- c-known-type-key
- c-label-key
- c-label-key
- c-label-kwds
- c-label-kwds-regexp
- c-label-kwds-regexp
- c-label-minimum-indentation
- c-lambda-kwds
- c-literal-start-regexp
- c-nonsymbol-chars
- c-nonsymbol-token-regexp
- c-not-decl-init-keywords
- c-offsets-alist
- c-opt-<>-arglist-start
- c-opt-<>-arglist-start-in-paren
- c-opt-<>-sexp-key
- c-opt-access-key
- c-opt-access-key
- c-opt-asm-stmt-key
- c-opt-asm-stmt-key
- c-opt-bitfield-key
- c-opt-bitfield-key
- c-opt-block-decls-with-vars-key
- c-opt-block-stmt-key
- c-opt-block-stmt-key
- c-opt-cpp-prefix
- c-opt-cpp-start
- c-opt-decl-spec-key
- c-opt-friend-key
- c-opt-friend-key
- c-opt-identifier-concat-key
- c-opt-inexpr-block-key
- c-opt-inexpr-block-key
- c-opt-inexpr-brace-list-key
- c-opt-inexpr-class-key
- c-opt-inexpr-class-key
- c-opt-lambda-key
- c-opt-lambda-key
- c-opt-method-key
- c-opt-method-key
- c-opt-postfix-decl-spec-key
- c-opt-type-component-key
- c-opt-type-concat-key
- c-opt-type-modifier-key
- c-opt-type-suffix-key
- c-other-decl-block-key
- c-other-decl-block-key
- c-other-decl-block-kwds
- c-other-decl-kwds
- c-overloadable-operators-regexp
- c-paragraph-separate
- c-paragraph-start
- c-paren-stmt-key
- c-primary-expr-regexp
- c-primitive-type-key
- c-primitive-type-kwds
- c-protection-kwds
- c-recognize-<>-arglists
- c-recognize-knr-p
- c-recognize-knr-p
- c-recognize-paren-inits
- c-recognize-typeless-decls
- c-regular-keywords-regexp
- c-simple-stmt-key
- c-simple-stmt-kwds
- c-special-brace-lists
- c-special-brace-lists
- c-specifier-key
- c-specifier-kwds
- c-stmt-delim-chars
- c-stmt-delim-chars-with-comma
- c-symbol-key
- c-symbol-key
- c-symbol-start
- c-syntactic-eol
- c-syntactic-ws-end
- c-syntactic-ws-start
- c-type-decl-prefix-key
- c-type-decl-suffix-key
- c-type-prefix-key
- comment-end
- comment-start
- comment-start-skip))
- ;; Skeleton insertion
- skeleton-transformation
- ;; Abbrev mode
- abbrev-mode
- local-abbrev-table
- ;; And finally the syntax table and local map.
- ((syntax-table . set-syntax-table))
- ((current-local-map . use-local-map) buffer)
- paragraph-separate
- paragraph-start
- )
- "Which local variables to save for major mode regions.
-Each element has the form \(VARIABLE [TYPE [MODES]]), causing VARIABLE
-to be saved for all major modes in the list MODES. If MODES is t or
-absent, the variable is saved for all major modes. MODES can also be
-a function of no arguments which returns non-nil whenever the variable
-should be saved.
-
-TYPE should be either the symbol `global', meaning to save the
-variable globally, the symbol `buffer', meaning to save it per buffer,
-or the symbol `region', meaning to save it for each submode region.
-If TYPE has any other value, such as nil, or is absent, the variable
-is saved globally. If all optional parameters are omitted, the
-element may be simply VARIABLE instead of \(VARIABLE).
-
-It is possible for VARIABLE to be not a symbol but a cons cell of the
-form \(GETTER . SETTER), thus specifying special functions to set and
-get the value of the \"variable\". This is used for objects like
-local maps, syntax tables, etc. which need to be installed in a
-special way. GETTER should be a function of no arguments, and SETTER
-a function of one. In this case, even if TYPE and MODES are omitted,
-the list cannot be flattened--it must be \((GETTER . SETTER)).
-\"Variables\" of this type cannot be seen with `mmm-get-saved-local'.
-
-A single variable may appear more than once in this list, with
-different modes and/or types. If the same mode appears more than once
-for the same variable with different types, the behavior is undefined.
-Changing the value of this variable after MMM Mode has been activated
-in some buffer may produce unpredictable results.
-
-Globally saved variables are saved in the mmm-local-variables property
-of the mode symbol. Buffer saved variables are saved in the alist
-`mmm-buffer-saved-locals'. Region saved variables are saved in the
-mmm-local-variables property of the overlay.")
-
-(defvar mmm-buffer-saved-locals ()
- "Stores saved local variables for this buffer, by mode.
-Each element looks like \(MODE \(VAR VALUE) ...).")
-(make-variable-buffer-local 'mmm-buffer-saved-locals)
-
-(defvar mmm-region-saved-locals-defaults ()
- "Stores saved defaults for region-saved locals, by mode.
-Each element looks like \(MODE \(VAR VALUE) ...). Used to initialize
-new submode regions.")
-(make-variable-buffer-local 'mmm-region-saved-locals-defaults)
-
-(defvar mmm-region-saved-locals-for-dominant ()
- "Stores saved region locals for the dominant major mode.
-The dominant major mode is considered to be one region for purposes of
-saving region variables. Region-saved variables for submode regions
-are saved as overlay properties.")
-(make-variable-buffer-local 'mmm-region-saved-locals-for-dominant)
-
-;;}}}
-;;{{{ Submode Faces
-
-(defgroup mmm-faces nil
- "Faces and coloring for submode regions.
-In general, only background colors should be set, to avoid interfering
-with font-lock."
- :group 'mmm)
-
-(defcustom mmm-submode-decoration-level 1
- "*Amount of coloring to use in submode regions.
-Should be either 0, 1, or 2, representing None, Low, and High amounts
-of coloring respectively.
-* None (0) means to use no coloring at all.
-* Low (1) means to use `mmm-default-submode-face' for all submode
- regions \(except for \"non-submode\" regions, i.e. those that are of
- the primary mode) and `mmm-delimiter-face' for region delimiters.
-* High (2) means to use different faces for different types of submode
- regions and delimiters, such as initialization code, expressions that
- are output, declarations, and so on, as specified by the submode
- class. The default faces are still used for regions that do not
- specify a face."
- :group 'mmm-faces
- :type '(choice (const :tag "None" 0)
- (const :tag "Low" 1)
- (const :tag "High" 2)))
-
-(defface mmm-init-submode-face '((t (:background "Pink")))
- "Face used for submodes containing initialization code."
- :group 'mmm-faces)
-
-(defface mmm-cleanup-submode-face '((t (:background "Wheat")))
- "Face used for submodes containing cleanup code."
- :group 'mmm-faces)
-
-(defface mmm-declaration-submode-face '((t (:background "Aquamarine")))
- "Face used for submodes containing declarations."
- :group 'mmm-faces)
-
-(defface mmm-comment-submode-face '((t (:background "SkyBlue")))
- "Face used for submodes containing comments and documentation."
- :group 'mmm-faces)
-
-(defface mmm-output-submode-face '((t (:background "Plum")))
- "Face used for submodes containing expression that are output."
- :group 'mmm-faces)
-
-(defface mmm-special-submode-face '((t (:background "MediumSpringGreen")))
- "Face used for special submodes not fitting any other category."
- :group 'mmm-faces)
-
-(defface mmm-code-submode-face '((t (:background "LightGray")))
- "Face used for submodes containing ordinary code."
- :group 'mmm-faces)
-
-(defface mmm-default-submode-face '((t (:background "gray85")))
- "Face used for all submodes at decoration level 1.
-Also used at decoration level 2 for submodes not specifying a type."
- :group 'mmm-faces)
-
-(defface mmm-delimiter-face nil
- "Face used to mark submode delimiters."
- :group 'mmm-faces)
-
-;;}}}
-;;{{{ Mode Line Format
-
-(defcustom mmm-mode-string " MMM"
- "*String to display in mode line as MMM minor mode indicator."
- :group 'mmm
- :type 'string)
-
-(defcustom mmm-submode-mode-line-format "~M[~m]"
- "*Format of the mode-line display when point is in a submode region.
-
-~M is replaced by the name of the primary major mode \(which may be
-replaced by a combined-mode function, see the info documentation).
-
-~m is replaced by the submode region overlay's `display-name'
-property, if it has one. Otherwise it is replaced by the mode name of
-the submode region.
-
-If `mmm-primary-mode-display-name' is non-nil, then this variable is
-used even when point is not in a submode region \(i.e. it is in a
-primary mode region), with ~m being replaced by the value of that
-variable."
- :group 'mmm
- :type 'string)
-
-(defvar mmm-primary-mode-display-name nil
- "If non-nil, displayed as the primary mode name in the mode line.
-See also `mmm-buffer-mode-display-name'.")
-(make-variable-buffer-local 'mmm-primary-mode-display-name)
-
-(defvar mmm-buffer-mode-display-name nil
- "If non-nil, displayed in the mode line instead of the primary mode
-name, which is then shown next to it as if it were a submode when in a
-primary mode region, i.e. outside all submode regions.")
-(make-variable-buffer-local 'mmm-buffer-mode-display-name)
-
-(defun mmm-set-mode-line ()
- "Set the mode line display correctly for the current submode,
-according to `mmm-submode-mode-line-format'."
- (let ((primary (or mmm-primary-mode-display-name
- (get mmm-primary-mode 'mmm-mode-name)))
- (submode (and mmm-current-overlay
- (or (overlay-get mmm-current-overlay 'display-name)
- (get mmm-current-submode 'mmm-mode-name)))))
- (if mmm-buffer-mode-display-name
- (setq mode-name
- (mmm-format-string mmm-submode-mode-line-format
- `(("~M" . ,mmm-buffer-mode-display-name)
- ("~m" . ,(or submode primary)))))
- (if submode
- (setq mode-name
- (mmm-format-string mmm-submode-mode-line-format
- `(("~M" . ,primary)
- ("~m" . ,submode))))
- (setq mode-name primary))))
- (force-mode-line-update))
-
-;;}}}
-;;{{{ Submode Classes
-
-(defvar mmm-classes nil
- "*List of submode classes that apply to a buffer.
-Generally set in a file local variables list. Can either be one
-symbol, or a list of symbols. Automatically buffer-local.")
-(make-variable-buffer-local 'mmm-classes)
-
-(defvar mmm-global-classes '(universal)
- "*List of submode classes that apply to all buffers.
-Can be overridden in a file local variables list.")
-
-;;}}}
-;;{{{ Modes and Extensions
-
-(defcustom mmm-mode-ext-classes-alist nil
- "Alist of submode classes for major modes and/or file extensions.
-This variable can now be directly modified.
-
-Elements look like \(MODE EXT CLASS), where MODE is a major mode, EXT
-is a regexp to match a filename such as in `auto-mode-alist', and
-CLASS is a submode class. CLASS is activated in all buffers in mode
-MODE \(if non-nil) and whose filenames match EXT \(if non-nil). If
-both MODE and EXT are nil, CLASS is activated in all buffers. If CLASS
-is the symbol t, MMM Mode is turned on in all buffers matching MODE
-and EXT, but no classes are activated.
-
-See `mmm-global-mode'."
- :group 'mmm
- :type '(repeat (list (symbol :tag "Major Mode")
- (string :tag "Filename Regexp")
- (symbol :tag "Class")))
- :require 'mmm-mode)
-
-(defun mmm-add-mode-ext-class (mode ext class)
- "Add an element to `mmm-mode-ext-classes-alist', which see.
-That variable can now be directly modified, so this function is
-unnecessary. It probably won't go away, though."
- (add-to-list 'mmm-mode-ext-classes-alist (list mode ext class)))
-
-;;}}}
-;;{{{ Preferred Major Modes
-
-(defcustom mmm-major-mode-preferences
- '((perl cperl-mode perl-mode)
- (javascript javascript-mode c++-mode)
- (java jde-mode java-mode c++-mode)
- (css css-mode c++-mode))
- "User preferences about what major modes to use.
-Each element has the form \(LANGUAGE . MODES) where LANGUAGE is the
-name of a programming language such as `perl' as a symbol, and MODES
-is a list of possible major modes to use, such as `cperl-mode' or
-`perl-mode'. The first element of MODES which is `fboundp' is used
-for submodes of LANGUAGE. The last element of MODES should be a mode
-which will always be available."
- :group 'mmm
- :type '(repeat (cons symbol
- (repeat
- (restricted-sexp :match-alternatives
- (fboundp))))))
-
-(defun mmm-add-to-major-mode-preferences (language mode &optional default)
- "Set the preferred major mode for LANGUAGE to MODE.
-This sets the value of `mmm-major-mode-preferences'. If DEFAULT is
-nil or unsupplied, MODE is added at the front of the list of modes for
-LANGUAGE. If DEFAULT is non-nil, then it is added at the end. This
-may be used by packages to ensure that some mode is present, but not
-override any user-specified mode."
- (let ((pair (assq language mmm-major-mode-preferences)))
- (if pair
- ;; Existing mode preferences
- (if default
- (setcdr pair (cons mode (cdr pair)))
- (setcdr pair (append (cdr pair) (list mode))))
- ;; No existing mode preference
- (add-to-list 'mmm-major-mode-preferences (list language mode)))))
-
-(defun mmm-ensure-modename (symbol)
- "Return SYMBOL if it is a valid submode name, else nil.
-Valid submode names are either `fboundp' or present as the `car' of an
-element in `mmm-major-mode-preferences'."
- (if (or (fboundp symbol)
- (assq symbol mmm-major-mode-preferences))
- symbol
- nil))
-
-(defun mmm-modename->function (mode)
- "Convert MODE to a mode function, nil if impossible.
-Valid submode names are either `fboundp' or present as the `car' of an
-element in `mmm-major-mode-preferences'. In the latter case, the
-first `fboundp' element of the `cdr' is returned, or nil if none."
- (if (fboundp mode)
- mode
- (car (remove-if-not
- #'fboundp
- (cdr (assq mode mmm-major-mode-preferences))))))
-
-;;}}}
-;;{{{ Delimiter Regions
-
-(defcustom mmm-delimiter-mode 'fundamental-mode
- "Major mode used by default for delimiter regions.
-Classes are encouraged to override this by providing a delimiter-mode
-parameter-- see `mmm-classes-alist'."
- :group 'mmm
- :type 'function)
-
-;;}}}
-;;{{{ Key Bindings
-
-(defcustom mmm-mode-prefix-key [(control ?c) ?%]
- "Prefix key for the MMM Minor Mode Keymap."
- :group 'mmm
- :type 'vector)
-
-(defcustom mmm-command-modifiers '(control)
- "List of key modifiers for MMM command keys.
-The MMM commands in the MMM Mode map, after `mmm-mode-prefix-key',
-are bound to default keys with these modifiers added. This variable
-must be set before MMM Mode is loaded to have an effect.
-
-It is suggested that the value of this variable be either nil or
-\(control), as the default keys are either plain keys or have only a
-meta modifier. The shift modifier is not particularly portable between
-Emacsen. The values of this variable and `mmm-insert-modifiers' should
-be disjoint."
- :group 'mmm
- :type '(repeat (symbol :tag "Modifier")))
-
-(defcustom mmm-insert-modifiers '()
- "List of key modifiers for MMM submode insertion keys.
-When a key pressed after `mmm-mode-prefix-key' has no MMM Mode command
-binding, and its modifiers include these, then its basic type, plus any
-modifiers in addition to these, is looked up in classes' :insert
-specifications.
-
-It is suggested that the value of this variable be either nil or
-\(control), allowing submode classes to specify the presence or
-absence of the meta modifier. The shift modifier is not particularly
-portable between Emacsen. The values of `mmm-command-modifiers' and
-this variable should be disjoint."
- :group 'mmm
- :type '(repeat (symbol :tag "Modifier")))
-
-(defcustom mmm-use-old-command-keys nil
- "Non-nil means to Use the old command keys for MMM Mode.
-MMM Mode commands then have no modifier while insertion commands have
-a control modifier, i.e. `mmm-command-modifiers' is set to nil and
-`mmm-insert-modifiers' is set to \(control). If nil, the values of
-these variables are as the default, or whatever the user has set them
-to. This variable must be set before MMM Mode is loaded."
- :group 'mmm
- :type 'boolean)
-
-(defun mmm-use-old-command-keys ()
- "Use the old command keys \(no control modifer) in MMM Mode."
- (setq mmm-command-modifiers '()
- mmm-insert-modifiers '(control)))
-
-;;}}}
-;;{{{ MMM Hooks
-
-(defcustom mmm-mode-hook ()
- "Hook run when MMM Mode is enabled in a buffer.
-
-A hook named mmm-<major-mode>-hook is also run, if it exists. For
-example, `mmm-html-mode-hook' is run whenever MMM Mode is entered with
-HTML mode the dominant mode.
-
-A hook named mmm-<submode>-submode-hook is run when a submode region
-of a given mode is created. For example, `mmm-cperl-mode-submode-hook'
-is run whenever a CPerl mode submode region is created, in any buffer.
-When this hooks are run, point is guaranteed to be at the start of
-the newly created submode region.
-
-Finally, a hook named mmm-<class>-class-hook is run whenever a buffer
-is first mmm-ified with a given submode class. For example,
-`mmm-mason-class-hook' is run whenever the `mason' class is first
-applied in a buffer."
- :group 'mmm
- :type 'hook)
-
-(defun mmm-run-constructed-hook (body &optional suffix)
- "Run the hook named `mmm-<BODY>-<SUFFIX>-hook', if it exists.
-If SUFFIX is nil or unsupplied, run `mmm-<BODY>-hook' instead."
- (let ((hook (intern-soft (if suffix
- (format "mmm-%s-%s-hook" body suffix)
- (format "mmm-%s-hook" body)))))
- (if hook (run-hooks hook))))
-
-(defun mmm-run-major-hook ()
- (mmm-run-constructed-hook mmm-primary-mode))
-
-(defun mmm-run-submode-hook (submode)
- (mmm-run-constructed-hook submode "submode"))
-
-(defvar mmm-class-hooks-run ()
- "List of submode classes for which hooks have already been run in
-the current buffer.")
-(make-variable-buffer-local 'mmm-class-hooks-run)
-
-(defun mmm-run-class-hook (class)
- (unless (member class mmm-class-hooks-run)
- (mmm-run-constructed-hook class "class")
- (add-to-list 'mmm-class-hooks-run class)))
-
-(defvar mmm-primary-mode-entry-hook nil
- "Hook run when point moves into a region of the primary mode.
-Each submode region can have an `entry-hook' property which is run
-when they are entered, but since primary mode regions have no overlay
-to store properties, this is a buffer-local variable.
-
-N.B. This variable is not a standard Emacs hook. Unlike Emacs'
-\"local hooks\" it has *no* global value, only a local one. Its value
-should always be a list of functions \(possibly empty) and never a
-single function. It may be used with `add-hook', however.")
-(make-variable-buffer-local 'mmm-primary-mode-entry-hook)
-
-;;}}}
-;;{{{ Major Mode Hook
-
-(defcustom mmm-major-mode-hook ()
- "Hook run whenever a new major mode is finished starting up.
-MMM Mode implements this with a hack \(see comments in the source) so
-that `mmm-global-mode' will function correctly, but makes this hook
-available so that others can take advantage of the hack as well.
-
-Note that file local variables have *not* been processed by the time
-this hook is run. If a function needs to inspect them, it should also
-be added to `find-file-hooks'. However, `find-file-hooks' is not run
-when creating a non-file-based buffer, or when changing major modes in
-an existing buffer."
- :group 'mmm
- :type 'hook)
-
-(defun mmm-run-major-mode-hook ()
- (dolist (func mmm-major-mode-hook)
- (ignore-errors (funcall func))))
-
-;;}}}
-;;{{{ MMM Global Mode
-
-;;; There's a point to be made that this variable should default to
-;;; `maybe' (i.e. not nil and not t), because that's what practically
-;;; everyone wants. I subscribe, however, to the view that simply
-;;; *loading* a lisp extension should not change the (user-visible)
-;;; behavior of Emacs, until it is configured or turned on in some
-;;; way, which dictates that the default for this must be nil.
-(defcustom mmm-global-mode nil
- "*Specify in which buffers to turn on MMM Mode automatically.
-
-- If nil, MMM Mode is never enabled automatically.
-- If t, MMM Mode is enabled automatically in all buffers.
-- If any other symbol, MMM mode is enabled only in those buffers that
- have submode classes associated with them. See `mmm-classes' and
- `mmm-mode-ext-classes-alist' for more information."
- :group 'mmm
- :type '(choice (const :tag "Always" t)
- (const :tag "Never" nil)
- (other :tag "Maybe" maybe))
- :require 'mmm-mode)
-
-;; These are not traditional editing modes, so mmm makes no sense, and
-;; can mess things up seriously if it doesn't know not to try.
-(defcustom mmm-never-modes
- '(
- help-mode
- Info-mode
- dired-mode
- comint-mode
- telnet-mode
- shell-mode
- eshell-mode
- forms-mode
- )
- "List of modes in which MMM Mode is never activated."
- :group 'mmm
- :type '(repeat (symbol :tag "Mode")))
-
-;;}}}
-;;{{{ Buffer File Name
-
-(defvar mmm-set-file-name-for-modes '(mew-draft-mode)
- "List of modes for which the temporary buffers MMM creates have a
-file name. In these modes, this file name is the same as that of the
-parent buffer. In general, this has been found to cause more problems
-than it solves, but some modes require it.")
-
-;;}}}
-
-;; NON-USER VARIABLES
-;;{{{ Mode Variable
-
-(defvar mmm-mode nil
- "Non-nil means MMM Mode is turned on in this buffer.
-Do not set this variable directly; use the function `mmm-mode'.")
-(make-variable-buffer-local 'mmm-mode)
-
-;;}}}
-;;{{{ Primary Mode
-
-(defvar mmm-primary-mode nil
- "The primary major mode in the current buffer.")
-(make-variable-buffer-local 'mmm-primary-mode)
-
-;;}}}
-;;{{{ Classes Alist
-
-;; Notes:
-;; 1. :parent could be an all-class argument. Same with :keymap.
-;; 2. :match-submode really does have to be distinct from :submode,
-;; because 'functionp' isn't enough to distinguish which is meant.
-(defvar mmm-classes-alist nil
- "Alist containing all defined mmm submode classes.
-A submode class is a named recipe for parsing a document into submode
-regions, and sometimes for inserting new ones while editing.
-
-Each element of this alist looks like \(CLASS . ARGS) where CLASS is a
-symbol naming the submode class and ARGS is a list of keyword
-arguments, called a \"class specifier\". There are a large number of
-accepted keyword arguments in the class specifier.
-
-The argument CLASSES, if supplied, must be a list of other submode
-class names, or class specifiers, representing other classes to call
-recursively. The FACE arguments of these classes are overridden by
-the FACE argument of this class. If the argument CLASSES is supplied,
-all other arguments to this class are ignored. That is, \"grouping\"
-classes can do nothing but group other classes.
-
-The argument HANDLER, if supplied, also overrides any other processing.
-It must be a function, and all the arguments are passed to it as
-keywords, and it must do everything. See `mmm-ify' for what sorts of
-things it must do. This back-door interface should be cleaned up.
-
-The optional argument FACE gives the display face of the submode
-regions under high decoration (see `mmm-submode-decoration-level').
-It must be a valid face. The standard faces used for submode regions
-are `mmm-*-submode-face' where * is one of `init', `cleanup',
-`declaration', `comment', `output', `special', or `code'. A more
-flexible alternative is the argument MATCH-FACE. MATCH-FACE can be a
-function, which is called with one argument, the form of the front
-delimiter \(found from FRONT-FORM, below), and should return the face
-to use. It can also be an alist, with each element of the form
-\(DELIM . FACE).
-
-If neither CLASSES nor HANDLER are supplied, either SUBMODE or
-MATCH-SUBMODE must be. SUBMODE specifies the submode to use for the
-submode regions, a symbol such as `cperl-mode' or `emacs-lisp-mode',
-while MATCH-SUBMODE must be a function to be called immediately after
-a match is found for FRONT, which is passed one argument, the form of
-the front delimiter \(found from FRONT-FORM, below), and return a
-symbol such as SUBMODE would be set to. If MATCH-SUBMODE detects an
-invalid match--for example a specified mode which is not `fboundp'--it
-should \(signal 'mmm-no-matching-submode nil).
-
-FRONT and BACK are the means to find the submode regions, and can be
-either buffer positions \(number-or-markers), regular expressions, or
-functions. If they are absolute buffer positions, only one submode
-region is created, from FRONT to BACK. This is generally not used in
-named classes. \(Unnamed classes are created by interactive commands
-in `mmm-interactive-history').
-
-If FRONT is a regexp, then that regexp is searched for, and the end of
-its FRONT-MATCH'th match \(or the beginning thereof, if INCLUDE-FRONT
-is non-nil), plus FRONT-OFFSET, becomes the beginning of the submode
-region. If FRONT is a function, that function is called instead, and
-must act somewhat like a search, in that it should start at point,
-take one argument as a search bound, and set the match data. A
-similar pattern is followed for BACK \(the search starts at the
-beginning of the submode region), save that the beginning of its
-BACK-MATCH'th match \(or the end, if INCLUDE-BACK is non-nil) becomes
-the end of the submode region, plus BACK-OFFSET.
-
-If SAVE-MATCHES is non-nil, then BACK, if it is a regexp, is formatted
-by replacing strings of the form \"~N\" by the corresponding value of
-\(match-string n) after matching FRONT.
-
-FRONT-MATCH and BACK-MATCH default to zero. They specify which
-sub-match of the FRONT and BACK regexps to treat as the delimiter.
-This number will be passed to any calls to `match-beginning' and
-company.
-
-FRONT- and BACK-OFFSET default to 0. In addition to numbers, they can
-also be functions to call which should move point to the correct
-position for the beginning or end of the submode region. Common
-choices include `beginning-of-line' and `end-of-line', and new
-functions can of course be written. They can also be lists which will
-be applied in sequence, such as \(end-of-line 1) meaning move to end
-of line and then forward one character.
-
-FRONT-VERIFY and BACK-VERIFY, if supplied, must be functions that
-inspect the match data to see if a match found by FRONT or BACK
-respectively is valid.
-
-FRONT-DELIM \(resp. BACK-DELIM), if supplied, can take values like
-those of FRONT-OFFSET \(resp. BACK-OFFSET), specifying the offset from
-the start \(resp. end) of the match for FRONT \(resp. BACK) to use as
-the starting \(resp. ending) point for the front \(resp. back)
-delimiter. If nil, it means not to make a region for the respective
-delimiter at all.
-
-DELIMITER-MODE, if supplied, specifies what submode to use for the
-delimiter regions, if any. If `nil', the primary mode is used. If
-not supplied, `mmm-delimiter-mode' is used.
-
-FRONT-FACE and BACK-FACE specify faces to use for displaying the
-delimiter regions, under high decoration.
-
-FRONT-FORM and BACK-FORM, if given, must supply a regexp used to match
-the *actual* delimiter. If they are strings, they are used as-is. If
-they are functions, they are called and must inspect the match data.
-If they are lists, their `car' is taken as the delimiter. The default
-for both is \(regexp-quote \(match-string 0)).
-
-The last case--them being a list--is usually used to set the delimiter
-to a function. Such a function must take 1-2 arguments, the first
-being the overlay in question, and the second meaning to insert the
-delimiter and adjust the overlay rather than just matching the
-delimiter. See `mmm-match-front', `mmm-match-back', and
-`mmm-end-current-region'.
-
-CASE-FOLD-SEARCH, if specified, controls whether the search is
-case-insensitive. See `case-fold-search'. It defaults to `t'.
-
-CREATION-HOOK, if specified, should be a function which is run
-whenever a submode region is created, with point at the beginning of
-the new region. One use for it is to set region-saved local variables
-\(see `mmm-save-local-variables').
-
-INSERT specifies the keypress insertion spec for such submode regions.
-INSERT's value should be list of elements of the form \(KEY NAME .
-SPEC). Each KEY should be either a character, a function key symbol,
-or a dotted list \(MOD . KEY) where MOD is a symbol for a modifier
-key. The use of any other modifier than meta is discouraged, as
-`mmm-insert-modifiers' is sometimes set to \(control), and other
-modifiers are not very portable. Each NAME should be a symbol
-representing the insertion for that key. Each SPEC can be either a
-skeleton, suitable for passing to `skeleton-insert' to create a
-submode region, or a dotted pair \(OTHER-KEY . ARG) meaning to use the
-skeleton defined for OTHER-KEY but pass it the argument ARG as the
-`str' variable, possible replacing a prompt string. Skeletons for
-insertion should have the symbol `_' where point \(or wrapped text)
-should go, and the symbol `@' in four different places: at the
-beginning of the front delimiter, the beginning of the submode region,
-the end of the submode region, and the end of the back delimiter.
-
-If END-NOT-BEGIN is non-nil, it specifies that a BACK delimiter cannot
-begin a new submode region.
-
-MATCH-NAME, if supplied, specifies how to determine the \"name\" for
-each submode region. It must be a string or a function. If it is a
-function, it is passed the value of FRONT-FORM and must return the
-name to use. If it is a string, it is used as-is unless SAVE-NAME has
-a non-nil value, in which case, the string is interpreted the same as
-BACK when SAVE-MATCHES is non-nil. If MATCH-NAME is not specified,
-the regions are unnamed. Regions with the same name are considered
-part of the same chunk of code, and formatted as such, while unnamed
-regions are not grouped with any others.
-
-As a special optimization for insertion, if SKEL-NAME is non-nil, the
-insertion code will use the user-prompted string value as the region
-name, instead of going through the normal matching procedure.
-
-PRIVATE, if supplied and non-nil, means that this class is a private
-or internal class, usually one invoked by another class via :classes,
-and is not for the user to see.")
-
-(defun mmm-add-classes (classes)
- "Add the submode classes CLASSES to `mmm-classes-alist'."
- (dolist (class classes)
- (add-to-list 'mmm-classes-alist class)))
-
-(defun mmm-add-group (group classes)
- "Add CLASSES and a \"grouping class\" named GROUP which calls them all.
-The CLASSES are all made private, i.e. non-user-visible."
- (mmm-add-classes (mapcar #'(lambda (class)
- (append class
- '(:private t)))
- classes))
- (add-to-list 'mmm-classes-alist
- (list group :classes (mapcar #'first classes))))
-
-(defun mmm-add-to-group (group classes)
- "Add CLASSES to the \"grouping class\" named GROUP.
-The CLASSES are all made private, i.e. non-user-visible."
- (mmm-add-classes (mapcar #'(lambda (class)
- (append class
- '(:private t)))
- classes))
- (mmm-set-class-parameter group :classes
- (append (mmm-get-class-parameter group :classes)
- (mapcar #'first classes))))
-
-;;}}}
-;;{{{ Version Number
-
-(defconst mmm-version "0.4.8"
- "Current version of MMM Mode.")
-
-(defun mmm-version ()
- (interactive)
- (message "MMM Mode version %s by Michael Abraham Shulman" mmm-version))
-
-;;}}}
-;;{{{ Temp Buffer Name
-
-(defvar mmm-temp-buffer-name " *mmm-temp*"
- "Name for temporary buffers created by MMM Mode.")
-
-;;}}}
-;;{{{ Interactive History
-
-(defvar mmm-interactive-history nil
- "History of interactive mmm-ification in the current buffer.
-Elements are either submode class symbols or class specifications. See
-`mmm-classes-alist' for more information.")
-(make-variable-buffer-local 'mmm-interactive-history)
-
-(defun mmm-add-to-history (class)
- (add-to-list 'mmm-interactive-history class))
-
-(defun mmm-clear-history ()
- "Clears history of interactive mmm-ification in current buffer."
- (interactive)
- (setq mmm-interactive-history nil))
-
-;;}}}
-;;{{{ Mode/Ext Manipulation
-
-(defvar mmm-mode-ext-classes ()
- "List of classes associated with current buffer by mode and filename.
-Set automatically from `mmm-mode-ext-classes-alist'.")
-(make-variable-buffer-local 'mmm-mode-ext-classes)
-
-(defun mmm-get-mode-ext-classes ()
- "Return classes for current buffer from major mode and filename.
-Uses `mmm-mode-ext-classes-alist' to find submode classes."
- (or mmm-mode-ext-classes
- (setq mmm-mode-ext-classes
- (mapcar #'third
- (remove-if-not #'mmm-mode-ext-applies
- mmm-mode-ext-classes-alist)))))
-
-(defun mmm-clear-mode-ext-classes ()
- "Clear classes added by major mode and filename."
- (setq mmm-mode-ext-classes nil))
-
-(defun mmm-mode-ext-applies (element)
- (destructuring-bind (mode ext class) element
- (and (if mode
- (eq mode
- ;; If MMM is on in this buffer, use the primary mode,
- ;; otherwise use the normal indicator.
- (or mmm-primary-mode major-mode))
- t)
- (if ext
- (and (buffer-file-name)
- (save-match-data
- (string-match ext (buffer-file-name))))
- t))))
-
-(defun mmm-get-all-classes (global)
- "Return a list of all classes applicable to the current buffer.
-These come from mode/ext associations, `mmm-classes', and interactive
-history, as well as `mmm-global-classes' if GLOBAL is non-nil."
- (append mmm-interactive-history
- (if (listp mmm-classes) mmm-classes (list mmm-classes))
- (if global mmm-global-classes ())
- (mmm-get-mode-ext-classes)))
-
-;;}}}
-
-(provide 'mmm-vars)
-
-;;; mmm-vars.el ends here
diff --git a/contrib/mmm/mmm.texinfo b/contrib/mmm/mmm.texinfo
deleted file mode 100644
index aa0b0eaf..00000000
--- a/contrib/mmm/mmm.texinfo
+++ /dev/null
@@ -1,2117 +0,0 @@
-\input texinfo
-@c %**start of header
-@setfilename mmm.info
-@settitle MMM Mode Manual
-@c %**end of header
-@syncodeindex vr fn
-@set MASON_VERSION 0.896
-
-@dircategory GNU Emacs Lisp
-@direntry
-* MMM-Mode: (mmm). Multiple Major Modes for Emacs
-@end direntry
-
-@include version.texi
-
-@ifinfo
-This is edition @value{EDITION} of the MMM Mode Manual, last updated
-@value{UPDATED}. It documents version @value{VERSION} of MMM Mode.
-
-Copyright 2000 Michael Abraham Shulman.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-sections entitled ``Copying'' and ``GNU General Public License'' are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-
-@end ifinfo
-
-@titlepage
-@title MMM Mode Manual
-@subtitle Multiple Major Modes for Emacs
-@subtitle Edition @value{EDITION}
-@subtitle @value{UPDATED}
-@author Michael Abraham Shulman
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 2000 Michael Abraham Shulman.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-sections entitled ``Copying'' and ``GNU General Public License'' are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-
-@end titlepage
-
-@ifinfo
-@node Top, Overview, (dir), (dir)
-@top MMM Mode
-
-MMM Mode is a minor mode for Emacs which allows Multiple Major Modes to
-coexist in a single buffer.
-
-This is edition @value{EDITION} of the MMM Mode Manual, last updated
-@value{UPDATED}, which documents version @value{VERSION} of MMM Mode.
-
-@end ifinfo
-
-@menu
-* Overview:: An overview and introduction to MMM Mode.
-* Basics:: The basics of how to use it.
-* Customizing:: Customizing how it works to your needs.
-* Supplied Classes:: The supplied submode classes.
-* Writing Classes:: Writing your own submode classes.
-* Indices:: Just that.
-
-@detailmenu
- --- The Detailed Node Listing ---
-
-Overview of MMM Mode
-
-* Basic Concepts:: A simple explanation of how it works.
-* Installation:: How to install MMM Mode.
-* Quick Start:: Getting started using MMM Mode quickly.
-
-MMM Mode Basics
-
-* MMM Minor Mode:: The Emacs minor mode that manages it all.
-* Submode Classes:: What they are and how to use them.
-* Selecting Classes:: How MMM Mode knows what classes to use.
-* Insertion:: Inserting new submode regions automatically.
-* Re-parsing:: Re-scanning for submode regions.
-* Interactive:: Adding submode regions manually.
-* Global Mode:: Turning MMM Mode on automatically.
-
-The MMM Minor Mode
-
-* Enabling MMM Mode:: Turning MMM Mode on and off.
-* MMM Mode Keys:: Default key bindings in MMM Mode.
-
-How MMM Mode selects submode classes
-
-* File Classes:: Classes for a single file.
-* Mode-Ext Classes:: Classes for a given mode or extension.
-* Global Classes:: Classes for all MMM Mode buffers.
-
-MMM Global Mode
-
-* Major Mode Hook:: Using MMM's Major Mode Hook
-
-Customizing MMM Mode
-
-* Region Coloring:: Changing or removing background colors.
-* Preferred Modes:: Choosing which major modes to use.
-* Mode Line:: What is displayed in the mode line.
-* Key Bindings:: Customizing the MMM Mode key bindings.
-* Local Variables:: What local variables are saved for submodes.
-* Changing Classes:: Changing the supplied submode classes.
-* Hooks:: How to make MMM Mode run your code.
-
-Supplied Submode Classes
-
-* Mason:: Mason server-side Perl in HTML.
-* File Variables:: Elisp code in File Variables.
-* Here-documents:: Code in shell and Perl here-documents.
-* Javascript:: Javascript embedded in HTML.
-* Embedded CSS:: CSS Styles embedded in HTML.
-* Embperl:: Another syntax for Perl in HTML.
-* ePerl:: A general Perl-embedding syntax.
-* JSP:: Java code embedded in HTML.
-* RPM:: Shell scripts in RPM Spec Files.
-* Noweb:: Noweb literate programs.
-
-Writing Submode Classes
-
-* Basic Classes:: Writing a simple submode class.
-* Paired Delimiters:: Matching paired delimiters.
-* Region Placement:: Placing the region more accurately.
-* Submode Groups:: Grouping several classes together.
-* Calculated Submodes:: Deciding the submode at run-time.
-* Calculated Faces:: Deciding the display face at run-time.
-* Insertion Commands:: Inserting regions automatically.
-* Region Names:: Naming regions for syntax grouping.
-* Other Hooks:: Running code at arbitrary points.
-* Delimiters:: Controlling delimiter overlays.
-* Misc Keywords:: Other miscellaneous options.
-
-Indices
-
-* Concept Index:: Index of MMM Mode Concepts.
-* Function Index:: Index of functions and variables.
-* Keystroke Index:: Index of key bindings in MMM Mode.
-
-@end detailmenu
-@end menu
-
-@node Overview, Basics, Top, Top
-@comment node-name, next, previous, up
-@chapter Overview of MMM Mode
-@cindex overview of mmm-mode
-@cindex mmm-mode, overview of
-
-MMM Mode is a minor mode for Emacs which allows Multiple Major Modes to
-coexist in a single buffer. The name is an abbreviation of `Multiple
-Major Modes'@footnote{The name is derived from @file{mmm.el} for XEmacs
-by Gongquan Chen <chen@@posc.org>, from which MMM Mode was adapted.}. A
-major mode is a customization of Emacs for editing a certain type of
-text, such as code for a specific programming language. @xref{Major
-Modes, , , emacs, The Emacs Manual}, for details.
-
-MMM Mode is a general extension to Emacs which is useful whenever one
-file contains text in two or more programming languages, or that
-should be in two or more different modes. For example:
-
-@itemize @bullet
-@item
-CGI scripts written in any language, from Perl to PL/SQL, may want to
-output verbatim HTML, and the writer of such scripts may want to use
-Emacs' html-mode or sgml-mode to edit this HTML code, while remaining
-in the appropriate programming language mode for the rest of the
-file. @xref{Here-documents}, for example.
-
-@item
-There are now many ``content delivery systems'' which turn the CGI
-script idea around and simply add extra commands to an HTML file,
-often in some programming language, which are interpreted on the
-server. @xref{Mason}, @xref{Embperl}, @xref{ePerl}, @xref{JSP}.
-
-@item
-HTML itself can also contain embedded languages such as Javascript and
-CSS styles, for which Emacs has different major modes.
-@xref{Javascript}, and @xref{Embedded CSS}, for example.
-
-@item
-The idea of ``literate programming'' requires the same file to contain
-documentation (written as text, html, latex, etc.) and code (in an
-appropriate programming language). @xref{Noweb}, for example.
-
-@item
-Emacs allows files of any type to contain `local variables', which can
-include Emacs Lisp code to be evaluated. @xref{File Variables, , ,
-emacs, The Emacs Manual}. It may be easier to edit this code in Emacs
-Lisp mode than in whatever mode is used for the rest of the file.
-@xref{File Variables}.
-
-@item
-There are many more possible uses for MMM Mode. RPM spec files can
-contain shell scripts (@pxref{RPM}). Email or newsgroup messages may
-contain sample code. And so on. We encourage you to experiment.
-@end itemize
-
-@menu
-* Basic Concepts:: A simple explanation of how it works.
-* Installation:: How to install MMM Mode.
-* Quick Start:: Getting started using MMM Mode quickly.
-@end menu
-
-@node Basic Concepts, Installation, Overview, Overview
-@comment node-name, next, previous, up
-@section Basic Concepts
-@cindex dominant major mode
-@cindex major mode, dominant
-@cindex default major mode
-@cindex major mode, default
-@cindex submode regions
-@cindex regions, submode
-@cindex overlays, submode
-@cindex submode overlays
-@cindex mmm-ification
-
-The way MMM Mode works is as follows. Each buffer has a @dfn{dominant}
-or @dfn{default} major mode, which is chosen as major modes normally
-are: the user can set it interactively, or it can be chosen
-automatically with `auto-mode-alist' (@pxref{Choosing Modes, , , emacs,
-The Emacs Manual}). Within the file, MMM Mode creates @dfn{submode
-regions} within which other major modes are in effect. While the point
-is in a submode region, the following changes occur:
-
-@enumerate
-@item
-The local keymap is that of the submode. This means the key bindings for
-the submode are available, while those of the dominant mode are not.
-@item
-The mode line (@pxref{Mode Line, , , emacs, The Emacs Manual}) changes
-to show which submode region is active. This can be configured; see
-@ref{Mode Line}.
-@item
-The major mode menu, both on the menu bar and the mouse popup, are that
-of the submode.
-@item
-Some local variables of the submode shadow those of the default mode
-(@pxref{Local Variables}). For the user, this serves to help make Emacs
-behave as if the submode were the major mode.
-@item
-The syntax table and indentation are those of the submode.
-@item
-Font-lock (@pxref{Font Lock, , , emacs, The Emacs Manual}) fontifies
-correctly for the submode.
-@item
-The submode regions are highlighted by a background color; see
-@ref{Region Coloring}.
-
-@end enumerate
-
-The submode regions are represented internally by Emacs Lisp objects
-known as @dfn{overlays}. Some of the above are implemented by overlay
-properties, and others are updated by an MMM Mode function in
-`post-command-hook'. You don't need to know this to use MMM Mode, but it
-may make any error messages you come across more understandable.
-@xref{Overlays, , , elisp, The GNU Emacs Lisp Reference Manual}, for
-more information on overlays.
-
-Because overlays are not saved with a file, every time a file is opened,
-they must be created. Creating submode regions is occasionally referred
-to as @dfn{mmm-ification}. (I've never had occasion to pronounce this,
-but if I did I would probably say `mummification'. Like what they did in
-ancient Egypt.) You can mmm-ify a buffer interactively, but most often
-MMM Mode will find and create submode regions automatically based on a
-buffer's file extension, dominant mode, or local variables.
-
-
-@node Installation, Quick Start, Basic Concepts, Overview
-@comment node-name, next, previous, up
-@section Installing MMM Mode
-
-MMM Mode has a standard installation process. See the file INSTALL for
-generic information on this process. To summarize, unpack the archive,
-@command{cd} to the created MMM Mode directory, type @samp{./configure},
-then @samp{make}, then @samp{make install}. If all goes correctly, this
-will compile the MMM Mode elisp files, install them in your local
-site-lisp directory, and install the MMM Mode info file @file{mmm.info}
-in your local info directory.
-
-Now you need to configure your Emacs initialization file (usually
-@file{~/.emacs}) to use MMM Mode. First, Emacs has to know where to
-find MMM Mode. In other words, the MMM Mode directory has to be in
-@code{load-path}. This can be done in the parent directory's
-@file{subdirs.el} file, or in the init file with a line such as:
-
-@lisp
-(add-to-list 'load-path "/path/to/site-lisp/mmm/")
-@end lisp
-
-Once @code{load-path} is configured, MMM Mode must be loaded. You can
-load all of MMM Mode with the line
-
-@lisp
-(require 'mmm-mode)
-@end lisp
-
-@noindent
-but if you use MMM Mode only rarely, it may not be desirable to load all
-of it at the beginning of every editing session. You can load just
-enough of MMM Mode so it will turn itself on when necessary and load the
-rest of itself, by using instead the line
-
-@lisp
-(require 'mmm-auto)
-@end lisp
-
-@noindent
-in your initialization file.
-
-One more thing you may want to do right now is to set the variable
-@code{mmm-global-mode}. If this variable is @code{nil} (the default),
-MMM Mode will never turn itself on. If it is @code{t}, MMM Mode will
-turn itself on in every buffer. Probably the most useful value for it,
-however, is the symbol @code{maybe} (actually, anything that is not
-@code{nil} and not @code{t}), which causes MMM Mode to turn itself on in
-precisely those buffers where it would be useful. You can do this with
-a line such as:
-
-@lisp
-(setq mmm-global-mode 'maybe)
-@end lisp
-
-@noindent
-in your initialization file. @xref{Global Mode}, for more detailed
-information.
-
-
-@node Quick Start, , Installation, Overview
-@comment node-name, next, previous, up
-@section Getting Started Quickly
-
-Perhaps the simplest way to create submode regions is to do it
-interactively by specifying a region. First you must turn MMM Mode
-on---say, with @kbd{M-x mmm-mode}---then place point and mark around the
-area you want to make into a submode region, type @kbd{C-c % C-r}, and
-enter the desired major mode. @xref{Interactive}, for more details.
-
-A better way to add submode regions is by using submode classes, which
-store a lot of useful information for MMM Mode about how to add and
-manipulate the regions created. @xref{Submode Classes}, for more
-details. There are several sample submode classes that come with MMM
-Mode, which are documented later in this manual. Look through these and
-determine if one of them fits your needs. If so, I suggest reading the
-comments on that mode. Then come back here to find out to use it.
-
-To apply a submode class to a buffer interactively, turn MMM Mode on as
-above, then type @kbd{C-c % C-c} and enter the name of the class.
-Submode regions should be added automatically, if there are any regions
-in the buffer appropriate to the submode class.
-
-If you want a given file to always use a given submode class, you can
-express this in a file variable: add a line containing the string
-@samp{-*- mmm-classes: @var{class} -*-} at the top of the file.
-@xref{File Variables, , , emacs, The Emacs Manual}, for more information
-and other methods. Now whenever MMM Mode is turned on in that file, it
-will be mmm-ified according to @var{class}. If @code{mmm-global-mode} is
-non-nil, then MMM Mode will turn itself on whenever a file with a
-@code{mmm-classes} local variable is opened. @xref{Global Mode}, for more
-information.
-
-If you want a submode class to apply to @emph{all} files in a certain
-major mode or with a certain extension, add a line such as this to your
-initialization file:
-
-@lisp
-(mmm-add-mode-ext-class @var{mode} @var{extension} @var{class})
-@end lisp
-
-@noindent
-After this call, any file opened whose name matches the regular
-expression @var{extension} @emph{and} whose default mode is @var{mode}
-will be automatically mmm-ified according to @var{class} (assuming
-@code{mmm-global-mode} is non-nil). If one of @var{extension} or
-@var{mode} is @code{nil}, a file need only satisfy the other one to be
-mmm-ified.
-
-You can now read the rest of this manual to learn more about how MMM
-Mode works and how to configure it to your preferences. If none of the
-supplied submode classes fit your needs, then you can try to write your
-own. @xref{Writing Classes}, for more information.
-
-@node Basics, Customizing, Overview, Top
-@comment node-name, next, previous, up
-@chapter MMM Mode Basics
-
-This chapter explains the most important parts of how to use MMM Mode.
-
-@menu
-* MMM Minor Mode:: The Emacs minor mode that manages it all.
-* Submode Classes:: What they are and how to use them.
-* Selecting Classes:: How MMM Mode knows what classes to use.
-* Insertion:: Inserting new submode regions automatically.
-* Re-parsing:: Re-scanning for submode regions.
-* Interactive:: Adding submode regions manually.
-* Global Mode:: Turning MMM Mode on automatically.
-@end menu
-
-@node MMM Minor Mode, Submode Classes, Basics, Basics
-@comment node-name, next, previous, up
-@section The MMM Minor Mode
-@cindex mode, mmm minor
-@cindex minor mode, mmm
-@cindex mmm minor mode
-
-An Emacs minor mode is an optional feature which can be turned on or off
-in a given buffer, independently of the major mode. @xref{Minor Modes, ,
-, emacs, The Emacs Manual}. MMM Mode is implemented as a minor mode
-which manages the submode regions. This minor mode must be turned on in
-a buffer for submode regions to be effective. When activated, the MMM
-Minor mode is denoted by @samp{MMM} in the mode line (@pxref{Mode
-Line}).
-
-@menu
-* Enabling MMM Mode:: Turning MMM Mode on and off.
-* MMM Mode Keys:: Default key bindings in MMM Mode.
-@end menu
-
-
-@node Enabling MMM Mode, MMM Mode Keys, MMM Minor Mode, MMM Minor Mode
-@comment node-name, next, previous, up
-@subsection Enabling MMM Mode
-@cindex mmm mode, turning on
-@cindex mmm mode, turning off
-@cindex turning on mmm mode
-@cindex turning off mmm mode
-@cindex mmm mode, enabling
-@cindex mmm mode, disabling
-@cindex enabling mmm mode
-@cindex disabling mmm mode
-
-If @code{mmm-global-mode} is non-@code{nil} (@pxref{Global Mode}),
-then the MMM minor mode will be turned on automatically whenever a file
-with associated submode classes is opened (@pxref{Selecting Classes}).
-It is also turned on by interactive mmm-ification (@pxref{Interactive}),
-although the interactive commands do not have key bindings when it is
-not on and must be invoked via @kbd{M-x}. You can also turn it on (or
-off) manually with @kbd{M-x mmm-mode}, in which case it applies all
-submode classes associated with the buffer. Turning MMM Mode off
-automatically removes all submode regions from the buffer.
-
-@deffn Command mmm-mode @var{arg}
-Toggle the state of MMM Mode in the current buffer. If @var{arg} is
-supplied, turn MMM Mode on if and only if @var{arg} is positive.
-@end deffn
-
-@defun mmm-mode-on
-Turn MMM Mode on unconditionally in the current buffer.
-@end defun
-
-@defun mmm-mode-off
-Turn MMM Mode off unconditionally in the current buffer.
-@end defun
-
-@defvar mmm-mode
-This variable represents whether MMM Mode is on in the current buffer.
-Do not set this variable directly; use one of the above functions.
-@end defvar
-
-
-@node MMM Mode Keys, , Enabling MMM Mode, MMM Minor Mode
-@comment node-name, next, previous, up
-@subsection Key Bindings in MMM Mode
-@cindex mmm mode key bindings
-@cindex key bindings in mmm mode
-@findex mmm-insertion-help
-@kindex C-c % h
-
-When MMM Mode is on, it defines a number of key bindings. By default,
-these are bound after the prefix sequence @kbd{C-c %}. Minor mode
-keymaps are supposed to use @kbd{C-c @var{punctuation}} sequences, and I
-find this one to be a good mnemonic because @samp{%} is used by Mason to
-denote special tags. This prefix key can be customized; @ref{Key
-Bindings}.
-
-There are two types of key bindings in MMM Mode: @dfn{commands} and
-@dfn{insertions}. Command bindings run MMM Mode interactive functions to
-do things like re-parse the buffer or end the current submode region,
-and are defined statically as normal Emacs key-bindings. Insertion
-bindings insert submode region skeletons with delimiters into the
-buffer, and are defined dynamically, according to which submode classes
-(@pxref{Submode Classes}) are in effect, via a keymap default binding.
-
-To distinguish between the two, MMM Mode uses distinct modifier keys for
-each. By default, command bindings use the control key (e.g. @kbd{C-c %
-C-b} re-parses the buffer), and insertion bindings do not (e.g. @kbd{C-c
-% p}, when the Mason class is in effect, inserts a
-@samp{<%perl>...</%perl>} region). This makes the command bindings
-different from in previous versions, however, so the variable
-@code{mmm-use-old-bindings} is provided. If this variable is set to `t'
-before MMM Mode is loaded, the bindings will be reversed: insertion
-bindings will use the control key and command bindings will not.
-
-Normally, Emacs gives help on a prefix command if you type @kbd{C-h}
-after that command (e.g. @kbd{C-x C-h} displays all key bindings
-starting with @kbd{C-x}). Because of how insertion bindings are
-implemented dynamically with a default binding, they do not show up when
-you hit @kbd{C-c % C-h}. For this reason, MMM Mode defines the command
-@kbd{C-c % h} which displays a list of all currently valid insertion key
-sequences. If you use the defaults for command and insertion bindings,
-the @kbd{C-h} and @kbd{h} should be mnemonic.
-
-In the rest of this manual, I will assume you are using the defaults for
-the mode prefix (@kbd{C-c %}) and the command and insertion modifiers.
-You can customize them, however; @ref{Key Bindings}.
-
-
-@node Submode Classes, Selecting Classes, MMM Minor Mode, Basics
-@comment node-name, next, previous, up
-@section Understanding Submode Classes
-@cindex submode classes
-@cindex classes, submode
-
-A submode class represents a ``type'' of submode region. It specifies
-how to find the regions, what their delimiters look like, what submode
-they should be, how to insert them, and how they behave in other ways.
-It is represented by a symbol, such as @code{mason} or
-@code{eval-elisp}.
-
-For example, in the Mason set of classes, there is one class
-representing all @samp{<%...%>} inline Perl regions, and one
-representing regions such as @samp{<%perl>...</%perl>},
-@samp{<%init>...</%init>}, and so on. These are different to Mason, but
-to Emacs they are all just Perl sections, so they are covered by the
-same submode class.
-
-But it would be tedious if whenever we wanted to use the Mason classes,
-we had to specify both of these. (Actually, this is a simplification:
-there are some half a dozen Mason submode classes.) So submode classes
-can also ``group'' others together, and we can refer to the @code{mason}
-class and mean all of them.
-
-The way a submode class is used is to @dfn{apply} it to a buffer. This
-scans the buffer for regions which should be submode regions according
-to that class, and also remembers the class for later, so that new
-submode regions can be inserted and scanned for later.
-
-
-@node Selecting Classes, Insertion, Submode Classes, Basics
-@comment node-name, next, previous, up
-@section How MMM Mode selects submode classes
-
-Submode classes that apply to a buffer come from three sources:
-mode/extension-associated classes, file-local classes, and interactive
-MMM-ification (@pxref{Interactive}). Whenever MMM Mode is turned on in a
-buffer (@pxref{MMM Minor Mode}, and @ref{Global Mode}), it inspects the
-value of two variables to determine which classes to automatically apply
-to the buffer. This covers the first two sources; the latter is covered
-in a later chapter.
-
-@menu
-* File Classes:: Classes for a single file.
-* Mode-Ext Classes:: Classes for a given mode or extension.
-* Global Classes:: Classes for all MMM Mode buffers.
-@end menu
-
-
-@node File Classes, Mode-Ext Classes, Selecting Classes, Selecting Classes
-@comment node-name, next, previous, up
-@subsection File-Local Submode Classes
-
-@defvar mmm-classes
-This variable is always buffer-local when set. Its value should be
-either a single symbol or a list of symbols. Each symbol represents a
-submode class that is applied to the buffer.
-@end defvar
-
-@code{mmm-classes} is usually set in a file local variables list.
-@xref{File Variables, , , emacs, The Emacs Manual}. The easiest way to
-do this is for the first line of the file to contain the string
-@samp{-*- mmm-classes: @var{classes} -*-}, where @var{classes} is the
-desired value of @code{mmm-classes} for the file in question. It can
-also be done with a local variables list at the end of the file.
-
-
-@node Mode-Ext Classes, Global Classes, File Classes, Selecting Classes
-@comment node-name, next, previous, up
-@subsection Submode Classes Associated with Modes and Extensions
-
-@defopt mmm-mode-ext-classes-alist
-This global variable associates certain submode classes with major modes
-and/or file extensions. Its value is a list of elements of the form
-@code{(@var{mode} @var{ext} @var{class})}. Any buffer whose major mode
-is @var{mode} (a symbol) @emph{and} whose file name matches @var{ext} (a
-regular expression) will automatically have the submode class
-@var{class} applied to it.
-
-If @var{mode} is @code{nil}, then only @var{ext} is considered to
-determine if a buffer fits the criteria, and vice versa. Thus if both
-@var{mode} and @var{ext} are nil, then @var{class} is applied to
-@emph{all} buffers in which MMM Mode is on. Note that @var{ext} can be
-any regular expression, although its name indicates that it most often
-refers to the file extension.
-
-If @var{class} is the symbol @code{t}, then no submode class is actually
-applied for this association. However, if @code{mmm-global-mode} is
-non-@code{nil} and non-@code{t}, MMM Mode will be turned on in matching
-buffers even if there are no actual submode classes being applied.
-@xref{Global Mode}.
-@end defopt
-
-@defun mmm-add-mode-ext-class @var{mode} @var{ext} @var{class}
-This function adds an element to @code{mmm-mode-ext-classes-alist},
-associating the submode class @var{class} with the major mode @var{mode}
-and extension @var{ext}.
-
-Older versions of MMM Mode required this function to be used to control
-the value of @code{mmm-mode-ext-classes-alist}, rather than setting it
-directly. In this version it is provided purely for convenience and
-backward compatibility.
-@end defun
-
-
-@node Global Classes, , Mode-Ext Classes, Selecting Classes
-@comment node-name, next, previous, up
-@subsection Globally Applied Classes and the Universal Class
-
-In addition to file-local and mode-ext-associated submode classes, MMM
-Mode also allows you to specify that certain submode classes apply to
-@emph{all} buffers in which MMM Mode is enabled.
-
-@defopt mmm-global-classes
-This variable's value should be a list of submode classes that apply to
-all buffers with MMM Mode on. It can be overriden in a file local
-variables list, such as to disable global class for a specific file.
-Its default value is @code{(universal)}.
-@end defopt
-
-The default global class is the ``universal class'', which is defined in
-the file @file{mmm-univ.el} (loaded automatically), and allows the
-author of text to specify that a certain section of it be in a specific
-major mode. Thus, for example, when writing an email message that
-includes sample code, the author can allow readers of the message (who
-use emacs and MMM) to view the code in the appropriate major mode. The
-syntax used is @samp{@{%@var{mode}%@} ... @{%/@var{mode}%@}}, where
-@var{mode} should be the name of the major mode, with or without the
-customary @samp{-mode} suffix: for example, both @samp{cperl} and
-@samp{cperl-mode} are acceptable.
-
-The universal class also defines an insertion key, @samp{/}, which
-prompts for the submode to use. @xref{Insertion}. The universal class
-is most useful when @code{mmm-global-mode} is set to @code{t};
-@ref{Global Mode}.
-
-
-@node Insertion, Re-parsing, Selecting Classes, Basics
-@comment node-name, next, previous, up
-@section Inserting new submode regions
-
-So much for noticing submode regions already present when you open a
-file. When editing a file with MMM Mode on, you will often want to add a
-new submode region. MMM Mode provides several facilities to help you.
-The simplest is to just hit a few keys and have the region and its
-delimiters inserted for you.
-
-Each submode class can define an association of keystrokes with
-``skeletons'' to insert a submode region. If there are several submode
-classes enabled in a buffer, it is conceivable that the keys they use
-for insertion might conflict, but unlikely as most buffers will not use
-more than one or two submode classes groups.
-
-As an example of how insertion works, consider the Mason classes. In a
-buffer with MMM Mode enabled and Mason associated, the key sequence
-@kbd{C-c % p} inserts the following perl section (the semicolon is to
-prevent CPerl Mode from getting confused---@pxref{Mason}):
-
-@example
-<%perl>-<-;
--!-
-->-</%perl>
-@end example
-
-In this schematic representation, the string @samp{-!-} represents the
-position of point (the cursor), @samp{-<-} represents the beginning of
-the submode region, and @samp{->-} its end.
-
-All insertion keys come after the MMM Mode prefix keys (by default
-@kbd{C-c %}; @pxref{Key Bindings}) and are by default single characters
-such as @kbd{p}, @kbd{%}, and @kbd{i}. To avoid confusion, all the MMM
-Mode commands are bound by default to control characters (after the same
-prefix keys), such as @kbd{C-b}, @kbd{C-%} and @kbd{C-r}. This is a
-change from earlier versions of MMM Mode, and can be customized; see
-@ref{Key Bindings}.
-
-To find out what insertion keys are available, consult the documentation
-for the submode class you are using. If it is one of the classes
-supplied with MMM Mode, you can find it in this Info file.
-
-Because insertion keys are implemented with a ``default binding'' for
-flexibility, they do not show up in the output of @kbd{C-h m} and cannot
-be found with @kbd{C-h k}. For this reason, MMM Mode supplies the
-command @kbd{C-c % h} (@code{mmm-insertion-help} to view the available
-insertion keys.
-
-
-@node Re-parsing, Interactive, Insertion, Basics
-@comment node-name, next, previous, up
-@section Re-Parsing Submode Regions
-@cindex re-parsing submode regions
-@cindex parsing submode regions
-@cindex submode regions, re-parsing
-@cindex regions, submode, re-parsing
-@cindex submode regions, clearing
-@cindex clearing submode regions
-@cindex regions, submode, clearing
-@kindex C-c % C-b
-@kindex C-c % C-g
-@kindex C-c % C-%
-@kindex C-c % C-5
-@kindex C-c % C-k
-
-Describe @code{mmm-parse-buffer}, @code{mmm-parse-region},
-@code{mmm-parse-block}, and @code{mmm-clear-current-region}.
-
-@node Interactive, Global Mode, Re-parsing, Basics
-@comment node-name, next, previous, up
-@section Interactive MMM-ification Functions
-@cindex interactive mmm-ification
-@cindex mmm-ification, interactive
-@cindex mmm-ification by region
-@cindex mmm-ification by regexp
-@cindex mmm-ification by class
-@cindex region, mmm-ification by
-@cindex regexp, mmm-ification by
-@cindex class, mmm-ification by
-@kindex C-c % C-r
-@kindex C-c % C-c
-@kindex C-c % C-x
-@cindex mmm-ification, interactive history
-@cindex history of interactive mmm-ification
-@cindex interactive mmm-ification, history of
-
-There are several commands you can use to create submode regions
-interactively, rather than by applying a submode class to a buffer.
-These commands (in particular, @code{mmm-ify-region}), can be useful
-when editing a file or email message containing a snippet of code in
-some other language. Also see @ref{Global Classes}, for an alternate
-approach to the same problem.
-
-@table @kbd
-@item C-c % C-r
-Creates a submode region between point and mark. Prompts for the submode
-to use, which must be a valid Emacs major mode name, such as
-@code{emacs-lisp-mode} or @code{cperl-mode}. Adds markers to the
-interactive history. (@code{mmm-ify-region})
-
-@item C-c % C-c
-Applies an already-defined submode class to the buffer, which it prompts
-for. Adds this class to the interactive history.
-(@code{mmm-ify-by-class})
-
-@item C-c % C-x
-Scans the buffer for submode regions (prompts for the submode) using
-front and back regular expressions that it also prompts for. Briefly, it
-starts at the beginning of the buffer and searches for the front regexp.
-If it finds a match, it searches for the back regexp. If it finds a
-match for that as well, it makes a submode region between the two
-matches and continues searching until no more matches are found. Adds
-the regexps to the interactive history. (@code{mmm-ify-by-regexp})
-
-@end table
-
-These commands are also useful when designing a new submode class
-(@pxref{Submode Classes}). Working with the regexps interactively can
-make it easier to debug and tune the class before starting to use it on
-automatic. All these commands also add to value of the following
-variable.
-
-@defvar mmm-interactive-history
-Stores a history of all interactive mmm-ification that has been
-performed in the current buffer. This way, for example, the re-parsing
-functions (@pxref{Re-parsing}) will respect interactively added regions,
-and the insertion keys for classes that were added interactively are
-available.
-@end defvar
-
-If for any reason you want to ``wipe the slate clean'', this command
-should help you. By default, it has no key binding, so you must invoke
-it with @kbd{M-x mmm-clear-history @key{RET}}.
-
-@deffn Command mmm-clear-history
-Clears all history of interactive mmm-ification in the current buffer.
-This command does not affect existing submode regions; to remove them,
-you may want to re-parse the buffer with @kbd{C-c % C-b}
-(@code{mmm-parse-buffer}).
-@end deffn
-
-
-@node Global Mode, , Interactive, Basics
-@comment node-name, next, previous, up
-@section MMM Global Mode
-@cindex mode, mmm global
-@cindex global mmm mode
-@cindex mmm global mode
-@vindex mmm-never-modes
-
-When a file has associated submode classes (@pxref{Selecting Classes}),
-you may want MMM Mode to turn itself on and parse that file for submode
-regions automatically whenever it is opened in an Emacs buffer. The
-value of the following variable controls when MMM Mode turns itself on
-automatically.
-
-@defopt mmm-global-mode
-Do not be misled by the fact that this variable's name ends in
-@samp{-mode}: it is not a simple on/off switch. There are three possible
-(meanings of) values for it: @code{t}, @code{nil}, and anything else.
-
-When this variable is @code{nil}, MMM Mode is never enabled
-automatically. If it is enabled manually, such as by typing @kbd{M-x
-mmm-mode}, any submode classes associated with the buffer will still be
-used, however.
-
-When this variable is @code{t}, MMM Mode is enabled automatically in
-@emph{all} buffers, including those not visiting files, except those
-whose major mode is an element of @code{mmm-never-modes}. The default
-value of this variable contains modes such as @code{help-mode} and
-@code{dired-mode} in which most users would never want MMM Mode, and
-in which MMM might cause problems.
-
-When this variable is neither @code{nil} nor @code{t}, MMM Mode is
-enabled automatically in all buffers that would have associated submode
-classes; i.e. only if there would be something for it to do. The value
-of @code{mmm-never-modes} is still respected, however. Note that this
-can include buffers not visiting files, if that buffer's major mode is
-present in @code{mmm-mode-ext-classes-alist} with a @code{nil} value for
-@var{ext} (@pxref{Mode-Ext Classes}). Submode class values of @code{t}
-in @code{mmm-mode-ext-classes-alist} cause MMM Mode to be enabled in
-matching buffers, but supply no submode classes to be applied.
-@end defopt
-
-@menu
-* Major Mode Hook:: Using MMM's Major Mode Hook
-@end menu
-
-
-@node Major Mode Hook, , Global Mode, Global Mode
-@comment node-name, next, previous, up
-@subsection The Major Mode Hook
-@cindex hook, major mode
-@cindex major mode hook
-@vindex mmm-major-mode-hook
-
-This section is intended for users who understand Emacs Lisp and want to
-know how MMM Global Mode is implemented, and perhaps use the same
-technique. In fact, MMM Mode exports a hook variable that you can use
-easily, without understanding any of the details---see below.
-
-In order to enable itself in @emph{all} buffers, however, MMM Mode has
-to hook itself into all major modes. Global Font Lock Mode from the
-standard Emacs distribution (@pxref{Font Lock, , , emacs, The Emacs
-Manual}) has a similar problem, and solves it by adding a function to
-@code{change-major-mode-hook}, which is run by
-@code{kill-all-local-variables}, which is run in turn by all major mode
-functions at the @emph{beginning}. This function stores a list of which
-buffers need fontification. It then adds a different function to
-@code{post-command-hook}, which checks if the current buffer needs
-fontification, and if so performs it. MMM Global Mode uses the same
-technique.
-
-In the interests of generality, and for your use, the function that MMM
-Mode runs in @code{post-command-hook} (@code{mmm-run-major-mode-hook})
-is not specific to MMM Mode, but rather runs the hook variable
-@code{mmm-major-mode-hook}, which by default contains a function
-(@code{mmm-mode-on-maybe}) which possibly turns MMM Mode on, depending
-on the value of @code{mmm-global-mode}. Thus, to run another function
-in all major modes, all you need to do is add it to this hook. For
-example, the following line in an initialization file will turn on Auto
-Fill Mode (@pxref{Auto Fill, , , emacs, The Emacs Manual}) in all
-buffers:
-
-@lisp
-(add-hook 'mmm-major-mode-hook 'turn-on-auto-fill)
-@end lisp
-
-@node Customizing, Supplied Classes, Basics, Top
-@comment node-name, next, previous, up
-@chapter Customizing MMM Mode
-
-This chapter explains how to customize the appearance and functioning of
-MMM Mode however you want.
-
-@menu
-* Region Coloring:: Changing or removing background colors.
-* Preferred Modes:: Choosing which major modes to use.
-* Mode Line:: What is displayed in the mode line.
-* Key Bindings:: Customizing the MMM Mode key bindings.
-* Local Variables:: What local variables are saved for submodes.
-* Changing Classes:: Changing the supplied submode classes.
-* Hooks:: How to make MMM Mode run your code.
-@end menu
-
-@node Region Coloring, Preferred Modes, Customizing, Customizing
-@comment node-name, next, previous, up
-@section Customizing Region Coloring
-@cindex faces, submode
-@cindex submode faces
-@cindex customizing submode faces
-@cindex default submode face
-
-By default, MMM Mode highlights all submode regions with a background
-color. There are three levels of this decoration, controlled by the
-following variable:
-
-@defopt mmm-submode-decoration-level
-This variable controls the level of coloring of submode regions. It
-should be one of the integers 0, 1, or 2, representing (respectively)
-none, low, and high coloring.
-@end defopt
-
-No coloring means exactly that. Submode regions have the same
-background as the rest of the text. This produces the minimal
-interference with font-lock coloration. In particular, if you want to
-use background colors for font-lock, this may be a good idea, because
-the submode highlight, if present, overrides any font-lock background
-coloring.
-
-Low coloring uses the same background color for all submode regions.
-This color is specified with the face @code{mmm-default-submode-face}
-(@pxref{Faces, , , emacs, The Emacs Manual}) which can be customized,
-either through the Emacs ``customize'' interface or using direct Lisp
-commands such as @code{set-face-background}. Of course, other aspects
-of the face can also be set, such as the foreground color, bold,
-underline, etc. These are more likely to conflict with font-lock,
-however, so only a background color is recommended.
-
-High coloring uses multiple background colors, depending on the function
-of the submode region. The recognized functions and their meanings are
-as follows:
-
-@table @samp
-@item init
-Code that is executed at the beginning of (something), as initialization
-of some sort.
-
-@item cleanup
-Code that is executed at the end of (something), as some sort of clean
-up facility.
-
-@item declaration
-Code that provides declarations of some sort, perhaps global or local
-arguments, variables, or methods.
-
-@item comment
-Text that is not executed as code, but instead serves to document the
-code around it. Submode regions of this function often use a mode such
-as Text Mode rather than a programming language mode.
-
-@item output
-An expression that is evaluated and its value interpolated into the
-output produced.
-
-@item code
-Executed code not falling under any other category.
-
-@item special
-Submode regions not falling under any other category, such as component
-calls.
-
-@end table
-
-The different background colors are provided by the faces
-@code{mmm-@var{function}-submode-face}, which can be customized in the
-same way as @code{mmm-default-submode-face}.
-
-
-@node Preferred Modes, Mode Line, Region Coloring, Customizing
-@comment node-name, next, previous, up
-@section Preferred Major Modes
-
-Certain of the supplied submode classes know only the language that
-certain sections are written in, but not what major mode you prefer to
-use to edit such code. For example, many people prefer CPerl mode over
-Perl mode; you may have a special mode for Javascript or just use C++
-mode. This variable allows you to tell submodes such as Mason
-(@pxref{Mason}) and Embedded Javascript (@pxref{Javascript}) what major
-mode to use for the submodes:
-
-@defopt mmm-major-mode-preferences
-The elements of this list are cons cells of the form
-@code{(@var{language} . @var{mode})}. @var{language} should be a symbol
-such as @code{perl}, @code{html-js}, or @code{java}, while @var{mode}
-should be the name of a major mode such as @code{perl-mode},
-@code{cperl-mode}, @code{javascript-mode}, or @code{c++-mode}.
-
-You probably won't have to set this variable at all; MMM tries to make
-intelligent guesses about what modes you prefer. For example, if a
-function called @code{javascript-mode} exists, it is chosen, otherwise
-@code{c++-mode} is used. Similarly for @code{jde-mode} and
-@code{java-mode}.
-@end defopt
-
-If you do need to change the defaults, you may find the following
-function convenient.
-
-@defun mmm-set-major-mode-preferences @var{language} @var{mode} &optional @var{default}
-Set the preferred major mode for LANGUAGE to MODE. If there is already
-a mode specified for LANGUAGE, and DEFAULT is nil or unsupplied, then it
-is changed. If DEFAULT is non-nil, then any existing mode is unchanged.
-This is used by packages to ensure that some mode is present, but not
-override any user-specified mode. If you are not writing a submode
-class, you should ignore the third argument.
-@end defun
-
-Thus, for example, to use @code{my-java-mode} for Java code, you would
-use the following line:
-
-@lisp
-(mmm-set-major-mode-preferences 'java 'my-java-mode)
-@end lisp
-
-
-@node Mode Line, Key Bindings, Preferred Modes, Customizing
-@comment node-name, next, previous, up
-@section Customizing the Mode Line Display
-
-By default, when in a submode region, MMM Mode changes the section of
-the mode line (@pxref{Mode Line, , , emacs, The Emacs Manual}) that
-normally displays the major mode name---for example, @samp{HTML}---to
-instead show both the dominant major mode and the currently active
-submode---for example, @samp{HTML[CPerl]}. You can change this format,
-however.
-
-@defopt mmm-submode-mode-line-format
-The value of this variable should be a string containing one or both of
-the escape sequences @samp{~M} and @samp{~m}. The string displayed in
-the major mode section of the mode line when in a submode is obtained by
-replacing all occurrences of @samp{~M} with the dominant major mode name
-and @samp{~m} with the currently active submode name. For example, to
-display only the currently active submode, set this variable to
-@samp{~m}. The default value is @samp{~M[~m]}.
-@end defopt
-
-The MMM minor mode also normally displays the string @samp{MMM} in the
-minor mode section of the mode line to indicate when it is active. You
-can customize or disable this as well.
-
-@defopt mmm-mode-string
-This string is displayed in the minor mode section of the mode line when
-the MMM minor mode is active. If nonempty, it should begin with a space
-to separate the MMM indicator from that of other minor modes. To
-eliminate the indicator entirely, set this variable to the empty string.
-@end defopt
-
-
-@node Key Bindings, Local Variables, Mode Line, Customizing
-@comment node-name, next, previous, up
-@section Customizing the MMM Mode Key Bindings
-
-The default MMM Mode key bindings are explained in @ref{MMM Mode Keys},
-and in @ref{Insertion}. There are a couple of ways to customize these
-bindings.
-
-@defopt mmm-mode-prefix-key
-The value of this variable (default is @kbd{C-c %}) should be a key
-sequence to use as the prefix for the MMM Mode keymap. Minor modes
-typically use @kbd{C-c} followed by a punctuation character, but you can
-change it to any user-available key sequence. To have an effect, this
-variable should be set before MMM Mode is loaded.
-@end defopt
-
-@defopt mmm-use-old-command-keys
-When this variable is @code{nil}, MMM Mode commands use the control
-modifier and insertion keys no modifier. Any other value switches the
-two, so that @code{mmm-parse-buffer}, for example, is bound to @kbd{C-c
-% b}, while perl-section insertion in the Mason class is bound to
-@kbd{C-c % C-p}. This variable should be set before MMM Mode is loaded
-to have an effect.
-@end defopt
-
-When MMM is loaded, it uses the value of @code{mmm-use-old-command-keys}
-to set the values of the variables @code{mmm-command-modifiers} and
-@code{mmm-insert-modifiers}, so if you prefer you can set these
-variables instead. They should each be a list of key modifiers, such as
-@code{(control)} or @code{()}. The Meta modifier is used in some of the
-command and insertion keys, so it should not be used, and the Shift
-modifier is not particularly portable between Emacsen---if it works for
-you, feel free to use it. Other modifiers, such as Hyper and Super, are
-not universally available, but are valid when present.
-
-
-@node Local Variables, Changing Classes, Key Bindings, Customizing
-@comment node-name, next, previous, up
-@section Changing Saved Local Variables
-
-A lot of the functionality of MMM Mode---that which makes the major mode
-appear to change---is implemented by saving and restoring the values of
-local variables, or pseudo-variables. You can customize what variables
-are saved, and how, with the following variable.
-
-@defvar mmm-save-local-variables
-At its simplest, this is a list each of whose elements is a buffer-local
-variable whose value is saved and restored for each major mode. Each
-elements can also, however, be a list whose first element is the
-variable symbol and whose subsequent elements specify how and where the
-variable is to be saved. The second element of the list, if present,
-should be one of the symbols @code{global}, @code{buffer}, or
-@code{region}. If not present, the default value is @code{global}. The
-third element, if present, should be a list of major mode symbols in
-which to save the variable. In the list form, the variable symbol
-itself can be replaced with a cons cell of two functions, one to get the
-value and one to set the value. This is called a ``pseudo-variable''.
-@end defvar
-
-Globally saved variables are the same in all (MMM-controlled) buffers
-and submode regions of each major mode listed in the third argument, or
-all major modes if it is @code{t} or not present. Buffer-saved
-variables are the same in all submode regions of a given major mode in
-each buffer, and region-saved variables can be different for each
-submode region.
-
-Pseudo-variables are used, for example, to save and restore the syntax
-table (@pxref{Syntax, , , emacs, The Emacs Manual}) and mode keymaps
-(@pxref{Keymaps, , , emacs, The Emacs Manual}).
-
-
-@node Changing Classes, Hooks, Local Variables, Customizing
-@comment node-name, next, previous, up
-@section Changing the Supplied Submode Classes
-
-If you need to use MMM with a syntax for which a submode class is not
-supplied, and you have some facility with Emacs Lisp, you can write your
-own; see @ref{Writing Classes}. However, sometimes you will only want
-to make a slight change to one of the supplied submode classes. You can
-do this, after that class is loaded, with the following functions.
-
-@defun mmm-set-class-parameter @var{class} @var{param} @var{value}
-Set the value of the keyword parameter @var{param} of the submode class
-@var{class} to @var{value}. @xref{Writing Classes}, for an explanation
-of the meaning of each keyword parameter. This creates a new parameter
-if one is not already present in the class.
-@end defun
-
-@defun mmm-get-class-parameter @var{class} @var{param}
-Get the value of the keyword parameter @var{param} for the submode class
-@var{class}. Returns @code{nil} if there is no such parameter.
-@end defun
-
-
-
-@node Hooks, , Changing Classes, Customizing
-@comment node-name, next, previous, up
-@section Hooks Provided by MMM Mode
-
-MMM Mode defines several hook variables (@pxref{Hooks, , , emacs, The
-Emacs Manual}) which are run at different times. The most often used is
-@code{mmm-major-mode-hook} which is described in @ref{Major Mode Hook},
-but there are a couple others.
-
-@defvar mmm-mode-hook
-This normal hook is run whenever MMM Mode is enabled in a buffer.
-@end defvar
-
-@defvar mmm-@var{major-mode}-hook
-This is actually a whole set of hook variables, a different one for
-every major mode. Whenever MMM Mode is enabled in a buffer, the
-corresponding hook variable for the dominant major mode is run.
-@end defvar
-
-@defvar mmm-@var{submode}-submode-hook
-Again, this is a set of one hook variable per major mode. These hooks
-are run whenever a submode region of the corresponding major mode is
-created in any buffer, with point at the start of the new submode
-region.
-@end defvar
-
-@defvar mmm-@var{class}-class-hook
-This is a set of one hook variable per submode class. These hooks are
-run when a submode class is first applied to a given buffer.
-@end defvar
-
-Submode classes also have a @code{:creation-hook} parameter which should
-be a function to run whenever a submode region is created with that
-class, with point at the beginning of the submode region. This can be
-set for supplied submode classes with @code{mmm-set-class-parameter};
-@ref{Changing Classes}.
-
-
-@node Supplied Classes, Writing Classes, Customizing, Top
-@comment node-name, next, previous, up
-@chapter Supplied Submode Classes
-
-This chapter describes the submode classes that are supplied with MMM
-Mode.
-
-@menu
-* Mason:: Mason server-side Perl in HTML.
-* File Variables:: Elisp code in File Variables.
-* Here-documents:: Code in shell and Perl here-documents.
-* Javascript:: Javascript embedded in HTML.
-* Embedded CSS:: CSS Styles embedded in HTML.
-* Embperl:: Another syntax for Perl in HTML.
-* ePerl:: A general Perl-embedding syntax.
-* JSP:: Java code embedded in HTML.
-* RPM:: Shell scripts in RPM Spec Files.
-* Noweb:: Noweb literate programs.
-@end menu
-
-@node Mason, File Variables, Supplied Classes, Supplied Classes
-@comment node-name, next, previous, up
-@section Mason: Perl in HTML
-
-Mason is a syntax to embed Perl code in HTML and other documents. See
-@uref{http://www.masonhq.com} for more information. The submode class
-for Mason components is called `mason' and is loaded on demand from
-`mmm-mason.el'. The current Mason class is intended to correctly
-recognize all syntax valid in Mason @value{MASON_VERSION}. There are
-insertion keys for most of the available syntax; use
-@code{mmm-insertion-help} (@kbd{C-c % h} by default) with Mason on to
-get a list.
-
-If you want to have mason submodes automatically in all Mason files, you
-can use automatic mode and filename associations; the details depend on
-what you call your Mason components and what major mode you use.
-@xref{Mode-Ext Classes}. If you use an extension for your Mason files
-that emacs does not automatically place in your preferred HTML Mode, you
-will probably want to associate that extension with your HTML Mode as
-well; @ref{Choosing Modes, , , emacs, The Emacs Manual}. This also goes
-for ``special'' Mason files such as autohandlers and dhandlers.
-
-The Perl mode used is controlled by the user: @xref{Preferred Modes}.
-The default is to use CPerl mode, if present. Unfortunately, there are
-also certain problems with CPerl mode in submode regions. (Not to say
-that the original perl-mode would do any better---it hasn't been much
-tried.) First of all, the first line of a Perl section is usually
-indented as if it were a continuation line. A fix for this is to start
-with a semicolon on the first line. The insertion key commands do this
-whenever the Mason syntax allows it.
-
-@example
-<%perl>;
-print $var;
-</%perl>
-@end example
-
-In addition, some users have reported that the CPerl indentation
-sometimes does not work. This problem has not yet been tracked down,
-however, and more data about when it happens would be helpful.
-
-Some people have reported problems using PSGML with Mason. Adding the
-following line to a @file{.emacs} file should suffice to turn PSGML off
-and cause emacs to use a simpler HTML mode:
-
-@lisp
-(autoload 'html-mode "sgml-mode" "HTML Mode" t)
-@end lisp
-
-Earlier versions of PSGML may require instead the following fix:
-
-@lisp
-(delete '("\\.html$" . sgml-html-mode) auto-mode-alist)
-(delete '("\\.shtml$" . sgml-html-mode) auto-mode-alist)
-@end lisp
-
-Other users report using PSGML with Mason and MMM Mode without
-difficulty. If you don't have problems and want to use PSGML, you may
-need to replace @code{html-mode} in the suggested code with
-@code{sgml-html-mode}. (Depending on your version of PSGML, this may
-not be necessary.) Similarly, if you are using XEmacs and want to use
-the alternate HTML mode @code{hm--html-mode}, replace @code{html-mode}
-with that symbol.
-
-One problem that crops up when using PSGML with Mason is that even
-ignoring the special tags and Perl code (which, as I've said, haven't
-caused me any problems), Mason components often are not a complete SGML
-document. For instance, my autohandlers often say
-
-@example
-<body>
- <% $m->call_next %>
-</body>
-@end example
-
-in which case the actual components contain no doctype declaration,
-@code{<html>}, @code{<head>}, or @code{<body>}, confusing PSGML. One
-solution I've found is to use the variable @code{sgml-parent-document}
-in such incomplete components; try, for example, these lines at the end
-of a component.
-
-@example
-%# Local Variables:
-%# sgml-parent-document: ("autohandler" "body" nil ("body"))
-%# sgml-doctype: "/top/level/autohandler"
-%# End:
-@end example
-
-This tells PSGML that the current file is a sub-document of the file
-@file{autohandler} and is included inside a @code{<body>} tag, thus
-alleviating its confusion.
-
-
-@node File Variables, Here-documents, Mason, Supplied Classes
-@comment node-name, next, previous, up
-@section Elisp in a Local Variables List
-
-Emacs allows the author of a file to specify major and minor modes to be
-used while editing that file, as well as specifying values for other
-local Elisp variables, with a File Variables list. @xref{File
-Variables, , , emacs, The Emacs Manual}. Since file variables values
-are Elisp objects (and with the @code{eval} special ``variable'', they
-are forms to be evaluated), one might want to edit them in
-@code{emacs-lisp-mode}. The submode class @code{file-variables} allows
-this, and is suitable for turning on in a given file with
-@code{mmm-classes}, or in all files with @code{mmm-global-classes}.
-
-
-@node Here-documents, Javascript, File Variables, Supplied Classes
-@comment node-name, next, previous, up
-@section Here-documents
-
-One of the long-time standard syntaxes for outputting large amounts of
-code (or text, or HTML, or whatever) from a script (notably shell
-scripts and Perl scripts) is the here-document syntax:
-
-@example
-print <<END_HTML;
-<html>
- <head>
- <title>Test Page</title>
- </head>
- <body>
-END_HTML
-@end example
-
-The @code{here-doc} submode class recognizes this syntax, and can even
-guess the correct submode to use in many cases. For instance, it would
-put the above example in @code{html-mode}, noticing the string
-@samp{HTML} in the name of the here-document. If you use less than
-evocative here-document names, or if the submode is recognized
-incorrectly for any other reason, you can tell it explicitly what
-submode to use.
-
-@defopt mmm-here-doc-mode-alist
-The value of this variable should be an alist, each element a cons pair
-associating a regular expression to a submode symbol. Whenever a
-here-document name matches one of these regexps, the corresponding
-submode is applied. For example, if this variable contains the element
-@code{("CODE" . cc-mode)}, then any here-document whose name contains
-the string @samp{CODE} will be put in @code{cc-mode}. The value of this
-variable overrides any guessing that the @code{here-doc} submode class
-would do otherwise.
-@end defopt
-
-
-@node Javascript, Embedded CSS, Here-documents, Supplied Classes
-@comment node-name, next, previous, up
-@section Javascript in HTML
-
-The submode class @code{html-js} allows for embedding Javascript code in
-HTML documents. It recognizes both this syntax:
-
-@example
-<script language="Javascript">
-function foo(...) @{
- ...
-@}
-</script>
-@end example
-
-and this syntax:
-
-@example
-<input type="button" onClick="validate();">
-@end example
-
-The mode used for Javascript regions is controlled by the user;
-@xref{Preferred Modes}.
-
-
-@node Embedded CSS, Embperl, Javascript, Supplied Classes
-@comment node-name, next, previous, up
-@section CSS embedded in HTML
-
-CSS (Cascading Style Sheets) can also be embedded in HTML. The
-@code{embedded-css} submode class recognizes this syntax:
-
-@example
-<style>
-h1 @{
- ...
-@}
-</style>
-@end example
-
-It uses @code{css-mode} if present, @code{c++-mode} otherwise. This can
-be customized: @xref{Preferred Modes}.
-
-
-@node Embperl, ePerl, Embedded CSS, Supplied Classes
-@comment node-name, next, previous, up
-@section Embperl: More Perl in HTML
-
-Embperl is another syntax for embedding Perl in HTML. See
-@uref{http://perl.apache.org/embperl} for more information. The
-@code{embperl} submode class recognizes most if not all of the Embperl
-embedding syntax. Its Perl mode is also controllable by the user;
-@xref{Preferred Modes}.
-
-
-@node ePerl, JSP, Embperl, Supplied Classes
-@comment node-name, next, previous, up
-@section ePerl: General Perl Embedding
-
-Yet another syntax for embedding Perl is called ePerl. See
-@uref{http://www.engelschall.com/sw/eperl/} for more information. The
-@code{eperl} submode class handles this syntax, using the Perl mode
-specified by the user; @xref{Preferred Modes}.
-
-
-@node JSP, RPM, ePerl, Supplied Classes
-@comment node-name, next, previous, up
-@section JSP: Java Embedded in HTML
-
-JSP (Java Server Pages) is a syntax for embedding Java code in HTML.
-The submode class @code{jsp} handles this syntax, using a Java mode
-specified by the user; @xref{Preferred Modes}. The default is
-@code{jde-mode} if present, otherwise @code{java-mode}.
-
-
-@node RPM, Noweb, JSP, Supplied Classes
-@comment node-name, next, previous, up
-@section RPM Spec Files
-
-@file{mmm-rpm.el} contains the definition of an MMM Mode submode class
-for editing shell script sections within RPM (Redhat Package Manager)
-spec files. It is recommended for use in combination with
-@file{rpm-spec-mode.el} by Stig Bjørlykke <stigb@@tihlde.hist.no> and
-Steve Sanbeg <sanbeg@@dset.com>
-(@uref{http://www.xemacs.org/~stigb/rpm-spec-mode.el}).
-
-Suggested setup code:
-
-@lisp
-(add-to-list 'mmm-mode-ext-classes-alist
- '(rpm-spec-mode "\\.spec\\'" rpm-sh))
-@end lisp
-
-Thanks to Marcus Harnisch <Marcus.Harnisch@@gmx.net> for contributing
-this submode class.
-
-@node Noweb, , RPM, Supplied Classes
-@comment node-name, next, previous, up
-@section Noweb literate programming
-
-@file{mmm-noweb.el} contains the definition of an MMM Mode submode
-class for editing Noweb documents. Most Noweb documents use \LaTeX
-for the documentation chunks. Code chunks in Noweb are
-document-specific, and the mode may be set with a local variable
-setting in the document. The variable @var{mmm-noweb-code-mode}
-controls the global code chunk mode. Since Noweb files may have many
-languages in their code chunks, this mode also allows setting the mode
-by specifying a mode in the first line or two of a code chunk, using
-the normal Emacs first-line mode setting syntax. Note that this
-first-line mode setting only matches a single word for the mode name,
-and does not support the variable name setting of the generalized
-first file line syntax.
-
-@verbatim
-% -*- mode: latex; mmm-noweb-code-mode: c++; -*-
-% First chunk delimiter!
-@
-\noweboptions{smallcode}
-
-\title{Sample Noweb File}
-\author{Joe Kelsey\\
-\nwanchorto{mailto:bozo@bozo.bozo}{\tt bozo@bozo.bozo}}
-\maketitle
-
-@
-\section{Introduction}
-Normal noweb documentation for the required [[*]] chunk.
-<<*>>=
-// C++ mode here!
-// We might list the program here, or simply included chunks.
-<<myfile.cc>>
-@ %def myfile.cc
-
-@
-\section{[[myfile.cc]]}
-This is [[myfile.cc]]. MMM noweb-mode understands code quotes in
-documentation.
-<<myfile.cc>>=
-// This section is indented separately from previous.
-@
-
-@
-\section{A Perl Chunk}
-We need a Perl chunk.
-<<myfile.pl>>=
-#!/usr/bin/perl
-# -*- perl -*-
-# Each differently named chunk is flowed separately.
-@
-
-\section{Finish [[myfile.cc]]}
-When we resume a previously defined chunk, they are indented together.
-<<myfile.cc>>=
-// Pick up where we left off...
-@
-
-@end verbatim
-
-The quoted code chunks inside documentation chunks are given the mode
-found in the variable @var{mmm-noweb-quote-mode}, if set, or the value
-in @var{mmm-noweb-code-mode} otherwise. Also, each quoted chunk is
-set to have a unique name to prevent them from being indented as a
-unit.
-
-Suggested setup code:
-@lisp
-(mmm-add-mode-ext-class 'latex-mode "\\.nw\\'" 'noweb)
-(add-to-list 'auto-mode-alist '("\\.nw\\'" . latex-mode))
-@end lisp
-
-In mmm-noweb buffers, each differently-named code chunk has a
-different @code{:name}, allowing all chunks with the same name to get
-indented together.
-
-This mode also supplies special paragraph filling operations for use
-in documentation areas of the buffer. From a primary-mode
-(@code{latex-mode, , emacs}) region, pressing @kbd{C-c % C-q} will mark all
-submode regions with word syntax (@code{mmm-word-other-regions}), fill
-the current paragraph (@code{(fill-paragraph justify)}), and remove the
-syntax markings (@code{mmm-undo-syntax-other-regions}).
-
-Thanks to Joe Kelsey <joe@@zircon.seattle.wa.us> for contributing this
-class.
-
-
-@node Writing Classes, Indices, Supplied Classes, Top
-@comment node-name, next, previous, up
-@chapter Writing Submode Classes
-
-Sometimes (perhaps often) you may want to use MMM with a syntax for
-which it is suited, but for which no submode is supplied. In such cases
-you may have to write your own submode class. This chapter briefly
-describes how to write a submode class, from the basic to the advanced,
-with examples.
-
-@menu
-* Basic Classes:: Writing a simple submode class.
-* Paired Delimiters:: Matching paired delimiters.
-* Region Placement:: Placing the region more accurately.
-* Submode Groups:: Grouping several classes together.
-* Calculated Submodes:: Deciding the submode at run-time.
-* Calculated Faces:: Deciding the display face at run-time.
-* Insertion Commands:: Inserting regions automatically.
-* Region Names:: Naming regions for syntax grouping.
-* Other Hooks:: Running code at arbitrary points.
-* Delimiters:: Controlling delimiter overlays.
-* Misc Keywords:: Other miscellaneous options.
-@end menu
-
-@node Basic Classes, Paired Delimiters, Writing Classes, Writing Classes
-@comment node-name, next, previous, up
-@section Writing Basic Submode Classes
-@cindex simple submode classes
-@cindex submode classes, simple
-
-Writing a submode class can become rather complex, if the syntax to
-match is complicated and you want to take advantage of some of MMM
-Mode's extra features. But a simple submode class is not particularly
-difficult to write. This section describes the basics of writing
-submode classes.
-
-Submode classes are stored in the variable @code{mmm-classes-alist}.
-Each element of this list represents a single submode class. For
-convenience, the function @code{mmm-add-classes} takes a list of submode
-classes and adds them all to this alist. Each class is represented by a
-list containing the class name---a symbol such as @code{mason} or
-@code{html-js}---followed by pairs of keywords and arguments called a
-@dfn{class specifier}. For example, consider the specifier for the
-submode class @code{embedded-css}:
-
-@lisp
-(mmm-add-classes
- '((embedded-css
- :submode css
- :face mmm-declaration-submode-face
- :front "<style[^>]*>"
- :back "</style>")))
-@end lisp
-
-The name of the submode is @code{embedded-css}, the first element of the
-list. The rest of the list consists of pairs of keywords (symbols
-beginning with a colon) such as @code{:submode} and @code{:front}, and
-arguments, such as @code{css} and @code{"<style[^>]*>"}. It is the
-keywords and arguments that specify how the submode works. The order of
-keywords is not important; all that matters is the arguments that follow
-them.
-
-The three most important keywords are @code{:submode}, @code{:front},
-and @code{:back}. The argument following @code{:submode} names the
-major mode to use in submode regions. It can be either a symbol naming
-a major mode, such as @code{text-mode} or @code{c++-mode}, or a symbol
-to look up in @code{mmm-major-mode-preferences} (@pxref{Preferred
-Modes}) such as @code{css}, as in this case.
-
-The arguments following @code{:front} and @code{:back} are regular
-expressions (@pxref{Regexps, , , emacs, The Emacs Manual}) that should
-match the delimiter strings which begin and end the submode regions. In
-our example, CSS regions begin with a @samp{<style>} tag, possibly with
-parameters, and end with a @samp{</style>} tag.
-
-The argument following @code{:face} specifies the face (background
-color) to use when @code{mmm-submode-decoration-level} is 2 (high
-coloring). @xref{Region Coloring}, for a list of canonical available
-faces.
-
-There are many more possible keywords arguments. In the following
-sections, we will examine each of them and their uses in writing submode
-classes.
-
-
-@node Paired Delimiters, Region Placement, Basic Classes, Writing Classes
-@comment node-name, next, previous, up
-@section Matching Paired Delimiters
-
-A simple pair of regular expressions does not always suffice to exactly
-specify the beginning and end of submode regions correctly. For this
-reason, there are several other possible keyword/argument pairs which
-influence the matching process.
-
-Many submode regions are marked by paired delimiters. For example, the
-tags used by Mason (@pxref{Mason}) include @samp{<%init>...</%init>} and
-@samp{<%args>...</%args>}. It would be possible to write a separate
-submode class for each type of region, but there is an easier way: the
-keyword argument @code{:save-matches}. If supplied and non-nil, it
-causes the regular expression @code{:back}, before being searched for,
-to be formatted by replacing all strings of the form @samp{~@var{N}}
-(where @var{N} is an integer) with the corresponding numbered
-subexpression of the match for @code{:front}. As an example, here is an
-excerpt from the @code{here-doc} submode class. @xref{Here-documents},
-for more information about this submode.
-
-@lisp
-:front "<<\\([a-zA-Z0-9_-]+\\)"
-:back "^~1$"
-:save-matches 1
-@end lisp
-
-The regular expression for @code{:front} matches @samp{<<} followed by a
-string of one or more alphanumeric characters, underscores, and dashes.
-The latter string, which happens to be the name of the here-document, is
-saved as the first subexpression, since it is surrounded by
-@samp{\(...\)}. Then, because the value of @code{:save-matches} is
-present and non-nil, the string @samp{~1} is replaced in the value of
-@code{:back} by the name of the here-document, thus creating a regular
-expression to match the correct ending delimiter.
-
-
-@node Region Placement, Submode Groups, Paired Delimiters, Writing Classes
-@comment node-name, next, previous, up
-@section Placing Submode Regions Precisely
-
-Normally, a submode region begins immediately after the end of the
-string matching the @code{:front} regular expression and ends
-immediately before the beginning of the string matching the @code{:back}
-regular expression. This can be changed with the keywords
-@code{:include-front} and @code{:include-back}. If their arguments are
-@code{nil}, or they do not appear, the default behavior is unchanged.
-But if the argument of @code{:include-front} (respectively,
-@code{:include-back}) is non-nil, the submode region will begin
-(respectively, end) immediately before (respectively, after) the string
-matching the @code{:front} (respectively, @code{:back}) regular
-expression. In other words, these keywords specify whether or not the
-delimiter strings are @emph{included} in the submode region.
-
-When @code{:front} and @code{:back} are regexps, the delimiter is
-normally considered to be the entire matched region. This can be
-changed using the @code{:front-match} and @code{:back-match}
-keywords. The values of the keywords is a number specifying the
-submatch. This defaults to zero (specifying the whole regexp).
-
-Two more keywords which affect the placement of the region
-@code{:front-offset} and @code{:back-offset}, which both take integers
-as arguments. The argument of @code{:front-offset} (respectively,
-@code{:back-offset}) gives the distance in characters from the beginning
-(respectively, ending) location specified so far, to the actual point
-where the submode region begins (respectively, ends). For example, if
-@code{:include-front} is nil or unsupplied and @code{:front-offset} is
-2, the submode region will begin two characters after the end of the
-match for @code{:front}, and if @code{:include-back} is non-nil and
-@code{:back-offset} is -1, the region will end one character before the
-end of the match for @code{:back}.
-
-In addition to integers, the arguments of @code{:front-offset} and
-@code{:back-offset} can be functions which are invoked to move the point
-from the position specified by the matches and inclusions to the correct
-beginning or end of the submode region, or lists whose elements are
-either functions or numbers and whose effects are applied in sequence.
-To help disentangle these options, here is another excerpt from the
-@code{here-doc} submode class:
-
-@lisp
-:front "<<\\([a-zA-Z0-9_-]+\\)"
-:front-offset (end-of-line 1)
-:back "^~1$"
-:save-matches 1
-@end lisp
-
-Here the value of @code{:front-offset} is the list @code{(end-of-line
-1)}, meaning that from the end of the match for @code{:front}, go to the
-end of the line, and then one more character forward (thus to the
-beginning of the next line), and begin the submode region there. This
-coincides with the normal behavior of here-documents: they begin on the
-following line and go until the ending flag.
-
-If the @code{:back} should not be able to start a new submode region,
-set the @code{:end-not-begin} keyword to non-nil.
-
-@node Submode Groups, Calculated Submodes, Region Placement, Writing Classes
-@comment node-name, next, previous, up
-@section Defining Groups of Submodes
-
-Sometimes more than one submode class is required to accurately reflect
-the behavior of a single type of syntax. For example, Mason has three
-very different types of Perl regions: blocks bounded by matched tags
-such as @samp{<%perl>...</%perl>}, inline output expressions bounded by
-@samp{<%...%>}, and single lines of code which simply begin with a
-@samp{%} character. In cases like these, it is possible to specify an
-``umbrella'' class, to turn all these classes on or off together.
-
-@defun mmm-add-group @var{group} @var{classes}
-The submode classes @var{classes}, which should be a list of lists,
-similar to what might be passed to @code{mmm-add-classes}, are added
-just as by that function. Furthermore, another class named
-@var{group} is added, which encompasses all the classes in
-@var{classes}.
-@end defun
-
-Technically, an group class is specified with a @code{:classes} keyword
-argument, and the subsidiary classes are given a non-nil @code{:private}
-keyword argument to make them invisible. But in general, all you should
-ever need to know is how to invoke the function above.
-
-@defun mmm-add-to-group @var{group} @var{classes}
-Adds a list of classes to an already existing group. This can be
-used, for instance, to add a new quoting definition to @var{html-js}
-using this example to add the quote characters ``%=%'':
-
-@lisp
-(mmm-add-to-group 'html-js '((js-html
- :submode javascript
- :face mmm-code-submode-face
- :front "%=%"
- :back "%=%"
- :end-not-begin t)))
-@end lisp
-@end defun
-
-
-@node Calculated Submodes, Calculated Faces, Submode Groups, Writing Classes
-@comment node-name, next, previous, up
-@section Calculating the Correct Submode
-
-In most cases, the author of a submode class will know in advance what
-major mode to use, such as @code{text-mode} or @code{c++-mode}. If
-there are multiple possible modes that the user might desire, then
-@code{mmm-major-mode-preferences} should be used (@pxref{Preferred
-Modes}). The function @code{mmm-set-major-mode-preferences} can be
-used, with a third argument, to ensure than the mode is present.
-
-In some cases, however, the author has no way of knowing in advance even
-what language the submode region will be in. The @code{here-doc} class
-is one of these. In such cases, instead of the @code{:submode} keyword,
-the @code{:match-submode} keyword must be used. Its argument should be
-a function, probably written by the author of the submode class, which
-calculates what major mode each region should use.
-
-It is invoked immediately after a match is found for @code{:front}, and
-is passed one argument: a string representing the front delimiter.
-Normally this string is simply whatever was matched by @code{:front},
-but this can be changed with the keyword @code{:front-form}
-(@pxref{Delimiters}). The function should then return a symbol
-that would be a valid argument to @code{:submode}: either the name of a
-mode, or that of a language to look up a preferred mode. If it detects
-an invalid match---for example, the user has specified a mode which is
-not available---it should @code{(signal 'mmm-no-matching-submode nil)}.
-
-Since here-documents can contain code in any language, the
-@code{here-doc} submode class uses @code{:match-submode} rather than
-@code{:submode}. The function it uses is @code{mmm-here-doc-get-mode},
-defined in @file{mmm-sample.el}, which inspects the name of the
-here-document for flags indicating the proper mode. For example, this
-code should probably be in @code{perl-mode} (or @code{cperl-mode}):
-
-@example
-print <<PERL;
-s/foo/bar/g;
-PERL
-@end example
-
-This function is also a good example of proper elisp hygiene: when
-writing accessory functions for a submode class, they should usually be
-prefixed with @samp{mmm-} followed by the name of the submode class, to
-avoid namespace conflicts.
-
-
-@node Calculated Faces, Insertion Commands, Calculated Submodes, Writing Classes
-@comment node-name, next, previous, up
-@section Calculating the Correct Highlight Face
-
-As explained in @ref{Basic Classes}, the keyword @code{:face} should be
-used to specify which of the standard submode faces (@pxref{Region
-Coloring}) a submode region should be highlighted with under high
-decoration. However, sometimes the function of a region can depend on
-the form of the delimiters as well. In this case, a more flexible
-alternative to @code{:face} is @code{:match-face}. Its value can be a
-function, which is called with one argument---the form of the front
-delimiter, as with @code{:match-submode}---and should return the face to
-use. A more common value for @code{:match-face} is an association list,
-a list of pairs @code{(@var{delim} . @var{face})}, each specifying that
-if the delimiter is @var{delim}, the corresponding region should be
-highlighted with @var{face}. For example, here is an excerpt from the
-@code{embperl} submode class:
-
-@lisp
-:submode perl
-:front "\\[\\([-\\+!\\*\\$]\\)"
-:back "~1\\]"
-:save-matches 1
-:match-face (("[+" . mmm-output-submode-face)
- ("[-" . mmm-code-submode-face)
- ("[!" . mmm-init-submode-face)
- ("[*" . mmm-code-submode-face)
- ("[$" . mmm-special-submode-face))
-@end lisp
-
-Thus, regions beginning with @samp{[+} are highlighted as output
-expressions, which they are, while @samp{[-} and @samp{[*} regions are
-highlighted as simple executed code, and so on. Note that
-@var{mmm-submode-decoration-level} must be set to 2 (high decoration)
-for different faces to be displayed.
-
-
-@node Insertion Commands, Region Names, Calculated Faces, Writing Classes
-@comment node-name, next, previous, up
-@section Specifying Insertion Commands
-
-As described in @ref{Insertion}, submode classes can specify key
-sequences which automatically insert submode regions, with delimiters
-already in place. This is done by the keyword argument @code{:insert}.
-Its value should be a list, each element of which specifies a single
-insertion key sequence. As an example, consider the following insertion
-key sequence specifier, from the @code{embperl} submode class:
-
-@lisp
-(?p embperl "Region Type (Character): "
- @@ "[" str @@ " " _ " " @@ str "]" @@)
-@end lisp
-
-As you can see, the specifier is a list. The first element of the list
-is the character @samp{p}. (The question mark tells Emacs that this is
-a character object, not a one-character symbol.) In general, the first
-element can be any key, including both characters such as @samp{?p} and
-function keys such as @samp{return}. It can also be a dotted pair in
-which the first element is a modifier symbol such as @code{meta}, and
-the second is a character or function key. The use of any other
-modifier than meta is discouraged, as `mmm-insert-modifiers' is
-sometimes set to \(control), and other modifiers are not very portable.
-The second element is a symbol identifying this key sequence. The third
-element is a prompt string which is used to ask the user for input when
-this key sequence is invoked. If it is nil, the user is not prompted.
-
-The rest of the list specifies the actual text to be inserted, where the
-submode region and delimiters should be, and where the point should end
-up. (Actually, this string is simply passed to @code{skeleton-insert};
-see the documentation string of that function for more details on the
-permissible elements of such a skeleton.) Strings and variable names
-are inserted and interpolated. The value entered by the user when
-prompted, if any, is available in the variable @code{str}. The final
-location of the point (or the text around which the region is to be
-wrapped) is marked with a single underscore @samp{_}. Finally, the
-@@-signs mark the delimiters and submode regions. There should be four
-@@-signs: one at the beginning of the front delimiter, one at the
-beginning of the submode region, one at the end of the submode region,
-and one at the end of the back delimiter.
-
-The above key sequence, bound by default to @kbd{C-c % p}, always
-prompts the user for the type of region to insert. It can also be
-convenient to have separate key sequences for each type of region to be
-inserted, such as @kbd{C-c % +} for @samp{[+...+]} regions, @kbd{C-c %
--} for @samp{[-...-]} regions, and so on. So that the whole skeleton
-doesn't have to be written out half a dozen times, there is a shortcut
-syntax, as follows:
-
-@lisp
-(?+ embperl+ ?p . "+")
-@end lisp
-
-If the key sequence specification is a dotted list with four elements,
-as this example is, it means to use the skeleton defined for the key
-sequence given as the third element (@code{?p}), but to pass it the
-fourth (dotted) element (@code{"+"}) as the `str' variable; the user is
-not prompted.
-
-
-@node Region Names, Other Hooks, Insertion Commands, Writing Classes
-@comment node-name, next, previous, up
-@section Giving Names to Submode Regions for Grouping
-
-Submode regions can be given ``names'' which are used for grouping.
-Names are always strings and are compared as strings. Regions with
-the same name are considered part of the same chunk of code. This is
-used by the syntax and fontification functions. Unnamed regions are
-not grouped with any others.
-
-By default, regions are nameless, but with the @code{:match-name}
-keyword argument a name can be supplied. This argument must be a
-string or a function. If it is a function, it is passed a string
-representing the front delimiter found, and must return the name to
-use. If it is a string, it is used as-is for the name, unless
-@code{:save-name} has a non-nil value, in which case expressions such
-as @samp{~1} are substituted with the corresponding matched
-subexpression from @code{:front}. This is the same as how
-@code{:back} is interpreted when @code{:save-matches} is non-nil.
-
-As a special optimization for region insertion (@pxref{Insertion
-Commands}), the argument @code{:skel-name} can be set to a non-nil
-value, in which case the insertion code will use the user-prompted
-string value as the region name, instead of going through the normal
-matching procedure.
-
-
-@node Other Hooks, Delimiters, Region Names, Writing Classes
-@comment node-name, next, previous, up
-@section Other Hooks into the Scanning Process
-
-Sometimes, even the flexibility allowed by all the keyword arguments
-discussed so far is insufficient to correctly match submode regions.
-There are several other keyword arguments which accept custom functions
-to be invoked at various points in the MMM-ification process.
-
-First of all, the arguments of @code{:front} and @code{:back}, in
-addition to regular expressions, can be themselves functions. Such
-functions should ``act like'' a regular expression search: they should
-start searching at point, take one argument as a limit for the search,
-and return its result by setting the match data (presumably by calling
-some regexp matching function).
-
-This is rarely necessary, however, because often all that is needed is a
-simple regexp search, followed by some sort of verification. The
-keyword arguments @code{:front-verify} and @code{:back-verify}, if
-supplied, may be functions which are invoked after a match is found for
-@code{:front} or @code{:back}, respectively, and should inspect the
-match data (such as with @code{match-string}) and return non-nil if a
-submode region should be begun at this match, nil if this match should
-be ignored and the search continue after it.
-
-The keyword argument @code{:creation-hook}, if supplied, should be a
-function that is invoked whenever a submode region of this class is
-created, with point at the beginning of the new region. This can be
-used, for example, to set local variables appropriately.
-
-Finally, the entire MMM-ification process has a ``back door'' which
-allows class authors to take control of the entire thing. If the
-keyword argument @code{:handler} is supplied, it overrides any other
-processing and is called, and passed all other class keyword arguments,
-instead of @code{mmm-ify} to create submode regions. If you need to
-write a handler function, I suggest looking at the source for
-@code{mmm-ify} to get an idea of what must be done.
-
-
-@node Delimiters, Misc Keywords, Other Hooks, Writing Classes
-@comment node-name, next, previous, up
-@section Controlling the Delimiter Regions and Forms
-
-MMM also makes overlays for the delimiter regions, to keep track of
-their position and form. Normally, the front delimiter overlay starts
-at the beginning of the match for @code{:front} and ends at the
-beginning of the submode region overlay, while the back delimiter
-overlay starts at the end of the submode region overlay and ends at
-the end of the match for @code{:back}. You can supply offsets from
-these positions using the keyword arguments @code{:front-delim} and
-@code{:back-delim}, which take values of the same sort as
-@code{:front-offset} and @code{:back-offset}.
-
-In addition, the delimiter regions can be in a major mode of their
-own. There are usually only two meaningful modes to use: the primary
-mode or a non-mode like fundamental-mode. These correspond to the
-following two situations:
-
-@itemize
-@item
-If the delimiter syntax which specifies the submode regions is
-something @emph{added to} the syntax of the primary mode by a
-pre-interpreter, then the delimiter regions should be in a non-mode.
-This is the case, for example, with all server-side HTML script
-extensions, such as @xref{Mason}, @xref{Embperl}, and @xref{ePerl}.
-It is also the case for literate programming such as @xref{Noweb}.
-This is the default behavior. The non-mode used is controlled by the
-variable @code{mmm-delimiter-mode}, which defaults to
-fundamental-mode.
-
-@item
-If, on the other hand, the delimiter syntax and inclusion of different
-modes is an @emph{intrinsic part} of the primary mode, then the
-delimiter regions should remain in the primary mode. This is the
-case, for example, with @xref{Embedded CSS}, and @xref{Javascript},
-since the @code{<style>} and @code{<script>} tags are perfectly valid
-HTML. In this case, you should give the keyword parameter
-@code{:delimiter-mode} with a value of @code{nil}, meaning to use the
-primary mode.
-@end itemize
-
-The keyword parameter @code{:delimiter-mode} can be given any major
-mode as an argument, but the above two situations should cover the
-vast majority of cases.
-
-The delimiter regions can also be highlighted, if you wish. The
-keyword parameters @code{:front-face} and @code{:back-face} may be
-faces specifying how to highlight these regions under high
-decoration. Under low decoration, the value of the variable
-@code{mmm-delimiter-face} is used (by default, nothing), and of course
-under no decoration there is no coloring.
-
-Finally, for each submode region overlay, MMM Mode stores the ``form''
-of the front and back delimiters, which are regular expressions that
-match the delimiters. At present these are not used for much, but in
-the future they may be used to help with automatic updating of regions
-as you type. Normally, the form stored is the result of evaluating
-the expression @code{(regexp-quote (match-string 0))} after each match
-is found.
-
-You can customize this with the keyword argument @code{:front-form}
-(respectively, @code{:back-form}). If it is a string, it is used
-verbatim for the front (respectively, back) form. If it is a function,
-that function is called and should inspect the match data and return the
-regular expression to use as the form.
-
-In addition, the form itself can be set to a function, by giving a
-one-element list containing only that function as the argument to
-@code{:front-form} or @code{:back-form}. Such a function should take
-1-2 arguments. The first argument is the overlay to match the delimiter
-for. If the second is non-nil, it means to insert the delimiter and
-adjust the overlay; if nil it means to match the delimiter and return
-the result in the match data.
-
-
-@node Misc Keywords, , Delimiters, Writing Classes
-@comment node-name, next, previous, up
-@section Miscellaneous Other Keyword Arguments
-
-You can specify whether delimiter searches should be case-sensitive with
-the keyword argument @code{:case-fold-search}. It defaults to @code{t},
-meaning that case should be ignored. See the documentation for the
-variable @code{case-fold-search}.
-
-@node Indices, , Writing Classes, Top
-@comment node-name, next, previous, up
-@chapter Indices
-
-@menu
-* Concept Index:: Index of MMM Mode Concepts.
-* Function Index:: Index of functions and variables.
-* Keystroke Index:: Index of key bindings in MMM Mode.
-@end menu
-
-@node Concept Index, Function Index, Indices, Indices
-@comment node-name, next, previous, up
-@section Concept Index
-
-@printindex cp
-
-
-@node Function Index, Keystroke Index, Concept Index, Indices
-@comment node-name, next, previous, up
-@section Function and Variable Index
-
-@printindex fn
-
-
-@node Keystroke Index, , Function Index, Indices
-@comment node-name, next, previous, up
-@section Keystroke Index
-
-@printindex ky
-
-
-@bye
-
-@c Local Variables:
-@c mode: texinfo
-@c mode: font-lock
-@c mode: outline-minor
-@c End:
diff --git a/contrib/mmm/version.texi b/contrib/mmm/version.texi
deleted file mode 100644
index 2b6392f8..00000000
--- a/contrib/mmm/version.texi
+++ /dev/null
@@ -1,4 +0,0 @@
-@set UPDATED 9 March 2003
-@set UPDATED-MONTH March 2003
-@set EDITION 0.4.8
-@set VERSION 0.4.8
diff --git a/coq/ML4PG/doc/src/images/algorithm1.png b/coq/ML4PG/doc/src/images/algorithm1.png
deleted file mode 100644
index 8c8f47b5..00000000
--- a/coq/ML4PG/doc/src/images/algorithm1.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/algorithm2.png b/coq/ML4PG/doc/src/images/algorithm2.png
deleted file mode 100644
index 6b5e0835..00000000
--- a/coq/ML4PG/doc/src/images/algorithm2.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/clusters1.png b/coq/ML4PG/doc/src/images/clusters1.png
deleted file mode 100644
index ca4ef219..00000000
--- a/coq/ML4PG/doc/src/images/clusters1.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/clusters1pg.png b/coq/ML4PG/doc/src/images/clusters1pg.png
deleted file mode 100644
index b39d409f..00000000
--- a/coq/ML4PG/doc/src/images/clusters1pg.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/clusters2.png b/coq/ML4PG/doc/src/images/clusters2.png
deleted file mode 100644
index f091abbe..00000000
--- a/coq/ML4PG/doc/src/images/clusters2.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/clusters2pg.png b/coq/ML4PG/doc/src/images/clusters2pg.png
deleted file mode 100644
index 6ba6dcb4..00000000
--- a/coq/ML4PG/doc/src/images/clusters2pg.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/export.png b/coq/ML4PG/doc/src/images/export.png
deleted file mode 100644
index de048b47..00000000
--- a/coq/ML4PG/doc/src/images/export.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/fig1.png b/coq/ML4PG/doc/src/images/fig1.png
deleted file mode 100644
index 955fd048..00000000
--- a/coq/ML4PG/doc/src/images/fig1.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/fig1pg.png b/coq/ML4PG/doc/src/images/fig1pg.png
deleted file mode 100644
index d4a0df9f..00000000
--- a/coq/ML4PG/doc/src/images/fig1pg.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/fig2.png b/coq/ML4PG/doc/src/images/fig2.png
deleted file mode 100644
index ed8c399e..00000000
--- a/coq/ML4PG/doc/src/images/fig2.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/fig3.png b/coq/ML4PG/doc/src/images/fig3.png
deleted file mode 100644
index f3741a0e..00000000
--- a/coq/ML4PG/doc/src/images/fig3.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/fig4.png b/coq/ML4PG/doc/src/images/fig4.png
deleted file mode 100644
index 9df097bd..00000000
--- a/coq/ML4PG/doc/src/images/fig4.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/fig5.png b/coq/ML4PG/doc/src/images/fig5.png
deleted file mode 100644
index 733a3d22..00000000
--- a/coq/ML4PG/doc/src/images/fig5.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/frequencies.png b/coq/ML4PG/doc/src/images/frequencies.png
deleted file mode 100644
index 4f90b5fc..00000000
--- a/coq/ML4PG/doc/src/images/frequencies.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/granularity.png b/coq/ML4PG/doc/src/images/granularity.png
deleted file mode 100644
index 385b3972..00000000
--- a/coq/ML4PG/doc/src/images/granularity.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/levels.png b/coq/ML4PG/doc/src/images/levels.png
deleted file mode 100644
index 48e02db7..00000000
--- a/coq/ML4PG/doc/src/images/levels.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/ml_system1.png b/coq/ML4PG/doc/src/images/ml_system1.png
deleted file mode 100644
index f11cebf1..00000000
--- a/coq/ML4PG/doc/src/images/ml_system1.png
+++ /dev/null
Binary files differ
diff --git a/coq/ML4PG/doc/src/images/ml_system2.png b/coq/ML4PG/doc/src/images/ml_system2.png
deleted file mode 100644
index 792c423d..00000000
--- a/coq/ML4PG/doc/src/images/ml_system2.png
+++ /dev/null
Binary files differ
diff --git a/coq/coq-abbrev.el b/coq/coq-abbrev.el
index 2b318dea..308ca865 100644
--- a/coq/coq-abbrev.el
+++ b/coq/coq-abbrev.el
@@ -1,10 +1,23 @@
;;; coq-abbrev.el --- coq abbrev table and menus for ProofGeneral mode
-;;
-;; Copyright (C) 1994-2009 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Healfdene Goguen, Pierre Courtieu
+;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
+;;; Commentary:
;;
-;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
+
+;;; Code:
(require 'proof)
(require 'coq-syntax)
@@ -56,7 +69,7 @@
;;; The abbrev table built from keywords tables
;#s and @{..} are replaced by holes by holes-abbrev-complete
(defun coq-install-abbrevs ()
- "install default abbrev table for coq if no other already is."
+ "Install default abbrev table for coq if no other already is."
(if (boundp 'coq-mode-abbrev-table)
;; da: this test will always fail. Assume bound-->non-empty
;; (not (equal coq-mode-abbrev-table (make-abbrev-table))))
@@ -71,7 +84,7 @@
;; DA: how about above, just temporarily disable saving?
(message "Coq default abbrevs loaded")))
-(unless noninteractive
+(unless (or noninteractive (bound-and-true-p byte-compile-current-file))
(coq-install-abbrevs))
;;;;;
@@ -98,7 +111,7 @@ It was constructed with `proof-defstringset-fn'.")
;; The coq menu partly built from tables
-;; Common part (scrit, response and goals buffers)
+;; Common part (script, response and goals buffers)
(defconst coq-menu-common-entries
`(
["Toggle 3 Windows Mode" proof-three-window-toggle
@@ -289,18 +302,19 @@ It was constructed with `proof-defstringset-fn'.")
["Unset Printing Implicit" coq-unset-printing-implicit t]
["Set Printing Coercions" coq-set-printing-coercions t]
["Unset Printing Coercions" coq-unset-printing-coercions t]
+ ["Set Printing Compact Contexts" coq-set-printing-implicit t]
+ ["Unset Printing Compact Contexts" coq-unset-printing-implicit t]
["Set Printing Synth" coq-set-printing-synth t]
["Unset Printing Synth" coq-unset-printing-synth t]
["Set Printing Universes" coq-set-printing-universes t]
["Unset Printing Universes" coq-unset-printing-universes t]
+ ["Set Printing Unfocused" coq-set-printing-unfocused t]
+ ["Unset Printing Unfocused" coq-unset-printing-unfocused t]
["Set Printing Wildcards" coq-set-printing-wildcards t]
["Unset Printing Wildcards" coq-unset-printing-wildcards t]
- ["Set Printing Width" coq-ask-adapt-printing-width-and-show t])
- ""
- ["ML4PG" (coq-activate-ml4pg) :help "Activates ML4PG: machine-learning methods for Proof General"]
- ))
+ ["Set Printing Width" coq-ask-adapt-printing-width-and-show t])))
-(defpgdefault menu-entries
+(setq-default coq-menu-entries
(append coq-menu-common-entries
`(
""
@@ -338,12 +352,12 @@ It was constructed with `proof-defstringset-fn'.")
["help" coq-local-vars-list-show-doc t]
["Compile" coq-Compile t]))))
-(defpgdefault help-menu-entries
- '(["help on setting prog name persistently for a file"
+(setq-default coq-help-menu-entries
+ '(["help on setting prog name persistently for a file"
coq-local-vars-list-show-doc t]))
-(defpgdefault other-buffers-menu-entries coq-menu-common-entries)
-
-
+(setq-default coq-other-buffers-menu-entries coq-menu-common-entries)
(provide 'coq-abbrev)
+
+;;; coq-abbrev.el ends here
diff --git a/coq/coq-autotest.el b/coq/coq-autotest.el
index b6b361ed..cecfdcf1 100644
--- a/coq/coq-autotest.el
+++ b/coq/coq-autotest.el
@@ -1,22 +1,30 @@
-;; coq-autotest.el: tests of Coq Proof General (in progress).
+;;; coq-autotest.el --- tests of Coq Proof General (in progress).
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;;; Commentary:
;;
;; You can run these by issuing "make test.coq" in PG home dir.
;;
-;; $Id$
-;;
+
+;;; Code:
(eval-when-compile
(require 'cl))
(require 'pg-autotest)
-(eval-when (compile)
- (require 'proof-site)
- (proof-ready-for-assistant 'coq)
- (defvar coq-compile-before-require nil))
-
+(require 'proof-site)
+(defvar coq-compile-before-require)
-(unless noninteractive
+(unless (bound-and-true-p byte-compile-current-file)
(pg-autotest start 'debug)
@@ -89,3 +97,7 @@
(pg-autotest timetaken 'total)
(pg-autotest exit))
+
+(provide 'coq-autotest)
+
+;;; coq-autotest.el ends here
diff --git a/coq/coq-compile-common.el b/coq/coq-compile-common.el
index 72a16881..936ad923 100644
--- a/coq/coq-compile-common.el
+++ b/coq/coq-compile-common.el
@@ -1,28 +1,35 @@
-;; coq-compile-common.el --- common part of compilation feature
-;; Copyright (C) 1994-2012 LFCS Edinburgh.
+;;; coq-compile-common.el --- common part of compilation feature
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Hendrik Tews
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Hendrik Tews <hendrik@askra.de>
-;;
-;; $Id$
-;;
+
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
;;; Commentary:
;;
;; This file holds constants, options and some general functions for
;; the compilation feature.
;;
+;;; Code:
(require 'proof-shell)
(require 'coq-system)
+(require 'compile)
-(eval-when (compile)
+(eval-when-compile
;;(defvar coq-pre-v85 nil)
- (require 'compile)
- (defvar coq-confirm-external-compilation nil); defpacustom
- (defvar coq-compile-parallel-in-background nil) ; defpacustom
- (proof-ready-for-assistant 'coq)) ; compile for coq
-
+ (defvar coq-confirm-external-compilation); defpacustom
+ (defvar coq-compile-parallel-in-background)) ; defpacustom
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
@@ -34,7 +41,7 @@
;; coq-par-compile, respectively. However, the :initialization
;; function of a defcustom seems to be evaluated when reading the
;; defcustom form. Therefore, these functions must be defined already,
-;; when the defpacustum coq-compile-parallel-in-background is read.
+;; when the defcustom coq-compile-parallel-in-background is read.
(defun coq-par-enable ()
"Enable parallel compilation.
@@ -71,7 +78,7 @@ Must be used together with `coq-par-enable'."
(defun coq-switch-compilation-method ()
- "Set function for coq-compile-parallel-in-background."
+ "Set function for function ‘coq-compile-parallel-in-background’."
(if coq-compile-parallel-in-background
(progn
(coq-par-enable)
@@ -84,7 +91,7 @@ Must be used together with `coq-par-enable'."
(condition-case nil
(with-temp-buffer
(setq status
- (call-process "getconf" nil (current-buffer) t
+ (call-process "getconf" nil (current-buffer) t
"_NPROCESSORS_ONLN"))
(setq ncpus (string-to-number (buffer-string))))
(error
@@ -96,7 +103,7 @@ Must be used together with `coq-par-enable'."
(defvar coq--max-background-vio2vo-percentage-shadow 40
"Internal shadow value of `coq-max-background-vio2vo-percentage'.
This variable does always contain the same value as
-`coq-max-background-vio2vo-percentage'. It is used only to break
+`coq-max-background-vio2vo-percentage'. It is used only to break
the dependency cycle between `coq-set-max-vio2vo-jobs' and
`coq-max-background-vio2vo-percentage'.")
@@ -157,10 +164,10 @@ Ignore any quick setting for Coq versions before 8.5."
:group 'coq
:package-version '(ProofGeneral . "4.1"))
-(defpacustom compile-before-require nil
+(defcustom coq-compile-before-require nil
"If non-nil, check dependencies of required modules and compile if necessary.
If non-nil ProofGeneral intercepts \"Require\" commands and checks if the
-required library module and its dependencies are up-to-date. If not, they
+required library module and its dependencies are up-to-date. If not, they
are compiled from the sources before the \"Require\" command is processed.
This option can be set/reset via menu
@@ -169,23 +176,29 @@ This option can be set/reset via menu
:safe 'booleanp
:group 'coq-auto-compile)
-(defpacustom compile-parallel-in-background nil
+(proof-deftoggle coq-compile-before-require)
+
+(defcustom coq-compile-parallel-in-background nil
"Choose the internal compilation method.
When Proof General compiles itself, you have the choice between
-two implementations. If this setting is nil, then Proof General
+two implementations. If this setting is nil, then Proof General
uses the old implementation and compiles everything sequentially
-with synchronous job. With this old method Proof General is
-locked during compilation. If this setting is t, then the new
+with synchronous job. With this old method Proof General is
+locked during compilation. If this setting is t, then the new
method is used and compilation jobs are dispatched in parallel in
-the background. The maximal number of parallel compilation jobs
+the background. The maximal number of parallel compilation jobs
is set with `coq-max-background-compilation-jobs'.
This option can be set/reset via menu
`Coq -> Auto Compilation -> Compile Parallel In Background'."
:type 'boolean
:safe 'booleanp
- :group 'coq-auto-compile
- :eval (coq-switch-compilation-method))
+ :group 'coq-auto-compile)
+
+(proof-deftoggle coq-compile-parallel-in-background)
+
+(defun coq-compile-parallel-in-background ()
+ (coq-switch-compilation-method))
;; defpacustom fails to call :eval during inititialization, see trac #456
(coq-switch-compilation-method)
@@ -194,58 +207,58 @@ This option can be set/reset via menu
"Control quick compilation, vio2vo and vio/vo files auto compilation.
This option controls whether ``-quick'' is used for parallel
background compilation and whether up-date .vo or .vio files are
-used or deleted. Please use the customization system to change
+used or deleted. Please use the customization system to change
this option to ensure that any ``-quick'' setting is ignored for
Coq before 8.5.
Note that ``-quick'' can be noticebly slower when your sources do
-not declare section variables with ``Proof using''. Note that
+not declare section variables with ``Proof using''. Note that
even if you do declare section variables, ``-quick'' is typically
slower on small files.
Use the default `no-quick', if you have not yet switched to
-``Proof using''. Use `quick-no-vio2vo', if you want quick
-recompilation without producing .vo files. Value
+``Proof using''. Use `quick-no-vio2vo', if you want quick
+recompilation without producing .vo files. Value
`quick-and-vio2vo' updates missing prerequisites with ``-quick''
and starts vio2vo conversion on a subset of the availables
cores (see `coq-compile-vio2vo-percentage') when the quick
recompilation finished (but see below for a .vio .vo
-incompatibility caveat). Note that all the previously described
+incompatibility caveat). Note that all the previously described
modes might load .vio files and that you therefore might not
-notice certain universe inconsistencies. Finally, use `ensure-vo'
+notice certain universe inconsistencies. Finally, use `ensure-vo'
for only importing .vo files with complete universe checks.
Detailed description of the 4 modes:
no-quick Compile outdated prerequisites without ``-quick'',
producing .vo files, but don't compile prerequisites
- for which an up-to-date .vio file exists. Delete
+ for which an up-to-date .vio file exists. Delete
or overwrite outdated .vo files.
quick-no-vio2vo Compile outdated prerequisites with ``-quick'',
producing .vio files, but don't compile prerequisites
- for which an up-to-date .vo file exists. Delete
+ for which an up-to-date .vo file exists. Delete
or overwrite outdated .vio files.
quick-and-vio2vo Same as `quick-no-vio2vo', but start vio2vo processes
after the last ``Require'' command has been processed
- to convert the vio dependencies into vo files. With this
+ to convert the vio dependencies into vo files. With this
mode you might see asynchronous errors from vio2vo
compilation while you are processing stuff far below the
- last require. vio2vo compilation is done on a subset of
+ last require. vio2vo compilation is done on a subset of
the available cores, see `coq-compile-vio2vo-percentage'.
When `coq-compile-keep-going' is set, vio2vo compilation
is scheduled for those files for which coqc compilation
was successful.
Warning: This mode does only work when you process require
- commands in batches. Slowly single-stepping through require's
+ commands in batches. Slowly single-stepping through require's
might lead to inconsistency errors when loading some
libraries, see Coq issue #5223.
ensure-vo Ensure that all library dependencies are present as .vo
files and delete outdated .vio files or .vio files that
- are more recent than the corresponding .vo file. This
+ are more recent than the corresponding .vo file. This
setting is the only one that ensures soundness.
This option can be set via menu
@@ -283,9 +296,9 @@ This option can be set/reset via menu
(defcustom coq-max-background-compilation-jobs 'all-cpus
"Maximal number of parallel jobs, if parallel compilation is enabled.
Use the number of available CPU cores if this is set to
-'all-cpus. This variable is the user setting. The value that is
-really used is `coq--internal-max-jobs'. Use `coq-max-jobs-setter'
-or the customization system to change this variable. Otherwise
+'all-cpus. This variable is the user setting. The value that is
+really used is `coq--internal-max-jobs'. Use `coq-max-jobs-setter'
+or the customization system to change this variable. Otherwise
your change will have no effect, because `coq--internal-max-jobs'
is not adapted."
:type '(choice (const :tag "use all CPU cores" all-cpus)
@@ -313,13 +326,13 @@ with 'quick-and-vio2vo, see Coq issue #5223."
:group 'coq-auto-compile)
(defcustom coq-compile-command ""
- "External compilation command. If empty ProofGeneral compiles itself.
+ "External compilation command. If empty ProofGeneral compiles itself.
If unset (the empty string) ProofGeneral computes the dependencies of
-required modules with coqdep and compiles as necessary. This internal
+required modules with coqdep and compiles as necessary. This internal
dependency checking does currently not handle ML modules.
If a non-empty string, the denoted command is called to do the
-dependency checking and compilation. Before executing this
+dependency checking and compilation. Before executing this
command the following keys are substituted as follows:
%p the (physical) directory containing the source of
the required module
@@ -350,8 +363,8 @@ minibuffer if `coq-confirm-external-compilation' is t."
("%r" requiring-file))
"Substitutions for `coq-compile-command'.
Value must be a list of substitutions, where each substitution is
-a 2-element list. The first element of a substitution is the
-regexp to substitute, the second the replacement. The replacement
+a 2-element list. The first element of a substitution is the
+regexp to substitute, the second the replacement. The replacement
is evaluated before passing it to `replace-regexp-in-string', so
it might be a string, or one of the symbols 'physical-dir,
'module-object, 'module-source, 'qualified-id and
@@ -367,7 +380,7 @@ that contains the \"Require\".")
"Buffers to save before checking dependencies for compilation.
There are two orthogonal choices: Firstly one can save all or only the coq
buffers, where coq buffers means all buffers in coq mode except the current
-buffer. Secondly, Emacs can ask about each such buffer or save all of them
+buffer. Secondly, Emacs can ask about each such buffer or save all of them
unconditionally.
This makes four permitted values: 'ask-coq to confirm saving all
@@ -394,7 +407,7 @@ This option can be set via menu
(defcustom coq-lock-ancestors t
"If non-nil, lock ancestor module files.
If external compilation is used (via `coq-compile-command') then
-only the direct ancestors are locked. Otherwise all ancestors are
+only the direct ancestors are locked. Otherwise all ancestors are
locked when the \"Require\" command is processed.
This option can be set via menu
@@ -407,7 +420,7 @@ This option can be set via menu
;; define coq-lock-ancestors-toggle
(proof-deftoggle coq-lock-ancestors)
-(defpacustom confirm-external-compilation t
+(defcustom coq-confirm-external-compilation t
"If set let user change and confirm the compilation command.
Otherwise start the external compilation without confirmation.
@@ -420,12 +433,12 @@ This option can be set/reset via menu
(defcustom coq-compile-ignored-directories nil
"Directories in which ProofGeneral should not compile modules.
List of regular expressions for directories in which ProofGeneral
-should not compile modules. If a library file name matches one
+should not compile modules. If a library file name matches one
of the regular expressions in this list then ProofGeneral does
neither compile this file nor check its dependencies for
-compilation. It makes sense to include non-standard coq library
+compilation. It makes sense to include non-standard coq library
directories here if they are not changed and if they are so big
-that dependency checking takes noticeable time. The regular
+that dependency checking takes noticeable time. The regular
expressions in here are always matched against the .vo file name,
regardless whether ``-quick'' would be used to compile the file
or not."
@@ -438,12 +451,12 @@ or not."
"and has not been found")
"Regexp to match errors in the output of coqdep.
coqdep indicates errors not always via a non-zero exit status,
-but sometimes only via printing warnings. This regular expression
+but sometimes only via printing warnings. This regular expression
is used for recognizing error conditions in the output of
-coqdep (when coqdep terminates with exit status 0). Its default
+coqdep (when coqdep terminates with exit status 0). Its default
value matches the warning that some required library cannot be
found on the load path and ignores the warning for finding a
-library at multiple places in the load path. If you want to turn
+library at multiple places in the load path. If you want to turn
the latter condition into an error, then set this variable to
\"^\\*\\*\\* Warning\"."
:type 'string
@@ -455,7 +468,7 @@ the latter condition into an error, then set this variable to
"[ \t\n]*\\([A-Za-z0-9_']+\\(\\.[A-Za-z0-9_']+\\)*\\)[ \t\n]*"
"Regular expression matching one Coq module identifier.
Should match precisely one complete module identifier and surrounding
-white space. The module identifier must be matched with group number 1.
+white space. The module identifier must be matched with group number 1.
Note that the trailing dot in \"Require A.\" is not part of the module
identifier and should therefore not be matched by this regexp.")
@@ -475,25 +488,25 @@ modules are matched separately with `coq-require-id-regexp'")
"Name of the buffer to display error messages from coqc and coqdep.")
(defvar coq--debug-auto-compilation nil
- "*Display more messages during compilation")
+ "*Display more messages during compilation.")
;;; basic utilities
(defun time-less-or-equal (time-1 time-2)
- "Return `t' if time value time-1 is earlier or equal to time-2.
+ "Return t if time value TIME-1 is earlier or equal to TIME-2.
A time value is a list of two, three or four integers of the
form (high low micro pico) as returned by `file-attributes' or
-'current-time'. First element high contains the upper 16 bits and
+'current-time'. First element high contains the upper 16 bits and
the second low the lower 16 bits of the time."
(not (time-less-p time-2 time-1)))
(defun coq-max-dep-mod-time (dep-mod-times)
"Return the maximum in DEP-MOD-TIMES.
Argument DEP-MOD-TIMES is a list where each element is either a
-time value (see `time-less-or-equal') or 'just-compiled. The
+time value (see `time-less-or-equal') or 'just-compiled. The
function returns the maximum of the elements in DEP-MOD-TIMES,
-where 'just-compiled is considered the greatest time value. If
+where 'just-compiled is considered the greatest time value. If
DEP-MOD-TIMES is empty it returns nil."
(let ((max nil))
(while dep-mod-times
@@ -513,10 +526,10 @@ DEP-MOD-TIMES is empty it returns nil."
(defun coq-compile-ignore-file (lib-obj-file)
"Check whether ProofGeneral should handle compilation of LIB-OBJ-FILE.
-Return `t' if ProofGeneral should skip LIB-OBJ-FILE and `nil' if
-ProofGeneral should handle the file. For normal users it does,
+Return t if ProofGeneral should skip LIB-OBJ-FILE and nil if
+ProofGeneral should handle the file. For normal users it does,
for instance, not make sense to let ProofGeneral check if the coq
-standard library is up-to-date. This function is always invoked
+standard library is up-to-date. This function is always invoked
on the .vo file name, regardless whether the file would be
compiled with ``-quick'' or not."
(if (some
@@ -543,7 +556,7 @@ Chops off the last character of LIB-OBJ-FILE to convert \"x.vo\" to \"x.v\"."
(defun coq-library-vio-of-vo-file (vo-obj-file)
"Return .vio file name for VO-OBJ-FILE.
-Changes the suffix from .vio to .vo. VO-OBJ-FILE must have a .vo suffix."
+Changes the suffix from .vio to .vo. VO-OBJ-FILE must have a .vo suffix."
(concat (coq-library-src-of-vo-file vo-obj-file) "io"))
@@ -570,7 +583,7 @@ Changes the suffix from .vio to .vo. VO-OBJ-FILE must have a .vo suffix."
(defun coq-compile-display-error (command error-message display)
"Display COMMAND and ERROR-MESSAGE in `coq--compile-response-buffer'.
-If needed, reinitialize `coq--compile-response-buffer'. Then
+If needed, reinitialize `coq--compile-response-buffer'. Then
display COMMAND and ERROR-MESSAGE."
(unless (buffer-live-p (get-buffer coq--compile-response-buffer))
(coq-init-compile-response-buffer))
@@ -585,10 +598,10 @@ display COMMAND and ERROR-MESSAGE."
(defun coq-init-compile-response-buffer (&optional command)
"Initialize the buffer for the compilation output.
-If `coq--compile-response-buffer' exists, empty it. Otherwise
+If `coq--compile-response-buffer' exists, empty it. Otherwise
create a buffer with name `coq--compile-response-buffer', put
it into `compilation-mode' and store it in
-`coq--compile-response-buffer' for later use. Argument COMMAND is
+`coq--compile-response-buffer' for later use. Argument COMMAND is
the command whose output will appear in the buffer."
(let ((buffer-object (get-buffer coq--compile-response-buffer)))
(if buffer-object
@@ -662,10 +675,10 @@ from `coq-compile-save-some-buffers' to
(defun coq-compile-save-buffer-filter ()
"Filter predicate for `coq-compile-save-some-buffers'.
-See also `save-some-buffers'. Returns t for buffers with major
+See also `save-some-buffers'. Return t for buffers with major
mode 'coq-mode' different from
`coq-compile-buffer-with-current-require' and nil for all other
-buffers. The buffer to test must be current."
+buffers. The buffer to test must be current."
(and
(eq major-mode 'coq-mode)
(not (eq coq-compile-buffer-with-current-require
@@ -673,7 +686,7 @@ buffers. The buffer to test must be current."
(defun coq-compile-save-some-buffers ()
"Save buffers according to `coq-compile-auto-save'.
-Uses the local variable coq-compile-buffer-with-current-require to pass the
+Uses the local variable ‘coq-compile-buffer-with-current-require’ to pass the
current buffer (which contains the Require command) to
`coq-compile-save-buffer-filter'."
(let ((coq-compile-buffer-with-current-require (current-buffer))
@@ -698,10 +711,10 @@ current buffer (which contains the Require command) to
(defun coq-switch-buffer-kill-proof-shell ()
"Kill the proof shell without asking the user.
-This function is for `proof-deactivate-scripting-hook'. It kills
+This function is for `proof-deactivate-scripting-hook'. It kills
the proof shell without asking the user for
confirmation (assuming she agreed already on switching the active
-scripting buffer). This is needed to ensure the load path is
+scripting buffer). This is needed to ensure the load path is
correct in the new scripting buffer."
(unless proof-shell-exit-in-progress
(proof-shell-exit t)))
diff --git a/coq/coq-db.el b/coq/coq-db.el
index 0d9c0a6e..cad149a2 100644
--- a/coq/coq-db.el
+++ b/coq/coq-db.el
@@ -1,9 +1,18 @@
-;;; coq-db.el --- coq keywords database utility functions
-;;
+;;; coq-db.el --- coq keywords database utility functions -*- coding: utf-8; -*-
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: Pierre Courtieu <courtieu@lri.fr>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;;
+
;;; Commentary:
;;
;; We store all information on keywords (tactics or command) in big
@@ -69,10 +78,10 @@ new keyword to colorize.")
(defun coq-insert-from-db (db prompt &optional alwaysjump)
"Ask for a keyword, with completion on keyword database DB and insert.
-Insert corresponding string with holes at point. If an insertion
-function is present for the keyword, call it instead. see
-`coq-syntax-db' for DB structure. If ALWAYSJUMP is non nil, jump
-to the first hole even if more than one."
+Insert corresponding string with holes at point. If an insertion
+function is present for the keyword, call it instead. See
+`coq-syntax-db' for DB structure. If ALWAYSJUMP is non nil, jump to
+the first hole even if more than one."
(let* ((tac (completing-read (concat prompt " (TAB for completion): ")
db nil nil))
(infos (cddr (assoc tac db)))
@@ -87,7 +96,7 @@ to the first hole even if more than one."
(defun coq-build-command-from-db (db prompt &optional preformatquery)
- "Ask for a keyword, with completion on keyword database DB and send to coq.
+ "Ask for a keyword, with completion on keyword database DB and send to Coq.
See `coq-syntax-db' for DB structure."
;; Next invocation of minibuffer (read-string below) will first recursively
;; ask for a command in db and expand it with holes. This way the cursor will
@@ -133,7 +142,7 @@ regexp. See `coq-syntax-db' for DB structure."
; (color (concat "\\_<" (nth 4 hd) "\\_>"))) ; colorization string
;; TODO delete doublons
(when (and color (or (not filter) (funcall filter hd)))
- (setq res
+ (setq res
(nconc res (list
(concat "\\_<" color "\\_>")))))
(setq l tl)))
@@ -195,8 +204,8 @@ Used by `coq-build-menu-from-db', which you should probably use instead. See
(let ((menu-entry
(vector
;; menu entry label
- (concat menu
- (if (not abbrev) ""
+ (concat menu
+ (if (not abbrev) ""
(concat spaces "(" abbrev keybind-abbrev ")")))
;;insertion function if present otherwise insert completion
(if insertfn insertfn `(holes-insert-and-expand ,complt))
@@ -245,8 +254,7 @@ structure."
res))
(defcustom coq-holes-minor-mode t
- "*Whether to apply holes minor mode (see `holes-show-doc') in
- coq mode."
+ "*Whether to apply holes minor mode (see `holes-show-doc') in coq mode."
:type 'boolean
:group 'coq)
@@ -284,19 +292,20 @@ See `coq-syntax-db' for DB structure."
(defface coq-solve-tactics-face
(proof-face-specs
(:foreground "red") ; pour les fonds clairs
- (:foreground "red") ; pour les fond foncés
+ (:foreground "red1") ; pour les fonds foncés
()) ; pour le noir et blanc
"Face for names of closing tactics in proof scripts."
:group 'proof-faces)
-;;A new face for cheating tactics
-;; FIXMe: the background color disappear when locked region overrides it.
-;; this is hard to fix without re-colorizing afterward.
+;;A face for cheating tactics
+;; We use :box in addition to :background because box remains visible in
+;; locked-region. :reverse-video is another solution.
(defface coq-cheat-face
- (proof-face-specs
- (:background "red") ; pour les fonds clairs
- (:background "red") ; pour les fond foncés
- ()) ; pour le noir et blanc
+ '(;(((class color) (background light)) . (:inverse-video t :foreground "red" :background "black"))
+ ;(((class color) (background dark)) . (:inverse-video t :foreground "red1"))
+ (((class color) (background light)) . (:box (:line-width -1 :color "red" :style nil) :background "red"))
+ (((class color) (background dark)) . (:box (:line-width -1 :color "red1" :style nil) :background "red1"))
+ (t . ())) ; monocolor or greyscale: no highlight
"Face for names of cheating tactics in proof scripts."
:group 'proof-faces)
@@ -306,7 +315,7 @@ See `coq-syntax-db' for DB structure."
:group 'proof-faces)
(defface coq-symbol-face
- '((t :inherit default-face :bold coq-bold-unicode-binders))
+ '((t :inherit font-lock-type-face :bold coq-bold-unicode-binders))
"Face for unicode binders, by default a bold version of `font-lock-type-face'."
:group 'proof-faces)
@@ -320,6 +329,28 @@ See `coq-syntax-db' for DB structure."
"Face used for `ltac:', `constr:', and `uconstr:' headers."
:group 'proof-faces)
+;; This messes columns, can't figure out why putting this face makes the overlay
+;; larger than a character
+;; (defface coq-button-face
+;; '((t :inherit custom-button :background "dark gray"))
+;; ""
+;; :group 'proof-faces)
+
+;; (defface coq-button-face-pressed
+;; '((t :inherit custom-button-pressed :background "light gray"))
+;; ""
+;; :group 'proof-faces)
+
+(defface coq-button-face
+ '((t . (:background "light gray")))
+ ""
+ :group 'proof-faces)
+
+(defface coq-button-face-pressed
+ '((t . (:background "dark gray")))
+ ""
+ :group 'proof-faces)
+
(defconst coq-solve-tactics-face 'coq-solve-tactics-face
"Expression that evaluates to a face.
Required so that 'coq-solve-tactics-face is a proper facename")
diff --git a/coq/coq-indent.el b/coq/coq-indent.el
index e5179390..6e8ba013 100644
--- a/coq/coq-indent.el
+++ b/coq/coq-indent.el
@@ -1,15 +1,27 @@
;;; coq-indent.el --- indentation for Coq
-;;
-;; Copyright (C) 2004-2006 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Pierre Courtieu
;; Maintainer: Pierre Courtieu <courtieu@lri.fr>
-;;
+
;; Commentary:
;;
;; Indentation for Coq.
;; This is experimental, the code is rather ugly for the moment.
;;
+
+;;; Commentary:
+;;
+
;;; Code:
(require 'coq-syntax)
@@ -22,7 +34,7 @@
; (message "%.06f" (float-time (time-since time)))))
(eval-when-compile
- (defvar coq-script-indent nil))
+ (defvar coq-script-indent))
(defconst coq-any-command-regexp
(proof-regexp-alt-list coq-keywords))
@@ -77,10 +89,10 @@
;;;; End of regexps
(defun coq-indent-goal-command-p (str)
- "Syntactical detection of a coq goal opening.
-Only used in indentation code and in
-v8.0 compatibility mode. Module, Definition and Function need a special parsing to
-detect if they start something or not."
+ "Syntactical detection of a Coq goal opening.
+Only used in indentation code and in v8.0 compatibility mode.
+Module, Definition and Function need a special parsing to detect
+if they start something or not."
(let* ((match (coq-count-match "\\_<match\\_>" str))
(with (coq-count-match "\\_<with\\_>" str))
(letwith (+ (coq-count-match "\\_<let\\_>" str) (- with match)))
@@ -97,20 +109,26 @@ detect if they start something or not."
(defconst coq-simple-cmd-ender-prefix-regexp "[^.]\\|\\=\\|\\.\\."
- "Used internally. Matches the allowed prefixes of coq \".\" command ending.")
+ "Used internally. Matches the allowed prefixes of coq \".\" command ending.")
(defconst coq-bullet-regexp-nospace "\\(-\\)+\\|\\(+\\)+\\|\\(\\*\\)+"
"Matches single bullet, WARNING: Lots of false positive.
No context checking.")
+;; Goal selector syntax
+(defconst coq-goal-selector-regexp "[0-9]+\\s-*:\\s-*")
+
;; We can detect precisely bullets (and curlies) by looking at there
;; prefix: the prefix should be a real "." then spaces then only
;; bullets and curlys and spaces). This is used when search backward.
;; This variable is the regexp of possible prefixes
(defconst coq-bullet-prefix-regexp
(concat "\\(?:\\(?:" coq-simple-cmd-ender-prefix-regexp "\\)"
- "\\(?:\\.\\)\\(?:\\s-\\)\\(?:\\s-\\|{\\|}\\|-\\|+\\|\\*\\)*\\)"))
+ "\\(?:\\.\\)\\(?:\\s-\\)"
+ "\\(?:\\s-\\|"
+ "\\(?:" coq-goal-selector-regexp "\\)?"
+ "{\\|}\\|-\\|+\\|\\*\\)*\\)"))
;; matches regular command end (. and ... followed by a space or buffer end)
;; ". " and "... " are command endings, ".. " is not, same as in
@@ -119,25 +137,24 @@ No context checking.")
(concat "\\(?:\\(?2:" coq-simple-cmd-ender-prefix-regexp "\\)\\(?1:\\.\\)\\(?3:\\s-\\|\\'\\)\\)")
"Matches coq regular syntax for ending a command (except bullets and curlies).
-This should match EXACTLY command ending syntax. No false
-positive should be accepted. \"...\" is matched as \".\" with a
+This should match EXACTLY command ending syntax. No false
+positive should be accepted. \"...\" is matched as \".\" with a
left context \"..\".
There are 3 substrings (2 and 3 may be nil):
* number 1 is the real bullet string,
* number 2 is the left context matched that is not part of the bullet
-* number 3 is the right context matched that is not part of the bullet
-")
+* number 3 is the right context matched that is not part of the bullet")
;; captures a lot of false bullets, need to check that the commaand is
;; empty. When searching forward (typically when splitting the buffer
;; into commands commands) we can't do better than that.
(defconst coq-bullet-end-command
(concat "\\(?:\\(?2:\\s-\\|\\=\\)" "\\(?1:" coq-bullet-regexp-nospace "\\)\\)")
- "Matches ltac bullets. WARNING: lots of false positive.
+ "Matches ltac bullets. WARNING: lots of false positive.
This matches more than real bullets as - + and * may match this
-when used in regular expressions. See
+when used in regular expressions. See
`coq-bullet-end-command-backward' for a more precise regexp (but
only when searching backward).")
@@ -146,29 +163,34 @@ only when searching backward).")
(concat "\\(?:\\(?2:" coq-bullet-prefix-regexp "\\)\\(?1:\\(-\\)+\\|\\(+\\)+\\|\\(\\*\\)+\\)\\)")
"Matches ltac bullets when searching backward.
-This should match EXACTLY bullets. No false positive should be accepted.
+This should match EXACTLY bullets. No false positive should be accepted.
There are 2 substrings:
* number 1 is the real bullet string,
* number 2 is the left context matched that is not part of the bullet" )
(defconst coq-curlybracket-end-command
- "\\(?:\\(?1:{\\)\\(?3:[^|]\\)\\|\\(?2:[^|]\\|\\=\\)\\(?1:}\\)\\)"
- "Matches ltac curlies when searching backward. Warning: False positive.
+ (concat "\\(?:\\(?1:"
+ "\\(?:" coq-bullet-prefix-regexp"\\)?"
+ "{\\)\\(?3:[^|]\\)\\|\\(?2:[^|]\\|\\=\\)\\(?1:}\\)\\)")
+ "Matches ltac curlies when searching backward. Warning: False positive.
There are 3 substrings (2 and 3 may be nil):
* number 1 is the real bullet string,
* number 2 is the left context matched that is not part of the bullet
* number 3 is the right context matched that is not part of the bullet
-This matches more than real ltac curlies. See
+This matches more than real ltac curlies. See
`coq-bullet-end-command-backward' for a more precise regexp (but
only when searching backward).")
(defconst coq-curlybracket-end-command-backward
- (concat "\\(?:\\(?2:" coq-bullet-prefix-regexp "\\)\\(?:\\(?:\\(?1:{\\)\\(?3:[^|]\\)\\)\\|\\(?1:}\\)\\)\\)")
+ (concat "\\(?:\\(?2:" coq-bullet-prefix-regexp "\\)"
+ "\\(?:\\(?:\\(?1:" "\\(?:" coq-goal-selector-regexp "\\)?{\\)"
+ "\\(?3:[^|]\\)\\)"
+ "\\|\\(?1:}\\)\\)\\)")
"Matches ltac curly brackets when searching backward.
-This should match EXACTLY script structuring curlies. No false
+This should match EXACTLY script structuring curlies. No false
positive should be accepted.
There are 3 substrings (2 and 3 may be nil):
* number 1 is the real bullet string,
@@ -179,7 +201,8 @@ There are 3 substrings (2 and 3 may be nil):
(concat coq-period-end-command "\\|"
coq-bullet-end-command "\\|"
coq-curlybracket-end-command)
- "Matches end of commands (and ltac bullets and curlies). WARNING: False positive.
+ "Matches end of commands (and ltac bullets and curlies).
+WARNING: False positive.
There are 3 substrings:
* number 1 is the real coq ending string,
@@ -187,10 +210,10 @@ There are 3 substrings:
* number 3 is the right context matched that is not part of the ending string
WARNING: this regexp accepts some curly brackets and bullets (+ -
-*) with no sufficient context verification. Lots of false
-positive are matched. Currently bullets and curlies are always
+*) with no sufficient context verification. Lots of false
+positive are matched. Currently bullets and curlies are always
ending an empty command, so we just need to check that the
-command ended by the bullet-like regexp is empty. This is done in
+command ended by the bullet-like regexp is empty. This is done in
coq-smie.el, and see `coq-end-command-regexp-backward' for a more
precise regexp (but only when searching backward).")
@@ -232,7 +255,7 @@ Return nil if not found."
(defun coq-skip-until-one-comment-backward ()
"Skips comments and normal text until finding an unclosed comment start.
Return nil if not found. Point is moved to the the unclosed comment start
-if found, to (point-max) otherwise. return true if found, nil otherwise."
+if found, to (point-max) otherwise. Return t if found, nil otherwise."
(if (= (point) (point-min)) nil
(ignore-errors (backward-char 1)) ; if point is between '(' and '*'
(if (looking-at coq-comment-start-regexp) t
@@ -262,9 +285,9 @@ if found, to (point-max) otherwise. return true if found, nil otherwise."
(defun coq-find-comment-start ()
"Go to the current comment start.
-If inside nested comments, go to the start of the
-outer most comment. Return the position of the comment start. If not inside a
-comment, return nil and does not move the point."
+If inside nested comments, go to the start of the outer most comment.
+Return the position of the comment start. If not inside a comment,
+return nil and does not move the point."
(when (coq-looking-at-comment)
(let ((prevpos (point)) (init (point)))
(while (coq-skip-until-one-comment-backward)
@@ -274,9 +297,9 @@ comment, return nil and does not move the point."
(defun coq-find-comment-end ()
"Go to the current comment end.
-If inside nested comments, go to the end of the
-outer most comment. Return the position of the end of comment end. If not inside a
-comment, return nil and does not move the point."
+If inside nested comments, go to the end of the outer most
+comment. Return the position of the end of comment end. If not inside
+a comment, return nil and does not move the point."
(let ((prevpos (point)) (init (point)))
(while (coq-skip-until-one-comment-forward)
(setq prevpos (point)))
@@ -298,10 +321,10 @@ Use this one for coq instead of the generic one."
(defun coq-find-not-in-comment-backward (reg &optional lim submatch)
"Moves to the first not commented occurrence of REG found looking up.
-The point is
-put exactly before the occurrence if SUBMATCH is nil, otherwise the point is put
-before SUBMATCHnth matched sub-expression (see `match-string'). If no occurrence is
-found, go as far as possible and return nil."
+The point is put exactly before the occurrence if SUBMATCH is nil,
+otherwise the point is put before SUBMATCHnth matched
+sub-expression (see `match-string'). If no occurrence is found, go as
+far as possible and return nil."
(coq-find-comment-start) ; first go out of comment if inside some
(let ((found nil) (continue t)
(regexp (concat coq-comment-end-regexp "\\|" reg)))
@@ -357,8 +380,28 @@ Comments are ignored, of course."
(start (coq-find-not-in-comment-backward "[^[:space:]]")))
;; we must find a "." to be sure, because {O} {P} is allowed in definitions
;; with implicits --> this function is recursive
- (if (looking-at "{\\|}\\|-\\|\\+\\|\\*") (coq-empty-command-p)
- (looking-at "\\.\\|\\`"))))
+ (cond
+ ;; "{" can be prefixed by a goal selector (coq-8.8).
+ ;; TODO: looking-back is supposed to be slow. Find something else?
+ ((or (and (looking-at "{")(looking-back "[0-9]+\\s-*:\\s-*" nil t))
+ (and (looking-at ":\\s-*{")(looking-back "[0-9]+\\s-*" nil t))
+ (and (looking-at "[0-9]+:\\s-*{") nil t))
+ (goto-char (match-beginning 0)); swallow goal selector
+ (coq-empty-command-p))
+ ;; other bulleting syntax
+ ((looking-at "{\\|}\\|-\\|\\+\\|\\*") (coq-empty-command-p))
+ ;; vernacular controls Time, Fail, Redirect, Timeout
+ ((or (and (looking-at "e\\>") (looking-back "\\<Tim") (- (point) 3))
+ (and (looking-at "l\\>") (looking-back "\\<Fai") (- (point) 3))
+ (and (looking-at "\"") (looking-back "\\<Redirect\\s-+\"[^\"]+"))
+ (and (looking-at "[[:digit:]]\\_>") (looking-back "\\<Timeout\\s-+[[:digit:]]*")))
+ (goto-char (match-beginning 0))
+ (coq-empty-command-p))
+ ;; not a bullet, we found something else, it should be either a
+ ;; dot or the beginning of the file, otherwise we are in the
+ ;; middle of a command
+ (t (looking-at "\\.\\|\\`"))
+ )))
; slight modification of proof-script-generic-parse-cmdend (one of the
@@ -368,10 +411,10 @@ Comments are ignored, of course."
(defun coq-script-parse-cmdend-forward (&optional limit)
"Move to the first end of command found looking forward from point.
Point is put exactly after the ending token (but before matching
-substring if present). If no end command is found, go as far as
+substring if present). If no end command is found, go as far as
possible and return nil. End of command appearing in comments are
-ignored. This function makes use of the substring 1 of the
-command end regexp."
+ignored. This function makes use of the substring 1 of the command end
+regexp."
(if (looking-at proof-script-comment-start-regexp)
;; Handle comments
(if (proof-script-generic-parse-find-comment-end) 'comment)
@@ -423,7 +466,7 @@ command end regexp."
(defun coq-script-parse-cmdend-backward (&optional limit)
"Move to the first end of command (not commented) found looking up.
Point is put exactly before the last ending token (before the last
-\".\" if \"...\"). If no end command is found, go as far as possible
+\".\" if \"...\"). If no end command is found, go as far as possible
and return nil."
(if (looking-at proof-script-comment-start-regexp)
;; Handle comments
@@ -468,8 +511,8 @@ and return nil."
(defun coq-find-current-start ()
"Move to the start of command at point.
-The point is put exactly after the end of previous command, or at the (point-min if
-there is no previous command)."
+The point is put exactly after the end of previous command, or at
+the (point-min) if there is no previous command."
(coq-script-parse-cmdend-backward)
(when
(proof-looking-at "\\.\\s-\\|{\\|}\\|\\++\\|\\*+\\|-+")
@@ -547,8 +590,8 @@ Point is moved at the end of the match if found, at LIM otherwise."
(defun coq-find-no-syntactic-on-line ()
"Return non-nil if there is a not commented non white character on the line.
-Moves point to this char or to the end of the line if not found (and return nil in
-this case)."
+Moves point to this char or to the end of the line if not found (and
+return nil in this case)."
(let ((eol (save-excursion (end-of-line) (point))))
(back-to-indentation)
(while (and (coq-looking-at-syntactic-context)
@@ -605,7 +648,9 @@ not inside the {} of a record)."
(defun coq-find-unclosed (&optional optlvl limit openreg closereg)
- "Finds the first unclosed open item (backward), counter starts to optlvl (default 1) and stops when reaching limit (default point-min)."
+ "Finds the first unclosed open item (backward).
+Counter starts to OPTLVL (default 1) and stops when reaching
+LIMIT (default point-min)."
(let* ((lvl (or optlvl 1))
(open-re (if openreg
@@ -664,7 +709,10 @@ Returns point if found."
(defun coq-find-unopened (&optional optlvl limit)
- "Finds the last unopened close item (looking forward from point), counter starts to OPTLVL (default 1) and stops when reaching limit (default point-max). This function only works inside an expression."
+ "Find the last unopened close item (looking forward from point).
+Counter starts to OPTLVL (default 1) and stops when reaching
+LIMIT (default ‘point-max’). This function only works inside an
+expression."
(let ((lvl (or optlvl 1)) after nextpt endpt)
(save-excursion
@@ -707,7 +755,7 @@ Returns point if found."
(defun coq-find-last-unopened (&optional optlvl limit)
- "Backward moves to and returns the point of the last close item that is not opened after limit."
+ "Backward move to and return the point of the last close item, not opened after LIMIT."
(let ((last nil))
(while (coq-find-unopened optlvl limit)
(setq last (point))
@@ -718,7 +766,8 @@ Returns point if found."
(defun coq-end-offset (&optional limit)
- "Find the first unclosed open indent item, and returns its column. Stop when reaching limit (defaults tp point-min)."
+ "Find the first unclosed open indent item, and return its column.
+Stop when reaching LIMIT (default to ‘point-min’)."
(save-excursion
(let ((found nil)
(anyreg (proof-regexp-alt "\\`" proof-indent-any-regexp)))
@@ -769,7 +818,7 @@ Returns point if found."
(defun coq-indent-command-offset (kind prevcol prevpoint)
- "Returns the indentation offset of the current line.
+ "Return the indentation offset of the current line.
This function indents a *command* line (the first line of a command).
Use `coq-indent-expr-offset' to indent a line belonging to an expression."
(let ((diff-goal-save-current
@@ -835,10 +884,11 @@ Use `coq-indent-expr-offset' to indent a line belonging to an expression."
;; inside the accolades of a record.
(defun coq-indent-expr-offset (kind prevcol prevpoint record)
- "Returns the indentation column of the current line.
-This function indents a *expression* line (a line inside of a command). Use
-`coq-indent-command-offset' to indent a line belonging to a command. The fourth
-argument must be t if inside the {}s of a record, nil otherwise."
+ "Return the indentation column of the current line.
+This function indents a *expression* line (a line inside of a
+command). Use `coq-indent-command-offset' to indent a line belonging
+to a command. The fourth argument RECORD must be t if inside the {}s
+of a record, nil otherwise."
;(message "COQ-INDENT-EXPR-OFFSET")
(let ((pt (point)) real-start)
(save-excursion
diff --git a/coq/coq-local-vars.el b/coq/coq-local-vars.el
index 846371b4..b8c5d7e3 100644
--- a/coq/coq-local-vars.el
+++ b/coq/coq-local-vars.el
@@ -1,36 +1,43 @@
;;; coq-local-vars.el --- local variable list tools for coq
-;;
-;; Copyright (C) 2006-2008 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Pierre Courtieu
;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
+;;; Code:
+
(require 'local-vars-list) ; in lib directory
(eval-when-compile
(require 'cl))
-(eval-when (compile)
- (defvar coq-prog-name nil)
- (defvar coq-load-path nil))
+(eval-when-compile
+ (defvar coq-prog-name)
+ (defvar coq-load-path))
-;;; Code:
(defconst coq-local-vars-doc nil
"Documentation-only variable.
PROJECT FILE
The recommended way of setting coqtop options (-I, -R and others)
-is to use a project file. See the coq documentation (\"generating
-makefile\") for details. The default name of the project file is
+is to use a project file. See the coq documentation (\"generating
+makefile\") for details. The default name of the project file is
\"_CoqProject\" (can be configured via `coq-project-filename')
and its content should be a list of options to be given to
-coq_makefile (one option per line). Here is an example:
+coq_makefile (one option per line). Here is an example:
-R foo bar
-I foo2
@@ -38,34 +45,34 @@ coq_makefile (one option per line). Here is an example:
...(optionally followed by all .v files to be compiled)
If `coq-use-project-file' is t (default) ProofGeneral reads the
-project file and sets coqtop options accordingly (via variables
-`coq-load-path' and `coq-prog-args'). In this example the coqtop
-invocation will be:
+project file and sets coqtop options accordingly (via variable
+`coq-load-path' and variable `coq-prog-args'). In this example the
+coqtop invocation will be:
coqtop -foo3 -R foo bar -I foo2
FILE VARIABLES
If for some reason you want to avoid or override the project file
-method, you can use the file variables (info:(Emacs)File
-Variables). This feature of Emacs allows to set Emacs variables
-on a per-file basis. File Variables are (usually) written as a
-list at the end of the file.
+method, you can use the file variables. See Info node ‘(emacs)File
+Variables’. This feature of Emacs allows to set Emacs variables on a
+per-file basis. File Variables are (usually) written as a list at the
+end of the file.
We provide the following feature to help you:
\\[coq-ask-insert-coq-prog-name] builds a standard file variable
-list for a coq file by asking you some questions. It is
+list for a coq file by asking you some questions. It is
accessible in the menu
`Coq' -> `COQ PROG (ARGS)' -> `Set coq prog *persistently*'.
You should be able to use this feature without reading the rest
-of this documentation, which explains how it is used for coq. For
+of this documentation, which explains how it is used for coq. For
more precision, refer to the Emacs info manual at ((Emacs)File
Variables).
In Coq projects involving multiple directories, it is usually
-necessary to set the variable `coq-load-path' for each file. For
+necessary to set the variable `coq-load-path' for each file. For
example, if the file .../dir/bar/foo.v builds on material in
.../dir/theories/, then one would put the following local
variable section at the end of foo.v:
@@ -77,17 +84,17 @@ variable section at the end of foo.v:
*)
This way the necessary \"-I\" options are added to all
-invocations of `coqtop', `coqdep' and `coqc'. Note that the
-option \"-I\" \"../theories\" is specific to file foo.v. Setting
+invocations of `coqtop', `coqdep' and `coqc'. Note that the
+option \"-I\" \"../theories\" is specific to file foo.v. Setting
`coq-load-path' globally via Emacs Customization is therefore
-usually inappropriate. With this local variables list, Emacs will
+usually inappropriate. With this local variables list, Emacs will
set `coq-load-path' only when inside a buffer that visits foo.v.
Other buffers can have their own value of
`coq-load-path' (probably coming from their own local variable
lists).
If you use `make' for the compilation of coq modules you can set
-`coq-compile-command' as local variable. For instance, if the
+`coq-compile-command' as local variable. For instance, if the
makefile is located in \".../dir\", you could set
\(*
@@ -110,8 +117,8 @@ necessary.)")
(defun coq-insert-coq-prog-name (progname coqloadpath)
"Insert or modify the local variables `coq-prog-name' and `coq-load-path'.
-Set them to PROGNAME and PROGARGS respectively. These variables describe the
-coqtop command to be launched on this file."
+Set them to PROGNAME and COQLOADPATH respectively. These variables
+describe the coqtop command to be launched on this file."
(add-file-local-variable 'coq-prog-name progname)
(add-file-local-variable 'coq-load-path coqloadpath)
;; coq-guess-command-line uses coq-prog-name, so set it
@@ -140,7 +147,7 @@ Do not insert the default directory."
(defun coq-ask-load-path (&optional olddirs)
"Ask for and return the information to put into `coq-load-path'.
-Optional argument OLDVALUE specifies the previous value of `coq-load-path', it
+Optional argument OLDDIRS specifies the previous value of `coq-load-path', it
will be used to suggest values to the user."
(let (loadpath option)
;; first suggest previous directories
diff --git a/coq/coq-mmm.el b/coq/coq-mmm.el
deleted file mode 100644
index e8ff56eb..00000000
--- a/coq/coq-mmm.el
+++ /dev/null
@@ -1,51 +0,0 @@
-;; coq-mmm.el Configure MMM mode for CoqDoc elements
-;;
-;; Copyright (C) 2007 David Aspinall
-;; Authors: David Aspinall <David.Aspinall@ed.ac.uk>
-;; Licence: GPL
-;;
-;; $Id$
-;;
-;; We only spot some simple cases of embedded LaTeX/HTML/verbatim.
-;;
-;; At the moment, the insertion has a bad interaction with the holes
-;; code which also uses skeletons: the interesting positions used
-;; for MMM markup are made into holes!
-
-(require 'mmm-auto)
-
-(mmm-add-group
- 'coq
- `((coq-text
- :submode text-mode
- :face mmm-comment-submode-face
- :front "(\\*\\*[ \t]"
- :back "[ ]?\\*)"
- :insert ((?d coqdoc-text nil @ "(** " @ " " _ " " @ " *)" @)))
-
- (coq-latex
- :submode LaTeX-mode
- :face mmm-comment-submode-face
- :front "(\\*\\*[^%\\$]*[%\\$]"
- :back "[%\\$][ \t]*\\*)"
- :insert ((?l coqdoc-latex nil @ "(** %" @ " " _ " " @ "% *)" @)))
-
- (coq-html
- :submode html-mode
- :face mmm-comment-submode-face
- :front "(\\*\\*[^#]*#"
- :back "#[ \t]*\\*)"
- :insert ((?w coqdoc-html nil @ "(** #" @ " " _ " " @ "# *)" @)))
-
- (coq-verbatim
- :submode text-mode
- :face mmm-code-submode-face
- :front "^[ \t]*<<"
- :back ">>"
- :insert ((?v coqdoc-verbatim nil @ "<<\n" @ " " _ " " @ "\n>>" @)))
- ))
-
-
-(provide 'coq-mmm)
-
-;;; coq-mmm.el ends here
diff --git a/coq/coq-par-compile.el b/coq/coq-par-compile.el
index f9b317c2..e3daebcd 100644
--- a/coq/coq-par-compile.el
+++ b/coq/coq-par-compile.el
@@ -1,14 +1,22 @@
-;; coq-par-compile.el --- parallel compilation of required modules
-;; Copyright (C) 1994-2012 LFCS Edinburgh.
+;;; coq-par-compile.el --- parallel compilation of required modules
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Hendrik Tews
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Hendrik Tews <hendrik@askra.de>
-;;
-;; $Id$
-;;
+
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
;;; Commentary:
;;
-;; This file implements compilation of required modules. The
+;; This file implements compilation of required modules. The
;; compilation is done in parallel in the background (in contrast to
;; what you find in coq-seq-compile.el).
;;
@@ -24,14 +32,13 @@
;; changing compilers, all compilation jobs must be terminated. This is
;; consistent with the fact that the _CoqProject file is not reparsed.
+;;; Code:
+
(eval-when-compile
(require 'proof-compat))
-(eval-when (compile)
- (defvar queueitems nil) ; dynamic scope in p-s-extend-queue-hook
- (defvar coq-compile-before-require nil) ; defpacustom
- (defvar coq-compile-parallel-in-background nil) ; defpacustom
- (defvar coq-confirm-external-compilation nil)); defpacustom
+(eval-when-compile
+ (defvar queueitems)) ; dynamic scope in p-s-extend-queue-hook
(require 'coq-compile-common)
@@ -195,7 +202,7 @@
;; modification time of some ancestor
;; value might be an Emacs time or
;; 'just-compiled
-;; 'queue-dependant - next top-level job, only present in top-level jobs
+;; 'queue-dependant - next top-level job, only present in top-level jobs
;; 'queue-dependant-waiting - t if this is a top-level job that has
;; to wait until previous top-level jobs
;; finish. In this waiting time, modules
@@ -204,7 +211,7 @@
;; this property becomes nil
;; 'src-file - the .v file name
;; 'load-path - value of coq-load-path, propagated to all
-;; dependencies
+;; dependencies
;; 'ancestors - list of ancestor jobs, for real compilation jobs
;; this list includes the job itself; may contain
;; duplicates
@@ -264,10 +271,10 @@
;; 'coq-process-continuation - the continuation to be called when
;; the process finishes. Either
;; coq-par-process-coqdep-result or
-;; coq-par-coqc-continuation
+;; coq-par-coqc-continuation
;; 'coq-process-output - the output of the process
;; 'coq-process-command - the command for error reporting
-;; (as string list)
+;; (as string list)
;; 'coq-par-process-killed - t if this process has been killed
;; 'coq-process-rm - if not nil, a file to be deleted when
;; the process is killed
@@ -282,7 +289,7 @@
;; (get v 'type)
;; (get v 'src-file)
;; (get v 'state)
-;; (mapcar (lambda (p) (get p 'name))
+;; (mapcar (lambda (p) (get p 'name))
;; (get v 'coqc-dependants))
;; (get v 'queue-dependant))
;; (mapc (lambda (p) (when (eq (get p 'type) 'clone)
@@ -295,7 +302,7 @@
;; (get v 'type)
;; (get v 'src-file)
;; (get v 'state)
-;; (mapcar (lambda (p) (get p 'name))
+;; (mapcar (lambda (p) (get p 'name))
;; (get v 'coqc-dependants))
;; (get v 'queue-dependant)))
;; clones))
@@ -307,10 +314,10 @@
(defvar coq--compilation-object-hash nil
"Hash for storing the compilation jobs.
-This hash only stores real compilation jobs and no clones. They
-are stored in order to avoid double compilation. The jobs stored
+This hash only stores real compilation jobs and no clones. They
+are stored in order to avoid double compilation. The jobs stored
in here are uninterned symbols that carry all important
-information in their property list. See the documentation in the
+information in their property list. See the documentation in the
source file \"coq-par-compile.el\". The hash always maps .vo file
names to compilation jobs, regardless of ``-quick''.")
@@ -392,7 +399,7 @@ latter greater then everything else."
(cons nil nil))
(defun coq-par-enqueue (queue x)
- "Insert x in queue QUEUE."
+ "Insert X in queue QUEUE."
(push x (car queue)))
(defun coq-par-dequeue (queue)
@@ -413,7 +420,7 @@ Use `coq-par-job-enqueue' and `coq-par-job-dequeue' to access the
queue.")
(defun coq-par-job-enqueue (job)
- "Insert job in the queue of waiting compilation jobs."
+ "Insert JOB in the queue of waiting compilation jobs."
(coq-par-enqueue coq-par-compilation-queue job)
(when coq--debug-auto-compilation
(message "%s: enqueue job in waiting queue" (get job 'name))))
@@ -513,7 +520,7 @@ access the queue.")
(defun coq-par-find-dependency-circle-for-job (job path)
"Find a dependency cycle in the dependency subtree of JOB.
-Do a depth-first-search to find the cycle. JOB is the current
+Do a depth-first-search to find the cycle. JOB is the current
node and PATH the stack of visited nodes."
(let (cycle (p path))
;; path is reversed. A potential cycle goes from the beginning of
@@ -759,7 +766,7 @@ Used for unlocking ancestors on compilation errors."
(defun coq-par-kill-and-cleanup ()
"Kill all background compilation, cleanup internal state and unlock ancestors.
This is the common core of `coq-par-emergency-cleanup' and
-`coq-par-user-interrupt'. Returns t if there actually was a
+`coq-par-user-interrupt'. Returns t if there actually was a
background job that was killed."
(let (proc-killed)
(when coq--debug-auto-compilation
@@ -780,10 +787,10 @@ background job that was killed."
(defun coq-par-emergency-cleanup ()
"Emergency cleanup for errors in parallel background compilation.
This is the function that cleans everything up when some
-background compilation process detected a severe error. When
-`coq-compile-keep-going' is nil, all errors are severe. When
+background compilation process detected a severe error. When
+`coq-compile-keep-going' is nil, all errors are severe. When
`coq-compile-keep-going' is t, coqc and some coqdep errors are
-not severe. This function is also used for the user action to
+not severe. This function is also used for the user action to
kill all background compilation.
On top of `coq-par-kill-and-cleanup', this function resets the
@@ -802,16 +809,16 @@ interrupt to the proof shell."
"React to a generic user interrupt with cleaning up everything.
This function cleans up background compilation when the proof
assistant died (`proof-shell-handle-error-or-interrupt-hook') or
-when the user interrupted Proof General (with C-c C-c or
+when the user interrupted Proof General (with \\[proof-interrupt-process] or
`proof-interrupt-process' leading to
`proof-shell-signal-interrupt-hook').
On top of `coq-par-kill-and-cleanup', this function only sets the
dynamic variable `prover-was-busy' to tell the proof shell that
-the user actually had a reason to interrupt. However, in the
+the user actually had a reason to interrupt. However, in the
special case where `proof-action-list' is nil and
`coq--last-compilation-job' not, this function also clears the
-queue region and releases the proof shell lock. This has the nice
+queue region and releases the proof shell lock. This has the nice
side effect, that `proof-interrupt-process' does not send an
interrupt signal to the prover."
(let (proc-killed
@@ -831,7 +838,7 @@ interrupt signal to the prover."
(setq prover-was-busy t))))
(defun coq-par-process-filter (process output)
- "Store output from coq background compilation."
+ "Store OUTPUT from coq background compilation."
(process-put process 'coq-process-output
(concat (process-get process 'coq-process-output) output)))
@@ -839,7 +846,7 @@ interrupt signal to the prover."
"Start asynchronous compilation job for COMMAND.
This function starts COMMAND with arguments ARGUMENTS for
compilation job JOB, making sure that CONTINUATION runs when the
-process finishes successfully. FILE-RM, if not nil, denotes a
+process finishes successfully. FILE-RM, if non-nil, denotes a
file to be deleted when the process is killed."
(let ((process-connection-type nil) ; use pipes
(process-name (format "pro-%s" coq--par-next-id))
@@ -874,9 +881,9 @@ file to be deleted when the process is killed."
(defun coq-par-process-sentinel (process event)
"Sentinel for all background processes.
-Runs when process PROCESS terminated because of EVENT. It
+Runs when process PROCESS terminated because of EVENT. It
determines the exit status and calls the continuation function
-that has been registered with that process. Normal compilation
+that has been registered with that process. Normal compilation
errors are reported with an error message."
(condition-case err
(if (process-get process 'coq-par-process-killed)
@@ -926,7 +933,7 @@ errors are reported with an error message."
(if cycle
(signal 'coq-compile-error-circular-dep
(mapconcat 'identity cycle " -> "))
- (error "deadlock in parallel compilation"))))))
+ (error "Deadlock in parallel compilation"))))))
(coq-compile-error-command-start
(coq-par-emergency-cleanup)
(message "%s \"%s\" in \"%s\""
@@ -936,7 +943,7 @@ errors are reported with an error message."
(coq-par-emergency-cleanup)
(message "%s %s" (get (car err) 'error-message) (cdr err)))
(error
- (message "error in sentinel of process %s, error %s"
+ (message "Error in sentinel of process %s, error %s"
(process-name process) err)
(coq-par-emergency-cleanup)
(signal (car err) (cdr err)))))
@@ -957,7 +964,7 @@ errors are reported with an error message."
(coq-par-start-jobs-until-full))
(defun coq-par-require-processed (race-counter)
- "Callback for `proof-action-list' to signal completion of the last require.
+ "Callback for `proof-action-list' to signal completion of the last Require.
This function ensures that vio2vo compilation starts after
`coq-compile-vio2vo-delay' seconds after the last module has been
loaded into Coq. When background compilation is successful, this
@@ -985,16 +992,16 @@ somewhere after the last require command."
;;; background job tasks
(defun coq-par-job-coqc-finished (job)
- "t if JOB has state 'waiting-queue or 'ready."
+ "Return t if JOB has state 'waiting-queue or 'ready."
(or (eq (get job 'state) 'waiting-queue)
(eq (get job 'state) 'ready)))
(defun coq-par-job-is-ready (job)
- "t if compilation job JOB is ready."
+ "Return t if compilation job JOB is ready."
(eq (get job 'state) 'ready))
(defun coq-par-dependencies-ready (job)
- "t if all dependencies of compilation job JOB are ready."
+ "Return t if all dependencies of compilation job JOB are ready."
(eq (get job 'coqc-dependency-count) 0))
(defun coq-par-add-coqc-dependency (dependee dependant)
@@ -1018,20 +1025,20 @@ somewhere after the last require command."
(get dependee 'name) (get dependant 'name))))
(defun coq-par-job-needs-compilation (job)
- "Determine whether job needs to get compiled and do some side effects.
+ "Determine whether JOB needs to get compiled and do some side effects.
This function contains most of the logic nesseary to support
-quick compilation according to `coq-compile-quick'. Taking
+quick compilation according to `coq-compile-quick'. Taking
`coq-compile-quick' into account, it determines if a compilation
-is necessary. The property 'required-obj-file is set either to
+is necessary. The property 'required-obj-file is set either to
the file that we need to produce or to the up-to-date object
-file. If compilation is needed, property 'use-quick is set when
--quick will be used. If no compilation is needed, property
+file. If compilation is needed, property 'use-quick is set when
+-quick will be used. If no compilation is needed, property
'obj-mod-time remembers the time stamp of 'required-obj-file.
Indepent of whether compilation is required, .vo or .vio files
-that are in the way are deleted. Note that the coq documentation
+that are in the way are deleted. Note that the coq documentation
does not contain a statement, about what file is loaded, if both
-a .vo and a .vio file are present. To be on the safe side, I
-therefore delete a file if it might be in the way. Sets the
+a .vo and a .vio file are present. To be on the safe side, I
+therefore delete a file if it might be in the way. Sets the
'vio2vo property on job if necessary."
(let* ((vo-file (get job 'vo-file))
(vio-file (coq-library-vio-of-vo-file vo-file))
@@ -1323,12 +1330,12 @@ case, the following actions are taken:
(defun coq-par-compile-job-maybe (job)
"Choose next action for JOB after dependencies are ready.
-First JOB is put into state 'enqueued-coqc. Then it is determined
+First JOB is put into state 'enqueued-coqc. Then it is determined
if JOB needs compilation, what file must be produced (depending
on `coq-compile-quick') and if a .vio or .vo file must be
-deleted. If necessary, deletion happens immediately. If JOB needs
+deleted. If necessary, deletion happens immediately. If JOB needs
compilation, compilation is started or the JOB is enqueued and
-JOB stays in 'enqueued-coqc for the time being. Otherwise, the
+JOB stays in 'enqueued-coqc for the time being. Otherwise, the
transition 'enqueued-coqc -> 'waiting-queue is done and, if
possible, also 'waiting-queue -> 'ready."
(put job 'state 'enqueued-coqc)
@@ -1350,11 +1357,11 @@ possible, also 'waiting-queue -> 'ready."
"Clear Coq dependency and update dependee information in DEPENDANT.
This function handles a Coq dependency from child dependee to
parent dependant when the dependee has finished compilation (ie.
-is in state 'waiting-queue). DEPENDANT must be in state
-'waiting-dep. The time of the most recent ancestor is updated, if
-necessary using DEPENDEE-TIME. DEPENDEE-TIME must be an Emacs
-time or 'just-compiled. The ancestors of dependee are propagated
-to DEPENDANT. The dependency count of DEPENDANT is decreased and,
+is in state 'waiting-queue). DEPENDANT must be in state
+'waiting-dep. The time of the most recent ancestor is updated, if
+necessary using DEPENDEE-TIME. DEPENDEE-TIME must be an Emacs
+time or 'just-compiled. The ancestors of dependee are propagated
+to DEPENDANT. The dependency count of DEPENDANT is decreased and,
if it reaches 0, the next transition is triggered for DEPENDANT.
For 'file jobs this is 'waiting-dep -> 'enqueued-coqc and for
'clone jobs this 'waiting-dep -> 'waiting-queue."
@@ -1386,14 +1393,14 @@ For 'file jobs this is 'waiting-dep -> 'enqueued-coqc and for
"Handle transition to state 'waiting-queue for JOB.
For 'file jobs, this function is called when compilation finished
or was not necessary to make the transition 'enqueued-coqc ->
-'waiting-queue. For 'clone jobs, this function is called when its
+'waiting-queue. For 'clone jobs, this function is called when its
real 'file job has completed compilation and is in state
'waiting-queue to make the transition 'waiting-dep ->
waiting-queue for JOB.
DEP-TIME is either 'just-compiled, when JOB has just finished
compilation, or the most recent modification time of all
-dependencies of JOB. (If compilation for JOB failed, DEP-TIME is
+dependencies of JOB. (If compilation for JOB failed, DEP-TIME is
meaningless but should nevertheless be a non-nil valid argument.)
This function makes the following actions.
@@ -1526,7 +1533,7 @@ coqdep or coqc are started for it."
(defun coq-par-start-or-enqueue (new-job)
"Start NEW-JOB or put it into the queue of waiting jobs.
NEW-JOB goes already into the waiting queue, if the number of
-background jobs is one below the limit. This is in order to leave
+background jobs is one below the limit. This is in order to leave
room for Proof General."
(if (< (1+ coq--current-background-jobs) coq--internal-max-jobs)
(coq-par-start-task new-job)
@@ -1536,15 +1543,15 @@ room for Proof General."
require-span dependant)
"Create a new compilation job for MODULE-OBJ-FILE.
If there is already a job for MODULE-OBJ-FILE a new clone job is
-created. This function initializes all necessary properties of
+created. This function initializes all necessary properties of
the new job.
COQ-LOAD-PATH must be the load path from the source file that
-originally initiated the compilation. QUEUE-DEP must be a
-compilation job or nil. If non-nil, this function makes a queue
-dependency from QUEUE-DEP to the new compilation job. If nil, a
+originally initiated the compilation. QUEUE-DEP must be a
+compilation job or nil. If non-nil, this function makes a queue
+dependency from QUEUE-DEP to the new compilation job. If nil, a
newly created clone job will proceed to state ready if the
-original job is ready. Argument REQUIRE-SPAN should be present
+original job is ready. Argument REQUIRE-SPAN should be present
when the new job should update the ancestor list in some span.
Argument DEPENDANT tells who required MODULE-OBJ-FILE, this is
used only for the error message, in case MODULE-OBJ-FILE refers
@@ -1556,7 +1563,7 @@ If the new job is a clone job, its state is
a queue dependency QUEUE-DEP (which cannot be ready yet)
- 'ready otherwise
-If the new job is a 'file job its state is 'enqueued-coqdep. If
+If the new job is a 'file job its state is 'enqueued-coqdep. If
there is space, coqdep is started immediately, otherwise the new
job is put into the compilation queue.
@@ -1659,7 +1666,7 @@ not yet failed."
For a failing job JOB, an ancestor need to stay looked if there
is still some compilation going on for which this ancestor is a
dependee or if a top level job with JOB as ancestor has finished
-it's compilation successfully. In all other cases the ancestor
+it's compilation successfully. In all other cases the ancestor
must be unlocked."
(dolist (anc-job (get job 'ancestors))
(when (and (eq (get anc-job 'lock-state) 'locked)
@@ -1694,8 +1701,8 @@ appropriate."
(defun coq-par-mark-job-failing (job)
"Mark all dependants of JOB as failing and unlock ancestors as appropriate.
Set the 'failed property on all direct and indirect dependants of
-JOB. Along the way, unlock ancestors as determined by
-`coq-par-ongoing-compilation'. Mark queue dependants with
+JOB. Along the way, unlock ancestors as determined by
+`coq-par-ongoing-compilation'. Mark queue dependants with
'queue-failed."
(unless (get job 'failed)
(put job 'failed t)
@@ -1709,14 +1716,14 @@ JOB. Along the way, unlock ancestors as determined by
(defun coq-par-process-coqdep-result (process exit-status)
"Coqdep continuation function: Process coqdep output.
-This function analyses the coqdep output of PROCESS. In case of
+This function analyses the coqdep output of PROCESS. In case of
error, the job is marked as failed or compilation is aborted via
-a signal (depending on `coq-compile-keep-going'). If there was no
+a signal (depending on `coq-compile-keep-going'). If there was no
coqdep error, the following actions are taken.
- the job that started PROCESS is put into sate 'waiting-dep
-- a new job is created for every dependency. If this new job is
+- a new job is created for every dependency. If this new job is
not immediately ready, a Coq dependency is registered from the
- new job to the current job. For dependencies that are 'ready
+ new job to the current job. For dependencies that are 'ready
already, the most recent ancestor modification time is
propagated.
- if there are no dependencies (especially if coqdep failed) or
@@ -1771,7 +1778,7 @@ is directly passed to `coq-par-analyse-coq-dep-exit'."
(defun coq-par-coqc-continuation (process exit-status)
"Coqc continuation function.
If coqc failed, signal an error or mark the job as 'failed, and
-unlock ancestors as appropriate. If coqc was successful, trigger
+unlock ancestors as appropriate. If coqc was successful, trigger
the transition 'enqueued-coqc -> 'waiting-queue for the job
behind PROCESS."
(let ((job (process-get process 'coq-compilation-job)))
@@ -1796,7 +1803,7 @@ behind PROCESS."
(get (process-get process 'coq-compilation-job) 'src-file))))))
(defun coq-par-vio2vo-continuation (process exit-status)
- "vio2vo continuation function."
+ "Vio2vo continuation function."
(let ((job (process-get process 'coq-compilation-job)))
(if (eq exit-status 0)
;; success - nothing to do
@@ -1820,7 +1827,7 @@ behind PROCESS."
(defun coq-par-handle-module (module-id span &optional from)
"Handle compilation of module MODULE-ID.
-This function translates MODULE-ID to a file name. If compilation
+This function translates MODULE-ID to a file name. If compilation
for this file is not ignored, a new top-level compilation job is
created. If there is a new top-level compilation job, it is saved
in `coq--last-compilation-job'.
@@ -1910,7 +1917,7 @@ there is no last compilation job."
(defun coq-par-item-require-predicate (item)
- "Return t if ITEM contains a require command.
+ "Return t if ITEM contains a Require command.
Predicate for `split-list-at-predicate', used to split the new
queue items at each Require command."
(let ((string (mapconcat 'identity (nth 1 item) " ")))
@@ -1930,21 +1937,21 @@ ansynchronously in parallel in the background.
If there is a last compilation job (`coq--last-compilation-job')
then the queue region is extended, while some background
-compilation is still running. In this case I have to preserve the
-internal state. Otherwise the hash of the compilation jobs and
+compilation is still running. In this case I have to preserve the
+internal state. Otherwise the hash of the compilation jobs and
the ancestor hash are initialized.
As next action the new queue items are splitted at each Require
-command. The items before the first Require are appended to the
-last compilation job or put back into proof-action-list. The
+command. The items before the first Require are appended to the
+last compilation job or put back into ‘proof-action-list’. The
remaining batches of items that each start with a Require are
then processed by `coq-par-handle-require-list', which creates
-top-level compilation jobs as necessary. Before processing the
+top-level compilation jobs as necessary. Before processing the
first of these batches, buffers are saved with
`coq-compile-save-some-buffers'.
Finally, `proof-second-action-list-active' is set if I keep some
-queue items because they have to wait for a compilation job. Then
+queue items because they have to wait for a compilation job. Then
the maximal number of background compilation jobs is started."
(when coq--debug-auto-compilation
(message "%d items were added to the queue, scan for require"
@@ -1997,7 +2004,7 @@ the maximal number of background compilation jobs is started."
"Coq function for `proof-shell-extend-queue-hook' doing parallel compilation.
If `coq-compile-before-require' is non-nil, this function starts
the compilation (if necessary) of the dependencies
-ansynchronously in parallel in the background. This function only
+ansynchronously in parallel in the background. This function only
does the error checking/reporting for
`coq-par-preprocess-require-commands-internal', which does all the work."
(when coq-compile-before-require
@@ -2018,7 +2025,7 @@ does the error checking/reporting for
(coq-par-emergency-cleanup)
(message "Error: %s" (mapconcat 'identity (cdr err) ": ")))
(error
- (message "unexpected error during parallel compilation: %s"
+ (message "Unexpected error during parallel compilation: %s"
err)
(coq-par-emergency-cleanup)
(signal (car err) (cdr err))))))
diff --git a/coq/coq-par-test.el b/coq/coq-par-test.el
index f60baacf..ebc5ecd7 100644
--- a/coq/coq-par-test.el
+++ b/coq/coq-par-test.el
@@ -1,9 +1,19 @@
-;; coq-par-test.el --- tests for parallel compilation
-;; Copyright (C) 2016 Hendrik Tews
+;;; coq-par-test.el --- tests for parallel compilation
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Hendrik Tews
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Hendrik Tews <hendrik@askra.de>
-;;
+
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
;;; Commentary:
;;
;; This file file contains tests for `coq-par-job-needs-compilation'.
@@ -12,12 +22,13 @@
;; of `coq-par-job-needs-compilation'.
;;
;; Run the tests with
-;; emacs -batch -L . -L ../generic -L ../lib -load coq-par-test.el
+;; Emacs -batch -L . -L ../generic -L ../lib -load coq-par-test.el
;;
;;; TODO:
;;
;; - integrate into PG build and test(?) system
+;;; Code:
(require 'coq-par-compile)
@@ -37,7 +48,7 @@
(quick nil nil vio)
(ensure-vo nil nil vo ))
- ((src vo dep vio)
+ ((src vo dep vio)
(no-quick nil vo vio)
(quick nil vo vio)
(ensure-vo t nil vo ))
@@ -694,15 +705,15 @@
)
"Test and result specification for `coq-par-job-needs-compilation'.
-List of tests. A test is a list of 4 elements. The first element,
-a list, specifies the existing files and their relative age. In
+List of tests. A test is a list of 4 elements. The first element,
+a list, specifies the existing files and their relative age. In
there, `src' stands for the source (x.v) file, `dep' for
a (already compiled) dependency (dep.vo or dep.vio), `vo' for the
-.vo file (x.vo) and `vio' for the .vio file (x.vio). A label in
+.vo file (x.vo) and `vio' for the .vio file (x.vio). A label in
the list denotes an existing file, a missing label a missing
-file. The first element is the oldest file, the last element the
-newest file. A sublist specifies a set of files with identical
-time stamps. For example, ``(src (vo vio) dep)'' specifies source
+file. The first element is the oldest file, the last element the
+newest file. A sublist specifies a set of files with identical
+time stamps. For example, ``(src (vo vio) dep)'' specifies source
is older than .vo and .vio, .vo and .vio have identical last
modification time stamps and .vo and .vio are older than the
dependency.
@@ -711,17 +722,17 @@ Elements 2-4 of a test specify the results and side effects of
`coq-par-job-needs-compilation' for all setting of
`coq-compile-quick' on the file configuration described in
element 1. The options `quick-no-vio2vo' and `quick-and-vio2vo'
-are specified together with label `quick'. Each result and side
+are specified together with label `quick'. Each result and side
effect specification (also called a variant in the source code
-below) is itself a list of 4 elements. Element 1 is the value for
+below) is itself a list of 4 elements. Element 1 is the value for
`coq-compile-quick', where `quick' denotes both `quick-no-vio2vo'
-and `quick-and-vio2vo'. Element 2 specifies the result of
+and `quick-and-vio2vo'. Element 2 specifies the result of
`coq-par-job-needs-compilation', nil for don't compile, t for do
-compile. Elements 3-5 specify side effects. Element 3 which file
-must be deleted, where nil means no file must be deleted. Element
+compile. Elements 3-5 specify side effects. Element 3 which file
+must be deleted, where nil means no file must be deleted. Element
4 specifies which file name must be stored in the
-`required-obj-file' property of the job. This file will be used
-as the compiled module library. In case compilation is
+`required-obj-file' property of the job. This file will be used
+as the compiled module library. In case compilation is
needed (element 2 equals t), this is the target of the
compilation.
@@ -729,7 +740,7 @@ This list contains 1 test for all possible file configuration and
relative ages.")
(defun coq-par-test-flatten-files (file-descr)
- "Flatten a file description test case list into a list of files."
+ "Flatten a file description test case list FILE-DESCR into a list of files."
(let (result)
(dolist (f file-descr result)
(if (listp f)
diff --git a/coq/coq-seq-compile.el b/coq/coq-seq-compile.el
index a1b2d30a..5875908c 100644
--- a/coq/coq-seq-compile.el
+++ b/coq/coq-seq-compile.el
@@ -1,28 +1,34 @@
-;; coq-seq-compile.el --- sequential compilation of required modules
-;; Copyright (C) 1994-2012 LFCS Edinburgh.
+;;; coq-seq-compile.el --- sequential compilation of required modules
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Hendrik Tews
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Hendrik Tews <hendrik@askra.de>
-;;
-;; $Id$
-;;
+
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
;;; Commentary:
;;
-;; This file implements compilation of required modules. The
-;; compilation is done synchonously and sequentially. That is, Proof
+;; This file implements compilation of required modules. The
+;; compilation is done synchonously and sequentially. That is, Proof
;; General blocks before putting newly asserted items into
;; proof-action-list and compiles one module after the other.
;;
+;;; Code:
(eval-when-compile
(require 'proof-compat))
-(eval-when (compile)
- (defvar queueitems nil) ; dynamic scope in p-s-extend-queue-hook
- (defvar coq-compile-before-require nil) ; defpacustom
- (defvar coq-compile-parallel-in-background nil) ; defpacustom
- (defvar coq-confirm-external-compilation nil)); defpacustom
+(eval-when-compile
+ (defvar queueitems)) ; dynamic scope in p-s-extend-queue-hook
(require 'coq-compile-common)
@@ -37,9 +43,9 @@
(defun coq-seq-lock-ancestor (span ancestor-src)
"Lock ancestor ANCESTOR-SRC and register it in SPAN.
-Lock only if `coq-lock-ancestor' is non-nil. Further, do nothing,
+Lock only if `coq-lock-ancestor' is non-nil. Further, do nothing,
if ANCESTOR-SRC is already a member of
-`proof-included-files-list'. Otherwise ANCESTOR-SRC is locked and
+`proof-included-files-list'. Otherwise ANCESTOR-SRC is locked and
registered in the 'coq-locked-ancestors property of the SPAN to
properly unlock ANCESTOR-SRC on retract."
(if coq-lock-ancestors
@@ -57,18 +63,18 @@ properly unlock ANCESTOR-SRC on retract."
"Compute dependencies of LIB-SRC-FILE.
Invoke \"coqdep\" on LIB-SRC-FILE and parse the output to
compute the compiled coq library object files on which
-LIB-SRC-FILE depends. The return value is either a string or a
-list. If it is a string then an error occurred and the string is
-the core of the error message. If the return value is a list no
+LIB-SRC-FILE depends. The return value is either a string or a
+list. If it is a string then an error occurred and the string is
+the core of the error message. If the return value is a list no
error occurred and the returned list is the (possibly empty) list
of file names LIB-SRC-FILE depends on.
If an error occurs this funtion displays
`coq--compile-response-buffer' with the complete command and its
-output. The optional argument COMMAND-INTRO is only used in the
-error case. It is prepended to the displayed command.
+output. The optional argument COMMAND-INTRO is only used in the
+error case. It is prepended to the displayed command.
-LIB-SRC-FILE should be an absolute file name. If it is, the
+LIB-SRC-FILE should be an absolute file name. If it is, the
dependencies are absolute too and the simplified treatment of
`coq-load-path-include-current' in `coq-include-options' won't
break."
@@ -146,7 +152,7 @@ if one of the following conditions is true:
- OBJ is older than the the youngest object file of the dependencies.
Argument MAX-DEP-OBJ-TIME provides the information about the
-dependencies. It is either
+dependencies. It is either
- 'just-compiled if one of the dependencies of SRC has just
been compiled
- the time value (see`time-less-or-equal') of the youngest (most
@@ -154,11 +160,11 @@ dependencies. It is either
- nil if there are no dependencies, or if they are all ignored
If this function decides to compile SRC to OBJ it returns
-'just-compiled. Otherwise it returns the modification time of
+'just-compiled. Otherwise it returns the modification time of
OBJ.
Note that file modification times inside Emacs have only a
-precisision of 1 second. To avoid spurious recompilations we do
+precisision of 1 second. To avoid spurious recompilations we do
not recompile if the youngest object file of the dependencies and
OBJ have identical modification times."
(let (src-time obj-time)
@@ -185,9 +191,9 @@ OBJ have identical modification times."
(defun coq-seq-make-lib-up-to-date (coq-obj-hash span lib-obj-file)
"Make library object file LIB-OBJ-FILE up-to-date.
Check if LIB-OBJ-FILE and all it dependencies are up-to-date
-compiled coq library objects. Recompile the necessary objects, if
-not. This function returns 'just-compiled if it compiled
-LIB-OBJ-FILE. Otherwise it returns the modification time of
+compiled coq library objects. Recompile the necessary objects, if
+not. This function returns 'just-compiled if it compiled
+LIB-OBJ-FILE. Otherwise it returns the modification time of
LIB-OBJ-FILE as time value (see `time-less-or-equal').
Either LIB-OBJ-FILE or its source file (or both) must exist when
@@ -250,7 +256,7 @@ If `coq-confirm-external-compilation' is t then the user
must confirm the external command in the minibuffer, otherwise
the command is executed without confirmation.
-Argument SPAN is the span of the \"Require\" command. The
+Argument SPAN is the span of the \"Require\" command. The
ancestor ABSOLUTE-MODULE-OBJ-FILE is locked and registered in the
span for for proper unlocking on retract.
@@ -286,11 +292,11 @@ therefore the customizations for `compile' do not apply."
(defun coq-seq-map-module-id-to-obj-file (module-id span &optional from)
"Map MODULE-ID to the appropriate coq object file.
-The mapping depends of course on `coq-load-path'. The current
+The mapping depends of course on `coq-load-path'. The current
implementation invokes coqdep with a one-line require command.
This is probably slower but much simpler than modelling coq file
-loading inside ProofGeneral. Argument SPAN is only used for error
-handling. It provides the location information of MODULE-ID for a
+loading inside ProofGeneral. Argument SPAN is only used for error
+handling. It provides the location information of MODULE-ID for a
decent error message.
A peculiar consequence of the current implementation is that this
@@ -341,19 +347,18 @@ function returns () if MODULE-ID comes from the standard library."
"Locate MODULE-ID and compile if necessary.
If `coq-compile-command' is not nil the whole task of checking which
modules need compilation and the compilation itself is done by an external
-process. If `coq-compile-command' is nil ProofGeneral computes the
-dependencies with \"coqdep\" and compiles modules as necessary. This internal
-checking does currently not handle ML modules.
+process. If `coq-compile-command' is nil ProofGeneral computes the
+dependencies with \"coqdep\" and compiles modules as necessary.
+This internal checking does currently not handle ML modules.
-Argument SPAN is the span of the \"Require\" command. Locked
+Argument SPAN is the span of the \"Require\" command. Locked
ancestors are registered in its 'coq-locked-ancestors property
for proper unlocking on retract.
Argument COQ-OBJECT-LOCAL-HASH-SYMBOL provides a place to store
the coq-obj-hash, which is used during internal
-compilation (see `coq-seq-make-lib-up-to-date'). This way one hash
-will be used for all \"Require\" commands added at once to the
-queue."
+compilation (see `coq-seq-make-lib-up-to-date'). This way one hash
+will be used for all \"Require\" commands added at once to the queue."
(let ((module-obj-file (coq-seq-map-module-id-to-obj-file module-id span from)))
;; coq-seq-map-module-id-to-obj-file currently returns () for
;; standard library modules!
diff --git a/coq/coq-smie.el b/coq/coq-smie.el
index c488e73f..15697354 100644
--- a/coq/coq-smie.el
+++ b/coq/coq-smie.el
@@ -1,10 +1,18 @@
;;; coq-smie.el --- SMIE lexer, grammar, and indent rules for Coq
-;; Copyright (C) 2014 Free Software Foundation, Inc
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
;; Authors: Pierre Courtieu
;; Stefan Monnier
;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
+
;; License: GPLv3+ (GNU GENERAL PUBLIC LICENSE version 3 or later)
;;; Commentary:
@@ -12,7 +20,7 @@
;; Lexer.
;; Due to the verycomplex grammar of Coq, and to the architecture of
-;; smie, we deambiguate all kinds of tokens during lexing. This is a
+;; smie, we deambiguate all kinds of tokens during lexing. This is a
;; complex piece of code but it allows for all smie goodies.
;; Some examples of deambigations:
;; - We distinguish ":=" from ":= inductive" to avoid the circular precedence
@@ -42,6 +50,19 @@
; ,@body
; (message "%.06f" (float-time (time-since time)))))
+(defcustom coq-smie-user-tokens nil
+ "Alist of (syntax . token) pairs to extend the coq smie parser.
+These are user configurable additional syntax for smie tokens. It
+allows to define alternative syntax for smie token. Typical
+example: if you define a infix operator \"xor\" you may want to
+define it as a new syntax for token \"or\" in order to have the
+indentation rules of or applied to xor. Other exemple: if you
+want to define a new notation \"ifb\" ... \"then\" \"else\" then
+you need to declare \"ifb\" as a new syntax for \"if\" to make
+indentation work well."
+ :type '(alist :key-type string :value-type string)
+ :group 'coq)
+
(defun coq-string-suffix-p (str1 str2 &optional ignore-case)
"Return non-nil if STR1 is a prefix of STR2.
@@ -92,7 +113,7 @@ attention to case differences."
(defun coq-smie-is-ltacdef ()
(let ((case-fold-search nil))
- (save-excursion
+ (save-excursion
(coq-find-real-start)
(looking-at "\\(\\(Local\\|Global\\)\\s-+\\)?\\(Ltac\\|Tactic\\s-+Notation\\)\\s-"))))
@@ -216,11 +237,11 @@ the token of \".\" is simply \".\"."
;; tokens and ignore-bteween are not disjoint
(defun coq-smie-search-token-forward (tokens &optional end ignore-between)
"Search for one of TOKENS between point and END.
-If some enclosing parenthesis is reached, stop there and return
-nil. Token \".\" is considered only if followed by a space.
-optional IGNORE-BETWEEN defines opener/closer to ignore during
-search. Careful: the search for a opener stays inside the current
-command (and inside parenthesis)."
+If some enclosing parenthesis is reached, stop there and return nil.
+Token \".\" is considered only if followed by a space. Optional
+IGNORE-BETWEEN defines opener/closer to ignore during search.
+Careful: the search for a opener stays inside the current command (and
+inside parenthesis)."
(unless end (setq end (point-max)))
(condition-case nil
(catch 'found
@@ -261,11 +282,12 @@ command (and inside parenthesis)."
;; tokens and ignore-bteween are not disjoint
(defun coq-smie-search-token-backward (tokens &optional end ignore-between)
"Search for one of TOKENS between point and END.
-If some enclosing parenthesis is reached, stop there and return
-nil. Token \".\" is considered only if followed by a space.
+If some enclosing parenthesis is reached, stop there and return nil.
+Token \".\" is considered only if followed by a space.
optional IGNORE-BETWEEN defines opener/closer to ignore during
-search. Careful: the search for a opener stays inside the current
-command (and inside parenthesis). "
+search.
+Careful: the search for a opener stays inside the current command (and
+inside parenthesis)."
(unless end (setq end (point-min)))
(condition-case nil
(catch 'found
@@ -322,9 +344,9 @@ proof-mode starter in Coq."
;; each goal anyway.
(defun coq-smie-detect-goal-command ()
"Return t if the next command is a goal starting to be indented.
-The point should be at the beginning of the command name. As
-false positive are more annoying than false negative, return t
-only if it is FOR SURE a goal opener. Put a \"Proof.\" when you want to
+The point should be at the beginning of the command name.
+As false positive are more annoying than false negative, return t only
+if it is FOR SURE a goal opener. Put a \"Proof.\" when you want to
force indentation."
(save-excursion ; FIXME add other commands that potentialy open goals
(when (proof-looking-at "\\(Local\\|Global\\)?\
@@ -341,7 +363,7 @@ force indentation."
The point should be at the beginning of the command name."
(save-excursion ; FIXME Is there other module starting commands?
(cond
- ((looking-back "with\\s-+" nil) "module") ; lowecase means Module that is not a declaration keyword (like in with Module)
+ ((looking-back "with\\s-+" nil) "module") ; lowecase means Module that is not a declaration keyword (like in with Module)
((proof-looking-at "\\(Module\\|Section\\)\\>")
(if (coq-lonely-:=-in-this-command) "Module start" "Module def")))))
@@ -373,8 +395,11 @@ The point should be at the beginning of the command name."
(defun coq-smie-forward-token ()
- (let ((tok (coq-forward-token-fast-nogluing-dot-friends)))
+ (let ((tok (smie-default-forward-token)))
(cond
+ ((assoc tok coq-smie-user-tokens)
+ (let ((res (assoc tok coq-smie-user-tokens)))
+ (cdr res)))
;; @ may be ahead of an id, it is part of the id.
((and (equal tok "@") (looking-at "[[:alpha:]_]"))
(let ((newtok (coq-smie-forward-token))) ;; recursive call
@@ -481,7 +506,7 @@ The point should be at the beginning of the command name."
":= with"
(goto-char p)
":= module")))
- ((member corresp '("Inductive" "CoInductive")) ":= inductive")
+ ((member corresp '("Inductive" "CoInductive" "Variant")) ":= inductive")
((equal corresp "let") ":= let")
((equal corresp "where") ":= inductive") ;; inductive or fixpoint, nevermind
((or (looking-back "{" nil)) ":= record")
@@ -492,6 +517,9 @@ The point should be at the beginning of the command name."
(defun coq-smie-backward-token ()
(let* ((tok (smie-default-backward-token)))
(cond
+ ((assoc tok coq-smie-user-tokens)
+ (let ((res (assoc tok coq-smie-user-tokens)))
+ (cdr res)))
;; Distinguish between "," from quantification and other uses of
;; "," (tuples, tactic arguments)
((equal tok ",")
@@ -530,7 +558,7 @@ The point should be at the beginning of the command name."
(equal (coq-smie-backward-token) "; tactic")) ;; recursive
"|| tactic")
;; this is wrong half of the time but should not harm indentation
- ((and (equal backtok nil) (looking-back "(" nil)) "||")
+ ((and (equal backtok nil) (looking-back "(" nil)) "||")
((equal backtok nil)
(if (or (looking-back "\\[" nil)
(and (looking-back "{" nil)
@@ -567,12 +595,28 @@ The point should be at the beginning of the command name."
(goto-char (1- (point))) "{|")
((and (zerop (length tok)) (member (char-before) '(?\{ ?\}))
- (save-excursion
- (forward-char -1)
- (let ((nxttok (coq-smie-backward-token))) ;; recursive call
- (coq-is-cmdend-token nxttok))))
+ (save-excursion
+ (forward-char -1)
+ (if (and (looking-at "{")
+ (looking-back "\\([0-9]+\\s-*:\\s-*\\)" nil t))
+ (goto-char (match-beginning 0)))
+ (let ((nxttok (coq-smie-backward-token))) ;; recursive call
+ (coq-is-cmdend-token nxttok))))
(forward-char -1)
- (if (looking-at "{") "{ subproof" "} subproof"))
+ (if (looking-at "}") "} subproof"
+ (if (and (looking-at "{")
+ (looking-back "\\([0-9]+\\s-*:\\s-*\\)" nil t))
+ (goto-char (match-beginning 0)))
+ "{ subproof"
+ ))
+
+ ;; ((and (zerop (length tok)) (member (char-before) '(?\{ ?\}))
+ ;; (save-excursion
+ ;; (forward-char -1)
+ ;; (let ((nxttok (coq-smie-backward-token))) ;; recursive call
+ ;; (coq-is-cmdend-token nxttok))))
+ ;; (forward-char -1)
+ ;; (if (looking-at "{") "{ subproof" "} subproof"))
((and (equal tok ":") (looking-back "\\<\\(constr\\|ltac\\|uconstr\\)" nil))
": ltacconstr")
@@ -592,9 +636,16 @@ The point should be at the beginning of the command name."
;; FIXME: no token should end with "." except "." itself
; for "unfold in *|-*."
- ((member tok '("*." "-*." "|-*." "*|-*.")) (forward-char 1) ".")
+ ((member tok '("*." "-*." "|-*." "*|-*."))
+ (forward-char (- (length tok) 1))
+ (coq-smie-.-deambiguate))
; for "unfold in *|-*;"
- ((member tok '("*;" "-*;" "|-*;" "*|-*;")) (forward-char 1) "; tactic") ;; FIXME; can be "; ltac" too
+ ((member tok '("*;" "-*;" "|-*;" "*|-*;"))
+ ;; FIXME; can be "; ltac" too
+ (forward-char (- (length tok) 1)) "; tactic")
+ ;; bullet detected, is it really a bullet? we have to traverse
+ ;; recursively any other bullet or "n:{" "}". this is the work of
+ ;; coq-empty-command-p
((and (string-match coq-bullet-regexp-nospace tok)
(save-excursion (coq-empty-command-p)))
(concat tok " bullet"))
@@ -719,8 +770,7 @@ Lemma foo: forall n,
instead of:
Lemma foo: forall n,
- n = n.
-"
+ n = n."
:type 'boolean
:group 'coq)
@@ -734,19 +784,18 @@ Lemma foo: forall n,
:safe #'coq-indent-safep)
(defcustom coq-indent-semicolon-tactical 2
- "Number of spaces used to indent after the first tactical semi colon of a serie.
- If set to 0, indetation is as follows:
- tac1;
- tac2;
- tac3;
- tac4.
-
- if set to 2 (default):
-
- tac1;
- tac2;
- tac3;
- tac4."
+ "Number of spaces used to indent after the 1st tactical semicolon of a serie.
+If set to 0, indentation is as follows:
+tac1;
+tac2;
+tac3;
+tac4.
+
+If set to 2 (default):
+tac1;
+ tac2;
+ tac3;
+ tac4."
:type 'integer
:group 'coq
:safe #'coq-indent-safep)
@@ -770,8 +819,7 @@ for example, if set to 0 the indentation is as follows:
If it is set to 2 (default) it is as follows:
Lemma foo: forall x:nat,
- x <= 0 -> x = 0.
-"
+ x <= 0 -> x = 0."
:type 'integer
:group 'coq
:safe #'coq-indent-safep)
@@ -956,7 +1004,7 @@ Typical values are 2 or 4."
;; copied from elixir-smie.el
(defun coq-smie--same-line-as-parent (parent-pos child-pos)
- "Return non-nil if `child-pos' is on same line as `parent-pos'."
+ "Return non-nil if PARENT-POS is on same line as CHILD-POS."
(= (line-number-at-pos parent-pos) (line-number-at-pos child-pos)))
(defun coq-smie-rules (kind token)
diff --git a/coq/coq-syntax.el b/coq/coq-syntax.el
index 5844be74..bb32fc52 100644
--- a/coq/coq-syntax.el
+++ b/coq/coq-syntax.el
@@ -1,27 +1,35 @@
-;; coq-syntax.el Font lock expressions for Coq
-;; Copyright (C) 1997-2007, 2009 LFCS Edinburgh.
+;;; coq-syntax.el --- Font lock expressions for Coq
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Thomas Kleymann, Healfdene Goguen, Pierre Courtieu
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
-;; coq-syntax.el,v 11.13 2013/07/10 14:59:08 pier Exp
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
+;;; Commentary:
+;;
+
+;;; Code:
(require 'proof-syntax)
(require 'proof-utils) ; proof-locate-executable
(require 'coq-db)
+(require 'span)
-(eval-when-compile
- (require 'span)
- (defvar coq-goal-command-regexp nil)
- (defvar coq-save-command-regexp-strict nil))
-
-
- ;;; keyword databases
+;;; keyword databases
(defcustom coq-user-tactics-db nil
- "User defined tactic information. See `coq-syntax-db' for
-syntax. It is not necessary to add your own tactics here (it is not
-needed by the synchronizing/backtracking system). You may however do
+ "User defined tactic information. See `coq-syntax-db' for syntax.
+It is not necessary to add your own tactics here (it is not
+needed by the synchronizing/backtracking system). You may however do
so for the following reasons:
1 your tactics will be colorized by font-lock
@@ -36,10 +44,10 @@ so for the following reasons:
(defcustom coq-user-commands-db nil
- "User defined command information. See `coq-syntax-db' for
- syntax. It is not necessary to add your own commands here (it is not
- needed by the synchronizing/backtracking system). You may however do
- so for the following reasons:
+ "User defined command information. See `coq-syntax-db' for syntax.
+It is not necessary to add your own commands here (it is not
+needed by the synchronizing/backtracking system). You may however do
+so for the following reasons:
1 your commands will be colorized by font-lock
@@ -52,10 +60,10 @@ so for the following reasons:
:group 'coq)
(defcustom coq-user-tacticals-db nil
- "User defined tactical information. See `coq-syntax-db' for
- syntax. It is not necessary to add your own commands here (it is not
- needed by the synchronizing/backtracking system). You may however do
- so for the following reasons:
+ "User defined tactical information. See `coq-syntax-db' for syntax.
+It is not necessary to add your own commands here (it is not
+needed by the synchronizing/backtracking system). You may however do
+so for the following reasons:
1 your commands will be colorized by font-lock
@@ -68,10 +76,10 @@ so for the following reasons:
:group 'coq)
(defcustom coq-user-solve-tactics-db nil
- "User defined closing tactics. See `coq-syntax-db' for
- syntax. It is not necessary to add your own commands here (it is not
- needed by the synchronizing/backtracking system). You may however do
- so for the following reasons:
+ "User defined closing tactics. See `coq-syntax-db' for syntax.
+It is not necessary to add your own commands here (it is not
+needed by the synchronizing/backtracking system). You may however do
+so for the following reasons:
1 your commands will be colorized by font-lock
@@ -85,10 +93,10 @@ so for the following reasons:
(defcustom coq-user-cheat-tactics-db nil
"User defined closing tactics BY CHEATING (ex: admit).
- See `coq-syntax-db' for syntax. It is not necessary to add your
- own commands here (it is not needed by the
- synchronizing/backtracking system). You may however do so for
- the following reasons:
+See `coq-syntax-db' for syntax. It is not necessary to add your
+own commands here (it is not needed by the
+synchronizing/backtracking system). You may however do so for
+the following reasons:
1 your commands will be colorized by font-lock
@@ -103,10 +111,10 @@ so for the following reasons:
(defcustom coq-user-reserved-db nil
- "User defined reserved keywords information. See `coq-syntax-db' for
- syntax. It is not necessary to add your own commands here (it is not
- needed by the synchronizing/backtracking system). You may however do
- so for the following reasons:
+ "User defined reserved keywords information. See `coq-syntax-db' for syntax.
+It is not necessary to add your own commands here (it is not
+needed by the synchronizing/backtracking system). You may however do
+so for the following reasons:
1 your commands will be colorized by font-lock
@@ -320,7 +328,7 @@ so for the following reasons:
("suff" "suff" "suff # : #" t "suff")
)
coq-user-tactics-db)
- "Coq tactics information list. See `coq-syntax-db' for syntax. "
+ "Coq tactics information list. See `coq-syntax-db' for syntax."
)
;; user shortcuts are prioritized by being put at the end
@@ -437,7 +445,7 @@ so for the following reasons:
("Local Coercion" nil "Local Coercion @{id} : @{typ1} >-> @{typ2}." t "Local\\s-+Coercion")
("Coercion" "coerc" "Coercion @{id} : @{typ1} >-> @{typ2}." t "Coercion")
)
- "Coq declaration keywords information list. See `coq-syntax-db' for syntax."
+ "Coq declaration keywords information list. See `coq-syntax-db' for syntax."
)
(defvar coq-defn-db
@@ -495,8 +503,9 @@ so for the following reasons:
("Scheme Induction" "sci" "Scheme @{name} := Induction for # Sort #." t)
("Scheme Minimality" "scm" "Scheme @{name} := Minimality for # Sort #." t)
("Structure" "str" "Structure # : # := {\n# : #;\n# : # }" t "Structure")
+ ("Variant" "varv" "Variant # : # := # : #." t "Variant")
)
- "Coq definition keywords information list. See `coq-syntax-db' for syntax. "
+ "Coq definition keywords information list. See `coq-syntax-db' for syntax."
)
;; modules and section are indented like goal starters
@@ -521,7 +530,7 @@ so for the following reasons:
("Instance goal" "instg" "Instance #:#.\n#\nDefined." t);; careful
("Lemma" "l" "Lemma # : #.\nProof.\n#\nQed." t "Lemma")
("Program Lemma" "pl" "Program Lemma # : #.\nProof.\n#\nQed." t "Program\\s-+Lemma")
- ("Proposition" "l" "Proposition # : #.\nProof.\n#\nQed." t "Proposition")
+ ("Proposition" "pr" "Proposition # : #.\nProof.\n#\nQed." t "Proposition")
("Module! (interactive)" nil "Module # : #.\n#\nEnd #." nil nil coq-insert-section-or-module)
("Module Type" "mti" "Module Type #.\n#\nEnd #." t "Module\\s-+Type") ; careful
("Module :" "moi" "Module # : #.\n#\nEnd #." t "Module") ; careful
@@ -534,7 +543,7 @@ so for the following reasons:
("Obligations" "obls" "Obligations #.\n#\nQed." nil "Obligations")
("Next Obligation" "nobl" "Next Obligation.\n#\nQed." t "Next Obligation")
)
- "Coq goal starters keywords information list. See `coq-syntax-db' for syntax. "
+ "Coq goal starters keywords information list. See `coq-syntax-db' for syntax."
)
;; TODO: dig other queries from the refman.
@@ -563,7 +572,7 @@ so for the following reasons:
("Test" nil "Test" nil "Test" nil t) ; let us not highlight all possible options for Test
("Timeout" nil "Timeout" nil "Timeout")
)
- "Coq queries command, that deserve a separate menu for sending them to coq without insertion. "
+ "Coq queries command, that deserve a separate menu for sending them to coq without insertion."
)
;; command that are not declarations, definition or goal starters
@@ -706,22 +715,26 @@ so for the following reasons:
("Set Nonrecursive Elimination Schemes" nil "Set Nonrecursive Elimination Schemes" t "Set Nonrecursive\\s-+Elimination\\s-+Schemes")
("Set Parsing Explicit" nil "Set Parsing Explicit" t "Set Parsing\\s-+Explicit")
("Set Primitive Projections" nil "Set Primitive Projections" t "Set Primitive\\s-+Projections")
- ("Set Printing All" nil "Set Printing All" t "Set Printing\\s-+All")
- ("Set Printing Coercions" nil "Set Printing Coercions" t "Set Printing\\s-+Coercions")
- ("Set Printing Depth" nil "Set Printing Depth" t "Set Printing\\s-+Depth")
- ("Set Printing Existential Instances" nil "Set Printing Existential Instances" t "Set Printing\\s-+Existential\\s-+Instances")
- ("Set Printing Implicit" nil "Set Printing Implicit" t "Set Printing\\s-+Implicit")
- ("Set Printing Implicit Defensive" nil "Set Printing Implicit Defensive" t "Set Printing\\s-+Implicit\\s-+Defensive")
- ("Set Printing Matching" nil "Set Printing Matching" t "Set Printing\\s-+Matching")
- ("Set Printing Notations" nil "Set Printing Notations" t "Set Printing\\s-+Notations")
- ("Set Printing Primitive Projection Compatibility" nil "Set Printing Primitive Projection Compatibility" t "Set Printing\\s-+Primitive\\s-+Projection\\s-+Compatibility")
- ("Set Printing Primitive Projection Parameters" nil "Set Printing Primitive Projection Parameters" t "Set Printing\\s-+Primitive\\s-+Projection\\s-+Parameters")
- ("Set Printing Projections" nil "Set Printing Projections" t "Set Printing\\s-+Projections")
- ("Set Printing Records" nil "Set Printing Records" t "Set Printing\\s-+Records")
- ("Set Printing Synth" nil "Set Printing Synth" t "Set Printing\\s-+Synth")
- ("Set Printing Universes" nil "Set Printing Universes" t "Set Printing\\s-+Universes")
- ("Set Printing Width" nil "Set Printing Width" t "Set Printing\\s-+Width")
- ("Set Printing Wildcard" nil "Set Printing Wildcard" t "Set Printing\\s-+Wildcard")
+ ("Set Printing All" nil "Set Printing All" t "Set\\s-+Printing\\s-+All")
+ ("Set Printing Coercions" nil "Set Printing Coercions" t "Set\\s-+Printing\\s-+Coercions")
+ ("Set Printing Compact Contexts" nil "Set Printing Compact Contexts" t "Set\\s-+Printing\\s-+Compact\\s-+Contexts")
+ ("Set Printing Depth" nil "Set Printing Depth" t "Set\\s-+Printing\\s-+Depth")
+ ("Set Printing Existential Instances" nil "Set Printing Existential Instances" t "Set\\s-+Printing\\s-+Existential\\s-+Instances")
+ ("Set Printing Goal Tags" nil "Set Printing Goal Tags" t "Set\\s-+Printing\\s-+Goal\\s-+Tags")
+ ("Set Printing Goal Names" nil "Set Printing Goal Names" t "Set\\s-+Printing\\s-+Goal\\s-+Names")
+ ("Set Printing Implicit" nil "Set Printing Implicit" t "Set\\s-+Printing\\s-+Implicit")
+ ("Set Printing Implicit Defensive" nil "Set Printing Implicit Defensive" t "Set\\s-+Printing\\s-+Implicit\\s-+Defensive")
+ ("Set Printing Matching" nil "Set Printing Matching" t "Set\\s-+Printing\\s-+Matching")
+ ("Set Printing Notations" nil "Set Printing Notations" t "Set\\s-+Printing\\s-+Notations")
+ ("Set Printing Primitive Projection Compatibility" nil "Set Printing Primitive Projection Compatibility" t "Set\\s-+Printing\\s-+Primitive\\s-+Projection\\s-+Compatibility")
+ ("Set Printing Primitive Projection Parameters" nil "Set Printing Primitive Projection Parameters" t "Set\\s-+Printing\\s-+Primitive\\s-+Projection\\s-+Parameters")
+ ("Set Printing Projections" nil "Set Printing Projections" t "Set\\s-+Printing\\s-+Projections")
+ ("Set Printing Records" nil "Set Printing Records" t "Set\\s-+Printing\\s-+Records")
+ ("Set Printing Synth" nil "Set Printing Synth" t "Set\\s-+Printing\\s-+Synth")
+ ("Set Printing Unfocused" nil "Set Printing Unfocused" t "Set\\s-+Printing\\s-+Unfocused")
+ ("Set Printing Universes" nil "Set Printing Universes" t "Set\\s-+Printing\\s-+Universes")
+ ("Set Printing Width" nil "Set Printing Width" t "Set\\s-+Printing\\s-+Width")
+ ("Set Printing Wildcard" nil "Set Printing Wildcard" t "Set\\s-+Printing\\s-+Wildcard")
("Set Program Mode" nil "Set Program Mode" t "Set Program\\s-+Mode")
("Set Proof Using Clear Unused" nil "Set Proof Using Clear Unused" t "Set Proof\\s-+Using\\s-+Clear\\s-+Unused")
("Set Record Elimination Schemes" nil "Set Record Elimination Schemes" t "Set Record\\s-+Elimination\\s-+Schemes")
@@ -762,11 +775,11 @@ so for the following reasons:
("Set Silent" nil "Set Silent" t "Set Silent")
("Set Undo" nil "Set Undo" t "Set Undo")
("Set Search Blacklist" nil "Set Search Blacklist" t "Set Search\\s-+Blacklist")
- ("Set Printing Coercion" nil "Set Printing Coercion" t "Set Printing\\s-+Coercion")
- ("Set Printing If" nil "Set Printing If" t "Set Printing\\s-+If")
- ("Set Printing Let" nil "Set Printing Let" t "Set Printing\\s-+Let")
- ("Set Printing Record" nil "Set Printing Record" t "Set Printing\\s-+Record")
- ("Set Printing Constructor" nil "Set Printing Constructor" t "Set Printing\\s-+Constructor")
+ ("Set Printing Coercion" nil "Set Printing Coercion" t "Set\\s-+Printing\\s-+Coercion")
+ ("Set Printing If" nil "Set Printing If" t "Set\\s-+Printing\\s-+If")
+ ("Set Printing Let" nil "Set Printing Let" t "Set\\s-+Printing\\s-+Let")
+ ("Set Printing Record" nil "Set Printing Record" t "Set\\s-+Printing\\s-+Record")
+ ("Set Printing Constructor" nil "Set Printing Constructor" t "Set\\s-+Printing\\s-+Constructor")
("Solve Obligations" "oblssolve" "Solve Obligations using #." t "Solve\\s-+Obligations")
("Local Strategy" nil "Local Strategy # [#]." t "Local\\s-+Strategy")
("Strategy" nil "Strategy # [#]." t "Strategy")
@@ -907,7 +920,7 @@ so for the following reasons:
(append coq-decl-db coq-defn-db coq-goal-starters-db
coq-queries-commands-db
coq-other-commands-db coq-ssreflect-commands-db coq-user-commands-db)
- "Coq all commands keywords information list. See `coq-syntax-db' for syntax. "
+ "Coq all commands keywords information list. See `coq-syntax-db' for syntax."
)
@@ -930,7 +943,7 @@ so for the following reasons:
("match with 4" "m4" "match # with\n| # => #\n| # => #\n| # => #\n| # => #\nend")
("match with 5" "m5" "match # with\n| # => #\n| # => #\n| # => #\n| # => #\n| # => #\nend")
)
- "Coq terms keywords information list. See `coq-syntax-db' for syntax. "
+ "Coq terms keywords information list. See `coq-syntax-db' for syntax."
)
@@ -974,8 +987,8 @@ so for the following reasons:
;; (la fonction vernac_declare_module dans toplevel/vernacentries)
(defun coq-count-match (regexp strg)
- "Count the number of (maximum, non overlapping) matching substring
- of STRG matching REGEXP. Empty match are counted once."
+ "Count the number of max. non-overlapping substring of STRG matching REGEXP.
+Empty matches are counted once."
(let ((nbmatch 0) (str strg))
(while (and (proof-string-match regexp str) (not (string-equal str "")))
(incf nbmatch)
@@ -1004,8 +1017,8 @@ Used by `coq-goal-command-p'"
;; unused anymore (for good)
(defun coq-goal-command-str-p (str)
- "Decide syntactically whether STR is a goal start or not. Use
-`coq-goal-command-p' on a span instead if possible."
+ "Decide syntactically whether STR is a goal start or not.
+Use ‘coq-goal-command-p’ on a span instead if possible."
(let* ((match (coq-count-match "\\_<match\\_>" str))
(with (- (coq-count-match "\\_<with\\_>" str) (coq-count-match "\\_<with\\s-+signature\\_>" str)))
(letwith (+ (coq-count-match "\\_<let\\_>" str) (- with match)))
@@ -1030,7 +1043,6 @@ Used by `coq-goal-command-p'"
;; to look at Modules and section (actually indentation will still
;; need it)
(defun coq-goal-command-p (span)
- "see `coq-goal-command-p'"
(or (span-property span 'goalcmd)
;; module and section starts are detected here
(let ((str (or (span-property span 'cmd) "")))
@@ -1052,7 +1064,7 @@ It is used:
(defun coq-save-command-p (span str)
- "Decide whether argument is a Save command or not"
+ "Decide whether argument is a Save command or not."
(or (proof-string-match coq-save-command-regexp-strict str)
(and (proof-string-match "\\`Proof\\_>" str)
(not (proof-string-match "\\`Proof\\s-*\\(\\.\\|\\_<with\\_>\\|\\_<using\\_>\\)" str)))))
@@ -1203,11 +1215,17 @@ It is used:
(defvar coq-symbols-regexp (regexp-opt coq-symbols))
;; ----- regular expressions
-(defvar coq-error-regexp "^\\(Error:\\|Discarding pattern\\|Syntax error:\\|System Error:\\|User Error:\\|User error:\\|Anomaly[:.]\\|Toplevel input[,]\\)"
+(defvar coq-error-regexp "^\\(In nested Ltac call\\|Error:\\|Discarding pattern\\|Syntax error:\\|System Error:\\|User Error:\\|User error:\\|Anomaly[:.]\\|Toplevel input[,]\\)"
"A regexp indicating that the Coq process has identified an error.")
+;; april2017: coq-8.7 removes special chars definitely and puts
+;; <infomsg> and <warning> around all messages except errors.
+;; We let our legacy regexp for some years and remove them, say, in 2020.
(defvar coq-shell-eager-annotation-start
- "\376\\|\\[Reinterning\\|Warning:\\|TcDebug \\|<infomsg>")
+ "\376\\|\\[Reinterning\\|Warning:\\|TcDebug \\|<infomsg>\\|<warning>")
+
+(defvar coq-shell-eager-annotation-end
+ "\377\\|done\\]\\|</infomsg>\\|</warning>\\|\\*\\*\\*\\*\\*\\*\\|) >")
(defvar coq-id "\\(@\\|_\\|\\w\\)\\(\\w\\|\\s_\\)*") ;; Coq ca start an id with @ or _
(defvar coq-id-shy "\\(?:@\\|_\\|\\w\\)\\(?:\\w\\|\\s_\\)*")
@@ -1219,12 +1237,12 @@ It is used:
(concat paren "\\s-*\\(" coq-ids "\\)\\s-*" end))
(defcustom coq-variable-highlight-enable t
- "Activates partial bound variable highlighting"
+ "Activates partial bound variable highlighting."
:type 'boolean
:group 'coq)
(defcustom coq-symbol-highlight-enable nil
- "Activates partial bound variable highlighting"
+ "Activates symbol highlighting."
:type 'boolean
:group 'coq)
@@ -1336,12 +1354,71 @@ It is used:
(proof-zap-commas))))
-;; ", " is for multiple hypothesis displayed in v8.5. If more than
-;; 1 space this is a hypothesis displayed in the middle of a line (> v8.5)
-;; "^ " is for goals in debug mode.
+;; ", " is for multiple hypothesis displayed in v8.5.
+;; exactly no space after start of line = hyps names in
+;; Search results (and when we get a more compact display of hyps)
+;; exactly 2 spaces at start of line = is for normal goal display at
+;; start of line
+;; exactly 3 spaces at start of line = hyps on the same line (Set
+;; Printing Compact Goals".
+;; If more than 3 spaces: not a hyp.
+;; we used to have: "^ " for goals in debug mode but it does not seem
+;; necessary anymore.
(defvar coq-hyp-name-in-goal-or-response-regexp
- "\\(^\\|^ \\|^ \\|[^^ ] ? \\)\\(\\(?:[^\n :(),=]\\|, \\)+ *\\(?::[ \n]\\|,$\\)\\)"
- "regexp matching hypothesis names in goal or response buffer")
+ "\\(?:\\(?1:^\\)\\|\\(?1:^ \\)\\|\\(?:[^ ] \\)\\(?1: \\)\\)\\(?2:\\(?:[^\n :(),=]\\|, \\)+\\)\\(?: *:=?[ \n]\\|,$\\)"
+ "Regexp matching hypothesis names in goal or response buffer.
+Subexpr 2 contains the real name of the function.
+Subexpr 1 contains the prefix context (spaces mainly) that is not
+part of another hypothesis.")
+
+; Matches the end of the last hyp, before the ======... separator.
+(defvar coq-hyp-name-or-goalsep-in-goal-or-response-regexp
+ (concat coq-hyp-name-in-goal-or-response-regexp "\\|\\(?1:^\\s-+========\\)"))
+
+(defun coq-find-first-hyp ()
+ (with-current-buffer proof-goals-buffer
+ (save-excursion
+ (goto-char (point-min))
+ (search-forward-regexp coq-hyp-name-in-goal-or-response-regexp nil t)
+ (match-beginning 2))))
+
+(defun coq-detect-hyps-positions (buf &optional limit)
+ "Detect all hypotheses displayed in buffer BUF and returns positions.
+5 positions are created for each hyp: (begcross beghypname endhypname beg end)."
+ (with-current-buffer buf
+ (save-excursion
+ (goto-char (point-min))
+ (let ((res '()))
+ (goto-char (point-min))
+ (while (search-forward-regexp coq-hyp-name-in-goal-or-response-regexp limit t)
+ (let* ((str (replace-regexp-in-string "\\`[ \r\n\t]+\\|[ \r\n\t]+\\'" "" (match-string 2) t t))
+ (beghypname (match-beginning 2))
+ (beg (match-end 0))
+ (begcross (match-beginning 1))
+ (endhypname (match-end 2))
+ (splitstr (split-string str ",\\|,$\\|:" t)) ; 4th arg of split-string errors in emacs24
+ (end (save-excursion ; looking for next hyp and return its leftest part
+ (search-forward-regexp coq-hyp-name-or-goalsep-in-goal-or-response-regexp nil t)
+ (goto-char (match-beginning 1))
+ ;; if previous is a newline, don't include it i the overklay
+ (when (looking-back "\\s-") (goto-char (- (point) 1)))
+ (point))))
+ ; if several hyp names, we name the overlays with the first hyp name
+ (setq res
+ (cons
+ (cons (mapcar (lambda (s) (substring-no-properties s)) splitstr)
+ (list begcross beghypname endhypname beg end))
+ res))))
+ res))))
+
+;; Don't look at the conclusion of the goal
+(defun coq-detect-hyps-positions-in-goals ()
+ (with-current-buffer proof-goals-buffer
+ (goto-char (point-min))
+ (coq-detect-hyps-positions
+ proof-goals-buffer
+ (if (search-forward-regexp "==========" nil t) (point) nil))))
+
;; We define a slightly different set of keywords for response buffer.
diff --git a/coq/coq-system.el b/coq/coq-system.el
index aad7d386..63ee57ac 100644
--- a/coq/coq-system.el
+++ b/coq/coq-system.el
@@ -1,30 +1,49 @@
-;; coq-system.el --- common part of compilation feature
-;; Copyright (C) 2015 LFCS Edinburgh.
+;;; coq-system.el --- common part of compilation feature
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Hendrik Tews, Pierre Courtieu
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Pierre.Courtieu<Pierre.Courtieu@cnam.fr>
-;;
+
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;;; Commentary:
;;
;; This file holds constants, options and some general functions for
-;; setting coq command arguments. Some code is dedicated as a light
+;; setting coq command arguments. Some code is dedicated as a light
;; support for older versions of coq.
;;
+;;; Code:
+
(require 'proof)
(eval-when-compile
(require 'cl)
- (require 'proof-compat)
- (proof-ready-for-assistant 'coq))
+ (require 'proof-compat))
+
+(eval-when-compile
+ (defvar coq-prog-args)
+ (defvar coq-debug))
+
+;; Arbitrary arguments can already be passed through _CoqProject.
+;; However this is not true for all assistants, so we don't modify the
+;; (defpgcustom prog-args) declaration.
+(defun coq--string-list-p (obj)
+ "Determine if OBJ is a list of strings."
+ (or (null obj) (and (consp obj) (stringp (car obj)) (coq--string-list-p (cdr obj)))))
-(eval-when (compile)
- (defvar coq-prog-args nil)
- (defvar coq-debug nil))
+(put 'coq-prog-args 'safe-local-variable #'coq--string-list-p)
(defcustom coq-prog-env nil
- "List of environment settings d to pass to Coq process.
+ "List of environment settings to pass to Coq process.
On Windows you might need something like:
(setq coq-prog-env '(\"HOME=C:\\Program Files\\Coq\\\"))"
:group 'coq)
@@ -32,12 +51,12 @@ On Windows you might need something like:
(defcustom coq-prog-name
(if (executable-find "coqtop") "coqtop"
(proof-locate-executable "coqtop" t '("C:/Program Files/Coq/bin")))
- "*Name of program to run as Coq. See `proof-prog-name', set from this.
+ "*Name of program to run as Coq. See `proof-prog-name', set from this.
On Windows with latest Coq package you might need something like:
C:/Program Files/Coq/bin/coqtop.opt.exe
instead of just \"coqtop\".
-This must be a single program name with no arguments; see `coq-prog-args'
-to manually adjust the arguments to the Coq process.
+This must be a single program name with no arguments. See option
+`coq-prog-args' to manually adjust the arguments to the Coq process.
See also `coq-prog-env' to adjust the environment."
:type 'string
:group 'coq)
@@ -75,8 +94,8 @@ See also `coq-prog-env' to adjust the environment."
(defcustom coq-pinned-version nil
"Which version of Coq you are using.
There should be no need to set this value unless you use the trunk from
-the Coq github repository. For Coq versions with decent version numbers
-Proof General detects the version automatically and adjusts itself. This
+the Coq github repository. For Coq versions with decent version numbers
+Proof General detects the version automatically and adjusts itself. This
variable should contain nil or a version string."
:type 'string
:group 'coq)
@@ -226,12 +245,12 @@ Set to t if you want this feature, but note that it is deprecated."
(defcustom coq-load-path nil
"Non-standard coq library load path.
This list specifies the LoadPath extension for coqdep, coqc and
-coqtop. Usually, the elements of this list are strings (for
+coqtop. Usually, the elements of this list are strings (for
\"-I\") or lists of two strings (for \"-R\" dir path and
\"-Q\" dir path).
The possible forms of elements of this list correspond to the 4
-forms of include options (`-I' `-Q' and `-R'). An element can be
+forms of include options (`-I' `-Q' and `-R'). An element can be
- A list of the form `(\\='ocamlimport dir)', specifying (in 8.5) a
directory to be added to ocaml path (`-I').
@@ -284,10 +303,10 @@ not the same (-I is for coq path)."
(make-variable-buffer-local 'coq-load-path)
(defcustom coq-load-path-include-current t
- "If `t' let coqdep search the current directory too.
-Should be `t' for normal users. If `t' pass -Q dir \"\" to coqdep when
-processing files in directory \"dir\" in addition to any entries
-in `coq-load-path'.
+ "If t, let coqdep search the current directory too.
+Should be t for normal users. If t, pass -Q dir \"\" to coqdep when
+processing files in directory \"dir\" in addition to any entries in
+`coq-load-path'.
This setting is only relevant with Coq < 8.5."
:type 'boolean
@@ -323,9 +342,9 @@ request compatibility handling of flags."
((or `(rec ,dir ,alias) `(,dir ,alias))
(list "-R" (expand-file-name dir) alias)))))
-(defun coq-include-options (load-path &optional current-directory pre-v85)
+(defun coq-include-options (loadpath &optional current-directory pre-v85)
"Build the base list of include options for coqc, coqdep and coqtop.
-The options list includes all entries from argument LOAD-PATH
+The options list includes all entries from argument LOADPATH
\(which should be `coq-load-path' of the buffer that invoked the
compilation) prefixed with suitable options and (for coq<8.5), if
`coq-load-path-include-current' is enabled, the directory base of
@@ -336,12 +355,12 @@ CURRENT-DIRECTORY should be an absolute directory name. It can be nil if
`coq-load-path-include-current' is nil.
A non-nil PRE-V85 flag requests compatibility handling of flags."
- (unless (coq-load-path-safep load-path)
+ (unless (coq-load-path-safep loadpath)
(error "Invalid value in coq-load-path"))
(when (and pre-v85 coq-load-path-include-current)
(cl-assert current-directory)
- (push current-directory load-path))
- (cl-loop for entry in load-path
+ (push current-directory loadpath))
+ (cl-loop for entry in loadpath
append (coq-option-of-load-path-entry entry pre-v85)))
(defun coq--options-test-roundtrip-1 (coq-project parsed pre-v85)
@@ -375,31 +394,31 @@ options of a few coq-project files does the right thing."
(coq--options-test-roundtrip "-R /test Test")
(coq--options-test-roundtrip "-I /test")))
-(defun coq-coqdep-prog-args (load-path &optional current-directory pre-v85)
+(defun coq-coqdep-prog-args (loadpath &optional current-directory pre-v85)
"Build a list of options for coqdep.
-LOAD-PATH, CURRENT-DIRECTORY, PRE-V85: see `coq-include-options'."
- (coq-include-options load-path current-directory pre-v85))
+LOADPATH, CURRENT-DIRECTORY, PRE-V85: see `coq-include-options'."
+ (coq-include-options loadpath current-directory pre-v85))
-(defun coq-coqc-prog-args (load-path &optional current-directory pre-v85)
+(defun coq-coqc-prog-args (loadpath &optional current-directory pre-v85)
"Build a list of options for coqc.
-LOAD-PATH, CURRENT-DIRECTORY, PRE-V85: see `coq-include-options'."
+LOADPATH, CURRENT-DIRECTORY, PRE-V85: see `coq-include-options'."
;; coqtop always adds the current directory to the LoadPath, so don't
;; include it in the -Q options.
- (append (remove "-emacs" (remove "-emacs-U" coq-prog-args))
+ (append (remove "-emacs" coq-prog-args)
(let ((coq-load-path-include-current nil)) ; Not needed in >=8.5beta3
- (coq-coqdep-prog-args coq-load-path current-directory pre-v85))))
+ (coq-coqdep-prog-args loadpath current-directory pre-v85))))
;;XXXXXXXXXXXXXX
;; coq-coqtop-prog-args is the user-set list of arguments to pass to
;; Coq process, see 'defpacustom prog-args' in pg-custom.el for
;; documentation.
-(defun coq-coqtop-prog-args (load-path &optional current-directory pre-v85)
+(defun coq-coqtop-prog-args (loadpath &optional current-directory pre-v85)
;; coqtop always adds the current directory to the LoadPath, so don't
;; include it in the -Q options. This is not true for coqdep.
"Build a list of options for coqc.
-LOAD-PATH, CURRENT-DIRECTORY, PRE-V85: see `coq-coqc-prog-args'."
- (cons "-emacs" (coq-coqc-prog-args load-path current-directory pre-v85)))
+LOADPATH, CURRENT-DIRECTORY, PRE-V85: see `coq-coqc-prog-args'."
+ (cons "-emacs" (coq-coqc-prog-args loadpath current-directory pre-v85)))
(defun coq-prog-args ()
"Recompute `coq-load-path' before calling `coq-coqtop-prog-args'."
@@ -408,8 +427,8 @@ LOAD-PATH, CURRENT-DIRECTORY, PRE-V85: see `coq-coqc-prog-args'."
(coq-coqtop-prog-args coq-load-path))
(defcustom coq-use-project-file t
- "If t, when opening a coq file read the dominating _CoqProject.
-If t, when a coq file is opened, Proof General will look for a
+ "If t, when opening a Coq file read the dominating _CoqProject.
+If t, when a Coq file is opened, Proof General will look for a
project file (see `coq-project-filename') somewhere in the
current directory or its parent directories. If there is one,
its contents are read and used to determine the arguments that
@@ -421,17 +440,16 @@ path (including the -R lib options) (see `coq-load-path')."
(defcustom coq-project-filename "_CoqProject"
"The name of coq project file.
-The coq project file of a coq developpement (Cf Coq documentation
-on \"makefile generation\") should contain the arguments given to
+The coq project file of a coq developpement (cf. Coq documentation on
+\"makefile generation\") should contain the arguments given to
coq_makefile. In particular it contains the -I and -R
-options (preferably one per line). If `coq-use-coqproject' is
-t (default) the content of this file will be used by proofgeneral
-to infer the `coq-load-path' and the `coq-prog-args' variables
-that set the coqtop invocation by proofgeneral. This is now the
-recommended way of configuring the coqtop invocation. Local file
-variables may still be used to override the coq project file's
-configuration. .dir-locals.el files also work and override
-project file settings."
+options (preferably one per line). If `coq-use-coqproject' is
+t (default) the content of this file will be used by proofgeneral to
+infer the `coq-load-path' and the `coq-prog-args' variables that set
+the coqtop invocation by proofgeneral. This is now the recommended
+way of configuring the coqtop invocation. Local file variables may
+still be used to override the coq project file's configuration.
+.dir-locals.el files also work and override project file settings."
:type 'string
:safe 'stringp
:group 'coq)
@@ -481,7 +499,7 @@ Returns a mixed list of option-value pairs and strings."
(arity (cdr (assoc switch coq--makefile-switch-arities))))
(push (coq--read-one-option-from-project-file switch arity raw-args) options)
(setq raw-args (nthcdr (or arity 0) raw-args))))
- options))
+ (nreverse options))) ; Order of options is important sometimes (Cf. #7980)
(defun coq--extract-prog-args (options)
"Extract coqtop arguments from _CoqProject options OPTIONS.
@@ -550,12 +568,10 @@ variable."
(defun coq-load-project-file ()
"Set `coq-prog-args' and `coq-load-path' according to _CoqProject file.
-Obeys `coq-use-project-file'. Note that if a variable is already
-set by dir/file local variables, this function will not override
-its value.
-See `coq-project-filename' to change the name of the
-project file, and `coq-use-project-file' to disable this
-feature."
+Obeys `coq-use-project-file'. Note that if a variable is already set
+by dir/file local variables, this function will not override its value.
+See `coq-project-filename' to change the name of the project file, and
+`coq-use-project-file' to disable this feature."
(when coq-use-project-file
;; Let us reread dir/file local vars, in case the user mmodified them
(let* ((oldargs (assoc 'coq-prog-args file-local-variables-alist))
@@ -622,11 +638,11 @@ Does nothing if `coq-use-project-file' is nil."
;; OBSOLETE, should take _CoqProject into account.
(defun coq-guess-command-line (filename)
"Guess the right command line options to compile FILENAME using `make -n'.
-This function is obsolete, the recommended way of setting the
-coqtop options is to use a _Coqproject file as described in coq
-documentation. ProofGeneral reads this file and sets compilation
-options according to its contents. See `coq-project-filename'. Per file configuration may
-then be set using local file variables."
+This function is obsolete, the recommended way of setting the coqtop
+options is to use a _Coqproject file as described in coq
+documentation. ProofGeneral reads this file and sets compilation
+options according to its contents. See `coq-project-filename'. Per
+file configuration may then be set using local file variables."
(if (local-variable-p 'coq-prog-name (current-buffer))
coq-prog-name
(let* ((dir (or (file-name-directory filename) "."))
@@ -655,7 +671,7 @@ then be set using local file variables."
(setq coq-prog-args nil)
(concat
(substring command 0 (string-match " [^ ]*$" command))
- "-emacs-U"))
+ "-emacs"))
coq-prog-name))))
;;; coq-system.el ends here
diff --git a/coq/coq-unicode-tokens.el b/coq/coq-unicode-tokens.el
index faa02458..349038c1 100644
--- a/coq/coq-unicode-tokens.el
+++ b/coq/coq-unicode-tokens.el
@@ -1,8 +1,17 @@
-;;; -*- coding: utf-8; -*-
-;; coq-unicode-tokens.el --- (No) Tokens for Unicode Tokens package
-;;
-;; Copyright(C) 2008, 2009 David Aspinall / LFCS Edinburgh
+;;; coq-unicode-tokens.el --- (No) Tokens for Unicode Tokens package -*- coding: utf-8; -*-
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
+;;; Commentary:
;;
;; This file is loaded by `proof-unicode-tokens.el'.
;;
@@ -11,7 +20,7 @@
;; variable for documentation.
;;
;; For Coq, there is no dedicated token syntax, it's probably
-;; preferable to use UTF-8 notation directly (see utf8.v).
+;; preferable to use UTF-8 notation directly (see utf8.v).
;;
;; On the other hand, for easily portable files, one can fix
;; ordinary character sequences as tokens, like the old X-Symbol
@@ -22,7 +31,7 @@
;; Unicode characters, whereas ordinary character sequences are
;; displayed as those characters.
;;
-;; Recommended ways to work:
+;; Recommended ways to work:
;;
;; 1) UTF-8 buffers: ☑ Show Symbol Tokens (ON)
;; ☑ Enable Shortcuts (ON)
@@ -36,6 +45,8 @@
(require 'proof-unicode-tokens)
+;;; Code:
+
(defconst coq-token-format "") ; Let generic code do the job
(defconst coq-token-match nil)
(defconst coq-hexcode-match nil)
@@ -94,7 +105,7 @@
("false" "false" bold sans)
("true" "true" bold sans)
- ;; example tokens used in Benjamin C. Pierce et al's
+ ;; example tokens used in Benjamin C. Pierce et al's
;; Software Foundations course
("WHILE" "WHILE" bold sans)
("DO" "DO" bold sans)
@@ -114,7 +125,7 @@
(">=" "≥")
("=>" "⇒")
("->" "→") ; or ⟶ or ⟹ if you prefer
- ("<-" "â†") ; or ⟵ or ⟸
+ ("<-" "â†") ; or ⟵ or ⟸
("<->" "↔") ; or ⟷ ...
("++" "⧺")
("<<" "《")
@@ -142,8 +153,8 @@
("~" "¬")
;; A dirty hack for the goals window, shouldn't be input syntax!
- ("============================"
- "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯"
+ ("============================"
+ "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯"
bold tactical)
)
;; an alist of token name, unicode char sequence
diff --git a/coq/coq.el b/coq/coq.el
index 0c366df5..3376f7f3 100644
--- a/coq/coq.el
+++ b/coq/coq.el
@@ -1,37 +1,48 @@
-;; coq.el --- Major mode for Coq proof assistant -*- coding: utf-8 -*-
-;; Copyright (C) 1994-2009 LFCS Edinburgh.
+;;; coq.el --- Major mode for Coq proof assistant -*- coding: utf-8 -*-
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Healfdene Goguen, Pierre Courtieu
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
-;;
-;; $Id$
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
+;;; Commentary:
+;;
+;;; Code:
(eval-when-compile
(require 'cl)
(require 'proof-compat))
-(eval-when (compile)
+(eval-when-compile
(require 'proof-utils)
(require 'span)
(require 'outline)
(require 'newcomment)
(require 'etags)
(unless (proof-try-require 'smie)
- (defvar smie-indent-basic nil)
- (defvar smie-rules-function nil))
- (defvar proof-info nil) ; dynamic scope in proof-tree-urgent-action
- (defvar action nil) ; dynamic scope in coq-insert-as stuff
- (defvar string nil) ; dynamic scope in coq-insert-as stuff
- (defvar old-proof-marker nil)
- ; dynamic scoq in coq-proof-tree-enable-evar-callback
- (defvar coq-auto-insert-as nil) ; defpacustom
- (defvar coq-time-commands nil) ; defpacustom
- (defvar coq-use-project-file t) ; defpacustom
- (defvar coq-use-editing-holes nil) ; defpacustom
- (defvar coq-hide-additional-subgoals nil) ; defpacustom
- (proof-ready-for-assistant 'coq)) ; compile for coq
+ (defvar smie-indent-basic)
+ (defvar smie-rules-function))
+ (defvar proof-info) ; dynamic scope in proof-tree-urgent-action
+ (defvar action) ; dynamic scope in coq-insert-as stuff
+ (defvar string) ; dynamic scope in coq-insert-as stuff
+ (defvar old-proof-marker)
+ (defvar coq-keymap)
+ (defvar coq-one-command-per-line)
+ (defvar coq-auto-insert-as) ; defpacustom
+ (defvar coq-time-commands) ; defpacustom
+ (defvar coq-use-project-file) ; defpacustom
+ (defvar coq-use-editing-holes) ; defpacustom
+ (defvar coq-hide-additional-subgoals))
(require 'proof)
(require 'coq-system) ; load path, option, project file etc.
@@ -42,7 +53,6 @@
(require 'coq-seq-compile) ; sequential compilation of Requires
(require 'coq-par-compile) ; parallel compilation of Requires
-
;; for compilation in Emacs < 23.3 (NB: declare function only works at top level)
(declare-function smie-bnf->prec2 "smie")
(declare-function smie-rule-parent-p "smie")
@@ -78,7 +88,7 @@
;; :group 'coq)
(defcustom coq-user-init-cmd nil
- "user defined init commands for Coq.
+ "User defined init commands for Coq.
These are appended at the end of `coq-shell-init-cmd'."
:type '(repeat (cons (string :tag "command")))
:group 'coq)
@@ -91,13 +101,13 @@ These are appended at the end of `coq-shell-init-cmd'."
;; Default coq is only Private_ and _subproof
(defcustom coq-search-blacklist-string ; add this? \"_ind\" \"_rect\" \"_rec\"
"\"Private_\" \"_subproof\""
- "String for blacklisting strings from requests to coq environment."
+ "String for blacklisting strings from requests to Coq environment."
:type 'string
:group 'coq)
(defcustom coq-prefer-top-of-conclusion nil
- "prefer start of the conclusion over its end when displaying goals
-that do not fit in the goals window."
+ "Prefer start of the conclusion over its end when displaying large goals.
+Namely, goals that do not fit in the goals window."
:type 'boolean
:group 'coq)
@@ -146,7 +156,7 @@ that do not fit in the goals window."
(defcustom coq-end-goals-regexp-show-subgoals "\n(dependent evars:"
"Regexp for `proof-shell-end-goals-regexp' when showing all subgoals.
-A setting of nil means show all output from Coq. See also
+A setting of nil means show all output from Coq. See also option
`coq-hide-additional-subgoals'."
:type '(choice regexp (const nil))
:group 'coq)
@@ -154,7 +164,7 @@ A setting of nil means show all output from Coq. See also
(defcustom coq-end-goals-regexp-hide-subgoals
(concat "\\(\nsubgoal 2 \\)\\|\\(" coq-end-goals-regexp-show-subgoals "\\)")
"Regexp for `proof-shell-end-goals-regexp' when hiding additional subgoals.
-See also `coq-hide-additional-subgoals'."
+See also option `coq-hide-additional-subgoals'."
:type '(choice regexp (const nil))
:group 'coq)
@@ -306,32 +316,28 @@ See also `coq-hide-additional-subgoals'."
;; Derived modes
;;
-(eval-and-compile ;; FIXME: Why?
- (define-derived-mode coq-shell-mode proof-shell-mode
- "Coq Shell" nil
- (coq-shell-mode-config)))
+(define-derived-mode coq-shell-mode proof-shell-mode
+ "Coq Shell" nil
+ (coq-shell-mode-config))
-(eval-and-compile ;; FIXME: Why?
- (define-derived-mode coq-response-mode proof-response-mode
+(define-derived-mode coq-response-mode proof-response-mode
"Coq Response" nil
- (coq-response-config)))
+ (coq-response-config))
-(eval-and-compile ;; FIXME: Why?
- (define-derived-mode coq-mode proof-mode "Coq"
- "Major mode for Coq scripts.
+(define-derived-mode coq-mode proof-mode "Coq"
+ "Major mode for Coq scripts.
\\{coq-mode-map}"
- (coq-mode-config)))
+ (coq-mode-config))
-(eval-and-compile ;; FIXME: Why?
- (define-derived-mode coq-goals-mode proof-goals-mode
- "Coq Goals" nil
- (coq-goals-mode-config)))
+(define-derived-mode coq-goals-mode proof-goals-mode
+ "Coq Goals" nil
+ (coq-goals-mode-config))
;; Indentation and navigation support via SMIE.
(defcustom coq-use-smie t
- "OBSOLETE. smie code is always used now.
+ "OBSOLETE. smie code is always used now.
If non-nil, Coq mode will try to use SMIE for indentation.
SMIE is a navigation and indentation framework available in Emacs >= 23.3."
@@ -370,8 +376,8 @@ SMIE is a navigation and indentation framework available in Emacs >= 23.3."
;; would not be shown in response buffer. If it is before, then we want it
;; urgent so that it is displayed.
(defvar coq-eager-no-urgent-regex "\\s-*Finished "
- "Regexp of commands matching proof-shell-eager-annotation-start
- that should maybe not be classified as urgent messages.")
+ "Regexp of commands matching ‘proof-shell-eager-annotation-start’
+that should maybe not be classified as urgent messages.")
;; return the end position if found, nil otherwise
(defun coq-non-urgent-eager-annotation ()
@@ -436,7 +442,8 @@ This is a subroutine of `proof-shell-filter'."
(set-marker
proof-shell-urgent-message-scanner
(if end ;; couldn't find message start; move forward to avoid rescanning
- (max initstart
+ (max (or lastend 1) ;; goto after last end urgent msg
+ ;; or near the end of current output if that jumps farther.
(- (point)
(1+ proof-shell-eager-annotation-start-length)))
;; incomplete message; leave marker at start of message
@@ -768,7 +775,7 @@ If locked span already has a state number, then do nothing. Also updates
(defun coq-hide-additional-subgoals-switch ()
- "Function invoked when the user switches `coq-hide-additional-subgoals'."
+ "Function invoked when the user switches option `coq-hide-additional-subgoals'."
(if coq-time-commands
(progn
(setq coq-hide-additional-subgoals nil)
@@ -779,8 +786,8 @@ If locked span already has a state number, then do nothing. Also updates
(setq proof-shell-end-goals-regexp coq-end-goals-regexp-show-subgoals))))
(defun coq-time-commands-switch ()
- "Function invoked when the user switches `coq-time-commands'.
-Resets `coq-hide-additional-subgoals' and puts nil into
+ "Function invoked when the user switches option `coq-time-commands'.
+Reset option `coq-hide-additional-subgoals' and puts nil into
`proof-shell-end-goals-regexp' to ensure the timing is visible in
the *goals* buffer."
(if coq-time-commands
@@ -799,7 +806,7 @@ the *goals* buffer."
"Enumerates the different kinds of notation information one can ask to coq.")
(defun coq-PrintScope ()
- "Show information on notations. Coq specific."
+ "Show information on notations. Coq specific."
(interactive)
(let*
((mods
@@ -888,10 +895,10 @@ Support dot.notation.of.modules."
(if notation (concat "\"" notation "\"") ""))))
(defcustom coq-remap-mouse-1 nil
- "Wether coq mode should remap mouse button 1 to coq queries.
+ "Whether Coq mode should remap mouse button 1 to Coq queries.
This overrides the default global binding of (control mouse-1) and
-(shift mouse-1) (buffers and faces menus). Hence it is nil by
+\(shift mouse-1) (buffers and faces menus). Hence it is nil by
default."
:type 'boolean
:group 'coq)
@@ -939,13 +946,14 @@ Otherwise propose identifier at point if any."
nil 'proof-minibuffer-history guess)))
-(defun coq-ask-do (ask do &optional dontguess postformatcmd)
+(defun coq-ask-do (ask do &optional dontguess postformatcmd wait)
"Ask for an ident and print the corresponding term."
(let* ((cmd) (postform (if (eq postformatcmd nil) 'identity postformatcmd)))
(proof-shell-ready-prover)
(setq cmd (coq-guess-or-ask-for-string ask dontguess))
(proof-shell-invisible-command
- (format (concat do " %s . ") (funcall postform cmd)))))
+ (format (concat do " %s . ") (funcall postform cmd))
+ wait)))
(defun coq-flag-is-on-p (testcmd)
@@ -955,20 +963,29 @@ Otherwise propose identifier at point if any."
(string-match "is on\\>" resp)))
(defun coq-command-with-set-unset (setcmd cmd unsetcmd &optional postformatcmd testcmd)
- "Play commands SETCMD then CMD and then silently UNSETCMD."
+ "Play commands SETCMD then CMD and then silently UNSETCMD.
+The last UNSETCMD is performed with tag 'empty-action-list so that it
+does not trigger ‘proof-shell-empty-action’ (which does \"Show\" at
+the time of writing this documentation)."
(let* ((postform (if (eq postformatcmd nil) 'identity postformatcmd))
(flag-is-on (and testcmd (coq-flag-is-on-p testcmd))))
+ ;; We put 'empty-action-list tags on all three commands since we don't want
+ ;; to trigger "Show" or anything that we usually insert after a group of
+ ;; commands.
(unless flag-is-on (proof-shell-invisible-command
- (format " %s . " (funcall postform setcmd)) 'wait))
+ (format " %s . " (funcall postform setcmd))
+ nil nil 'no-response-display 'empty-action-list))
(proof-shell-invisible-command
- (format " %s . " (funcall postform cmd)) 'wait)
- (unless flag-is-on (proof-shell-invisible-command-invisible-result
- (format " %s . " (funcall postform unsetcmd))))))
+ (format " %s . " (funcall postform cmd)) 'wait nil 'empty-action-list)
+ (unless flag-is-on (proof-shell-invisible-command
+ (format " %s . " (funcall postform unsetcmd))
+ 'waitforit nil 'no-response-display 'empty-action-list))))
(defun coq-ask-do-set-unset (ask do setcmd unsetcmd
&optional dontguess postformatcmd tescmd)
"Ask for an ident id and execute command DO in SETCMD mode.
-More precisely it executes SETCMD, then DO id and finally silently UNSETCMD."
+More precisely it executes SETCMD, then DO id and finally silently
+UNSETCMD. See `coq-command-with-set-unset'."
(let* ((cmd) (postform (if (eq postformatcmd nil) 'identity postformatcmd tescmd)))
(proof-shell-ready-prover)
(setq cmd (coq-guess-or-ask-for-string ask dontguess))
@@ -1038,15 +1055,6 @@ This is specific to `coq-mode'."
(interactive)
(coq-ask-do "SearchRewrite" "SearchRewrite" nil))
-;; TODO SearchAbout become Search in v8.5, change when V8.4 becomes old.
-(defun coq-SearchAbout ()
- (interactive)
- (coq-ask-do
- ;; TODO: use [Add Search Blacklist "foo"] to exclude optionaly some patterns:
- ;; "_ind" "_rec" "R_" "_equation"
- "SearchAbout (ex: \"eq_\" eq -bool)"
- "SearchAbout")
- (message "use [Coq/Settings/Search Blacklist] to change blacklisting."))
@@ -1058,6 +1066,11 @@ With flag Printing All if some prefix arg is given (C-u)."
(coq-ask-do-show-all "Print" "Print")
(coq-ask-do "Print" "Print")))
+(defun coq-Print-Ltac ()
+ "Ask for an ident and print the corresponding Ltac term."
+ (interactive)
+ (coq-ask-do "Print Ltac" "Print Ltac"))
+
(defun coq-Print-with-implicits ()
"Ask for an ident and print the corresponding term."
(interactive)
@@ -1146,8 +1159,8 @@ With flag Printing All if some prefix arg is given (C-u)."
(defun coq-get-response-string-at (&optional pt)
"Go forward from PT until reaching a 'response property, and return it.
Response span only starts at first non space character of a
-command, so we may have to go forward to find it. Starts
-from (point) if pt is nil. Precondition: pt (or point if nil)
+command, so we may have to go forward to find it. Starts
+from (point) if pt is nil. Precondition: pt (or point if nil)
must be in locked region."
(let ((pt (or pt (point))))
(save-excursion
@@ -1158,10 +1171,10 @@ must be in locked region."
(span-property (span-at (point) 'response) 'response))))
(defun coq-Show (withprintingall)
- "Ask for a number i and show the ith goal.
-Ask for a number i and show the ith current goal. With non-nil
-prefix argument and not on the locked span, show the goal with
-flag Printing All set."
+ "Ask for a number I and show the Ith goal.
+Ask for a number I and show the ith current goal. With non-nil prefix
+argument and not on the locked span, show the goal with flag
+Printing All set."
; Disabled:
; "Ask for a number i and show the ith goal, or show ancient goal.
;If point is on a locked span, show the corresponding coq
@@ -1198,8 +1211,8 @@ flag Printing All set."
(coq-ask-do-show-all "Show goal number" "Show" t))
;; Check
-(eval-when (compile)
- (defvar coq-auto-adapt-printing-width nil)); defpacustom
+(eval-when-compile
+ (defvar coq-auto-adapt-printing-width)); defpacustom
;; Since Printing Width is a synchronized option in coq (?) it is retored
;; silently to a previous value when retracting. So we reset the stored width
@@ -1209,8 +1222,8 @@ flag Printing All set."
;; FIXME: hopefully this will eventually become a non synchronized option and
;; we can remove this.
(defun coq-set-auto-adapt-printing-width (&optional symb val); args are for :set compatibility
- "Function called when setting `auto-adapt-printing-width'"
- (setq symb val)
+ "Function called when setting `auto-adapt-printing-width'."
+ (setq symb val) ;; FIXME this is wrong (it should be 'set', but it would set nil sometimes)
(if coq-auto-adapt-printing-width
(progn
(add-hook 'proof-assert-command-hook 'coq-adapt-printing-width)
@@ -1222,14 +1235,37 @@ flag Printing All set."
;; of coq) Coq does not show the goals of enclosing proof when closing a nested
;; proof. This is coq's proof-shell-empty-action-list-command function which
;; inserts a "Show" if the last command of an action list is a save command and
-;; there is more than one open proof before that save.
+;; there is more than one open proof before that save. If you want to issue a
+;; command and *not* have the goal redisplayed, the command must be tagged with
+;; 'empty-action-list.
(defun coq-empty-action-list-command (cmd)
- (when (or (and (string-match coq-save-command-regexp-strict cmd)
- (> (length coq-last-but-one-proofstack) 1))
- (and (string-match "\\(S\\|Uns\\)et\\s-+Printing" cmd)
- (> (length coq-last-but-one-proofstack) 0)))
- (list "Show.")))
-
+ "Return the list of commands to send to Coq after CMD
+if it is the last command of the action list.
+If CMD is tagged with 'empty-action-list then this function won't
+be called and no command will be sent to Coq."
+ (cond
+ ((or
+ ;; If closing a nested proof, Show the enclosing goal.
+ (and (string-match coq-save-command-regexp-strict cmd)
+ (> (length coq-last-but-one-proofstack) 1))
+ ;; If user issued a printing option then t printing.
+ (and (string-match "\\(S\\|Uns\\)et\\s-+Printing" cmd)
+ (> (length coq-last-but-one-proofstack) 0)))
+ (list "Show."))
+ ((or
+ ;; if we go back in the buffer and that the number of abort is less than
+ ;; the number of nested goals, then Unset Silent and Show the goal
+ (and (string-match "Backtrack\\s-+[[:digit:]]+\\s-+[[:digit:]]+\\(\\s-+[[:digit:]]*\\)" cmd)
+ (> (length (coq-get-span-proofstack (proof-last-locked-span)))
+ ;; the number of aborts is the third arg of Backtrack.
+ (string-to-number (match-string 1 cmd)))))
+ (list "Unset Silent." "Show."))
+ ((or
+ ;; If we go back in the buffer and not in the above case, then only Unset
+ ;; silent (there is no goal to show).
+ (string-match "Backtrack" cmd))
+ (list "Unset Silent."))))
+
(defpacustom auto-adapt-printing-width t
"If non-nil, adapt automatically printing width of goals window.
Each timme the user sends abunch of commands to Coq, check if the
@@ -1308,9 +1344,9 @@ present, current pg display mode and current geometry otherwise."
)))
(defun coq-adapt-printing-width (&optional show width)
- "Sends a Set Printing Width command to coq to fit the response window's width.
-A Show command is also issued if SHOW is non-nil, so that the
-goal is redisplayed."
+ "Sends a Set Printing Width command to Coq to fit the response window's WIDTH.
+A Show command is also issued if SHOW is non-nil, so that the goal is
+redisplayed."
(interactive)
(let ((wdth (or width (coq-guess-goal-buffer-at-next-command))))
;; if no available width, or unchanged, do nothing
@@ -1331,26 +1367,409 @@ goal is redisplayed."
(rd (read-number (format "Width (%S): " deflt) deflt)))
(coq-adapt-printing-width t rd)))
+;;;;; utils fo overlays
+(defun coq-overlays-at (pt prop)
+ (let ((overlays (overlays-at pt))
+ found)
+ (while overlays
+ (let ((overlay (car overlays)))
+ (if (overlay-get overlay prop)
+ (setq found (cons overlay found))))
+ (setq overlays (cdr overlays)))
+ found))
+
+;;;;;;;;;; Hypothesis tracking ;;;;;;;;;;
+;;; Facilities to build overlays for hyp names and hyp+type + hypcross
+;;; ((un)folding buttons).
+(defvar coq-hypname-map (make-sparse-keymap) "Keymap for visible hypothesis.")
+(defvar coq-hypcross-map (make-sparse-keymap) "Keymap for visible hypothesis.")
+
+(defvar coq-hypcross-hovering-help t
+ "Whether hyps fold cross pops up a help when hovered.")
+
+(defvar coq-hyps-positions nil
+ "The list of positions of hypothesis in the goals buffer.
+Maintained by a hook in `proof-shell-handle-delayed-output-hook'.")
+
+;; Hyps name are clickable and have a special keymap.
+(defun coq-make-hypname-overlay (beg end h buf)
+ (let ((ov (make-overlay beg end buf)))
+ (when ov
+ (overlay-put ov 'evaporate t)
+ (overlay-put ov 'is-hypname t)
+ (overlay-put ov 'hyp-name h)
+ (overlay-put ov 'keymap coq-hypname-map))
+ ov))
+
+;; Hyps types are clickable only when folded
+(defun coq-make-hyp-overlay (beg end h buf)
+ (let ((ov (make-overlay beg end buf)))
+ (when ov
+ (overlay-put ov 'evaporate t)
+ (overlay-put ov 'is-hyp t)
+ (overlay-put ov 'hyp-name h))
+ ov))
+
+(defun coq-hypcross-unfolded-string()
+ (propertize
+ "-"
+ 'face 'coq-button-face
+ 'mouse-face 'coq-button-face-pressed))
+
+(defun coq-hypcross-folded-string()
+ (propertize
+ "+"
+ 'face 'coq-button-face
+ 'mouse-face 'coq-button-face-pressed))
+
+;; hypcross is displayerd with a "-" when unfolded and a "+" when unfolded.
+;; It is highlighted when hovered, is clickable and have a special
+;; keymap (f toggles folding, h toggles highlighting...).
+;; PC: using button faces of make-button makes the button larger than a
+;; characters, which messes columns. So we use simple background colors in
+;; coq-hyp...faces
+(defun coq-make-hypcross-overlay (beg end h buf)
+ (let ((ov (make-overlay beg end buf)))
+ (when ov
+ (overlay-put ov 'evaporate t)
+ (overlay-put ov 'is-hypcross t)
+ (overlay-put ov 'hyp-name h)
+ (overlay-put ov 'keymap coq-hypcross-map)
+ (overlay-put ov 'display (coq-hypcross-unfolded-string))
+ ;(overlay-put ov 'face 'coq-button-face)
+ ;(overlay-put ov 'mouse-face 'coq-button-face-pressed)
+ ;(overlay-put ov 'width .6)
+ ;(overlay-put ov 'height -1)
+ (when (eq coq-hypcross-hovering-help t)
+ (overlay-put ov 'help-echo "mouse-3: unfold; mouse-2 copy name")))
+ ov))
+
+;; Once we have created the 3 overlays, each recieves a reference to the 2
+;; others.
+(defun coq-hyp-overlay-build-cross-refs (hypnameov hypov crosshypov)
+ (overlay-put hypnameov 'hypcross-ov crosshypov)
+ (overlay-put hypov 'hypcross-ov crosshypov)
+ (overlay-put hypnameov 'hyp-ov hypov)
+ (overlay-put crosshypov 'hyp-ov hypov)
+ (overlay-put hypov 'hypname-ov hypnameov)
+ (overlay-put crosshypov 'hypname-ov hypnameov))
+
+(defun coq-build-hyp-overlay (hyp-positions buf)
+ (let* ((names (car hyp-positions))
+ (fstname (car names))
+ (positions (cdr hyp-positions))
+ (begcross (car positions))
+ (beghypname (cadr positions))
+ (endhypname (caddr positions))
+ (beg (cadddr positions))
+ (end (cadddr (cdr positions))))
+ (let ((hypnameov (coq-make-hypname-overlay beghypname endhypname fstname buf))
+ (hypov (coq-make-hyp-overlay beg end fstname buf))
+ (crosshypov (coq-make-hypcross-overlay begcross (+ 1 begcross) fstname buf))
+ res)
+ (coq-hyp-overlay-build-cross-refs hypnameov hypov crosshypov)
+ (mapc
+ (lambda (s)
+ (setq res
+ (cons
+ (cons (substring-no-properties s)
+ (cons hypov (cons hypnameov (cons crosshypov nil)) ))
+ res)))
+ names)
+ res)))
+
+(defun coq-build-hyps-overlays (hyp-positions buf)
+ (let ((res))
+ (mapc (lambda (x) (let ((lassoc (coq-build-hyp-overlay x buf)))
+ (setq res (append lassoc res))))
+ hyp-positions)
+ res))
+
+; builds the list of names from one hyp position (which may contained several
+; hyp names)
+(defun coq-build-hyp-name (hyp-positions)
+ (let* ((names (car hyp-positions))
+ res)
+ (mapc (lambda (s) (setq res (cons (substring-no-properties s) res))) names)
+ res))
+
+;; Build the list of hyps names
+(defun coq-build-hyps-names (hyp-positions)
+ (let ((res))
+ (mapc (lambda (x) (let ((lassoc (coq-build-hyp-name x)))
+ (setq res (append lassoc res))))
+ hyp-positions)
+ res))
+
+
+(defun coq-detect-hyps-in-goals ()
+ "Detect all hypotheses displayed in goals buffer and create overlays.
+Three overlays are created for each hyp: (hypov hypnameov hypcrossov),
+respectively for the whole hyp, only its name and the overlay for
+fold/unfold cross. Return the list of mappings hypname -> overlays."
+ (let*
+ ((fsthyp-pos (coq-find-first-hyp))
+ (fsthyp-ov (when fsthyp-pos (with-current-buffer proof-goals-buffer
+ (overlays-at fsthyp-pos))))
+ ; is there at least one hyp overlay there?
+ (fsthyp-hypov (when fsthyp-ov
+ (cl-some (lambda(x) (overlay-get x 'hyp-name))
+ fsthyp-ov))))
+ (if fsthyp-hypov coq-hyps-positions ;overlays are already there
+ (coq-build-hyps-overlays (coq-detect-hyps-positions-in-goals) proof-goals-buffer))))
+
+(defun coq-find-hyp-overlay (h)
+ (cadr (assoc h coq-hyps-positions)))
+
+;;;;;;;;;;;;;; Highlighting hypothesis ;;;;;;;;
+;; Feature: highlighting of hyptohesis that remains when the cript is played
+;; (and goals buffer is updated).
+
+;; On by default. This only works with the SearchAbout function for now.
+(defvar coq-highlight-hyps-cited-in-response t
+ "If non-nil, try to highlight in goals buffers hyps cited in response.")
+
+;; We maintain a list of hypothesis names that must be highlighted at each
+;; regeneration of goals buffer.
+(defvar coq-highlighted-hyps nil
+ "List of hypothesis names that must be highlighted.
+These are rehighlighted at each regeneration of goals buffer
+using a hook in `proof-shell-handle-delayed-output-hook'.")
+
+(defun coq-highlight-hyp-aux (h)
+ "Auxiliary function, use `coq-highlight-hyp' for sticky highlighting.
+Unless you want the highlighting to disappear after the goals
+buffer is updated."
+ (let ((hyp-overlay (coq-find-hyp-overlay h)))
+ (when hyp-overlay
+ (overlay-put hyp-overlay 'face '(:background "lavender")))))
+
+(defun coq-unhighlight-hyp-aux (h)
+ "Auxiliary function, use `coq-unhighlight-hyp' for sticky highlighting.
+Unless you want the highlighting to disappear after the goals
+buffer is updated."
+ (let* ((hyp-overlay (coq-find-hyp-overlay h)))
+ (when hyp-overlay
+ (overlay-put hyp-overlay 'face nil))))
+
+(defun coq-highlight-hyp (h)
+ "Highlight hypothesis named H (sticky).
+use `coq-unhighlight-hyp' to unhilight."
+ (unless (member h coq-highlighted-hyps)
+ (setq coq-highlighted-hyps (cons h coq-highlighted-hyps)))
+ (coq-highlight-hyp-aux h))
+
+(defun coq-unhighlight-hyp (h)
+ "Unhighlight hypothesis named H."
+ (when (member h coq-highlighted-hyps)
+ (setq coq-highlighted-hyps (delete h coq-highlighted-hyps))
+ (coq-unhighlight-hyp-aux h)))
+
+(defun coq-highlight-hyps (lh)
+ (mapc 'coq-highlight-hyp lh))
+
+(defun coq-unhighlight-hyps (lh)
+ (mapc 'coq-unhighlight-hyp-aux lh))
+
+(defun coq-highlight-selected-hyps ()
+ "Highlight all hyps stored in `coq-highlighted-hyps'.
+This used in hook to rehilight hypothesis after goals buffer is
+updated."
+ (interactive)
+ (coq-highlight-hyps coq-highlighted-hyps))
+
+(defun coq-unhighlight-selected-hyps ()
+ "Unhighlight all hyps stored in `coq-highlighted-hyps'.
+This used before updating `coq-highlighted-hyps' with a new set
+of hypothesis to highlight."
+ (interactive)
+ (coq-unhighlight-hyps coq-highlighted-hyps)
+ (setq coq-highlighted-hyps nil))
+
+(defun coq-get-hyps-cited-in-response ()
+ "Returns locations of hyps in goals buffer that are cited in response buffer.
+See `coq-highlight-hyps-cited-in-response' and `SearchAbout'."
+ (let* ((hyps-cited-pos (coq-detect-hyps-positions proof-response-buffer))
+ (hyps-cited (coq-build-hyps-names hyps-cited-pos)))
+ (remove-if-not
+ (lambda (e)
+ (cl-some;seq-find
+ (lambda (f)
+ (string-equal (car e) f))
+ hyps-cited))
+ coq-hyps-positions)))
+
+(defun coq-highlight-hyps-cited-in-response ()
+ "Highlight hypothesis cited in response buffer.
+Highlight always takes place in goals buffer."
+ (let ((inters (coq-get-hyps-cited-in-response)))
+ (coq-unhighlight-selected-hyps)
+ (setq coq-highlighted-hyps (mapcar 'car inters))
+ (coq-highlight-selected-hyps)))
+
+(defun coq-toggle-highlight-hyp (h)
+ "Toggle the highlighting status of hypothesis H.
+See `coq-highlight-hyp'."
+ (interactive "sHypothesis name to highlight:")
+ (if (member h coq-highlighted-hyps)
+ (coq-unhighlight-hyp h)
+ (coq-highlight-hyp h)))
+
+(defun coq-toggle-highlight-hyp-at (pt)
+ "Toggle hiding the hypothesis at point."
+ (interactive)
+ (let* ((ov
+ (or (car (coq-overlays-at pt 'hyp-name))
+ ;; we may be between hypname and hyp, so skip backward to
+ ;; something meaningful
+ (save-excursion
+ (goto-char pt)
+ (search-backward-regexp "[^ :=]\\|\n")
+ (car (coq-overlays-at (point) 'hyp-name)))))
+ (hypname (and ov
+ (overlay-get ov 'hyp-name))))
+ (when hypname
+ (if (member hypname coq-highlighted-hyps)
+ (coq-unhighlight-hyp hypname)
+ (coq-highlight-hyp hypname)))))
+
+(defun coq-toggle-highlight-hyp-at-point ()
+ (interactive)
+ (coq-toggle-highlight-hyp-at (point)))
-(defvar coq-highlight-id-last-regexp nil)
-(defun coq-highlight-id-in-goals (re)
- (with-current-buffer proof-goals-buffer
- (highlight-regexp re 'lazy-highlight)))
+(defun coq-insert-at-point-hyp-at-mouse (event)
+ (interactive "e")
+ (let ((hyp-name (save-excursion
+ (with-current-buffer proof-goals-buffer
+ (save-excursion
+ (overlay-get (car (overlays-at (posn-point (event-start event))))
+ 'hyp-name))))))
+ (insert hyp-name)))
-(defun coq-unhighlight-id-in-goals (re)
- (with-current-buffer proof-goals-buffer
- (unhighlight-regexp re)))
+;;;;;;;;;;; Hiding Hypothesis ;;;;;;;;;;;
+(defvar coq-hidden-hyp-map (make-sparse-keymap) "Keymap for hidden hypothesis.")
-(defun coq-highlight-id-at-pt-in-goals ()
+(defvar coq-hidden-hyps nil
+ "List of hypothesis that should be hidden in goals buffer.
+These are re-hidden at each regeneration of goals buffer
+using a hook in `proof-shell-handle-delayed-output-hook'.")
+
+
+(defun coq-toggle-fold-hyp-at (pt)
+ "Toggle hiding the hypothesis at point."
(interactive)
- (let* ((id (coq-id-or-notation-at-point))
- (re (regexp-quote (or id ""))))
- (when coq-highlight-id-last-regexp
- (coq-unhighlight-id-in-goals coq-highlight-id-last-regexp))
- (coq-highlight-id-in-goals re)
- (setq coq-highlight-id-last-regexp re)))
+ (let* ((ov (car (coq-overlays-at pt 'hyp-name)))
+ (hypname (and ov (overlay-get ov 'hyp-name))))
+ (when hypname
+ (if (member hypname coq-hidden-hyps)
+ (coq-unfold-hyp hypname)
+ (coq-fold-hyp hypname)))))
+
+(defun coq-toggle-fold-hyp-at-point ()
+ (interactive)
+ (coq-toggle-fold-hyp-at (point)))
+(defun coq-toggle-fold-hyp-at-mouse (event)
+ "Toggle hiding the hypothesis at mouse click.
+Used on hyptohesis overlays in goals buffer mainly."
+ (interactive "e")
+ (save-excursion
+ (with-current-buffer proof-goals-buffer
+ (save-excursion (coq-toggle-fold-hyp-at (posn-point (event-start event)))))))
+
+(defun coq-configure-hyp-overlay-hidden (hyp-overlay h)
+ (when hyp-overlay
+ (let* ((lgthhyp (- (overlay-end hyp-overlay) (overlay-start hyp-overlay)))
+ (prefx (make-string (min 8 lgthhyp) ?.))
+ (hypcross-ov (overlay-get hyp-overlay 'hypcross-ov)))
+ (overlay-put
+ hyp-overlay 'display
+ prefx ;(propertize prefx 'keymap coq-hidden-hyp-map)
+ )
+ (overlay-put hyp-overlay 'evaporate t)
+ (overlay-put hyp-overlay 'mouse-face 'proof-command-mouse-highlight-face)
+ (overlay-put hyp-overlay 'help-echo "mouse-3: unfold; mouse-2 copy name")
+ (overlay-put hyp-overlay 'hyp-name h)
+ (overlay-put hyp-overlay 'keymap coq-hidden-hyp-map)
+ (overlay-put hypcross-ov 'display (coq-hypcross-folded-string)))))
+
+(defun coq-configure-hyp-overlay-visible (hyp-overlay h)
+ (when hyp-overlay
+ (overlay-put hyp-overlay 'display nil)
+ (overlay-put hyp-overlay 'evaporate t)
+ (overlay-put hyp-overlay 'mouse-face nil)
+ (overlay-put hyp-overlay 'help-echo nil)
+ (overlay-put hyp-overlay 'keymap nil)
+ (overlay-put (overlay-get hyp-overlay 'hypcross-ov) 'display (coq-hypcross-unfolded-string))))
+
+(defun coq-fold-hyp-aux (h)
+ "Fold hypothesis H's type from the context temporarily.
+Displays \".......\" instead. This function relies on variable
+coq-hyps-positions. The hiding is cancelled as soon as the goals
+buffer is changed, consider using `coq-fold-hyp' if you want the
+hiding to be maintain when scripting/undoing."
+ (let ((hyp-overlay (coq-find-hyp-overlay h)))
+ (when hyp-overlay (coq-configure-hyp-overlay-hidden hyp-overlay h))))
+
+(defun coq-fold-hyp (h)
+ "Fold hypothesis H's type from the context durably.
+\(displays \".......\" instead). This function relies on variable
+‘coq-hyps-positions’. The hiding maintained as the goals buffer is
+changed, thanks to a hook on `proof-shell-handle-delayed-output-hook',
+consider using `coq-fold-hyp' if you want the hiding to be maintain
+when scripting/undoing."
+ (interactive)
+ (unless (member h coq-hidden-hyps)
+ (setq coq-hidden-hyps (cons h coq-hidden-hyps))
+ (coq-fold-hyp-aux h)))
+
+(defun coq-unfold-hyp-aux (h)
+"Unfold hypothesis H temporarily.
+See `coq-fold-hyp-aux'."
+ (let ((hyp-overlay (coq-find-hyp-overlay h)))
+ (coq-configure-hyp-overlay-visible hyp-overlay h)))
+
+(defun coq-unfold-hyp (h)
+"Unfold hypothesis H durably.
+See `coq-fold-hyp'."
+ (interactive)
+ (when (member h coq-hidden-hyps)
+ (setq coq-hidden-hyps (delete h coq-hidden-hyps))
+ (coq-unfold-hyp-aux h)))
+
+(defun coq-unfold-hyp-list (lh)
+ "Fold the type of hypothesis in LH temporarily.
+See `coq-unfold-hyp-aux'."
+ (mapc 'coq-unfold-hyp-aux lh))
+
+(defun coq-fold-hyp-list (lh)
+ "Fold the type of hypothesis in LH temporarily.
+See `coq-fold-hyp-aux'."
+ (mapc 'coq-fold-hyp-aux lh))
+
+(defun coq-fold-hyps ()
+ "Fold the type of hypothesis in LH durably.
+See `coq-fold-hyp'."
+ (interactive)
+ (coq-fold-hyp-list coq-hidden-hyps))
+
+
+(defun coq-unfold-hyps ()
+ "Unfold the type of hypothesis in LH durably.
+See `coq-unfold-hyp'."
+ (interactive)
+ (coq-unfold-hyp-list coq-hidden-hyps)
+ (setq coq-hidden-hyps nil))
+
+(defun coq-toggle-fold-hyp (h)
+ "Toggle the hiding status of hypothesis H (asked interactively).
+See `coq-fold-hyp'."
+ (interactive "sHypothesis to fold: ")
+ (if (member h coq-hidden-hyps)
+ (coq-unfold-hyp h)
+ (coq-fold-hyp h)))
+;;;;;;;
(proof-definvisible coq-PrintHint "Print Hint. ")
@@ -1367,6 +1786,10 @@ goal is redisplayed."
(proof-definvisible coq-unset-printing-synth "Unset Printing Synth.")
(proof-definvisible coq-set-printing-coercions "Set Printing Coercions.")
(proof-definvisible coq-unset-printing-coercions "Unset Printing Coercions.")
+(proof-definvisible coq-set-printing-compact-contexts "Set Printing Compact Contexts.")
+(proof-definvisible coq-unset-printing-compact-contexts "Unset Printing Compact Contexts.")
+(proof-definvisible coq-set-printing-unfocused "Set Printing Unfocused.")
+(proof-definvisible coq-unset-printing-unfocused "Unset Printing Unfocused.")
(proof-definvisible coq-set-printing-universes "Set Printing Universes.")
(proof-definvisible coq-unset-printing-universes "Unset Printing Universes.")
(proof-definvisible coq-set-printing-wildcards "Set Printing Wildcard.")
@@ -1433,15 +1856,17 @@ goal is redisplayed."
(defun coq-get-comment-region (pt)
- "Return a list of the forme (beg end) where beg,end is the comment region arount position PT.
-Return nil if PT is not inside a comment"
+ "Return a list of the form (BEG END).
+BEG,END being the comment region arount position PT.
+Return nil if PT is not inside a comment."
(save-excursion
(goto-char pt)
`(,(save-excursion (coq-find-comment-start))
,(save-excursion (coq-find-comment-end)))))
(defun coq-near-comment-region ()
- "Return a list of the forme (beg end) where beg,end is the comment region near position PT.
+ "Return a list of the forme (BEG END).
+BEG,END being is the comment region near position PT.
Return nil if PT is not near a comment.
Near here means PT is either inside or just aside of a comment."
(save-excursion
@@ -1671,7 +2096,7 @@ Near here means PT is either inside or just aside of a comment."
;; want xml like tags, and I want them removed before warning display.
;; I want the same for errors -> pgip
- proof-shell-eager-annotation-end "\377\\|done\\]\\|</infomsg>\\|\\*\\*\\*\\*\\*\\*\\|) >" ; done
+ proof-shell-eager-annotation-end coq-shell-eager-annotation-end ; done
proof-shell-annotated-prompt-regexp coq-shell-prompt-pattern
proof-shell-result-start "\372 Pbp result \373"
proof-shell-result-end "\372 End Pbp result \373"
@@ -1808,7 +2233,7 @@ Near here means PT is either inside or just aside of a comment."
(defpacustom search-blacklist coq-search-blacklist-string
- "Strings to blacklist in requests to coq environment."
+ "Strings to blacklist in requests to Coq environment."
:type 'string
:get 'coq-get-search-blacklist
:setting coq-set-search-blacklist)
@@ -1838,7 +2263,7 @@ Near here means PT is either inside or just aside of a comment."
(defun coq-extract-instantiated-existentials (start end)
"Coq specific function for `proof-tree-extract-instantiated-existentials'.
-Returns the list of currently instantiated existential variables."
+Return the list of currently instantiated existential variables."
(proof-tree-extract-list
start end
coq-proof-tree-existentials-state-start-regexp
@@ -1851,11 +2276,11 @@ Returns the list of currently instantiated existential variables."
(defun coq-proof-tree-get-new-subgoals ()
"Check for new subgoals and issue appropriate Show commands.
-This is a hook function for `proof-tree-urgent-action-hook'. This
+This is a hook function for `proof-tree-urgent-action-hook'. This
function examines the current goal output and searches for new
-unknown subgoals. Those subgoals have been generated by the last
+unknown subgoals. Those subgoals have been generated by the last
proof command and we must send their complete sequent text
-eventually to prooftree. Because subgoals may change with
+eventually to prooftree. Because subgoals may change with
the next proof command, we must execute the additionally needed
Show commands before the next real proof command.
@@ -1863,18 +2288,18 @@ The ID's of the open goals are checked with
`proof-tree-sequent-hash' in order to find out if they are new.
For any new goal an appropriate Show Goal command with a
'proof-tree-show-subgoal flag is inserted into
-`proof-action-list'. Then, in the normal delayed output
+`proof-action-list'. Then, in the normal delayed output
processing, the sequent text is send to prooftree as a sequent
update (see `proof-tree-update-sequent') and the ID of the
sequent is registered as known in `proof-tree-sequent-hash'.
Searching for new subgoals must only be done when the proof is
not finished, because Coq 8.5 lists open existential variables
-as (new) open subgoals. For this test we assume that
+as (new) open subgoals. For this test we assume that
`proof-marker' has not yet been moved.
The `proof-tree-urgent-action-hook' is also called for undo
-commands. For those, nothing is done.
+commands. For those, nothing is done.
The not yet delayed output is in the region
\[proof-shell-delayed-output-start, proof-shell-delayed-output-end]."
@@ -1958,9 +2383,9 @@ This is the Coq incarnation of `proof-tree-find-undo-position'."
(defun coq-proof-tree-enable-evar-callback (span)
"Callback for the evar printing status test.
-This is the callback for the command ``Test Printing Dependent
-Evars Line''. It checks whether evar printing was off and
-remembers that fact in `coq--proof-tree-must-disable-evars'."
+This is the callback for the command ``Test Printing Dependent Evars Line''.
+It checks whether evar printing was off and remembers that
+fact in `coq--proof-tree-must-disable-evars'."
(with-current-buffer proof-shell-buffer
(save-excursion
;; When the callback runs, the next item is sent to Coq already and
@@ -2001,11 +2426,11 @@ properly after the proof and enable the evar printing."
(defun coq-proof-tree-disable-evars ()
"Disable evar printing if necessary.
This function switches off evar printing after the proof, if it
-was off before the proof. For undo commands, we rely on the fact
+was off before the proof. For undo commands, we rely on the fact
that Coq itself undos the effect of the evar printing change that
-we inserted after the goal statement. We also rely on the fact
+we inserted after the goal statement. We also rely on the fact
that Proof General never backtracks into the middle of a
-proof. (If this would happen, Coq would switch evar printing on
+proof. (If this would happen, Coq would switch evar printing on
and the code here would not switch it off after the proof.)
Being called from `proof-tree-urgent-action-hook', this function
@@ -2019,10 +2444,10 @@ result of `coq-proof-tree-get-proof-info'."
(defun coq-proof-tree-evar-display-toggle ()
"Urgent action hook function for changing the evar printing status in Coq.
This function is for `proof-tree-urgent-action-hook' (which is
-called only if external proof disaply is switched on). It checks
+called only if external proof disaply is switched on). It checks
whether a proof was started or stopped and inserts commands for
enableing and disabling the evar status line for Coq 8.6 or
-later. Without the evar status line being enabled, prooftree
+later. Without the evar status line being enabled, prooftree
crashes.
Must only be called via `proof-tree-urgent-action-hook' to ensure
@@ -2194,7 +2619,8 @@ mouse activation."
(defun coq--format-intros (output)
"Create an “intros†form from the OUTPUT of “Show Introsâ€."
- (let* ((shints (replace-regexp-in-string "[\r\n ]*\\'" "" output)))
+ (let* ((shints1 (replace-regexp-in-string "^[0-9] subgoal\\(.\\|\n\\|\r\\)*" "" output))
+ (shints (replace-regexp-in-string "[\r\n ]*\\'" "" shints1)))
(if (or (string= "" shints)
(string-match coq-error-regexp shints))
(error "Don't know what to intro")
@@ -2225,7 +2651,7 @@ tacitcs like destruct and induction reuse hypothesis names by
default, which makes the detection of new hypothesis incorrect.
the hack consists in adding the \"!\" modifier on the argument
destructed, so that it is left in the goal and the name cannot be
-reused. We also had a \"clear\" at the end of the tactic so that
+reused. We also had a \"clear\" at the end of the tactic so that
the whole tactic behaves correctly.
Warning: this makes the error messages (and location) wrong.")
@@ -2361,6 +2787,21 @@ Completion is on a quasi-exhaustive list of Coq tacticals."
(proof-shell-invisible-command q))))
+;; TODO SearchAbout become Search in v8.5, change when V8.4 becomes old.
+(defun coq-SearchAbout ()
+ (interactive)
+ (coq-ask-do
+ ;; TODO: use [Add Search Blacklist "foo"] to exclude optionaly some patterns:
+ ;; "_ind" "_rec" "R_" "_equation"
+ "SearchAbout (ex: \"eq_\" eq -bool)"
+ "SearchAbout"
+ nil nil t)
+ (when coq-highlight-hyps-cited-in-response
+ (coq-highlight-hyps-cited-in-response)
+ (message "M-x coq-unhighlight-selected-hyps to remove highlighting, [Coq/Settings/Search Blacklist] to change blacklisting."))
+ (unless coq-highlight-hyps-cited-in-response
+ (message "[Coq/Settings/Search Blacklist] to change blacklisting.")))
+
;; Insertion commands
(define-key coq-keymap [(control ?i)] 'coq-insert-intros)
(define-key coq-keymap [(control ?m)] 'coq-insert-match)
@@ -2410,6 +2851,11 @@ Completion is on a quasi-exhaustive list of Coq tacticals."
(define-key coq-goals-mode-map [(control ?c)(control ?a)(control ?w)] 'coq-ask-adapt-printing-width-and-show)
(define-key coq-goals-mode-map [(control ?c)(control ?a)(control ?l)] 'coq-LocateConstant)
(define-key coq-goals-mode-map [(control ?c)(control ?a)(control ?n)] 'coq-LocateNotation)
+;; specific to goals buffer: (un)foldinng and (un)highlighting shortcuts
+(define-key coq-goals-mode-map [?f] 'coq-toggle-fold-hyp-at-point)
+(define-key coq-goals-mode-map [?F] 'coq-unfold-hyps)
+(define-key coq-goals-mode-map [?h] 'coq-toggle-highlight-hyp-at-point)
+(define-key coq-goals-mode-map [?H] 'coq-unhighlight-selected-hyps)
(define-key coq-response-mode-map [(control ?c)(control ?a)(control ?c)] 'coq-Check)
@@ -2448,6 +2894,27 @@ Completion is on a quasi-exhaustive list of Coq tacticals."
(define-key proof-goals-mode-map [(control shift down-mouse-1)] 'coq-id-under-mouse-query)
(define-key proof-goals-mode-map [(control shift mouse-1)] '(lambda () (interactive))))
+
+
+;; Default binding on hypothesis names: clicking on the name of an hyp with
+;; button 3 folds it. Click on it with button 2 copies the names at current
+;; point.
+(when coq-hypname-map
+ (define-key coq-hypname-map [(mouse-3)] 'coq-toggle-fold-hyp-at-mouse)
+ (define-key coq-hypname-map [(mouse-2)] 'coq-insert-at-point-hyp-at-mouse))
+
+;; Default binding: clicking on the cross to folds/unfold hyp.
+;; Click on it with button 2 copies the names at current point.
+(when coq-hypname-map
+ (define-key coq-hypcross-map [(mouse-1)] 'coq-toggle-fold-hyp-at-mouse)
+ (define-key coq-hypcross-map [return] 'coq-toggle-fold-hyp-at-point)
+ (define-key coq-hypcross-map [(mouse-2)] 'coq-insert-at-point-hyp-at-mouse))
+;; Ddefault binding: clicking on a hidden hyp with button 3 unfolds it, with
+;; button 2 it copies hyp name at current point.
+(when coq-hidden-hyp-map
+ (define-key coq-hidden-hyp-map [(mouse-3)] 'coq-toggle-fold-hyp-at-mouse)
+ (define-key coq-hidden-hyp-map [(mouse-2)] 'coq-insert-at-point-hyp-at-mouse))
+
;;;;;;;;;;;;;;;;;;;;;;;;
;; error handling
;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2513,8 +2980,9 @@ buffer."
(defun coq-highlight-error (&optional parseresp clean)
- "Parses the last coq output looking at an error message. Highlight the text
-pointed by it. Coq error message must be like this:
+ "Parse the last Coq output looking at an error message.
+Highlight the text pointed by it.
+Coq error message must be like this:
\"
> command with an error here ...
@@ -2593,7 +3061,7 @@ number of hypothesis displayed, without hiding the goal"
(with-selected-window goal-win
;; find snd goal or buffer end, if not found this goes to the
;; end of buffer
- (search-forward-regexp "subgoal 2\\|\\'")
+ (search-forward-regexp "subgoal 2\\|\\*\\*\\* Unfocused goals:\\|\\'")
(beginning-of-line)
;; find something backward else than a space: bottom of concl
(ignore-errors (search-backward-regexp "\\S-"))
@@ -2650,6 +3118,14 @@ number of hypothesis displayed, without hiding the goal"
proof-shell-last-output)
(proof-clean-buffer proof-goals-buffer))))
+(add-hook 'proof-shell-handle-delayed-output-hook
+ (lambda ()
+ (setq coq-hyps-positions (coq-detect-hyps-in-goals))
+ (coq-highlight-selected-hyps)
+ (coq-fold-hyps)
+ ))
+
+
(defun is-not-split-vertic (selected-window)
(<= (- (frame-height) (window-height)) 2))
@@ -2720,24 +3196,24 @@ Only when three-buffer-mode is enabled."
(defcustom coq-double-hit-enable nil
"* Experimental: Whether or not double hit should be enabled in coq mode.
-A double hit is performed by pressing twice a key quickly. If
+A double hit is performed by pressing twice a key quickly. If
this variable is not nil, then 1) it means that electric
terminator is off and 2) a double hit on the terminator act as
-the usual electric terminator. See `proof-electric-terminator'.
-"
+the usual electric terminator. See `proof-electric-terminator'."
:type 'boolean
:set 'proof-set-value
:group 'proof-user-options)
(defvar coq-double-hit-hot-key "."
- "The key used for double hit electric terminator. By default this
-is the coq terminator \".\" key. For example one can do this:
+ "The key used for double hit electric terminator.
+By default this is the coq terminator \".\" key.
+For example one can do this:
-(setq coq-double-hit-hot-key (kbd \";\"))
+\(setq coq-double-hit-hot-key (kbd \";\"))
-to use semi-colon instead (on french keyboard, it is the same key
-as \".\" but without shift.")
+to use semi-colon instead (on French keyboard, it is the same key as
+\".\" but without shift.")
(defvar coq-double-hit-hot-keybinding nil
"The keybinding that was erased by double hit terminator enabling.
@@ -2778,7 +3254,7 @@ This is an advice to pg `proof-electric-terminator-enable' function."
"The maximum delay between the two hit of a double hit in coq/proofgeneral.")
(defvar coq-double-hit-timer nil
- "the timer used to watch for double hits.")
+ "The timer used to watch for double hits.")
(defvar coq-double-hit-hot nil
"The variable telling that a double hit is still possible.")
@@ -2786,8 +3262,8 @@ This is an advice to pg `proof-electric-terminator-enable' function."
(defun coq-unset-double-hit-hot ()
- "Disable timer `coq-double-hit-timer' and set it to nil. Shut
-off the current double hit if any. This function is supposed to
+ "Disable timer `coq-double-hit-timer' and set it to nil.
+Shut off the current double hit if any. This function is supposed to
be called at double hit timeout."
(when coq-double-hit-timer (cancel-timer coq-double-hit-timer))
(setq coq-double-hit-hot nil)
@@ -2810,9 +3286,11 @@ Starts a timer for a double hit otherwise."
nil 'coq-unset-double-hit-hot))))
(defun coq-terminator-insert (&optional count)
- "A wrapper on `proof-electric-terminator' to accept double hits instead if enabled.
-If by accident `proof-electric-terminator-enable' and `coq-double-hit-enable'
-are non-nil at the same time, this gives priority to the former."
+ "A wrapper on `proof-electric-terminator'.
+Used to accept double hits instead if enabled.
+If by accident option `proof-electric-terminator-enable' and option
+`coq-double-hit-enable' are non-nil at the same time, this gives
+priority to the former."
(interactive)
(if (and (not proof-electric-terminator-enable)
coq-double-hit-enable (null count))
@@ -2829,13 +3307,6 @@ are non-nil at the same time, this gives priority to the former."
(define-key coq-mode-map (kbd ".") 'coq-terminator-insert)
;(define-key coq-mode-map (kbd ";") 'coq-terminator-insert) ; for french keyboards
-;; Activation of ML4PG functionality
-(declare-function ml4pg-select-mode "ml4pg") ;; Avoids copilation warnings
-
-(defun coq-activate-ml4pg ()
- (let ((filename (concatenate 'string proof-home-directory "contrib/ML4PG/ml4pg.el")))
- (when (file-exists-p filename) (load-file filename) (ml4pg-select-mode))))
-
;;;;;;;;;;;;;;
;; This was done in coq-compile-common, but it is actually a good idea even
diff --git a/coq/coqtags b/coq/coqtags
index 50d4a2f5..6a6e5a64 100755
--- a/coq/coqtags
+++ b/coq/coqtags
@@ -59,10 +59,10 @@ while(<>)
elsif($stmt=~/^([ \t]*((Axiom)|(Hypothesis)|(Parameter)|(Variable))\s+[\w\']+)/)
{ adddecs($stmt,$1); }
- elsif($stmt=~/^([ \t]*((Definition)|(Fixpoint)|(Inductive)|(CoInductive)|(Record))\s+([\w\']+))/)
+ elsif($stmt=~/^([ \t]*((Definition)|(Fixpoint)|(Inductive)|(CoInductive)|(Record)|(Variant))\s+([\w\']+))/)
{
$tagstring.=$1."\177".$8."\001".$lp.",".$cp."\n";
- if($2 eq "Inductive" || $2 eq "CoInductive"){
+ if($2 eq "Inductive" || $2 eq "CoInductive" || $2 eq "Variant"){
add_constructors($stmt);
}
elsif($2 eq "Record"){
diff --git a/coq/ex/indent.v b/coq/ex/indent.v
index 411347f0..1e9c17d8 100644
--- a/coq/ex/indent.v
+++ b/coq/ex/indent.v
@@ -91,6 +91,17 @@ Module Y.
- induction x;simpl;intros...
- induction x;simpl;intros...
Qed.
+ Lemma L''' : forall x:nat , Nat.iter x (A:=nat) (plus 2) 0 >= x.
+ Proof using Type *.
+ intros x.
+ induction x;simpl;intros.
+ admit.
+ Admitted.
+
+ Lemma L'''' : forall x:nat , 0 <= x.
+ Proof (fun x : nat => Nat.le_0_l x).
+ (* no indentation here since the proof above closes the proof. *)
+ Definition foo:nat := 0.
End Y.
Function div2 (n : nat) {struct n}: nat :=
@@ -314,7 +325,7 @@ Module TC.
Next Obligation.
Proof.
- unfold pointwise_relation, all in * .
+ unfold pointwise_relation, all in *.
intro.
intros y H.
intuition ; specialize (H x0) ; intuition.
diff --git a/doc/PG-adapting.texi b/doc/PG-adapting.texi
index 44c40549..5740faa2 100644
--- a/doc/PG-adapting.texi
+++ b/doc/PG-adapting.texi
@@ -51,14 +51,14 @@
@c @ref{node} without "see". Careful for info.
-@set version 4.4.1~pre
-@set emacsversion 24.4
+@set version 4.5-git
+@set emacsversion 24.3
@set last-update September 2016
@set rcsid $Id$
@dircategory Theorem proving
@direntry
-* Adapting Proof General: (PG-adapting). Adapt Proof General to new provers
+* Adapting PG: (PG-adapting). Adapt Proof General to new provers
END-INFO-DIR-ENTRY
@end direntry
diff --git a/doc/ProofGeneral.texi b/doc/ProofGeneral.texi
index 8dab17f0..56b9bbc6 100644
--- a/doc/ProofGeneral.texi
+++ b/doc/ProofGeneral.texi
@@ -4,7 +4,7 @@
@c
@c
@c TODO:
-@c MMM support, Theorem dependencies, history in script and response,
+@c Theorem dependencies, history in script and response,
@c identifier info commands
@@ -57,14 +57,14 @@
@c @ref{node} without "see". Careful for info.
@c
-@set version 4.4.1~pre
-@set emacsversion 24.4
+@set version 4.5-git
+@set emacsversion 24.3
@set last-update September 2016
@set rcsid $Id$
@dircategory Theorem proving
@direntry
-* Proof General: (ProofGeneral). Organize your proofs with Emacs!
+* ProofGeneral: (ProofGeneral). Organize your proofs with Emacs!
@end direntry
@c
@@ -145,8 +145,7 @@ generic Emacs interface for proof assistants.
Proof General @value{version} has been tested with GNU Emacs
@value{emacsversion} on Linux. It is supplied ready to use for the proof
-assistants LEGO, Coq, Isabelle, and PhoX. Experimental support is
-provided for several other provers.
+assistants Coq, EasyCrypt, and PhoX.
@menu
* Preface::
@@ -163,6 +162,7 @@ provided for several other provers.
* Coq Proof General::
* Isabelle Proof General::
* HOL Light Proof General::
+* EasyCrypt Proof General::
* Shell Proof General::
@c * PhoX Proof General::
* Obtaining and Installing::
@@ -520,6 +520,7 @@ script file for your proof assistant, for example:
@item Lambda-CLAM @tab @file{.lcm} @tab @code{lclam-mode}
@item CCC @tab @file{.ccc} @tab @code{ccc-mode}
@item PG-Shell @tab @file{.pgsh} @tab @code{pgshell-mode}
+@item EasyCrypt @tab @file{.ec} @tab @code{easycrypt-mode}
@end multitable
(the exact list of Proof Assistants supported may vary according to the
version of Proof General and its local configuration). You can also
@@ -678,6 +679,9 @@ Isabelle for more details.
@b{HOL Light Proof General} for HOL Light@*
@xref{HOL Light Proof General}, for more details.
@item
+@b{EasyCrypt Proof General} for EasyCrypt@*
+@xref{EasyCrypt Proof General}, for mode details.
+@item
@b{Shell Proof General} for shell scripts (not really a proof assistant!)@*
@xref{Shell Proof General}, for more details.
@end itemize
@@ -3466,40 +3470,49 @@ For multiple frame mode, this function obeys the setting of
For single frame mode:
-- In two panes mode, this uses a canonical layout made by splitting
+@itemize @bullet
+@item
+In two panes mode, this uses a canonical layout made by splitting
Emacs windows in equal proportions. The splitting is vertical if
emacs width is smaller than @samp{@code{split-width-threshold}} and
horizontal otherwise. You can then adjust the proportions by
dragging the separating bars.
-- In three pane mode, there are three display modes, depending
-@lisp
- where the three useful buffers are displayed: scripting
- buffer, goals buffer and response buffer.
-
- Here are the three modes:
-
- - vertical: the 3 buffers are displayed in one column.
- - hybrid: 2 columns mode, left column displays scripting buffer
- and right column displays the 2 others.
- - horizontal: 3 columns mode, one for each buffer (script, goals,
- response).
-
- By default, the display mode is automatically chosen by
- considering the current emacs frame width: if it is smaller
- than @samp{@code{split-width-threshold}} then vertical mode is chosen,
- otherwise if it is smaller than 1.5 * @samp{@code{split-width-threshold}}
- then hybrid mode is chosen, finally if the frame is larger than
- 1.5 * @samp{@code{split-width-threshold}} then the horizontal mode is chosen.
-
- You can change the value of @samp{@code{split-width-threshold}} at your
- will.
-
- If you want to force one of the layouts, you can set variable
- @samp{@code{proof-three-window-mode-policy}} to @code{'vertical}, @code{'horizontal} or
- @code{'hybrid}. The default value is @code{'smart} which sets the automatic
- behaviour described above.
-@end lisp
+@item
+In three pane mode, there are three display modes, depending
+where the three useful buffers are displayed: scripting
+buffer, goals buffer and response buffer.
+
+Here are the three modes:
+
+@itemize @bullet
+@item
+@code{vertical}: the 3 buffers are displayed in one column.
+
+@item
+@code{hybrid}: 2 columns mode, left column displays scripting buffer
+and right column displays the 2 others.
+
+@item
+@code{horizontal}: 3 columns mode, one for each buffer (script, goals, response).
+@end itemize
+
+By default, the display mode is automatically chosen by
+considering the current emacs frame width: if it is smaller
+than @samp{@code{split-width-threshold}} then vertical mode is chosen,
+otherwise if it is smaller than 1.5 * @samp{@code{split-width-threshold}}
+then hybrid mode is chosen, finally if the frame is larger than
+1.5 * @samp{@code{split-width-threshold}} then the horizontal mode is chosen.
+
+You can change the value of @samp{@code{split-width-threshold}} at your
+will.
+
+If you want to force one of the layouts, you can set variable
+@samp{@code{proof-three-window-mode-policy}} to @code{'vertical}, @code{'horizontal} or
+@code{'hybrid}. The default value is @code{'smart} which sets the automatic
+behaviour described above.
+@end itemize
+
@end deffn
@c TEXI DOCSTRING MAGIC: proof-shrink-windows-tofit
@@ -5450,7 +5463,7 @@ URL of web page for Isabelle.
-@c FIXME todo: theorem dependencies, MMM
+@c FIXME todo: theorem dependencies
@c =================================================================
@@ -5495,9 +5508,66 @@ us know if you try this out and want help. We welcome any interested
collaborators from the HOL communities to help improve Proof General as
an interface for HOL provers.
+@c =================================================================
+@c
+@c CHAPTER: EasyCrypt Proof General
+@c
+@node EasyCrypt Proof General
+@chapter EasyCrypt Proof General
+@cindex EasyCrypt Proof General
+@menu
+* EasyCrypt specific commands::
+* EasyCrypt weak-check mode::
+* EasyCrypt customizations::
+@end menu
+
+EasyCrypt Proof General is an instantiation of Proof General for the
+EasyCrypt proof assistant.
+
+@node EasyCrypt specific commands
+@section EasyCrypt specific commands
+
+@kindex C-c C-a C-p
+@kindex C-c C-a C-c
+
+EasyCrypt Proof General supplies the following key-bindings:
+@table @kbd
+@item C-c C-a C-p
+Prompts for ``print'' query arguments.
+
+@item C-c C-a C-c
+The same for a ``check'' query.
+@end table
+
+@node EasyCrypt weak-check mode
+@section EasyCrypt weak-check mode
+The EasyCrypt menu contains a @code{Weak-check mode} toggle menu, which
+allows you to enable or disable the EasyCrypt Weak-Check mode. When
+enabled, all @code{smt} calls are ignored and assumed to succeed.
+
+@node EasyCrypt customizations
+@section EasyCrypt customizations
+
+Here are some of the other user options specific to EasyCrypt. You can
+set these as usual with the customization mechanism.
+@c TEXI DOCSTRING MAGIC: easycrypt-prog-name
+@defvar easycrypt-prog-name
+Name of program to run EasyCrypt.
+@end defvar
+
+@c TEXI DOCSTRING MAGIC: easycrypt-load-path
+@defvar easycrypt-load-path
+Non-standard EasyCrypt library load path. This list specifies the
+include path for EasyCrypt.
+@end defvar
+
+@c TEXI DOCSTRING MAGIC: easycrypt-web-page
+@defvar easycrypt-web-page
+URL of web page for EasyCrypt.
+@end defvar
@c =================================================================
@@ -6082,9 +6152,8 @@ Summer Schools. Many new features have been added to enhance Coq mode
Support has been added for the useful Emacs packages Speedbar
@c @uref{http://cedet.sourceforge.net/speedbar.shtml,Speedbar}
-and Index Menu, both usually distributed with Emacs. Compatible
-versions of the Emacs packages Math-Menu (for Unicode symbols) and MMM
-Mode (for multiple modes in one buffer) are bundled with Proof General.
+and Index Menu, both usually distributed with Emacs. A compatible
+version of the Emacs package Math-Menu (for Unicode symbols) is bundled with Proof General.
An experimental Unicode Tokens package has been added which will replace
X-Symbol.
diff --git a/doc/dir b/doc/dir
index f81630d1..beea6f2a 100644
--- a/doc/dir
+++ b/doc/dir
@@ -1,4 +1,3 @@
-$Id$
This is the file .../info/dir, which contains the topmost node of the
Info hierarchy. The first time you invoke Info you start off
looking at that node, which is (dir)Top.
@@ -16,5 +15,5 @@ File: dir Node: Top This is the top of the INFO tree
* Menu:
Theorem proving
-* Proof General: (ProofGeneral). Organize your proofs with Emacs!
-* Adapting Proof General: (PG-adapting). Adapt Proof General to new provers
+* ProofGeneral: (ProofGeneral). Organize your proofs with Emacs!
+* Adapting PG: (PG-adapting). Adapt Proof General to new provers
diff --git a/doc/docstring-magic.el b/doc/docstring-magic.el
index 1d074d8d..409fd22a 100644
--- a/doc/docstring-magic.el
+++ b/doc/docstring-magic.el
@@ -1,13 +1,24 @@
-;; doc/docstring-magic.el -- hack for using texi-docstring-magic.
-;;
-;; Copyright (C) 1998 LFCS Edinburgh.
+;;; doc/docstring-magic.el --- hack for using texi-docstring-magic.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall
;; Maintainer: Proof General maintainer <proofgen@dcs.ed.ac.uk>
+
+;;; Commentary:
;;
;; Ensure that non-compiled versions of everything are loaded.
;;
-;; $Id$
-;;
+
+;;; Code:
+
(setq load-path
(append '("../generic/") load-path))
(load "proof-site.el")
@@ -25,15 +36,15 @@
(let ((assistants (mapcar (function car) proof-assistant-table)))
; assume not customized
(while assistants
- (let*
+ (let*
((assistant (car assistants)) ; compiler bogus warning here
- (nameregexp
- (or
- (cdr-safe
+ (nameregexp
+ (or
+ (cdr-safe
(assoc assistant
proof-assistant-table))
- (error "proof-site: symbol " (symbol-name assistant)
- "is not in proof-assistant-table")))
+ (error "Symbol %s is not in proof-assistant-table (in docstring-magic)"
+ (symbol-name assistant))))
(assistant-name (car nameregexp))
(sname (symbol-name assistant))
(elisp-file sname))
@@ -74,3 +85,6 @@
(setq func-menu 'markup-hack)
(load "texi-docstring-magic.el")
+
+(provide 'docstring-magic)
+;;; docstring-magic.el ends here
diff --git a/easycrypt/easycrypt-abbrev.el b/easycrypt/easycrypt-abbrev.el
index 3850ffb7..fa9cdcfc 100644
--- a/easycrypt/easycrypt-abbrev.el
+++ b/easycrypt/easycrypt-abbrev.el
@@ -1,3 +1,5 @@
+;;; easycrypt-abbrev.el --- Abbrev table and menus for EasyCrypt mode
+
;; --------------------------------------------------------------------
;; Copyright (c) - 2012--2016 - IMDEA Software Institute
;; Copyright (c) - 2012--2016 - Inria
@@ -5,9 +7,14 @@
;; Distributed under the terms of the GPL-v3 license
;; --------------------------------------------------------------------
+;;; Commentary:
+;;
+
(require 'proof)
(require 'easycrypt-syntax)
+;;; Code:
+
(defpgdefault menu-entries
'(
["Use Three Panes" proof-three-window-toggle
@@ -23,3 +30,5 @@
))
(provide 'easycrypt-abbrev)
+
+;;; easycrypt-abbrev.el ends here
diff --git a/easycrypt/easycrypt-hooks.el b/easycrypt/easycrypt-hooks.el
index 3cf891e3..67592973 100644
--- a/easycrypt/easycrypt-hooks.el
+++ b/easycrypt/easycrypt-hooks.el
@@ -1,3 +1,5 @@
+;;; easycrypt-hooks.el --- Auxiliary functions for EasyCrypt mode
+
;; --------------------------------------------------------------------
;; Copyright (c) - 2012--2016 - IMDEA Software Institute
;; Copyright (c) - 2012--2016 - Inria
@@ -5,9 +7,14 @@
;; Distributed under the terms of the GPL-v3 license
;; --------------------------------------------------------------------
+;;; Commentary:
+;;
+
(require 'span)
(require 'proof)
+;;; Code:
+
(defvar easycrypt-last-but-one-statenum 0)
(defvar easycrypt-proof-weak-mode nil)
@@ -38,7 +45,7 @@
(defun easycrypt-last-prompt-info (s)
"Extract the information from prompt."
- (let ((lastprompt (or s (error "no prompt"))))
+ (let ((lastprompt (or s (error "No prompt"))))
(when (string-match "\\[\\([0-9]+\\)|\\(\\sw+\\)\\]" lastprompt)
(list (string-to-number (match-string 1 lastprompt))
(if (equal (match-string 2 lastprompt) "weakcheck") t nil)))))
@@ -68,3 +75,5 @@
(list (format "undo %s." (int-to-string span-staten)))))
(provide 'easycrypt-hooks)
+
+;;; easycrypt-hooks.el ends here
diff --git a/easycrypt/easycrypt-keywords.el b/easycrypt/easycrypt-keywords.el
index e0b9d369..feb64fb1 100644
--- a/easycrypt/easycrypt-keywords.el
+++ b/easycrypt/easycrypt-keywords.el
@@ -1,3 +1,5 @@
+;;; easycrypt-keywords.el --- Definition of keywords for EasyCrypt mode
+
;; --------------------------------------------------------------------
;; Copyright (c) - 2012--2016 - IMDEA Software Institute
;; Copyright (c) - 2012--2016 - Inria
@@ -5,7 +7,12 @@
;; Distributed under the terms of the GPL-v3 license
;; --------------------------------------------------------------------
-; Generated on Tue Feb 21 23:37:34 2017
+;;; Commentary:
+;;
+;; Generated on Tue Feb 21 23:37:34 2017
+;;
+
+;;; Code:
(defvar easycrypt-bytac-keywords '(
"exact"
@@ -175,3 +182,5 @@
))
(provide 'easycrypt-keywords)
+
+;;; easycrypt-keywords.el ends here
diff --git a/easycrypt/easycrypt-syntax.el b/easycrypt/easycrypt-syntax.el
index a784395b..48e64a57 100644
--- a/easycrypt/easycrypt-syntax.el
+++ b/easycrypt/easycrypt-syntax.el
@@ -1,3 +1,5 @@
+;;; easycrypt-syntax.el --- Syntax definitions for EasyCrypt mode
+
;; --------------------------------------------------------------------
;; Copyright (c) - 2012--2016 - IMDEA Software Institute
;; Copyright (c) - 2012--2016 - Inria
@@ -5,10 +7,15 @@
;; Distributed under the terms of the GPL-v3 license
;; --------------------------------------------------------------------
+;;; Commentary:
+;;
+
(require 'proof-syntax)
(require 'easycrypt-keywords)
(require 'easycrypt-hooks)
+;;; Code:
+
(defconst easycrypt-id "[A-Za-z_]+")
(defconst easycrypt-terminal-string ".")
@@ -20,7 +27,7 @@
(defconst easycrypt-non-undoables-regexp "^pragma\\b")
(defconst easycrypt-keywords-code-open '("{"))
-(defconst easycrypt-keywords-code-close '("}"))
+(defconst easycrypt-keywords-code-close '("}"))
(defconst easycrypt-keywords-code-end '(";"))
(defvar easycrypt-other-symbols "\\(\\.\\.\\|\\[\\]\\)")
@@ -45,7 +52,7 @@
"\\s-+\\(?:nosmt\\s-+\\)?\\(\\sw+\\)"))
(defun easycrypt-save-command-p (span str)
- "Decide whether argument is a [save|qed] command or not"
+ "Decide whether argument is a [save|qed] command or not."
(let ((txt (or (span-property span 'cmd) "")))
(proof-string-match-safe easycrypt-proof-save-regexp txt)))
@@ -61,7 +68,7 @@
(modify-syntax-entry ?_ "_")
;; For comments
- (modify-syntax-entry ?\* ". 23")
+ (modify-syntax-entry ?\* ". 23")
;; For blocks
(modify-syntax-entry ?\( "()1")
@@ -84,7 +91,7 @@
;; FIXME: really needs change in generic function to take account of this,
;; since the end character of a command is not the start
(concat "\\(\\s(\\|\\s)\\|\\sw\\|\\s \\|\\s_\\)*=" ;match assignments
- "\\|;;\\|;\\|"
+ "\\|;;\\|;\\|"
(proof-ids-to-regexp easycrypt-global-keywords))
"Regexp matching any EasyCrypt command start or the terminator character.")
@@ -176,3 +183,5 @@
(modify-syntax-entry ?\) ")(4"))
(provide 'easycrypt-syntax)
+
+;;; easycrypt-syntax.el ends here
diff --git a/easycrypt/easycrypt.el b/easycrypt/easycrypt.el
index 017b2563..e9b40358 100644
--- a/easycrypt/easycrypt.el
+++ b/easycrypt/easycrypt.el
@@ -1,3 +1,5 @@
+;;; easycrypt.el --- Major mode for EasyCrypt
+
;; --------------------------------------------------------------------
;; Copyright (c) - 2012--2016 - IMDEA Software Institute
;; Copyright (c) - 2012--2016 - Inria
@@ -5,12 +7,16 @@
;; Distributed under the terms of the GPL-v3 license
;; --------------------------------------------------------------------
+;;; Commentary:
+;;
+
(require 'proof)
-(require 'pg-custom)
(require 'easycrypt-syntax)
(require 'easycrypt-hooks)
(require 'easycrypt-abbrev)
+;;; Code:
+
(add-to-list 'hs-special-modes-alist
'(easycrypt-mode "{" "}" "/[*/]" nil nil))
@@ -28,7 +34,7 @@
(defcustom easycrypt-load-path nil
"Non-standard EasyCrypt library load path.
-This list specifies the include path for EasyCrypt. The elements of
+This list specifies the include path for EasyCrypt. The elements of
this list are strings."
:type '(repeat (string :tag "simple directory (-I)"))
:safe 'easycrypt-load-path-safep
@@ -103,7 +109,7 @@ this list are strings."
proof-three-window-mode-policy (quote hybrid)
proof-auto-multiple-files t)
- ; Setting indents
+ ; Setting indents
(set (make-local-variable 'indent-tabs-mode) nil)
(setq proof-indent-enclose-offset (- proof-indent)
proof-indent-open-offset 0
@@ -159,20 +165,20 @@ this list are strings."
(define-derived-mode easycrypt-response-mode proof-response-mode
"EasyCrypt response" nil
(easycrypt-init-output-syntax-table)
- (setq proof-response-font-lock-keywords
+ (setq proof-response-font-lock-keywords
easycrypt-font-lock-keywords)
(proof-response-config-done))
(define-derived-mode easycrypt-goals-mode proof-goals-mode
"EasyCrypt goals" nil
(easycrypt-init-output-syntax-table)
- (setq proof-goals-font-lock-keywords
+ (setq proof-goals-font-lock-keywords
easycrypt-font-lock-keywords)
(proof-goals-config-done))
-(defun easycrypt-get-last-error-location ()
- "Remove [error] in the error message and extract the position
- and length of the error "
+(defun easycrypt-get-last-error-location ()
+ "Remove [error] in the error message and extract the position and
+length of the error."
(proof-with-current-buffer-if-exists proof-response-buffer
(goto-char (point-max))
@@ -189,8 +195,8 @@ this list are strings."
(while (proof-looking-at "\\s-") (forward-char 1)))
(defun easycrypt-highlight-error ()
- "Use 'easycrypt-get-last-error-location' to know the position
- of the error and then highlight in the script buffer"
+ "Use ‘easycrypt-get-last-error-location’ to know the position of the
+error and then highlight in the script buffer."
(proof-with-current-buffer-if-exists proof-script-buffer
(let ((mtch (easycrypt-get-last-error-location)))
(when mtch
@@ -261,4 +267,7 @@ this list are strings."
'(lambda () (when proof-three-window-enable (proof-layout-windows))))
;; --------------------------------------------------------------------
+
(provide 'easycrypt)
+
+;;; easycrypt.el ends here
diff --git a/etc/ProofGeneral.spec b/etc/ProofGeneral.spec
index 2a97e19e..f1d006a7 100644
--- a/etc/ProofGeneral.spec
+++ b/etc/ProofGeneral.spec
@@ -1,6 +1,6 @@
Summary: Proof General, Emacs interface for Proof Assistants
Name: ProofGeneral
-Version: 4.4.1~pre
+Version: 4.5-git
Release: 1
Group: Text Editors/Integrated Development Environments (IDE)
License: GPL
diff --git a/etc/coq/coqdoc-egs.v b/etc/coq/coqdoc-egs.v
deleted file mode 100644
index d79d44e5..00000000
--- a/etc/coq/coqdoc-egs.v
+++ /dev/null
@@ -1,26 +0,0 @@
-(* Some tests/examples of coqdoc regions in Coq files,
- used with MMM configuration (ProofGeneral -> Options -> Multiple Modes. *)
-
-
-(** This is a coqdoc plain text region.
-
- After editing/changing regions in mmm mode, use C-x % C-b to reparse
-*)
-
-
-(** %This is a special case of a \LaTeX{} region recognised by MMM.
-\begin{quote}
-Emacs will be in \texttt{LaTeX} mode when editing this region.
-\end{quote}
- % *)
-
-
-(** #Similarly, this is an HTML region, edited in HTML mode # *)
-
-
-(* Finally, here is some *)
-<<
-verbatim text
->>
-(* in text mode *)
-
diff --git a/etc/development-tips.txt b/etc/development-tips.txt
index 96701285..a6bd0709 100644
--- a/etc/development-tips.txt
+++ b/etc/development-tips.txt
@@ -29,8 +29,11 @@ Top-level forms, or forms that appear at top-level after compilation
these forms depend on runtime information, e.g., the value of
proof-assistant symbol (proof-ass), they will produce the wrong result
(symptom: unbound nil-foobar). Running `proof-ready-for-assistant' can
-be used to avoid this and optimise compilation. Byte compiler also
-optimises some conditionals that appear constant, be wary.
+be used to avoid this and optimise compilation (CPC 2017-02-25: this
+sounds fishy: this document seems to assume that compilation is done in
+a separate instance of Emacs, but that's not what happens when with
+package.el. Calling `proof-ready-for-assistant' at compile time will
+tie the rest of that Emacs session to a specific proof assistant).
Finally, the compiler will warn over-eagerly (and ususally spuriously)
about unknown functions. Adding extra requires can get these to go
diff --git a/etc/emacsbugs/visiblity-attempt.el b/etc/emacsbugs/visiblity-attempt.el
index ad88799c..b6486116 100644
--- a/etc/emacsbugs/visiblity-attempt.el
+++ b/etc/emacsbugs/visiblity-attempt.el
@@ -1,6 +1,21 @@
-;;;
-;;; === Test area for invisibility ===
-;;;
+;;; visiblity-attempt.el --- Test area for invisibility
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;;; Commentary:
+;;
+;; Test area for invisibility
+;;
+
+;;; Code:
+
(defvar vis nil)
(overlay-put (make-overlay 18 22) 'invisible 'smaller)
diff --git a/etc/isar/MMMtests.thy b/etc/isar/MMMtests.thy
deleted file mode 100644
index 994a8ee0..00000000
--- a/etc/isar/MMMtests.thy
+++ /dev/null
@@ -1,40 +0,0 @@
-(* Testing samples for MMM *)
-
-header {* This is edited in LaTeX mode *}
-
-theory MMMtests imports Main begin
-
-text {*
- This is a test of MMM support.
- This region is edited in \LaTeX{} mode.
-*}
-
-subsection {* and this one. *}
-
-
-ML {*
- (* Whereas this region is edited in SML mode. For that to work, you
- need to have installed SML mode in your Emacs, otherwise MMM mode
- won't bother. See Stefan Monnier's page at
- http://www.iro.umontreal.ca/~monnier/elisp/. *)
-
- fun foo [] = 0
- | foo (x::xs) = x * foo xs
-*}
-
-ML_val {* (* and this one *) *}
-
-ML_command {* (* and this one *) *}
-
-print_translation {* [] (* and even this one *) *}
-
-text {*
- You can enter the text for a MMM region conveniently
- using the dedicated insertion commands. For example, I inserted
- this region by typing \texttt{C-c \% t} --- see the MMM menu or
- \texttt{C-c \% h} for a list of commands.
-
- Notice that font locking for different modes tends to interact
- badly with mode switches between lines. Best stick to
- separate lines as in these examples.
-*}
diff --git a/etc/lego/lego-site.el b/etc/lego/lego-site.el
index 55098331..1a31f354 100644
--- a/etc/lego/lego-site.el
+++ b/etc/lego/lego-site.el
@@ -1,8 +1,22 @@
-;;; lego-site.el Site-specific Emacs support for LEGO
-;;; Copyright (C) 1998 LFCS Edinburgh
+;;; lego-site.el --- Site-specific Emacs support for LEGO
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;;; Author: Thomas Kleymann <T.Kleymann@ed.ac.uk>
;;; Maintainer: lego@dcs.ed.ac.uk
+;;; Commentary:
+;;
+
+;;; Code:
+
(let ((version (getenv "PROOFGENERAL")))
(cond ((not version) ;default
(setq load-path
@@ -20,4 +34,4 @@
(load-file "/usr/local/share/elisp/ProofGeneral/generic/proof-site.el"))))
- \ No newline at end of file
+
diff --git a/etc/mmm-install b/etc/mmm-install
deleted file mode 100644
index 41042d23..00000000
--- a/etc/mmm-install
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-#
-# Install from mmm-mode into PG by copying relevant files
-# Run from inside mmm-mode distrib
-#
-# $Id$
-#
-NOTICES="AUTHORS COPYING FAQ INSTALL NEWS README TODO"
-DOCS="mmm.texinfo version.texi"
-ELISP=*.el
-MMMDIR=~/PG/mmm
-
-rm -f $MMMDIR/*
-cp -p $NOTICES $DOCS $ELISP $MMMDIR
-
-
-
diff --git a/etc/testsuite/pg-pgip-test.el b/etc/testsuite/pg-pgip-test.el
index 9dbfaad7..968c2289 100644
--- a/etc/testsuite/pg-pgip-test.el
+++ b/etc/testsuite/pg-pgip-test.el
@@ -1,6 +1,18 @@
-;; Tests for pg-pgip.el
+;;; Tests for pg-pgip.el
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;;; Commentary:
;;
-;; $Id$
+
+;;; Code:
(pg-clear-test-suite "pg-pgip")
(pg-set-test-suite "pg-pgip")
@@ -13,4 +25,4 @@
(provide 'pg-pgip-test)
-;; End of `pg-pgip-test.el' \ No newline at end of file
+;; End of `pg-pgip-test.el'
diff --git a/etc/testsuite/pg-test.el b/etc/testsuite/pg-test.el
index b8d236a7..2e3c2c10 100644
--- a/etc/testsuite/pg-test.el
+++ b/etc/testsuite/pg-test.el
@@ -1,8 +1,19 @@
-;; pg-test.el -- Simple test framework for Proof General.
-;;
-;; $Id$
+;;; pg-test.el --- Simple test framework for Proof General.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;;; Commentary:
;;
+;;; Code:
+
(defconst pg-test-buffer "** PG test output **")
(defvar pg-test-total-success-count 0)
diff --git a/generic/pg-assoc.el b/generic/pg-assoc.el
index 6a27cd29..b06b4ec5 100644
--- a/generic/pg-assoc.el
+++ b/generic/pg-assoc.el
@@ -1,12 +1,19 @@
;;; pg-assoc.el --- Functions for associated buffers
-;;
-;; Copyright (C) 1994-2008, 2010 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Yves Bertot, Healfdene Goguen,
;; Thomas Kleymann and Dilip Sequeira
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Defines an empty mode inherited by modes of the associated buffers.
@@ -16,13 +23,12 @@
(require 'proof-utils)
-(eval-and-compile ; defines proof-universal-keys-only-mode-map at compile time
- (define-derived-mode proof-universal-keys-only-mode fundamental-mode
- proof-general-name "Universal keymaps only"
- ;; Doesn't seem to supress TAB, RET
- (suppress-keymap proof-universal-keys-only-mode-map 'all)
- (proof-define-keys proof-universal-keys-only-mode-map
- proof-universal-keys)))
+(define-derived-mode proof-universal-keys-only-mode fundamental-mode
+ proof-general-name "Universal keymaps only"
+ ;; Doesn't seem to supress TAB, RET
+ (suppress-keymap proof-universal-keys-only-mode-map 'all)
+ (proof-define-keys proof-universal-keys-only-mode-map
+ proof-universal-keys))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
@@ -42,7 +48,7 @@ Some may be dead/nil."
;;;###autoload
(defun proof-associated-windows (&optional all-frames)
"Return a list of the associated buffers windows.
-Dead or nil buffers are not represented in the list. Optional
+Dead or nil buffers are not represented in the list. Optional
argument ALL-FRAMES has the same meaning than for
`get-buffer-window'."
(let ((bufs (proof-associated-buffers))
diff --git a/generic/pg-autotest.el b/generic/pg-autotest.el
index 8dfee09d..e7cb19a9 100644
--- a/generic/pg-autotest.el
+++ b/generic/pg-autotest.el
@@ -1,10 +1,18 @@
;;; pg-autotest.el --- Simple testing framework for Proof General
-;;
-;; Copyright (C) 2005, 2009-11 LFCS Edinburgh, David Aspinall.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall
-;;
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
+
;;; Commentary:
;;
;; Support for running a series of scripted UI tests.
@@ -14,8 +22,8 @@
;; -- add macros for defining test suites
;; -- add more precise functional tests to check results
;; -- add negative tests
-;;
-;; $Id$
+
+;;; Code:
(require 'proof-splash)
(setq proof-splash-enable nil) ; prevent splash when testing
@@ -96,7 +104,7 @@
(format-time-string "%D %H:%M")))))
(defun pg-autotest-message (msg &rest args)
- "Give message MSG in log file output and on display."
+ "Give message MSG (formatted using ARGS) in log file output and on display."
(let ((fmsg (if args (apply 'format msg args) msg)))
(proof-with-current-buffer-if-exists
pg-autotest-log
@@ -209,7 +217,7 @@ completely processing the buffer as the last step."
(proof-shell-wait)
(decf jumps))
- ((and (eq random-thing 1)
+ ((and (eq random-thing 1)
(not (proof-locked-region-empty-p)))
(pg-autotest-message
" random jump: retracting whole buffer")
@@ -272,7 +280,7 @@ completely processing the buffer as the last step."
(defun pg-autotest-test-quit-prover ()
"Exit prover process."
(if (buffer-live-p proof-shell-buffer)
- (let ((kill-buffer-query-functions nil))
+ (let ((kill-buffer-query-functions nil))
(kill-buffer proof-shell-buffer))
(error "No proof shell buffer to kill")))
diff --git a/generic/pg-custom.el b/generic/pg-custom.el
index 2edf320e..0c67c7a2 100644
--- a/generic/pg-custom.el
+++ b/generic/pg-custom.el
@@ -1,11 +1,18 @@
;;; pg-custom.el --- Proof General per-prover settings
-;;
-;; Copyright (C) 2008, 2010 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Prover specific settings and user options.
@@ -108,7 +115,7 @@ For example for coq on Windows you might need something like:
:type '(repeat string)
:group 'proof-shell)
-(defpgcustom quit-timeout
+(defpgcustom quit-timeout
(cond
((eq proof-assistant-symbol 'isar) 45)
(t 5))
@@ -194,17 +201,6 @@ Currently this setting is UNIMPLEMENTED, changes have no effect."
:set 'proof-set-value
:group 'proof-user-options)
-(defpgcustom mmm-enable nil
- "*Whether to use MMM Mode in Proof General for this assistant.
-MMM Mode allows multiple modes to be used in the same buffer.
-If you activate this variable, whether or not you really get MMM
-support depends on whether your proof assistant supports it."
- :type 'boolean
- :set 'proof-set-value
- :group 'proof-user-options)
-
-
-
(provide 'pg-custom)
;;; pg-custom.el ends here
diff --git a/generic/pg-goals.el b/generic/pg-goals.el
index 5270ae3d..baab5561 100644
--- a/generic/pg-goals.el
+++ b/generic/pg-goals.el
@@ -1,12 +1,18 @@
-;; pg-goals.el --- Proof General goals buffer mode.
-;;
-;; Copyright (C) 1994-2009 LFCS, University of Edinburgh.
+;;; pg-goals.el --- Proof General goals buffer mode.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Yves Bertot, Healfdene Goguen,
;; Thomas Kleymann and Dilip Sequeira
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
;;; Commentary:
@@ -83,7 +89,7 @@ function tries to do that by calling `pg-response-maybe-erase'.
If KEEPRESPONSE is non-nil, we assume that a response message
corresponding to this goals message has already been displayed
-before this goals message (see `proof-shell-handle-delayed-output'),
+before this goals message (see `proof-shell-handle-delayed-output'),
so the response buffer should not be cleared."
(save-excursion
;; Response buffer may be out of date. It may contain (error)
diff --git a/generic/pg-movie.el b/generic/pg-movie.el
index 03ea5497..9be95972 100644
--- a/generic/pg-movie.el
+++ b/generic/pg-movie.el
@@ -1,11 +1,18 @@
;;; pg-movie.el --- Export a processed script buffer for external replay
-;;
-;; Copyright (C) 2010 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Given a processed proof script, write out an XML file that
@@ -45,15 +52,15 @@
(let* ((tokens (proof-ass unicode-tokens-enable))
(cmd (buffer-substring-no-properties
(span-start span) (span-end span)))
- (tcmd (if tokens
+ (tcmd (if tokens
;; no subscripts of course
(unicode-tokens-encode-str cmd)
cmd))
(helpspan (span-property span 'pg-helpspan))
- (resp (when helpspan
+ (resp (when helpspan
(span-property helpspan 'response)))
(tresp (if resp
- (if tokens
+ (if tokens
(unicode-tokens-encode-str resp)
resp)
""))
@@ -92,7 +99,7 @@ If FORCE, overwrite existing file without asking."
(point-min)
(point-max)))
(movie-file-name
- (concat
+ (concat
(file-name-sans-extension
(buffer-file-name)) ".xml")))
@@ -107,7 +114,7 @@ If FORCE, overwrite existing file without asking."
;;;###autoload
(defun pg-movie-export-from (script &optional force)
"Export the movie file that results from processing SCRIPT."
- (interactive "fFile:
+ (interactive "fFile:
P")
(let ((proof-full-annotation t) ; dynamic
(proof-fast-process-buffer t))
@@ -119,10 +126,10 @@ P")
(defun pg-movie-export-directory (dir extn)
"Export movie files from directory DIR with extension EXTN.
Existing XML files are overwritten."
- (interactive "DDirectory:
+ (interactive "DDirectory:
sFile extension: ")
- (let ((files (directory-files
- dir t
+ (let ((files (directory-files
+ dir t
(concat "\\." extn "$"))))
(dolist (f files)
(pg-movie-export-from f 'force))
diff --git a/generic/pg-pamacs.el b/generic/pg-pamacs.el
index 4958b360..1492e0ca 100644
--- a/generic/pg-pamacs.el
+++ b/generic/pg-pamacs.el
@@ -1,8 +1,16 @@
;;; pg-pamacs.el --- Macros for per-proof assistant configuration
-;;
-;; Copyright (C) 2010, 2011 LFCS Edinburgh, David Aspinall.
-;;
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <da@longitude>
+
;; Keywords: internal
;;; Commentary:
@@ -24,18 +32,17 @@
;;
;; (proof-ass name) or (proof-assistant-name)
;;
-;;
+
+;;; Code:
(require 'proof-site) ; proof-assitant-symbol
(require 'proof-compat) ; pg-custom-undeclare-variable
(require 'proof-autoloads) ; proof-debug
-;;; Code:
-
-(defmacro deflocal (var value &optional docstring)
- "Define a buffer local variable VAR with default value VALUE."
+(defmacro deflocal (var value &optional doc)
+ "Define a buffer local variable VAR with default value VALUE and docstring DOC."
`(progn
- (defvar ,var nil ,docstring)
+ (defvar ,var nil ,doc)
(make-variable-buffer-local (quote ,var))
(setq-default ,var ,value)))
@@ -72,13 +79,13 @@ This macro should only be invoked once a specific prover is engaged."
(symbol-value pasym)))))
(defun proof-defpgcustom-fn (sym args)
- "Define a new customization variable <PA>-sym for current proof assistant.
+ "Define a new customization variable <PA>-SYM for current proof assistant.
Helper for macro `defpgcustom'."
(let ((specific-var (proof-ass-symv sym))
(generic-var (intern (concat "proof-assistant-" (symbol-name sym))))
- (newargs (if (member :group args)
- args
- (append (list :group
+ (newargs (if (member :group args)
+ args
+ (append (list :group
proof-assistant-internals-cusgrp)
args))))
(eval
@@ -109,7 +116,7 @@ but which the user may require different values of across provers.
The function proof-assistant-<SYM> is also defined, which can be used in the
generic portion of Proof General to access the value for the current prover.
-Arguments are as for `defcustom', which see. If a :group argument is
+Arguments ARGS are as for `defcustom', which see. If a :group argument is
not supplied, the setting will be added to the internal settings for the
current prover (named <PA>-config)."
`(proof-defpgcustom-fn (quote ,sym) (quote ,args)))
@@ -155,6 +162,8 @@ Usage: (defpgdefault SYM VALUE)"
;;;###autoload
(defun proof-defpacustom-fn (name val args)
"As for macro `defpacustom' but evaluating arguments."
+ (unless (and proof-assistant (not (string= proof-assistant "")))
+ (error "No proof assistant defined"))
(let (newargs setting evalform type descr)
(while args
(cond
@@ -174,7 +183,7 @@ Usage: (defpgdefault SYM VALUE)"
(setq name (intern (concat (downcase (cadr args)) ":" (symbol-name name))))
(put name 'pggroup (cadr args))
(setq args (cdr args)))
- ((eq (car args) :pgdynamic)
+ ((eq (car args) :pgdynamic)
(put name 'pgdynamic (cadr args))
(setq args (cdr args)))
((eq (car args) :type)
@@ -193,11 +202,11 @@ Usage: (defpgdefault SYM VALUE)"
(eq (eval type) 'integer)
(eq (eval type) 'number)
(eq (eval type) 'string)))
- (error "defpacustom: missing :type keyword or wrong :type value"))
+ (error "Macro defpacustom: missing :type keyword or wrong :type value"))
;; Error in case a defpacustom is repeated.
(when (assq name proof-assistant-settings)
- (error "defpacustom: Proof assistant setting %s re-defined!"
+ (error "Macro defpacustom: Proof assistant setting %s re-defined!"
name))
(eval
@@ -228,8 +237,8 @@ which can be changed by sending commands.
In this case, NAME stands for the internal setting, flag, etc,
for the proof assistant, and a :setting and :type value should be
provided. The :type of NAME should be one of 'integer, 'float,
-'boolean, 'string. Other types are not supported (see
-`proof-menu-entry-for-setting'). They will yield an error when
+'boolean, 'string. Other types are not supported (see
+`proof-menu-entry-for-setting'). They will yield an error when
constructing the proof assistant menu.
The function `proof-assistant-format' is used to format VAL.
@@ -253,14 +262,10 @@ Additional properties in the ARGS prop list may include:
pgdynamic flag If flag is non-nil, this setting is a dynamic one
that is particular to the running instance of the prover.
- Automatically set by preferences configured from PGIP
+ Automatically set by preferences configured from PGIP
askprefs message.
This macro also extends the `proof-assistant-settings' list."
- (eval-when-compile
- (if (boundp 'proof-assistant-symbol)
- ;; declare variable to compiler to prevent warnings
- (eval `(defvar ,(proof-ass-sym name) nil "Dummy for compilation."))))
`(proof-defpacustom-fn (quote ,name) (quote ,val) (quote ,args)))
diff --git a/generic/pg-pbrpm.el b/generic/pg-pbrpm.el
index 6436871f..619a5d6c 100644
--- a/generic/pg-pbrpm.el
+++ b/generic/pg-pbrpm.el
@@ -125,22 +125,22 @@ Matches the region to be returned.")
(set-buffer pg-pbrpm-buffer-menu))
(defun pg-pbrpm-analyse-goal-buffer ()
- "This function analyses the goal buffer and produces a table to find goals and hypothesis.
-If stores, in the variable pg-pbrpm-goal-description, a list with shape
-
- (start-goal end-goal goal-name start-concl hyps ...) with 5 elements for each goal:
-
- start-goal: the position of the first char of the goal
- end-goal: the position of the last char of the goal
- goal-name: the goal name (or number)
- start-concl: the position of first char of the conclusion of the goal
- hyps: the list of hypothesis with the shape:
-
- (start-hyp start-hyp-text end-hyp hyp-name ...) with 4 elemets per hypothesis:
- start-hyp: the position of the first char of the hypothesis (including its name)
- start-hyp-text: the position of the first char of the hypothesis formula (no name)
- end-hyp: the position of the last char of the hypothesis
- hyp-name: then name of the hypothesis."
+ "Analyse the goal buffer and produce a table to find goals and hypothesis.
+
+It stores, in the variable ‘pg-pbrpm-goal-description’, a list with shape
+
+(start-goal end-goal goal-name start-concl hyps ...) with 5 elements per goal:
+ start-goal: the position of the first char of the goal
+ end-goal: the position of the last char of the goal
+ goal-name: the goal name (or number)
+ start-concl: the position of first char of the conclusion of the goal
+ hyps: the list of hypothesis with the shape:
+
+(start-hyp start-hyp-text end-hyp hyp-name ...) with 4 elements per hypothesis:
+ start-hyp: the position of the first char of the hyp (including its name)
+ start-hyp-text: the position of the first char of the hyp formula (no name)
+ end-hyp: the position of the last char of the hypothesis
+ hyp-name: then name of the hypothesis."
(with-current-buffer proof-goals-buffer
(save-excursion
(goto-char 0)
@@ -204,7 +204,9 @@ If stores, in the variable pg-pbrpm-goal-description, a list with shape
(pg-pbrpm-eliminate-id (cons (car l) acc) (cdr l)))))
(defun pg-pbrpm-build-menu (event start end)
-"Build a Proof By Rules pop-up menu according to the state of the proof, the event and a selected region (between the start and end markers).
+ "Build a Proof By Rules pop-up menu.
+Depends on the state of the proof, the event and a selected region
+(between the start and end markers).
The prover command is processed via pg-pbrpm-run-command."
;; first, run the prover specific (name, rule)'s list generator
(let ((click-info (pg-pbrpm-process-click event start end))) ; retrieve click informations
@@ -327,8 +329,9 @@ The prover command is processed via pg-pbrpm-run-command."
(span-property sp1 'goalnum))))))))
(defun pg-pbrpm-run-command (args)
-"Insert COMMAND into the proof queue and then run it.
--- adapted from proof-insert-pbp-command --"
+"Insert command into the proof queue and then run it.
+
+\(adapted from ‘proof-insert-pbp-command’)"
(let* ((command (pop args)) (act (pop args)) (spans (pop args)) (allspan (pop spans)))
(if act (setq command (apply act command spans nil)))
(if allspan (setq command (concat "(* " (span-string allspan) " *)\n" command ".")))
@@ -428,15 +431,15 @@ If no match found, return the empty string."
(return-from 'loop "")))))
(defun pg-pbrpm-translate-position (buffer pos)
- "return pos if buffer is goals-buffer otherwise, return the point position in
-the goal buffer"
+ "If BUFFER is goals-buffer, return POS, otherwise the point in the goal buffer."
(if (eq proof-goals-buffer buffer)
pos
(with-current-buffer proof-goals-buffer
(point))))
(defun pg-pbrpm-process-click (event start end)
-"Returns the list of informations about the click needed to call generate-menu. EVENT is an event."
+ "Return the list of infos about the click needed to call ‘generate-menu’.
+EVENT is an event."
(save-excursion
(save-window-excursion
(mouse-set-point event)
@@ -521,8 +524,8 @@ the goal buffer"
t)
(defun pg-pbrpm-remember-region (event &optional delete)
- "Allow multiple selection as a list of spam stored in ???. The current (standard)
- selection in the same buffer is also stored"
+ "Allow multiple selection as a list of span stored in ???.
+The current (standard) selection in the same buffer is also stored."
(interactive "*e")
(setq pg-pbrpm-remember-region-selected-region nil)
(let ((mouse-track-drag-up-hook 'pg-pbrpm-remember-region-drag-up-hook)
@@ -535,7 +538,8 @@ the goal buffer"
(pg-pbrpm-do-remember-region (car pair) (cdr pair))))))
(defun pg-pbrpm-process-region (span)
-"Returns the list of informations about the the selected region needed to call generate-menu. span is a span covering the selected region"
+"Return the list of infos on the selected region needed to call ‘generate-menu’.
+SPAN is a span covering the selected region."
(let ((start (span-start span))
(end (span-end span))
(buffer (span-buffer span))
diff --git a/generic/pg-pgip.el b/generic/pg-pgip.el
index cd9dac2a..0f427ecb 100644
--- a/generic/pg-pgip.el
+++ b/generic/pg-pgip.el
@@ -1,10 +1,19 @@
-;; pg-pgip.el --- PGIP manipulation for Proof General
-;;
-;; Copyright (C) 2000-2002, 2010 LFCS Edinburgh.
+;;; pg-pgip.el --- PGIP manipulation for Proof General
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
+
+;;; Commentary:
;;
;; STATUS: Experimental
;;
@@ -23,19 +32,15 @@
;; -- support fully native PGIP mode
;;
-
-;;; Commentary:
-;;
-
+;;; Code:
(require 'cl) ; incf
(require 'pg-xml) ;
(declare-function pg-response-warning "pg-response")
(declare-function pg-response-message "pg-response")
-(declare-function proof-segment-up-to "proof-script")
+(declare-function proof-segment-up-to "proof-script")
(declare-function proof-insert-pbp-command "proof-script")
-;;; Code:
(defalias 'pg-pgip-debug 'proof-debug)
(defalias 'pg-pgip-error 'error)
(defalias 'pg-pgip-warning 'pg-internal-warning)
@@ -106,7 +111,7 @@ Return a symbol representing the PGIP command processed, or nil."
(let ((ppfn (cdr-safe (assoc cmdname pg-pgip-post-process-functions))))
(if (fboundp ppfn)
(progn
- (pg-pgip-debug
+ (pg-pgip-debug
"Post-processing for PGIP message type `%s' with function `%s'" cmdname ppfn)
(funcall ppfn))
(pg-pgip-debug "[No post-processing defined for PGIP message type `%s']" cmdname))))
diff --git a/generic/pg-response.el b/generic/pg-response.el
index 893d1f6f..43e0e279 100644
--- a/generic/pg-response.el
+++ b/generic/pg-response.el
@@ -1,12 +1,19 @@
-;; pg-response.el --- Proof General response buffer mode.
-;;
-;; Copyright (C) 1994-2010 LFCS Edinburgh.
+;;; pg-response.el --- Proof General response buffer mode.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Healfdene Goguen,
;; Thomas Kleymann and Dilip Sequeira
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; pg-response.el,v 12.10 2012/09/25 09:44:18 pier Exp
-;;
+
;;; Commentary:
;;
;; This mode is used for the response buffer proper, and
@@ -85,8 +92,7 @@
;;
(defvar pg-response-special-display-regexp nil
- "Regexp for `special-display-regexps' (now display-buffer-alist)
-for multiple frame use.
+ "Regexp for ‘display-buffer-alist’ for multiple frame use.
Internal variable, setting this will have no effect!")
(defconst proof-multiframe-parameters
@@ -99,33 +105,21 @@ Internal variable, setting this will have no effect!")
"List of GNU Emacs frame parameters for secondary frames.")
(defun proof-multiple-frames-enable ()
- ; special-display-regexps is obsolete, let us let it for a while and
- ; remove it later
- (unless (eval-when-compile (boundp 'display-buffer-alist))
- (let ((spdres (cons
- pg-response-special-display-regexp
- proof-multiframe-parameters)))
- (if proof-multiple-frames-enable
- (add-to-list 'special-display-regexps spdres)
- (setq special-display-regexps
- (delete spdres special-display-regexps)))))
- ; This is the current way to do it
- (when (eval-when-compile (boundp 'display-buffer-alist))
- (let
- ((display-buffer-entry
- (cons pg-response-special-display-regexp
- `((display-buffer-reuse-window display-buffer-pop-up-frame) .
- ((reusable-frames . t)
- (pop-up-frame-parameters
- .
- ,proof-multiframe-parameters))))))
- (if proof-multiple-frames-enable
- (add-to-list
- 'display-buffer-alist
- display-buffer-entry)
- ;(add-to-list 'display-buffer-alist (proof-buffer-dislay))
- (setq display-buffer-alist
- (delete display-buffer-entry display-buffer-alist)))))
+ (let
+ ((display-buffer-entry
+ (cons pg-response-special-display-regexp
+ `((display-buffer-reuse-window display-buffer-pop-up-frame) .
+ ((reusable-frames . t)
+ (pop-up-frame-parameters
+ .
+ ,proof-multiframe-parameters))))))
+ (if proof-multiple-frames-enable
+ (add-to-list
+ 'display-buffer-alist
+ display-buffer-entry)
+ ;(add-to-list 'display-buffer-alist (proof-buffer-dislay))
+ (setq display-buffer-alist
+ (delete display-buffer-entry display-buffer-alist))))
(proof-layout-windows))
(defun proof-three-window-enable ()
@@ -134,8 +128,10 @@ Internal variable, setting this will have no effect!")
(defun proof-guess-3win-display-policy (&optional policy)
"Return the 3 windows mode layout policy from user choice POLICY.
-If POLIY is smart then guess the good policy from the current
-frame geometry, otherwise follow POLICY."
+If POLICY is ’smart then guess the good policy from the current
+frame geometry, otherwise follow POLICY.
+
+See ‘proof-layout-windows’ for more details about POLICY."
(if (eq policy 'smart)
(cond
((>= (frame-width) (* 1.5 split-width-threshold)) 'horizontal)
@@ -144,9 +140,10 @@ frame geometry, otherwise follow POLICY."
policy))
(defun proof-select-three-b (b1 b2 b3 &optional policy)
- "Put the given three buffers into three windows.
-Following POLICY, which can be one of 'smart, 'horizontal,
-'vertical or 'hybrid."
+ "Put the three buffers B1, B2, and B3 into three windows.
+Following POLICY, which can be 'smart, 'horizontal, 'vertical, or 'hybrid.
+
+See ‘proof-layout-windows’ for more details about POLICY."
(interactive "bBuffer1:\nbBuffer2:\nbBuffer3:")
(delete-other-windows)
(switch-to-buffer b1)
@@ -186,7 +183,8 @@ Following POLICY, which can be one of 'smart, 'horizontal,
(defun proof-display-three-b (&optional policy)
- "Layout three buffers in a single frame. Only do this if buffers exist."
+ "Layout three buffers in a single frame. Only do this if buffers exist.
+In this case, call ‘proof-select-three-b’ with argument POLICY."
(interactive)
(when (and (buffer-live-p proof-goals-buffer)
(buffer-live-p proof-response-buffer))
@@ -225,9 +223,9 @@ For multiple frame mode, this function obeys the setting of
For single frame mode:
- In two panes mode, this uses a canonical layout made by splitting
-Emacs windows in equal proportions. The splitting is vertical if
-emacs width is smaller than `split-width-threshold' and
-horizontal otherwise. You can then adjust the proportions by
+Emacs windows in equal proportions. The splitting is vertical if
+Emacs width is smaller than `split-width-threshold' and
+horizontal otherwise. You can then adjust the proportions by
dragging the separating bars.
- In three pane mode, there are three display modes, depending
@@ -243,7 +241,7 @@ dragging the separating bars.
response).
By default, the display mode is automatically chosen by
- considering the current emacs frame width: if it is smaller
+ considering the current Emacs frame width: if it is smaller
than `split-width-threshold' then vertical mode is chosen,
otherwise if it is smaller than 1.5 * `split-width-threshold'
then hybrid mode is chosen, finally if the frame is larger than
@@ -254,7 +252,7 @@ dragging the separating bars.
If you want to force one of the layouts, you can set variable
`proof-three-window-mode-policy' to 'vertical, 'horizontal or
- 'hybrid. The default value is 'smart which sets the automatic
+ 'hybrid. The default value is 'smart which sets the automatic
behaviour described above."
(interactive)
(cond
@@ -521,9 +519,7 @@ and start at the first error."
;; Pop up a window.
(display-buffer
proof-response-buffer
- (and (eval-when-compile
- (boundp 'display-buffer-alist))
- proof-multiple-frames-enable
+ (and proof-multiple-frames-enable
(cons nil proof-multiframe-parameters))))))
;; Make sure the response buffer stays where it is,
;; and make sure source buffer is visible
diff --git a/generic/pg-user.el b/generic/pg-user.el
index 513b477b..126901cb 100644
--- a/generic/pg-user.el
+++ b/generic/pg-user.el
@@ -1,13 +1,18 @@
;;; pg-user.el --- User level commands for Proof General
-;;
-;; Copyright (C) 2000-2010 LFCS Edinburgh.
-;; Copyright (c) 2010 Erik Martin-Dorel, ENS de Lyon (pg-protected-undo).
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
-;;
+
;;; Commentary:
;;
;; This file defines some user-level commands. Most of them
@@ -26,8 +31,8 @@
(require 'completion)) ; Loaded dynamically at runtime.
(defvar which-func-modes) ; Defined by which-func.
-(declare-function proof-segment-up-to "proof-script")
-(declare-function proof-interrupt-process "proof-shell")
+(declare-function proof-segment-up-to "proof-script")
+(declare-function proof-interrupt-process "proof-shell")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
@@ -41,12 +46,12 @@
;;;###autoload
(defun proof-script-new-command-advance ()
"Move point to a nice position for a new command, possibly inserting spaces.
-Assumes that point is at the end of a command.
+Assumes that point is at the end of a command.
No effect if `proof-next-command-insert-space' is nil."
(interactive)
(when proof-next-command-insert-space
(let (sps)
- (if (and (proof-next-command-new-line)
+ (if (and (proof-next-command-new-line)
(setq sps (skip-chars-forward " \t"))
;; don't break existing lines
(eolp))
@@ -88,7 +93,7 @@ Assumes script buffer is current."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; Further movement commands
+;; Further movement commands
;;
(defun proof-goto-command-start ()
@@ -130,7 +135,8 @@ Assumes script buffer is current."
(backward-char))))))))
(defun proof-forward-command (&optional num)
- "Move forward to the start of the next proof region."
+ "Move forward to the start of the next proof region.
+If called interactively, NUM is given by the prefix argument."
(interactive "p")
(skip-chars-forward " \t\n")
(let* ((span (or (span-at (point) 'type)
@@ -382,7 +388,7 @@ a proof command."
;;;###autoload
(defmacro proof-define-assistant-command (fn doc cmdvar &optional body)
- "Define FN (docstring DOC) to send BODY to prover, based on CMDVAR.
+ "Define FN (docstring DOC): check if CMDVAR is set, then send BODY to prover.
BODY defaults to CMDVAR, a variable."
`(defun ,fn ()
,(concat doc
@@ -395,7 +401,8 @@ BODY defaults to CMDVAR, a variable."
;;;###autoload
(defmacro proof-define-assistant-command-witharg (fn doc cmdvar prompt &rest body)
- "Define command FN to prompt for string CMDVAR to proof assistant.
+ "Define FN (arg) with DOC: check CMDVAR is set, PROMPT a string and eval BODY.
+The BODY can contain occurrences of arg.
CMDVAR is a variable holding a function or string. Automatically has history."
`(progn
(defvar ,(intern (concat (symbol-name fn) "-history")) nil
@@ -477,14 +484,14 @@ This is intended as a value for `proof-activate-scripting-hook'"
"Write a goal command in the script, prompting for the goal."
proof-goal-command
"Goal" ; Goals always start at a new line
- (let ((proof-next-command-on-new-line t))
+ (let ((proof-next-command-on-new-line t))
(proof-issue-new-command arg)))
(proof-define-assistant-command-witharg proof-issue-save
"Write a save/qed command in the script, prompting for the theorem name."
proof-save-command
"Save as" ; Saves always start at a new line
- (let ((proof-next-command-on-new-line t))
+ (let ((proof-next-command-on-new-line t))
(proof-issue-new-command arg)))
@@ -519,13 +526,13 @@ It can also be used as a minor mode function: with ARG, turn on iff ARG>0"
(defun proof-electric-terminator (&optional count)
"Insert terminator char, maybe sending the command to the assistant.
If we are inside a comment or string, insert the terminator.
-Otherwise, if the variable `proof-electric-terminator-enable'
+Otherwise, if the variable `proof-electric-terminator-enable'
is non-nil, the command will be sent to the assistant.
-To side-step the electric action and possibly insert multiple
-characters, use a numeric prefix arg, like M-3 <terminator>."
+To side-step the electric action and possibly insert multiple characters,
+pass a non-nil COUNT arg, e.g. a numeric prefix such as M-3 <terminator>."
(interactive "P")
- (if (and
+ (if (and
(not count)
proof-electric-terminator-enable
(not (proof-inside-comment (point)))
@@ -563,9 +570,9 @@ last use time, to discourage saving these into the users database."
;; NB: completion table is expected to be set when proof-script
;; is loaded! Call `proof-script-add-completions' to update.
-(unless noninteractive ; during compilation
+(unless (bound-and-true-p byte-compile-current-file)
(eval-after-load "completion"
- '(proof-add-completions)))
+ '(proof-add-completions)))
(defun proof-script-complete (&optional arg)
"Like `complete' but case-fold-search set to proof-case-fold-search."
@@ -702,6 +709,16 @@ If NUM is negative, move upwards. Return new span."
(interactive "p")
(pg-move-region-down (- num)))
+;; No key-binding is defined for these two functions:
+(defun pg-show-all-proofs ()
+ "Display all completed proofs in the buffer."
+ (interactive)
+ (pg-show-all-portions 'proof))
+
+(defun pg-hide-all-proofs ()
+ "Hide all completed proofs in the buffer."
+ (interactive)
+ (pg-show-all-portions 'proof 'hide))
@@ -734,7 +751,7 @@ If NUM is negative, move upwards. Return new span."
((idiom (and span (span-property span 'idiom)))
(id (and span (span-property span 'id))))
(popup-menu (pg-create-in-span-context-menu
- span idiom
+ span idiom
(if id (symbol-name id))))))))
(defun pg-toggle-visibility ()
@@ -751,7 +768,7 @@ If NUM is negative, move upwards. Return new span."
(append
(list (pg-span-name span))
(list (vector
- "Show/hide"
+ "Show/hide"
(if idiom (list 'pg-toggle-element-visibility (quote idiom) name))
(not (not idiom))))
(list (vector
@@ -797,7 +814,7 @@ If NUM is negative, move upwards. Return new span."
(pg-hint
(format
"\\[proof-prf] for goals;%s \\[proof-layout-windows] refreshes"
- (if (or proof-three-window-enable
+ (if (or proof-three-window-enable
proof-multiple-frames-enable)
""
(format " \\[proof-display-some-buffers] rotates output%s;"
@@ -941,7 +958,7 @@ If CALLBACK is set, we invoke that when the command completes."
(imenu-add-to-menubar "Index")
(progn
(when (listp which-func-modes)
- (setq which-func-modes
+ (setq which-func-modes
(remove proof-mode-for-script which-func-modes)))
(let ((oldkeymap (keymap-parent (current-local-map))))
(if ;; sanity checks in case someone else set local keymap
@@ -979,7 +996,8 @@ If CALLBACK is set, we invoke that when the command completes."
"Stored incomplete input: string between point and locked.")
(defun pg-previous-input (arg)
- "Cycle backwards through input history, saving input."
+ "Cycle backwards through input history, saving input.
+If called interactively, ARG is given by the prefix argument."
(interactive "*p")
(if (and pg-input-ring-index
(or ; leaving the "end" of the ring
@@ -993,7 +1011,8 @@ If CALLBACK is set, we invoke that when the command completes."
(pg-previous-matching-input "." arg)))
(defun pg-next-input (arg)
- "Cycle forwards through input history."
+ "Cycle forwards through input history.
+If called interactively, ARG is given by the prefix argument."
(interactive "*p")
(pg-previous-input (- arg)))
@@ -1183,7 +1202,7 @@ removed if it matches the last item in the ring."
;;;###autoload
-(defun pg-clear-input-ring ()
+(defun pg-clear-input-ring ()
(setq pg-input-ring nil))
@@ -1206,6 +1225,10 @@ removed if it matches the last item in the ring."
(defun pg-protected-undo (&optional arg)
"As `undo' but avoids breaking the locked region.
+A numeric ARG serves as a repeat count.
+If called interactively, ARG is given by the prefix argument.
+If ARG is omitted, nil, or not numeric, it takes the value 1.
+
It performs each of the desired undos checking that these operations will
not affect the locked region, obeying `proof-strict-read-only' if required.
If strict read only behaviour is enforced, the user is queried whether to
@@ -1253,7 +1276,7 @@ behavior is expected."
(> (proof-queue-or-locked-end) beg)
proof-strict-read-only ; edit freely doesn't retract
(not (and ; neither does edit in comments
- (proof-inside-comment beg)
+ (proof-inside-comment beg)
(proof-inside-comment end))))
(if (or (eq proof-strict-read-only 'retract)
(y-or-n-p "Next undo will modify read-only region, retract? "))
@@ -1261,12 +1284,12 @@ behavior is expected."
(when (eq last-command 'undo) (setq this-command 'undo))
;; now we can stop the function without breaking possible undo chains
(error
- "Cannot undo without retracting to the appropriate position.")))
+ "Cannot undo without retracting to the appropriate position")))
(undo arg))))
(defun next-undo-elt (arg)
- "Returns the undo element that will be processed on next undo/redo,
-assuming the undo-in-region behavior will apply if ARG is non-nil."
+ "Return the undo element that will be processed on next undo/redo.
+Assume the undo-in-region behavior will apply if ARG is non-nil."
(let ((undo-list (if arg ; handle "undo in region"
(undo-make-selective-list
(region-beginning) (region-end)) ; can be '(nil)
@@ -1303,11 +1326,11 @@ assuming the undo-in-region behavior will apply if ARG is non-nil."
;;;###autoload
(defun proof-autosend-enable (&optional nomsg)
"Enable or disable autosend behaviour."
- (if proof-autosend-timer
+ (if proof-autosend-timer
(cancel-timer proof-autosend-timer))
(when proof-autosend-enable
(setq proof-autosend-timer
- (run-with-idle-timer proof-autosend-delay
+ (run-with-idle-timer proof-autosend-delay
t 'proof-autosend-loop))
(setq proof-autosend-modified-tick nil)
(unless nomsg (message "Automatic sending turned on.")))
@@ -1340,10 +1363,10 @@ assuming the undo-in-region behavior will apply if ARG is non-nil."
(progn
(save-excursion
(goto-char (point-max))
- (proof-assert-until-point
- (if proof-multiple-frames-enable
+ (proof-assert-until-point
+ (if proof-multiple-frames-enable
'no-minibuffer-messages ; nb: not API
- '(no-response-display
+ '(no-response-display
no-error-display
no-goals-display))))
(proof-shell-wait t) ; interruptible
@@ -1366,9 +1389,9 @@ assuming the undo-in-region behavior will apply if ARG is non-nil."
;(skip-chars-forward " \t\n")
(message "Trying next commands in prover...")
(proof-assert-until-point
- (if proof-multiple-frames-enable
+ (if proof-multiple-frames-enable
'no-minibuffer-messages ; nb: not API
- '(no-response-display
+ '(no-response-display
no-error-display
no-goals-display))))
(let ((proof-sticky-errors t))
@@ -1386,16 +1409,16 @@ assuming the undo-in-region behavior will apply if ARG is non-nil."
(unless (eq qol (proof-queue-or-locked-end)) ; no progress
(save-excursion
(goto-char qol)
- (proof-retract-until-point
+ (proof-retract-until-point
(lambda (beg end)
- (span-make-self-removing-span
+ (span-make-self-removing-span
(save-excursion
(goto-char beg)
(skip-chars-forward " \t\n")
- (point))
+ (point))
end
'face 'highlight))
- '(no-response-display
+ '(no-response-display
no-error-display
no-goals-display)))))))
diff --git a/generic/pg-vars.el b/generic/pg-vars.el
index 8d93a60b..d1e5dfa9 100644
--- a/generic/pg-vars.el
+++ b/generic/pg-vars.el
@@ -1,11 +1,18 @@
;;; pg-vars.el --- Proof General global variables
-;;
-;; Copyright (C) 2008, 2010 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Global variables used in several files.
@@ -20,16 +27,16 @@
;;;
(defvar proof-assistant-cusgrp nil
- "Symbol for the customization group of the user options for the proof assistant.
+ "Symbol for the customization group of user options for the proof assistant.
Do not change this variable! It is set automatically by the mode
stub defined in proof-site, from the name given in
-proof-assistant-table.")
+‘proof-assistant-table’.")
(defvar proof-assistant-internals-cusgrp nil
- "Symbol for the customization group of the PG internal settings proof assistant.
+ "Symbol for the customization group of PG internal settings.
Do not change this variable! It is set automatically by the mode
stub defined in proof-site, from the name given in
-proof-assistant-table.")
+‘proof-assistant-table’.")
(defvar proof-assistant ""
"Name of the proof assistant Proof General is using.
@@ -210,7 +217,7 @@ the form of the menu entry for the setting (this is an Emacs widget type)
and the DESCR description string is used as a help tooltip in the settings menu.
As TYPE's only the simple types boolean, integer, number and
-string are supported (see `proof-menu-entry-for-setting'). Other
+string are supported (see `proof-menu-entry-for-setting'). Other
types will yield an error when constructing the proof assistant
menu from this list.
diff --git a/generic/pg-xml.el b/generic/pg-xml.el
index 79d15b55..18285572 100644
--- a/generic/pg-xml.el
+++ b/generic/pg-xml.el
@@ -1,14 +1,25 @@
-;; pg-xml.el --- XML functions for Proof General
-;;
-;; Copyright (C) 2000-2002 LFCS Edinburgh.
+;;; pg-xml.el --- XML functions for Proof General
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
+
+;;; Commentary:
;;
;; XML functions for Proof General.
;;
+;;; Code:
+
(require 'cl)
(require 'xml)
@@ -50,6 +61,7 @@
(defun pg-xml-parse-buffer (&optional buffer nomsg start end)
"Parse an XML documment in BUFFER (defaulting to current buffer).
+Display progress message unless NOMSG is non-nil.
Parsing according to `xml-parse-file' of xml.el.
Optional START and END bound the parse."
(unless nomsg
@@ -72,7 +84,7 @@ Optional START and END bound the parse."
(or val
(if optional
defaultval
- (pg-xml-error "pg-xml-get-attr: Didn't find required %s attribute in %s element"
+ (pg-xml-error "Function pg-xml-get-attr: Didn't find required %s attribute in %s element"
attribute (xml-node-name node))))))
(defun pg-xml-child-elts (node)
@@ -89,7 +101,7 @@ Optional START and END bound the parse."
(xml-node-name node)))))
(defun pg-xml-get-child (child node)
- "Return single element CHILD of node, give error if more than one."
+ "Return single element CHILD of NODE, give error if more than one."
(let ((children (xml-get-children node child)))
(if (> (length children) 1)
(progn
@@ -130,8 +142,9 @@ Optional START and END bound the parse."
;; based on xml-debug-print from xml.el
(defun pg-xml-output-internal (xml indent-string outputfn)
- "Outputs the XML tree using OUTPUTFN, which should accept a list of args.
-Output with indentation INDENT-STRING (or none if nil)."
+ "Output the XML tree.
+Use indentation INDENT-STRING (or none if nil).
+Cal OUTPUTFN, which should accept a list of args."
(let ((tree xml)
attlist)
(funcall outputfn (or indent-string "") "<" (symbol-name (xml-node-name tree)))
@@ -156,7 +169,7 @@ Output with indentation INDENT-STRING (or none if nil)."
(pg-xml-output-internal node (if indent-string (concat indent-string " ")) outputfn))
((stringp node) (funcall outputfn node))
(t
- (error "pg-xml-output-internal: Invalid XML tree"))))
+ (error "Function pg-xml-output-internal: Invalid XML tree"))))
(funcall outputfn (if indent-string (concat "\n" indent-string) "")
"</" (symbol-name (xml-node-name xml)) ">"))
diff --git a/generic/proof-autoloads.el b/generic/proof-autoloads.el
index 90430f73..67904203 100644
--- a/generic/proof-autoloads.el
+++ b/generic/proof-autoloads.el
@@ -1,5 +1,17 @@
;;; proof-autoloads.el --- automatically extracted autoloads
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;;; Commentary:
;;
+
;;; Code:
(if (featurep 'proof-autoloads) (error "Already loaded"))
@@ -7,7 +19,7 @@
(eval-when-compile
(require 'cl))
-(eval-when (compile)
+(eval-when-compile
(require 'pg-vars)
(require 'proof-config)
(require 'scomint))
@@ -16,11 +28,11 @@
(provide 'proof-autoloads)
-;;;### (autoloads (bufhist-exit bufhist-init bufhist-mode) "bufhist"
-;;;;;; "../lib/bufhist.el" (20118 50210))
+;;;### (autoloads nil "../lib/bufhist" "../lib/bufhist.el" (23421
+;;;;;; 61555 968003 660000))
;;; Generated autoloads from ../lib/bufhist.el
-(autoload 'bufhist-mode "bufhist" "\
+(autoload 'bufhist-mode "../lib/bufhist" "\
Minor mode retaining an in-memory history of the buffer contents.
Commands:\\<bufhist-minor-mode-map>
@@ -33,32 +45,31 @@ Commands:\\<bufhist-minor-mode-map>
\(fn &optional ARG)" t nil)
-(autoload 'bufhist-init "bufhist" "\
+(autoload 'bufhist-init "../lib/bufhist" "\
Initialise a ring history for the current buffer.
The history will be read-only unless READWRITE is non-nil.
For read-only histories, edits to the buffer switch to the latest version.
-The size defaults to `bufhist-ring-size'.
+If RINGSIZE is omitted or nil, the size defaults to ‘bufhist-ring-size’.
\(fn &optional READWRITE RINGSIZE)" t nil)
-(autoload 'bufhist-exit "bufhist" "\
+(autoload 'bufhist-exit "../lib/bufhist" "\
Stop keeping ring history for current buffer.
\(fn)" t nil)
;;;***
-;;;### (autoloads (holes-insert-and-expand holes-abbrev-complete
-;;;;;; holes-mode holes-set-make-active-hole) "holes" "../lib/holes.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "../lib/holes" "../lib/holes.el" (23421 61555
+;;;;;; 968003 660000))
;;; Generated autoloads from ../lib/holes.el
-(autoload 'holes-set-make-active-hole "holes" "\
+(autoload 'holes-set-make-active-hole "../lib/holes" "\
Make a new hole between START and END or at point, and make it active.
\(fn &optional START END)" t nil)
-(autoload 'holes-mode "holes" "\
+(autoload 'holes-mode "../lib/holes" "\
Toggle Holes minor mode.
With arg, turn Outline minor mode on if arg is positive, off otherwise.
@@ -148,7 +159,7 @@ undoing on holes cannot make holes re-appear.
\(fn &optional ARG)" t nil)
-(autoload 'holes-abbrev-complete "holes" "\
+(autoload 'holes-abbrev-complete "../lib/holes" "\
Complete abbrev by putting holes and indenting.
Moves point at beginning of expanded text. Put this function as
call-back for your abbrevs, and just expanded \"#\" and \"@{..}\" will
@@ -156,18 +167,18 @@ become holes.
\(fn)" nil nil)
-(autoload 'holes-insert-and-expand "holes" "\
+(autoload 'holes-insert-and-expand "../lib/holes" "\
Insert S, expand it and replace #s and @{]s by holes.
\(fn S)" nil nil)
;;;***
-;;;### (autoloads (maths-menu-mode) "maths-menu" "../lib/maths-menu.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "../lib/maths-menu" "../lib/maths-menu.el"
+;;;;;; (23421 61555 968003 660000))
;;; Generated autoloads from ../lib/maths-menu.el
-(autoload 'maths-menu-mode "maths-menu" "\
+(autoload 'maths-menu-mode "../lib/maths-menu" "\
Install a menu for entering mathematical characters.
Uses window system menus only when they can display multilingual text.
Otherwise the menu-bar item activates the text-mode menu system.
@@ -177,8 +188,8 @@ This mode is only useful with a font which can display the maths repertoire.
;;;***
-;;;### (autoloads (proof-associated-windows proof-associated-buffers)
-;;;;;; "pg-assoc" "pg-assoc.el" (20118 50210))
+;;;### (autoloads nil "pg-assoc" "pg-assoc.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from pg-assoc.el
(autoload 'proof-associated-buffers "pg-assoc" "\
@@ -189,25 +200,32 @@ Some may be dead/nil.
(autoload 'proof-associated-windows "pg-assoc" "\
Return a list of the associated buffers windows.
-Dead or nil buffers are not represented in the list.
+Dead or nil buffers are not represented in the list. Optional
+argument ALL-FRAMES has the same meaning than for
+`get-buffer-window'.
+
+\(fn &optional ALL-FRAMES)" nil nil)
+
+(autoload 'proof-associated-frames "pg-assoc" "\
+Return the list of frames displaying at least one associated buffer.
\(fn)" nil nil)
;;;***
-;;;### (autoloads (profile-pg) "pg-dev" "../lib/pg-dev.el" (20118
-;;;;;; 50210))
+;;;### (autoloads nil "../lib/pg-dev" "../lib/pg-dev.el" (23421 61555
+;;;;;; 968003 660000))
;;; Generated autoloads from ../lib/pg-dev.el
-(autoload 'profile-pg "pg-dev" "\
-Configure Proof General for profiling. Use M-x elp-results to see results.
+(autoload 'profile-pg "../lib/pg-dev" "\
+Configure Proof General for profiling. Use \\[elp-results] to see results.
\(fn)" t nil)
;;;***
-;;;### (autoloads (proof-goals-config-done) "pg-goals" "pg-goals.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "pg-goals" "pg-goals.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from pg-goals.el
(autoload 'proof-goals-config-done "pg-goals" "\
@@ -217,8 +235,8 @@ Initialise the goals buffer after the child has been configured.
;;;***
-;;;### (autoloads (pg-movie-export-directory pg-movie-export-from
-;;;;;; pg-movie-export) "pg-movie" "pg-movie.el" (20123 64158))
+;;;### (autoloads nil "pg-movie" "pg-movie.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from pg-movie.el
(autoload 'pg-movie-export "pg-movie" "\
@@ -240,8 +258,8 @@ Existing XML files are overwritten.
;;;***
-;;;### (autoloads (defpacustom proof-defpacustom-fn) "pg-pamacs"
-;;;;;; "pg-pamacs.el" (20118 50210))
+;;;### (autoloads nil "pg-pamacs" "pg-pamacs.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from pg-pamacs.el
(autoload 'proof-defpacustom-fn "pg-pamacs" "\
@@ -257,7 +275,9 @@ which can be changed by sending commands.
In this case, NAME stands for the internal setting, flag, etc,
for the proof assistant, and a :setting and :type value should be
provided. The :type of NAME should be one of 'integer, 'float,
-'boolean, 'string.
+'boolean, 'string. Other types are not supported (see
+`proof-menu-entry-for-setting'). They will yield an error when
+constructing the proof assistant menu.
The function `proof-assistant-format' is used to format VAL.
@@ -280,17 +300,17 @@ Additional properties in the ARGS prop list may include:
pgdynamic flag If flag is non-nil, this setting is a dynamic one
that is particular to the running instance of the prover.
- Automatically set by preferences configured from PGIP
+ Automatically set by preferences configured from PGIP
askprefs message.
This macro also extends the `proof-assistant-settings' list.
-\(fn NAME VAL &rest ARGS)" nil (quote macro))
+\(fn NAME VAL &rest ARGS)" nil t)
;;;***
-;;;### (autoloads (pg-pgip-askprefs pg-pgip-maybe-askpgip pg-pgip-process-packet)
-;;;;;; "pg-pgip" "pg-pgip.el" (20123 64607))
+;;;### (autoloads nil "pg-pgip" "pg-pgip.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from pg-pgip.el
(autoload 'pg-pgip-process-packet "pg-pgip" "\
@@ -311,10 +331,8 @@ Send an <askprefs> message to the prover.
;;;***
-;;;### (autoloads (pg-response-has-error-location proof-next-error
-;;;;;; pg-response-message pg-response-display-with-face pg-response-maybe-erase
-;;;;;; proof-response-config-done proof-response-mode) "pg-response"
-;;;;;; "pg-response.el" (20118 50210))
+;;;### (autoloads nil "pg-response" "pg-response.el" (23421 61555
+;;;;;; 964003 698000))
;;; Generated autoloads from pg-response.el
(autoload 'proof-response-mode "pg-response" "\
@@ -328,18 +346,31 @@ Complete initialisation of a response-mode derived buffer.
\(fn)" nil nil)
(autoload 'pg-response-maybe-erase "pg-response" "\
-Erase the response buffer according to `pg-response-erase-flag'.
+Erase the response buffer, according to confusing flag combinations.
+
+Mainly, we look at `pg-response-erase-flag' and clear the
+response buffer if this is non-nil, but NOT the special
+symbol 'invisible.
+
ERASE-NEXT-TIME is the new value for the flag.
-If CLEAN-WINDOWS is set, use `proof-clean-buffer' to do the erasing.
-If FORCE, override `pg-response-erase-flag'.
-If the user option `proof-tidy-response' is nil, then
-the buffer is only cleared when FORCE is set.
+FORCE overrides the flag to force cleaning.
+
+KEEP overrides the flag to prevent cleaning.
+
+FORCE takes precedent over KEEP.
+
+If CLEAN-WINDOWS is set, use `proof-clean-buffer' to do the erasing,
+otherwise we use `bufhist-checkpoint-and-erase' to record an
+undo history entry for the current buffer contents.
+
+If the user option `proof-tidy-response' is nil, the buffer
+will never be cleared unless FORCE is set.
No effect if there is no response buffer currently.
Returns non-nil if response buffer was cleared.
-\(fn &optional ERASE-NEXT-TIME CLEAN-WINDOWS FORCE)" nil nil)
+\(fn &optional ERASE-NEXT-TIME CLEAN-WINDOWS FORCE KEEP)" nil nil)
(autoload 'pg-response-display-with-face "pg-response" "\
Display STR with FACE in response buffer.
@@ -370,20 +401,14 @@ See `pg-next-error-regexp'.
;;;***
-;;;### (autoloads (proof-autosend-enable pg-clear-input-ring pg-remove-from-input-history
-;;;;;; pg-add-to-input-history pg-next-matching-input-from-input
-;;;;;; pg-previous-matching-input-from-input proof-imenu-enable
-;;;;;; pg-identifier-near-point-query pg-hint pg-next-error-hint
-;;;;;; pg-processing-complete-hint pg-jump-to-end-hint pg-response-buffers-hint
-;;;;;; pg-slow-fontify-tracing-hint proof-electric-terminator-enable
-;;;;;; proof-define-assistant-command-witharg proof-define-assistant-command
-;;;;;; proof-process-buffer proof-goto-point proof-script-new-command-advance)
-;;;;;; "pg-user" "pg-user.el" (20123 64158))
+;;;### (autoloads nil "pg-user" "pg-user.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from pg-user.el
(autoload 'proof-script-new-command-advance "pg-user" "\
-Move point to a nice position for a new command.
+Move point to a nice position for a new command, possibly inserting spaces.
Assumes that point is at the end of a command.
+No effect if `proof-next-command-insert-space' is nil.
\(fn)" t nil)
@@ -400,35 +425,37 @@ Process the current (or script) buffer, and maybe move point to the end.
\(fn)" t nil)
(autoload 'proof-define-assistant-command "pg-user" "\
-Define FN (docstring DOC) to send BODY to prover, based on CMDVAR.
+Define FN (docstring DOC): check if CMDVAR is set, then send BODY to prover.
BODY defaults to CMDVAR, a variable.
-\(fn FN DOC CMDVAR &optional BODY)" nil (quote macro))
+\(fn FN DOC CMDVAR &optional BODY)" nil t)
(autoload 'proof-define-assistant-command-witharg "pg-user" "\
-Define command FN to prompt for string CMDVAR to proof assistant.
+Define FN (arg) with DOC: check CMDVAR is set, PROMPT a string and eval BODY.
+The BODY can contain occurrences of arg.
CMDVAR is a variable holding a function or string. Automatically has history.
-\(fn FN DOC CMDVAR PROMPT &rest BODY)" nil (quote macro))
+\(fn FN DOC CMDVAR PROMPT &rest BODY)" nil t)
(autoload 'proof-electric-terminator-enable "pg-user" "\
Ensure modeline update to display new value for electric terminator.
This a function is called by the custom-set property 'proof-set-value.
+It can also be used as a minor mode function: with ARG, turn on iff ARG>0
-\(fn)" nil nil)
+\(fn &optional ARG)" nil nil)
(autoload 'pg-slow-fontify-tracing-hint "pg-user" "\
-Not documented
+
\(fn)" nil nil)
(autoload 'pg-response-buffers-hint "pg-user" "\
-Not documented
+
\(fn &optional NEXTBUF)" nil nil)
(autoload 'pg-jump-to-end-hint "pg-user" "\
-Not documented
+
\(fn)" nil nil)
@@ -491,7 +518,7 @@ removed if it matches the last item in the ring.
\(fn CMD)" nil nil)
(autoload 'pg-clear-input-ring "pg-user" "\
-Not documented
+
\(fn)" nil nil)
@@ -502,8 +529,7 @@ Enable or disable autosend behaviour.
;;;***
-;;;### (autoloads (pg-xml-parse-string) "pg-xml" "pg-xml.el" (20118
-;;;;;; 50210))
+;;;### (autoloads nil "pg-xml" "pg-xml.el" (23421 61555 964003 698000))
;;; Generated autoloads from pg-xml.el
(autoload 'pg-xml-parse-string "pg-xml" "\
@@ -513,8 +539,8 @@ Parse string in ARG, same as pg-xml-parse-buffer.
;;;***
-;;;### (autoloads (proof-dependency-in-span-context-menu proof-depends-process-dependencies)
-;;;;;; "proof-depends" "proof-depends.el" (20118 50210))
+;;;### (autoloads nil "proof-depends" "proof-depends.el" (23421 61555
+;;;;;; 964003 698000))
;;; Generated autoloads from proof-depends.el
(autoload 'proof-depends-process-dependencies "proof-depends" "\
@@ -531,21 +557,22 @@ Make some menu entries showing proof dependencies of SPAN.
;;;***
-;;;### (autoloads (proof-easy-config) "proof-easy-config" "proof-easy-config.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "proof-easy-config" "proof-easy-config.el"
+;;;;;; (23421 61555 964003 698000))
;;; Generated autoloads from proof-easy-config.el
(autoload 'proof-easy-config "proof-easy-config" "\
-Configure Proof General for proof-assistant using BODY as a setq body.
+Configure Proof General for a given proof assistant.
The symbol SYM and string name NAME must match those given in
-the `proof-assistant-table', which see.
+ the `proof-assistant-table', which see.
+Additional arguments are taken into account as a setq BODY.
-\(fn SYM NAME &rest BODY)" nil (quote macro))
+\(fn SYM NAME &rest BODY)" nil t)
;;;***
-;;;### (autoloads (proof-indent-line) "proof-indent" "proof-indent.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "proof-indent" "proof-indent.el" (23421 34760
+;;;;;; 554828 678000))
;;; Generated autoloads from proof-indent.el
(autoload 'proof-indent-line "proof-indent" "\
@@ -555,8 +582,8 @@ Indent current line of proof script, if indentation enabled.
;;;***
-;;;### (autoloads (proof-maths-menu-enable proof-maths-menu-set-global)
-;;;;;; "proof-maths-menu" "proof-maths-menu.el" (20118 50210))
+;;;### (autoloads nil "proof-maths-menu" "proof-maths-menu.el" (23421
+;;;;;; 34760 554828 678000))
;;; Generated autoloads from proof-maths-menu.el
(autoload 'proof-maths-menu-set-global "proof-maths-menu" "\
@@ -576,9 +603,8 @@ in future if we have just activated it for this buffer.
;;;***
-;;;### (autoloads (proof-aux-menu proof-menu-define-specific proof-menu-define-main
-;;;;;; proof-menu-define-keys) "proof-menu" "proof-menu.el" (20123
-;;;;;; 63408))
+;;;### (autoloads nil "proof-menu" "proof-menu.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from proof-menu.el
(autoload 'proof-menu-define-keys "proof-menu" "\
@@ -587,12 +613,12 @@ Prover specific keymap under C-c C-a.
\(fn MAP)" nil nil)
(autoload 'proof-menu-define-main "proof-menu" "\
-Not documented
+
\(fn)" nil nil)
(autoload 'proof-menu-define-specific "proof-menu" "\
-Not documented
+
\(fn)" nil nil)
@@ -603,32 +629,8 @@ Construct and return PG auxiliary menu used in non-scripting buffers.
;;;***
-;;;### (autoloads (proof-mmm-enable proof-mmm-set-global) "proof-mmm"
-;;;;;; "proof-mmm.el" (20118 50210))
-;;; Generated autoloads from proof-mmm.el
-
-(autoload 'proof-mmm-set-global "proof-mmm" "\
-Set global status of MMM mode for PG buffers to be FLAG.
-
-\(fn FLAG)" nil nil)
-
-(autoload 'proof-mmm-enable "proof-mmm" "\
-Turn on or off MMM mode in Proof General script buffer.
-This invokes `mmm-mode' to toggle the setting for the current
-buffer, and then sets PG's option for default to match.
-Also we arrange to have MMM mode turn itself on automatically
-in future if we have just activated it for this buffer.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads (proof-config-done proof-mode proof-insert-sendback-command
-;;;;;; proof-insert-pbp-command proof-script-generic-parse-find-comment-end
-;;;;;; proof-register-possibly-new-processed-file pg-set-span-helphighlights
-;;;;;; proof-locked-region-empty-p proof-locked-region-full-p proof-unprocessed-begin
-;;;;;; proof-colour-locked) "proof-script" "proof-script.el" (20123
-;;;;;; 64988))
+;;;### (autoloads nil "proof-script" "proof-script.el" (23421 61555
+;;;;;; 964003 698000))
;;; Generated autoloads from proof-script.el
(autoload 'proof-colour-locked "proof-script" "\
@@ -662,7 +664,7 @@ also as the 'response property on the span.
Optional argument MOUSEFACE means use the given face as a mouse highlight
face, if it is a face, otherwise, if it is non-nil but not a face,
-do not add a mouse highlight.
+do not add a mouse highlight.
In any case, a mouse highlight and tooltip are only set if
`proof-output-tooltips' is non-nil.
@@ -717,11 +719,8 @@ finish setup which depends on specific proof assistant configuration.
;;;***
-;;;### (autoloads (proof-shell-config-done proof-shell-mode proof-shell-invisible-command-invisible-result
-;;;;;; proof-shell-invisible-cmd-get-result proof-shell-invisible-command
-;;;;;; proof-shell-wait proof-extend-queue proof-start-queue proof-shell-insert
-;;;;;; proof-shell-available-p proof-shell-ready-prover) "proof-shell"
-;;;;;; "proof-shell.el" (20118 50320))
+;;;### (autoloads nil "proof-shell" "proof-shell.el" (23421 61555
+;;;;;; 964003 698000))
;;; Generated autoloads from proof-shell.el
(autoload 'proof-shell-ready-prover "proof-shell" "\
@@ -734,7 +733,7 @@ No change to current buffer or point.
\(fn &optional QUEUEMODE)" nil nil)
(defsubst proof-shell-live-buffer nil "\
-Return non-nil if proof-shell-buffer is live." (and proof-shell-buffer (buffer-live-p proof-shell-buffer) (scomint-check-proc proof-shell-buffer)))
+Return non-nil if ‘proof-shell-buffer’ is live." (and proof-shell-buffer (buffer-live-p proof-shell-buffer) (scomint-check-proc proof-shell-buffer)))
(autoload 'proof-shell-available-p "proof-shell" "\
Return non-nil if there is a proof shell active and available.
@@ -751,9 +750,9 @@ single string.
The ACTION argument is a symbol which is typically the name of a
callback for when each string has been processed.
-This calls `proof-shell-insert-hook'. The arguments `action' and
-`scriptspan' may be examined by the hook to determine how to modify
-the `string' variable (exploiting dynamic scoping) which will be
+This calls `proof-shell-insert-hook'. The arguments ACTION and
+SCRIPTSPAN may be examined by the hook to determine how to modify
+the string variable (exploiting dynamic scoping) which will be
the command actually sent to the shell.
Note that the hook is not called for the empty (null) string
@@ -770,11 +769,11 @@ used in `proof-add-to-queue' when we start processing a queue, and in
\(fn STRINGS ACTION &optional SCRIPTSPAN)" nil nil)
(autoload 'proof-start-queue "proof-shell" "\
-Begin processing a queue of commands in QUEUEITEMS.
+Begin processing a queue of commands.
If START is non-nil, START and END are buffer positions in the
active scripting buffer for the queue region.
-This function calls `proof-add-to-queue'.
+This function calls ‘proof-add-to-queue’ with args QUEUEITEMS and QUEUEMODE.
\(fn START END QUEUEITEMS &optional QUEUEMODE)" nil nil)
@@ -791,7 +790,7 @@ Busy wait for `proof-shell-busy' to become nil, reading from prover.
Needed between sequences of commands to maintain synchronization,
because Proof General does not allow for the action list to be extended
-in some cases. Also is considerably faster than leaving the Emacs
+in some cases. Also is considerably faster than leaving the Emacs
top-level command loop to read from the prover.
Called by `proof-shell-invisible-command' and `proof-process-buffer'
@@ -854,8 +853,8 @@ processing.
;;;***
-;;;### (autoloads (proof-ready-for-assistant) "proof-site" "proof-site.el"
-;;;;;; (20119 3136))
+;;;### (autoloads nil "proof-site" "proof-site.el" (23421 61555 964003
+;;;;;; 698000))
;;; Generated autoloads from proof-site.el
(autoload 'proof-ready-for-assistant "proof-site" "\
@@ -866,8 +865,8 @@ If ASSISTANT-NAME is omitted, look up in `proof-assistant-table'.
;;;***
-;;;### (autoloads (proof-splash-message proof-splash-display-screen)
-;;;;;; "proof-splash" "proof-splash.el" (20123 63408))
+;;;### (autoloads nil "proof-splash" "proof-splash.el" (23421 61555
+;;;;;; 968003 660000))
;;; Generated autoloads from proof-splash.el
(autoload 'proof-splash-display-screen "proof-splash" "\
@@ -885,12 +884,12 @@ Make sure the user gets welcomed one way or another.
;;;***
-;;;### (autoloads (proof-format) "proof-syntax" "proof-syntax.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "proof-syntax" "proof-syntax.el" (23421 61555
+;;;;;; 968003 660000))
;;; Generated autoloads from proof-syntax.el
(defsubst proof-replace-regexp-in-string (regexp rep string) "\
-Like replace-regexp-in-string, but set case-fold-search to proof-case-fold-search." (let ((case-fold-search proof-case-fold-search)) (replace-regexp-in-string regexp rep string)))
+Like ‘replace-regexp-in-string’, but set ‘case-fold-search’ to ‘proof-case-fold-search’." (let ((case-fold-search proof-case-fold-search)) (replace-regexp-in-string regexp rep string)))
(autoload 'proof-format "proof-syntax" "\
Format a string by matching regexps in ALIST against STRING.
@@ -901,8 +900,8 @@ may be a string or sexp evaluated to get a string.
;;;***
-;;;### (autoloads (proof-toolbar-scripting-menu proof-toolbar-setup)
-;;;;;; "proof-toolbar" "proof-toolbar.el" (20118 50210))
+;;;### (autoloads nil "proof-toolbar" "proof-toolbar.el" (23421 34760
+;;;;;; 554828 678000))
;;; Generated autoloads from proof-toolbar.el
(autoload 'proof-toolbar-setup "proof-toolbar" "\
@@ -920,9 +919,8 @@ Menu made from the Proof General toolbar commands.
;;;***
-;;;### (autoloads (proof-unicode-tokens-enable proof-unicode-tokens-set-global
-;;;;;; proof-unicode-tokens-mode-if-enabled) "proof-unicode-tokens"
-;;;;;; "proof-unicode-tokens.el" (20118 50210))
+;;;### (autoloads nil "proof-unicode-tokens" "proof-unicode-tokens.el"
+;;;;;; (23421 34760 554828 678000))
;;; Generated autoloads from proof-unicode-tokens.el
(autoload 'proof-unicode-tokens-mode-if-enabled "proof-unicode-tokens" "\
@@ -949,8 +947,8 @@ is changed.
;;;***
-;;;### (autoloads (proof-debug) "proof-utils" "proof-utils.el" (20118
-;;;;;; 50210))
+;;;### (autoloads nil "proof-utils" "proof-utils.el" (23421 61555
+;;;;;; 968003 660000))
;;; Generated autoloads from proof-utils.el
(autoload 'proof-debug "proof-utils" "\
@@ -961,11 +959,11 @@ If flag `proof-general-debug' is nil, do nothing.
;;;***
-;;;### (autoloads (scomint-make scomint-make-in-buffer) "scomint"
-;;;;;; "../lib/scomint.el" (20123 63408))
+;;;### (autoloads nil "../lib/scomint" "../lib/scomint.el" (23421
+;;;;;; 61555 968003 660000))
;;; Generated autoloads from ../lib/scomint.el
-(autoload 'scomint-make-in-buffer "scomint" "\
+(autoload 'scomint-make-in-buffer "../lib/scomint" "\
Make a Comint process NAME in BUFFER, running PROGRAM.
If BUFFER is nil, it defaults to NAME surrounded by `*'s.
PROGRAM should be either a string denoting an executable program to create
@@ -974,11 +972,11 @@ a TCP connection to be opened via `open-network-stream'. If there is already
a running process in that buffer, it is not restarted. Optional fourth arg
STARTFILE is the name of a file to send the contents of to the process.
-If PROGRAM is a string, any more args are arguments to PROGRAM.
+If PROGRAM is a string, the remaining SWITCHES are arguments to PROGRAM.
\(fn NAME BUFFER PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil)
-(autoload 'scomint-make "scomint" "\
+(autoload 'scomint-make "../lib/scomint" "\
Make a Comint process NAME in a buffer, running PROGRAM.
The name of the buffer is made by surrounding NAME with `*'s.
PROGRAM should be either a string denoting an executable program to create
@@ -987,17 +985,17 @@ a TCP connection to be opened via `open-network-stream'. If there is already
a running process in that buffer, it is not restarted. Optional third arg
STARTFILE is the name of a file to send the contents of the process to.
-If PROGRAM is a string, any more args are arguments to PROGRAM.
+If PROGRAM is a string, the remaining SWITCHES are arguments to PROGRAM.
\(fn NAME PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil)
;;;***
-;;;### (autoloads (texi-docstring-magic) "texi-docstring-magic" "../lib/texi-docstring-magic.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "../lib/texi-docstring-magic" "../lib/texi-docstring-magic.el"
+;;;;;; (23421 61555 968003 660000))
;;; Generated autoloads from ../lib/texi-docstring-magic.el
-(autoload 'texi-docstring-magic "texi-docstring-magic" "\
+(autoload 'texi-docstring-magic "../lib/texi-docstring-magic" "\
Update all texi docstring magic annotations in buffer.
With prefix arg, no errors on unknown symbols. (This results in
@def .. @end being deleted if not known).
@@ -1006,24 +1004,24 @@ With prefix arg, no errors on unknown symbols. (This results in
;;;***
-;;;### (autoloads (unicode-chars-list-chars) "unicode-chars" "../lib/unicode-chars.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "../lib/unicode-chars" "../lib/unicode-chars.el"
+;;;;;; (23421 61555 968003 660000))
;;; Generated autoloads from ../lib/unicode-chars.el
-(autoload 'unicode-chars-list-chars "unicode-chars" "\
+(autoload 'unicode-chars-list-chars "../lib/unicode-chars" "\
Insert each Unicode character into a buffer.
Lets you see which characters are available for literal display
-in your emacs font.
+in your Emacs font.
\(fn)" t nil)
;;;***
-;;;### (autoloads (unicode-tokens-encode-str) "unicode-tokens" "../lib/unicode-tokens.el"
-;;;;;; (20118 50210))
+;;;### (autoloads nil "../lib/unicode-tokens" "../lib/unicode-tokens.el"
+;;;;;; (23421 61555 968003 660000))
;;; Generated autoloads from ../lib/unicode-tokens.el
-(autoload 'unicode-tokens-encode-str "unicode-tokens" "\
+(autoload 'unicode-tokens-encode-str "../lib/unicode-tokens" "\
Return a unicode encoded version presentation of STR.
\(fn STR)" nil nil)
@@ -1033,8 +1031,8 @@ Return a unicode encoded version presentation of STR.
;;;### (autoloads nil nil ("../lib/local-vars-list.el" "../lib/pg-fontsets.el"
;;;;;; "../lib/proof-compat.el" "../lib/span.el" "pg-autotest.el"
;;;;;; "pg-custom.el" "pg-pbrpm.el" "pg-vars.el" "proof-auxmodes.el"
-;;;;;; "proof-config.el" "proof-faces.el" "proof-useropts.el" "proof.el"
-;;;;;; "proofgeneral-pkg.el") (20123 65399 608731))
+;;;;;; "proof-config.el" "proof-faces.el" "proof-tree.el" "proof-useropts.el"
+;;;;;; "proof.el") (23421 61555 968003 660000))
;;;***
diff --git a/generic/proof-auxmodes.el b/generic/proof-auxmodes.el
index a6f06479..d3ccf41e 100644
--- a/generic/proof-auxmodes.el
+++ b/generic/proof-auxmodes.el
@@ -1,7 +1,16 @@
;;; proof-auxmodes.el --- Arrange for auxiliary modes to be loaded when required
-;;
-;; Copyright (C) 2008, 2010 David Aspinall / LFCS Edinburgh
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;;; Commentary:
@@ -10,31 +19,9 @@
;; loading of their main defining files and the possibility to disable them.
;;
-(require 'proof-utils) ; proof-ass, proof-eval...
-
;;; Code:
-;;
-;; MMM
-;;
-(defun proof-mmm-support-available ()
- "A test to see whether mmm support is available."
- (and
- (or (featurep 'mmm-auto)
- (progn
- ;; put bundled version on load path
- (proof-add-to-load-path
- (concat proof-home-directory "contrib/mmm/"))
- ;; *should* always succeed unless bundled version broken
- (proof-try-require 'mmm-auto)))
- ;; Load prover-specific config in <foo>-mmm.el
- (proof-try-require (proof-ass-sym mmm))))
-
-(proof-eval-when-ready-for-assistant
- (if (and (proof-ass mmm-enable)
- (proof-mmm-support-available))
- (proof-mmm-set-global t)))
-
+(require 'proof-utils) ; proof-ass, proof-eval...
;;
;; Maths menu
diff --git a/generic/proof-config.el b/generic/proof-config.el
index 8bb40634..ea7fda8f 100644
--- a/generic/proof-config.el
+++ b/generic/proof-config.el
@@ -1,11 +1,18 @@
;;; proof-config.el --- Proof General configuration for proof assistant
-;;
-;; Copyright (C) 1998-2010 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; This file declares all prover-specific configuration variables for
@@ -252,7 +259,7 @@ or `proof-script-parse-function'."
:group 'prover-config)
(defcustom proof-script-sexp-commands nil
- "Non-nil if script has LISP-like syntax: commands are top-level sexps.
+ "Non-nil if script has Lisp-like syntax: commands are top-level sexps.
You should set this variable in script mode configuration.
To configure command recognition properly, you must set at least one
@@ -404,11 +411,11 @@ It's safe to leave this setting as nil."
:group 'proof-script)
(defcustom proof-save-with-hole-result 2
- "How to get theorem name after `proof-save-with-hole-regexp' match.
+ "How to get theorem name after ‘proof-save-with-hole-regexp’ match.
String or Int.
-If an int N use match-string to recover the value of the Nth parenthesis matched.
-If it is a string use replace-match. In this case, `proof-save-with-hole-regexp'
-should match the entire command"
+If an int N, use ‘match-string’ to get the value of the Nth parenthesis matched.
+If a string, use ‘replace-match’. In this case, ‘proof-save-with-hole-regexp’
+should match the entire command."
:type '(choice string integer)
:group 'proof-script)
@@ -434,11 +441,11 @@ It's safe to leave this setting as nil."
:group 'proof-script)
(defcustom proof-goal-with-hole-result 2
- "How to get theorem name after `proof-goal-with-hole-regexp' match.
+ "How to get theorem name after ‘proof-goal-with-hole-regexp’ match.
String or Int.
-If an int N use match-string to recover the value of the Nth parenthesis matched.
-If it is a string use replace-match. In this case, proof-save-with-hole-regexp
-should match the entire command"
+If an int N, use ‘match-string’ to get the value of the Nth parenthesis matched.
+If a string, use ‘replace-match’. In this case, ‘proof-goal-with-hole-regexp’
+should match the entire command."
:type '(choice string integer)
:group 'proof-script)
@@ -676,10 +683,10 @@ assistant, for example, to compile a completed file."
(defcustom proof-no-fully-processed-buffer nil
"Set to t if buffers should always retract before scripting elsewhere.
Leave at nil if fully processed buffers make sense for the current
-proof assistant. If nil the user can choose to fully assert a
-buffer when starting scripting in a different buffer. If t there
+proof assistant. If nil the user can choose to fully assert a
+buffer when starting scripting in a different buffer. If t there
is only the choice to fully retract the active buffer before
-starting scripting in a different buffer. This last behavior is
+starting scripting in a different buffer. This last behavior is
needed for Coq."
:type 'boolean
:group 'proof-script)
@@ -753,12 +760,12 @@ Elisp errors will be trapped when evaluating; set
:group 'proof-script)
(defcustom proof-script-insert-newlines t
- "if non-nil inserts a newline between each message in response buffer."
+ "If non-nil, insert a newline between each message in response buffer."
:type 'boolean
:group 'proof-script)
(defcustom proof-script-color-error-messages t
- "if non-nil error messages will be globally colored with corresponding face.
+ "If non-nil, error messages will be globally colored with corresponding face.
If prover mode has a better coloring mechanism for errors, set this to nil."
:type 'boolean
:group 'proof-script)
@@ -1188,18 +1195,18 @@ If nil, use the whole of the output from the match on
:group 'proof-shell)
(defcustom proof-shell-empty-action-list-command nil
- "A function returning a list of commands (strings) to be sent
-to the prover when the last command in the queue has been
-performed. Typically to ask for some informational
-display (goals, etc).
+ "A function returning a list of commands (strings).
+These commands are sent to the prover when the last command in the queue
+has been performed.
+Typically to ask for some informational display (goals, etc.)
The function takes as argument the last command in the queue.
-NOTE 1: The commands will be tagged invisible, i.e. not related
+NOTE 1: The commands will be tagged invisible, i.e., not related
to a place in the buffer.
NOTE 2: The commands should NOT have any effect on the state of
-the prover. Otherwise running the script outside pg would be
+the prover. Otherwise running the script outside pg would be
inconsistent."
:type 'function
:group 'proof-shell)
@@ -1556,7 +1563,7 @@ This setting is used inside the function `proof-format-filename'."
"The value of `process-connection-type' for the proof shell.
Set non-nil for ptys, nil for pipes.
-NOTE: In emacs >= 24 (checked for 24 and 25.0.50.1), t is not a
+NOTE: In Emacs >= 24 (checked for 24 and 25.0.50.1), t is not a
good choice: input is cut after 4095 chars, which hangs pg."
:type 'boolean
:group 'proof-shell)
@@ -1582,14 +1589,14 @@ if you don't need it (slight speed penalty)."
:group 'proof-shell)
(defcustom proof-shell-extend-queue-hook nil
- "Hooks run by proof-extend-queue before extending `proof-action-list'.
+ "Hooks run by ‘proof-extend-queue’ before extending `proof-action-list'.
Can be used to run additional actions before items are added to
the queue \(such as compiling required modules for Coq) or to
modify the items that are going to be added to
-`proof-action-list'. The items that are about to be added are
+`proof-action-list'. The items that are about to be added are
bound to `queueitems'."
:type '(repeat function)
- :group 'proof-shell)
+ :group 'proof-shell)
(defcustom proof-shell-insert-hook nil
"Hooks run by `proof-shell-insert' before inserting a command.
@@ -1637,12 +1644,12 @@ it is added to the queue of commands."
(defcustom proof-assert-command-hook nil
"Hooks run before asserting a command (or a set of commands).
Can be used to insert commands before any (set of) input sent
-by the user. It is run by `proof-assert-until-point'.
+by the user. It is run by `proof-assert-until-point'.
WARNING: don't call `proof-assert-until-point' in this hook, you
would loop forever.
-Example of use: Insert a command to adapt printing width. Note
+Example of use: Insert a command to adapt printing width. Note
that `proof-shell-insert-hook' may be use instead (see lego mode)
if no more prompt will be displayed (see
`proof-shell-insert-hook' for details)."
@@ -1651,13 +1658,13 @@ if no more prompt will be displayed (see
(defcustom proof-retract-command-hook nil
"Hooks run before retracting a command (or a set of commands).
-Can be used to insert commands. It is run by
+Can be used to insert commands. It is run by
`proof-retract-until-point'.
WARNING: don't call `proof-retract-until-point' in this hook, you
would loop forever.
-Example of use: Insert a command to adapt printing width. Note
+Example of use: Insert a command to adapt printing width. Note
that `proof-shell-insert-hook' may be use instead (see lego mode)
if no more prompt will be displayed (see
`proof-shell-insert-hook' for details)."
@@ -1697,14 +1704,14 @@ something in scripting buffer, `save-excursion' and/or `set-buffer'."
(defcustom proof-shell-signal-interrupt-hook nil
"Run when the user tries to interrupt the prover.
This hook is run inside `proof-interrupt-process' when the user
-tries to interrupt the proof process. It is therefore run earlier
+tries to interrupt the proof process. It is therefore run earlier
than `proof-shell-handle-error-or-interrupt-hook', which runs
when the interrupt is acknowledged inside `proof-shell-exec-loop'.
This hook also runs when the proof assistent is killed.
Hook functions should set the dynamic variable `prover-was-busy'
-to t if there might have been a reason to interrupt. Otherwise
+to t if there might have been a reason to interrupt. Otherwise
the generic interrupt handler might issue a prover-not-busy
error."
:type '(repeat function)
diff --git a/generic/proof-depends.el b/generic/proof-depends.el
index c55df53d..72beb1d2 100644
--- a/generic/proof-depends.el
+++ b/generic/proof-depends.el
@@ -1,21 +1,28 @@
;;; proof-depends.el --- Theorem-theorem and theorem-definition dependencies
-;;
-;; Copyright (C) 2000-2004, 2010 University of Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall <David.Aspinall@ed.ac.uk>
;; Earlier version by Fiona McNeil.
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;; Status: Experimental code
+
+;;; Commentary:
;;
-;; $Id$
+;; Status: Experimental code
;;
-;;; Commentary:
-;;
;; Based on Fiona McNeill's MSc project on analysing dependencies
;; within proofs. Code rewritten by David Aspinall.
;;
-
-
+;;; Code:
(require 'cl)
(require 'span)
(require 'pg-vars)
@@ -34,9 +41,6 @@ A list of lists; the first element of each list is a file-name, the
second element a list of all the def names in that file.
i.e.: ((file-name-1 (def1 def2 def3)) (file-name-2 (def1 def2 def3)))")
-
-;;; Code:
-
;; Utility functions
(defun proof-depends-module-name-for-buffer ()
@@ -177,7 +181,7 @@ Called from `proof-done-advancing' when a save is processed and
(vector menuname nil nil))))
(defun proof-dep-split-deps (deps)
- "Split dependencies into named nested lists according to dotted prefixes."
+ "Split dependencies DEPS into named nested lists according to dotted prefixes."
;; NB: could handle deeper nesting here, but just do one level for now.
(let (nested toplevel)
;; Add each name into a nested list or toplevel list
@@ -219,6 +223,7 @@ NAMEFN is applied to each element of LIST to make the names."
(defun proof-goto-dependency (name span)
"Go to the start of SPAN."
+ ;; FIXME(EMD): seems buggy as NAME is not used
;; FIXME: check buffer is right one. Later we'll allow switching buffer
;; here and jumping to different files.
(goto-char (span-start span))
diff --git a/generic/proof-easy-config.el b/generic/proof-easy-config.el
index da3b9c7f..4dc2e1d4 100644
--- a/generic/proof-easy-config.el
+++ b/generic/proof-easy-config.el
@@ -1,16 +1,27 @@
-;; proof-easy-config.el Easy configuration for Proof General
-;;
-;; Copyright (C) 1999-2002 David Aspinall / LFCS.
+;;; proof-easy-config.el --- Easy configuration for Proof General
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
+
+;;; Commentary:
;;
;; Future versions might copy settings instead; consider how best to
;; interface with customization mechanism so a new prover can be
;; configured by editing inside custom buffers.
;;
+;;; Code:
+
(require 'proof-site) ; proof-assistant, proof-assistant-symbol
(require 'proof-auxmodes) ; make sure extra modes available
@@ -51,7 +62,8 @@
`(define-derived-mode ,mode ,parent ,modename nil ,@fullbody)))))
(defun proof-easy-config-check-setup (sym name)
- "A number of simple checks."
+ "Perform a number of simple checks.
+The proof assistant is denoted by symbol SYM and string NAME."
(let ((msg ""))
;; At the moment we just check that the symbol/name used
;; in the macro matches that in `proof-assistant-table'
@@ -73,7 +85,7 @@
(not (eq proof-assistant-symbol sym))
(setq msg (format "\nproof-assistant symbol: '%s doesn't match expected '%s"
proof-assistant-symbol sym))))
- (error "proof-easy-config: PG already in use or name/symbol mismatch %s"
+ (error "Macro proof-easy-config: PG already in use or name/symbol mismatch %s"
msg))
(t
;; Setting these here is nice for testing: no need to get
@@ -83,9 +95,10 @@
;;;###autoload
(defmacro proof-easy-config (sym name &rest body)
- "Configure Proof General for proof-assistant using BODY as a setq body.
+ "Configure Proof General for a given proof assistant.
The symbol SYM and string name NAME must match those given in
-the `proof-assistant-table', which see."
+ the `proof-assistant-table', which see.
+Additional arguments are taken into account as a setq BODY."
`(progn
(proof-easy-config-check-setup ,sym ,name)
(setq
@@ -94,3 +107,7 @@ the `proof-assistant-table', which see."
;;
(provide 'proof-easy-config)
+
+(provide 'proof-easy-config)
+
+;;; proof-easy-config.el ends here
diff --git a/generic/proof-faces.el b/generic/proof-faces.el
index 0eafc075..92609d47 100644
--- a/generic/proof-faces.el
+++ b/generic/proof-faces.el
@@ -1,11 +1,18 @@
;;; proof-faces.el --- Faces for Proof General
-;;
-;; Copyright (C) 2009 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; In an ideal world, faces should work sensibly:
diff --git a/generic/proof-indent.el b/generic/proof-indent.el
index 2ff6cf69..24da2059 100644
--- a/generic/proof-indent.el
+++ b/generic/proof-indent.el
@@ -1,21 +1,27 @@
;;; proof-indent.el --- Generic indentation for proof assistants
-;;
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Markus Wenzel, David Aspinall
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;;; Commentary:
;;
+;;; Code:
(require 'proof-config) ; config variables
(require 'proof-utils) ; proof-ass
(require 'proof-syntax) ; p-looking-at-safe, p-re-search
(require 'proof-autoloads) ; p-locked-end
-;;; Code:
(defun proof-indent-indent ()
"Determine indentation caused by syntax element at current point."
(cond
diff --git a/generic/proof-maths-menu.el b/generic/proof-maths-menu.el
index ded6568a..b1155557 100644
--- a/generic/proof-maths-menu.el
+++ b/generic/proof-maths-menu.el
@@ -1,16 +1,22 @@
;;; proof-maths-menu.el --- Support for maths menu mode package
-;;
-;; Copyright (C) 2007, 2009 LFCS Edinburgh / David Aspinall
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
+
+;;; Commentary:
;;
;; With thanks to Dave Love for the original maths menu code,
;; provided at http://www.loveshack.ukfsn.org/emacs/
-;;
-;; $Id$
-;;
-;;; Commentary:
;;
;; Note: maths menu is bundled with Proof General in lib/, and PG will select
;; it's own version before any other version on the Emacs load path.
@@ -23,7 +29,7 @@
(eval-when-compile
(require 'cl))
-(eval-when (compile)
+(eval-when-compile
(require 'proof-auxmodes) ; loaded by proof.el
(require 'maths-menu)) ; loaded dynamically in proof-auxmodes
diff --git a/generic/proof-menu.el b/generic/proof-menu.el
index df617347..fc18d504 100644
--- a/generic/proof-menu.el
+++ b/generic/proof-menu.el
@@ -1,32 +1,31 @@
;;; proof-menu.el --- Menus, keymaps, misc commands for Proof General
-;;
-;; Copyright (C) 2000,2001,2009,2010,2011 LFCS Edinburgh.
-;; Authors: David Aspinall
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
-(require 'cl) ; mapcan
+;; This file is part of Proof General.
-;;; Code:
-(eval-when (compile)
- (defvar proof-assistant-menu nil) ; defined by macro in proof-menu-define-specific
- (defvar proof-mode-map nil))
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
-(require 'proof-utils) ; proof-deftoggle, proof-eval-when-ready-for-assistant
-(require 'proof-useropts)
-(require 'proof-config)
+;; Authors: David Aspinall
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-
+;;; Commentary:
+;;
+;;; Code:
+(require 'cl) ; mapcan
(eval-when-compile
(defvar proof-assistant-menu) ; defined by macro in proof-menu-define-specific
(defvar proof-mode-map))
-
+(require 'proof-utils) ; proof-deftoggle, proof-eval-when-ready-for-assistant
+(require 'proof-useropts)
+(require 'proof-config)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
@@ -123,6 +122,7 @@ without adjusting window layout."
;; C-c C-v is proof-minibuffer-cmd in universal-keys
;; C-c C-. is proof-goto-end-of-locked in universal-keys
(define-key map [(control c) (control return)] 'proof-goto-point)
+ (define-key map [(control c) (control m)] 'proof-goto-point) ; fallback for tty
(define-key map [(control c) ?v] 'pg-toggle-visibility)
(define-key map [(control meta mouse-3)] 'proof-mouse-goto-point)
;; NB: next binding overwrites comint-find-source-code.
@@ -318,7 +318,7 @@ without adjusting window layout."
(proof-deftoggle proof-delete-empty-windows)
(proof-deftoggle proof-shrink-windows-tofit)
(proof-deftoggle proof-multiple-frames-enable proof-multiple-frames-toggle)
-(proof-deftoggle proof-layout-windows-on-visit-file
+(proof-deftoggle proof-layout-windows-on-visit-file
proof-layout-windows-eagerly-toggle)
(proof-deftoggle proof-three-window-enable proof-three-window-toggle)
(proof-deftoggle proof-auto-raise-buffers proof-auto-raise-toggle)
@@ -339,11 +339,10 @@ without adjusting window layout."
(proof-deftoggle-fn
(proof-ass-sym unicode-tokens-enable) 'proof-unicode-tokens-toggle)
(proof-deftoggle-fn
- (proof-ass-sym maths-menu-enable) 'proof-maths-menu-toggle)
- (proof-deftoggle-fn (proof-ass-sym mmm-enable) 'proof-mmm-toggle))
+ (proof-ass-sym maths-menu-enable) 'proof-maths-menu-toggle))
(defun proof-keep-response-history ()
- "Enable associated buffer histories following `proof-keep-response-history'."
+ "Enable associated buffer histories following option `proof-keep-response-history'."
(if proof-keep-response-history
(proof-map-buffers (proof-associated-buffers) (bufhist-init))
(proof-map-buffers (proof-associated-buffers) (bufhist-exit))))
@@ -372,7 +371,7 @@ without adjusting window layout."
["Beep on Errors" proof-shell-quiet-errors-toggle
:style toggle
:selected (not proof-shell-quiet-errors)
- :help "Beep on errors or interrupts"]
+ :help "Beep on errors or interrupts"]
["Fly Past Comments" proof-script-fly-past-comments-toggle
:style toggle
:selected proof-script-fly-past-comments
@@ -391,7 +390,7 @@ without adjusting window layout."
:style radio
:selected (eq proof-autosend-all nil)
:active proof-autosend-enable
- :help "Automatically try out the next commmand"]
+ :help "Automatically try out the next command"]
["Send Whole Buffer"
(customize-set-variable 'proof-autosend-all t)
:style radio
@@ -535,12 +534,6 @@ without adjusting window layout."
:selected (and (boundp 'maths-menu-mode) maths-menu-mode)
:help "Maths menu for inserting Unicode characters"]
- ["Multiple Modes" (proof-mmm-toggle (if mmm-mode 0 1))
- :active (proof-mmm-support-available)
- :style toggle
- :selected (and (boundp 'mmm-mode) mmm-mode)
- :help "Allow multiple major modes"]
-
["Index Menu" proof-imenu-toggle
:active (stringp (locate-library "imenu"))
:style toggle
@@ -588,7 +581,6 @@ without adjusting window layout."
'proof-strict-read-only
(proof-ass-sym unicode-tokens-enable)
(proof-ass-sym maths-menu-enable)
- (proof-ass-sym mmm-enable)
'proof-toolbar-enable
'proof-keep-response-history
'proof-imenu-enable
@@ -621,7 +613,7 @@ without adjusting window layout."
;;
(defun proof-set-document-centred ()
- "Select options for document-centred working"
+ "Select options for document-centred working."
(interactive)
(proof-full-annotation-toggle 1)
(proof-auto-raise-toggle 0)
@@ -634,9 +626,9 @@ without adjusting window layout."
(defun proof-set-non-document-centred ()
- "Set options for classic Proof General interaction"
+ "Set options for classic Proof General interaction."
(interactive)
- ;; default: (proof-full-annotation-toggle 1)
+ ;; default: (proof-full-annotation-toggle 1)
(proof-auto-raise-toggle 1)
(proof-colour-locked-toggle 1)
(proof-sticky-errors-toggle 0)
@@ -752,7 +744,7 @@ without adjusting window layout."
;;; Define stuff from favourites
(defun proof-def-favourite (command inscript menuname &optional key new)
- "Define and a \"favourite\" proof assisant function.
+ "Define and a \"favourite\" proof assistant function.
See doc of `proof-add-favourite' for first four arguments.
Extra NEW flag means that this should be a new favourite, so check
that function defined is not already bound.
@@ -995,7 +987,7 @@ We first clear the dynamic settings from `proof-assistant-settings'."
(let (cmds)
(dolist (setting proof-assistant-settings)
(let ((sym (car setting))
- (pacmd (cadr setting)))
+ (pacmd (cadr setting)))
(if (and pacmd
(or (not (get sym 'pgdynamic))
(proof-ass-differs-from-default sym)))
@@ -1046,7 +1038,7 @@ value) and the second for false."
((consp string) ;; true/false options
(if curvalue (car string) (cdr string)))
(t ;; no idea what to do
- (error "proof-assistant-format: called with invalid string arg %s" string)))))
+ (error "Function proof-assistant-format: called with invalid string arg %s" string)))))
(if proof-assistant-setting-format
(funcall proof-assistant-setting-format setting)
setting)))
diff --git a/generic/proof-mmm.el b/generic/proof-mmm.el
deleted file mode 100644
index b450f20c..00000000
--- a/generic/proof-mmm.el
+++ /dev/null
@@ -1,76 +0,0 @@
-;; proof-mmm.el --- Support for MMM mode package
-;;
-;; Copyright (C) 2003, 2010 LFCS Edinburgh / David Aspinall
-;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; The MMM package is at http://mmm-mode.sourceforge.net/
-;;
-;; $Id$
-;;
-;;; Commentary:
-;;
-;; Configuration for the prover is expected to reside in <foo>-mmm.el
-;; It should define an MMM submode class called <foo>.
-;;
-;; NB: mmm-mode is bundled with Proof General, and PG will select
-;; it's own version before any other version on the Emacs load path.
-;; If you want to override this, simply load your version before
-;; starting Emacs, with (require 'mmm-auto).
-;;
-;; Credits: thanks to Stefan Monnier for pointing me to this package,
-;; and Michael Abraham Shulman for providing it.
-;;
-
-
-
-;;; Code:
-(eval-when-compile
- (require 'cl))
-
-(eval-when (compile)
- (require 'proof-auxmodes) ; will be loaded
- (require 'mmm-auto)) ; loaded dynamically by proof-auxmodes
-
-;; The following function is called by the menu item for MMM-Mode. It
-;; is an attempt at an intuitive behaviour without confusing the user
-;; with extra "in this buffer" and "everywhere" options. We make the
-;; global option track the last setting made for any buffer. The menu
-;; toggle displays the status of the buffer (as seen in the modeline)
-;; rather than the PG setting.
-
-;;;###autoload
-(defun proof-mmm-set-global (flag)
- "Set global status of MMM mode for PG buffers to be FLAG."
- (let ((automode-entry (list (proof-ass-sym mode) nil
- proof-assistant-symbol)))
- (if flag
- (add-to-list 'mmm-mode-ext-classes-alist
- automode-entry)
- (setq mmm-mode-ext-classes-alist
- (delete automode-entry
- mmm-mode-ext-classes-alist)))
- ;; make sure MMM obeys the mmm-mode-ext-classes-alist
- (unless (eq mmm-global-mode t)
- (setq mmm-global-mode 'pg-use-mode-ext-classes-alist))))
-
-;;;###autoload
-(defun proof-mmm-enable ()
- "Turn on or off MMM mode in Proof General script buffer.
-This invokes `mmm-mode' to toggle the setting for the current
-buffer, and then sets PG's option for default to match.
-Also we arrange to have MMM mode turn itself on automatically
-in future if we have just activated it for this buffer."
- (interactive)
- (when (proof-mmm-support-available)
- ;; Make sure auto mode follows PG's global setting. (NB: might do
- ;; only if global state changes, but by now (proof-ass mmm-mode) set).
- (with-no-warnings ; bytecomp gives spurious error
- ; "proof-mmm-set-global might not be defined"
- ; because the autoload overrides the definition above(!)
- (proof-mmm-set-global (not mmm-mode)))
- (mmm-mode)))
-
-(provide 'proof-mmm)
-
-;;; proof-mmm.el ends here
diff --git a/generic/proof-script.el b/generic/proof-script.el
index fb14c809..c938dfad 100644
--- a/generic/proof-script.el
+++ b/generic/proof-script.el
@@ -1,12 +1,19 @@
;;; proof-script.el --- Major mode for proof assistant script files.
-;;
-;; Copyright (C) 1994-2010 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Yves Bertot, Healfdene Goguen,
;; Thomas Kleymann and Dilip Sequeira
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; This implements the main mode for script management, including
@@ -280,8 +287,8 @@ next time an error is processed."
(defun proof-restart-buffers (buffers)
"Remove all extents in BUFFERS and maybe reset `proof-script-buffer'.
The high-level effect is that all members of BUFFERS are
-completely unlocked, including all the necessary cleanup. No
-effect on a buffer which is nil or killed. If one of the buffers
+completely unlocked, including all the necessary cleanup. No
+effect on a buffer which is nil or killed. If one of the buffers
is the current scripting buffer, then `proof-script-buffer' will
deactivated."
(mapcar
@@ -409,7 +416,7 @@ Works on any buffer."
(eq (proof-unprocessed-begin) (point-min)))
(defun proof-only-whitespace-to-locked-region-p ()
- "Non-nil if only whitespace from char-after point and end of locked region.
+ "Non-nil if only whitespace from char after point to end of locked region.
Point must be after the locked region or this will signal an error."
(save-excursion
(or (eq (point) (point-max))
@@ -503,7 +510,7 @@ Intended as a hook function for `proof-shell-handle-error-or-interrupt-hook'."
(clrhash (cdr idtbl))))
(defun pg-remove-element (idiom id)
- "Remove the identifier ID from the script portion IDIOM."
+ "From the script portion IDIOM, remove the identifier ID."
(let* ((elts (cdr-safe (assq idiom pg-script-portions)))
(span (and elts (gethash idiom elts))))
(when span
@@ -511,8 +518,8 @@ Intended as a hook function for `proof-shell-handle-error-or-interrupt-hook'."
(remhash id elts))))
(defun pg-get-element (idiomsym id)
- "Return proof script element of type IDIOM identifier ID.
-IDIOM is a symbol, ID is a string."
+ "Return proof script element of type IDIOMSYM with identifier ID.
+IDIOMSYM is a symbol, ID is a string."
(assert (symbolp idiomsym))
(assert (stringp id))
(let ((idsym (intern id))
@@ -574,15 +581,15 @@ This is a value for the overlay 'invisible property."
(intern (concat "pg-" (symbol-name (or idiom 'other)))))
(defun pg-set-element-span-invisible (span invisiblep)
- "Function to adjust visibility of span to INVISIBLEP.
+ "Function to adjust visibility of SPAN to INVISIBLEP.
We use list values of the 'invisible property which contain
private symbols, that should play well with other conforming modes
and `buffer-invisibility-spec'."
(let* ((invisible-prop (pg-invisible-prop (span-property span 'idiom)))
(invisible-rest (remq invisible-prop
(span-property span 'invisible))))
- (span-set-property span 'invisible
- (if invisiblep
+ (span-set-property span 'invisible
+ (if invisiblep
(cons invisible-prop invisible-rest)
invisible-rest))))
@@ -597,12 +604,12 @@ and `buffer-invisibility-spec'."
(pg-set-element-span-invisible span invisible))
(defun pg-make-element-invisible (idiomsym id)
- "Make element ID of type IDIOMSYM invisible, with ellipsis."
+ "Make element of type IDIOMSYM and identifier ID invisible, with ellipsis."
(let ((span (pg-get-element idiomsym id)))
(if span (pg-set-element-span-invisible span t))))
(defun pg-make-element-visible (idiomsym id)
- "Make element ID of type IDIOMSYM visible."
+ "Make element of type IDIOMSYM and identifier ID visible."
(let ((span (pg-get-element idiomsym id)))
(if span (pg-set-element-span-invisible span nil))))
@@ -618,8 +625,8 @@ IDIOMSYM is a symbol and ID is a strings."
(list
(intern
(completing-read
- (concat "Make "
- (if current-prefix-arg "in" "")
+ (concat "Make "
+ (if current-prefix-arg "in" "")
"visible all regions of: ")
(apply 'vector pg-idioms) nil t))
current-prefix-arg))
@@ -633,19 +640,8 @@ IDIOMSYM is a symbol and ID is a strings."
(proof-with-script-buffer ; may be called from menu
(maphash alterfn elts)))))
-;; Next two could be in pg-user.el. No key-bindings for these.
-(defun pg-show-all-proofs ()
- "Display all completed proofs in the buffer."
- (interactive)
- (pg-show-all-portions "proof"))
-
-(defun pg-hide-all-proofs ()
- "Hide all completed proofs in the buffer."
- (interactive)
- (pg-show-all-portions "proof" 'hide))
-
(defun pg-add-proof-element (name span controlspan)
- "Add a span proof element to SPAN with name NAME and parent CONTROLSPAN."
+ "Add a span proof element (named NAME) to SPAN with parent CONTROLSPAN."
(let ((proofid (proof-next-element-id 'proof)))
(pg-add-element 'proof proofid span name)
;; Set id in controlspan [NB: intern here means symbol-name elsewhere]
@@ -669,8 +665,7 @@ Each span has a 'type property, one of:
'vanilla Initialised in proof-semis-to-vanillas, for
'comment A comment outside a command.
'proverproc A region closed by the prover, processed outwith PG
- 'pbp A PBP command inserted automatically into the script
-"
+ 'pbp A PBP command inserted automatically into the script."
(let ((type (span-property span 'type))
(idiom (span-property span 'idiom))
(name (span-property span 'name))
@@ -1001,7 +996,7 @@ Gives a message in the minibuffer and busy-waits for the retraction
or processing to complete. If it fails for some reason,
an error is signalled here."
(unless (or (eq action 'process) (eq action 'retract))
- (error "proof-protected-process-or-retract: invalid argument"))
+ (error "Invalid argument (in proof-protected-process-or-retract)"))
(let ((buf (or buffer (current-buffer))))
(with-current-buffer buf
(unless (proof-action-completed action)
@@ -1099,7 +1094,7 @@ retract or assert, or automatically take the action indicated in the
user option `proof-auto-action-when-deactivating-scripting'.
If `proof-no-fully-processed-buffer' is t there is only the choice
-to fully retract the active scripting buffer. In this case the
+to fully retract the active scripting buffer. In this case the
active scripting buffer is retracted even if it was fully processed.
Setting `proof-auto-action-when-deactivating-scripting' to 'process
is ignored in this case.
@@ -1123,7 +1118,7 @@ questioning the user. It is used to make a value for
the `kill-buffer-hook' for scripting buffers, so that when
a scripting buffer is killed it is always retracted."
(interactive)
- (proof-with-current-buffer-if-exists
+ (proof-with-current-buffer-if-exists
proof-script-buffer
;; Examine buffer.
@@ -1283,7 +1278,7 @@ activation is considered to have failed and an error is given."
(eq 'interrupt proof-shell-last-output-kind))
(proof-deactivate-scripting) ;; turn off again!
;; Give an error to prevent further actions.
- (error
+ (error
"Scripting not activated because of error or interrupt")))))))
@@ -1411,7 +1406,7 @@ Argument SPAN has just been processed."
(pg-add-element 'comment id bodyspan)
(span-set-property span 'id (intern id))
(span-set-property span 'idiom 'comment)
- (let ((proof-shell-last-output "")) ; comments not sent, no last output
+ (let ((proof-shell-last-output "")) ; comments not sent, no last output
(pg-set-span-helphighlights bodyspan))
;; possibly evaluate some arbitrary Elisp. SECURITY RISK!
@@ -1518,8 +1513,9 @@ Argument SPAN has just been processed."
(defun proof-make-goalsave
(gspan goalend savestart saveend nam &optional nestedundos)
- "Make new goal-save span, using GSPAN. Subroutine of `proof-done-advancing-save'.
-Argument GOALEND is the end of the goal;."
+ "Make new goal-save span, using GSPAN.
+Subroutine of `proof-done-advancing-save'.
+Argument GOALEND is the end of the goal."
(unless proof-arbitrary-undo-positions
(span-set-end gspan saveend)
(span-set-property gspan 'type 'goalsave))
@@ -1652,7 +1648,7 @@ Subroutine of `proof-done-advancing-save'."
This partitions the script buffer into contiguous regions, classifying
them by type. Return a list of lists of the form
- (TYPE TEXT ENDPOS)
+ \(TYPE TEXT ENDPOS)
where:
@@ -1866,8 +1862,8 @@ The optional QUEUEFLAGS are added to each queue item."
(span-set-property span 'cmd cmd)
(setq alist (cons qitem alist))))
;; ignored text
- (let ((qitem
- (list span nil cb queueflags))) ; nil was `proof-no-command'
+ (let ((qitem
+ (list span nil cb queueflags))) ; nil was `proof-no-command'
(span-set-property span 'type 'comment)
(setq alist (cons qitem alist))))
(setq start end)))
@@ -1929,7 +1925,7 @@ try to avoid duplicating them in the buffer.
When used in the locked region (and so with strict read only off), it
always defaults to inserting a semi (nicer might be to parse for a
comment, and insert or skip to the next semi)."
- (let ((mrk (point))
+ (let ((mrk (point))
(termregexp (regexp-quote proof-terminal-string))
ins incomment nwsp)
(if (< mrk (proof-unprocessed-begin))
@@ -2051,9 +2047,8 @@ We update display after proof process has reset its state.
See also the documentation for `proof-retract-until-point'.
Optionally delete the region corresponding to the proof sequence.
After an undo, we clear the proof completed flag. The rationale
-is that undoing never leaves prover in a \"proof just completed\"
-state, which is true for some proof assistants (but probably not
-others)."
+is that undoing never leaves prover in a \"proof just completed\" state,
+which is true for some proof assistants (but probably not others)."
;; TODO: need to fixup proof-nesting-depth
(setq proof-shell-proof-completed nil)
(if (span-live-p span)
@@ -2080,7 +2075,7 @@ others)."
;; State of scripting may have changed now
(run-hooks 'proof-state-change-hook))
-(defun proof-setup-retract-action (start end proof-commands remove-action &optional
+(defun proof-setup-retract-action (start end proof-commands remove-action &optional
displayflags)
"Make span from START to END which corresponds to retraction.
Returns retraction action destined for proof shell queue, and make span.
@@ -2192,7 +2187,7 @@ DISPLAYFLAGS control output shown to user, see `proof-action-list'."
undo-action
displayflags))))
- (proof-start-queue (min start end) (proof-unprocessed-begin)
+ (proof-start-queue (min start end) (proof-unprocessed-begin)
actions 'retracting)))
(defun proof-retract-until-point-interactive (&optional delete-region)
@@ -2201,7 +2196,7 @@ If invoked outside a locked region, undo the last successfully processed
command. If called with a prefix argument (DELETE-REGION non-nil), also
delete the retracted region from the proof-script."
(interactive "P")
- (proof-retract-until-point
+ (proof-retract-until-point
(if delete-region 'kill-region)))
(defun proof-retract-until-point (&optional undo-action displayflags)
@@ -2211,8 +2206,8 @@ the locked region. If invoked outside the locked region, undo
the last successfully processed command. See `proof-retract-target'.
After retraction has succeeded in the prover, the filter will call
-`proof-done-retracting'. If UNDO-ACTION is non-nil, it will
-then be invoked on the region in the proof script corresponding to
+`proof-done-retracting'. If UNDO-ACTION is non-nil, it will
+then be invoked on the region in the proof script corresponding to
the proof command sequence.
DISPLAYFLAGS control output shown to user, see `proof-action-list'.
@@ -2224,7 +2219,7 @@ of effects:
for scripting again which may involve retracting
other (dependent) files.
-2. We may query the user whether to save some buffers.
+2. We may query the user whether to save some buffers.
Step 2 may seem odd -- we're undoing (in) the buffer, after all
-- but what may happen is that when scripting starts going
@@ -2377,9 +2372,9 @@ mode features, but are only ever processed atomically by the proof
assistant."
(setq proof-script-buffer-file-name buffer-file-name)
- (setq font-lock-defaults
+ (setq font-lock-defaults
(list '(proof-script-font-lock-keywords)
- ;; see defadvice in proof-syntax
+ ;; see defadvice in proof-syntax
(fboundp (proof-ass-sym font-lock-fontify-syntactically-region))))
;; Has buffer already been processed?
@@ -2599,7 +2594,7 @@ finish setup which depends on specific proof assistant configuration."
;; Invisibility management: show ellipsis
(mapc (lambda (p)
- (add-to-invisibility-spec
+ (add-to-invisibility-spec
(cons (pg-invisible-prop p) t)))
pg-all-idioms)
@@ -2692,7 +2687,7 @@ Stores recent results of `proof-segment-up-to' in reverse order.")
(if (and
proof-use-parser-cache ;; safety off valve
proof-segment-up-to-cache
- (>= (proof-queue-or-locked-end)
+ (>= (proof-queue-or-locked-end)
proof-segment-up-to-cache-start)
(setq res (proof-segment-cache-contents-for pos))
;; only use result if last edit point is >1 segment below
@@ -2716,7 +2711,7 @@ Stores recent results of `proof-segment-up-to' in reverse order.")
(defun proof-segment-cache-contents-for (pos)
;; only return result if we have cache for complete region
- (when (<= pos proof-segment-up-to-cache-end)
+ (when (<= pos proof-segment-up-to-cache-end)
(let ((semis proof-segment-up-to-cache)
(start (proof-queue-or-locked-end))
usedsemis semiend)
@@ -2725,7 +2720,7 @@ Stores recent results of `proof-segment-up-to' in reverse order.")
(if (> semiend start)
(setq usedsemis (cons (car semis) usedsemis)))
(setq semis
- (if (or (< semiend pos)
+ (if (or (< semiend pos)
;; matches parsing-until-find-something behaviour
(and (= semiend pos) (not usedsemis)))
(cdr semis))))
diff --git a/generic/proof-shell.el b/generic/proof-shell.el
index 51305eef..b5bbcd9f 100644
--- a/generic/proof-shell.el
+++ b/generic/proof-shell.el
@@ -1,12 +1,19 @@
;;; proof-shell.el --- Proof General shell mode.
-;;
-;; Copyright (C) 1994-2011 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Yves Bertot, Healfdene Goguen,
;; Thomas Kleymann and Dilip Sequeira
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Mode for buffer which interacts with proof assistant.
@@ -27,7 +34,7 @@
(declare-function proof-tree-urgent-action "proof-tree" (flags))
(declare-function proof-tree-handle-delayed-output "proof-tree"
(old-proof-marker cmd flags span))
-(eval-when (compile)
+(eval-when-compile
;; without the nil initialization the compiler still warns about this variable
(defvar proof-tree-external-display nil))
@@ -52,12 +59,12 @@ The value is a list of lists of the form
which is the queue of things to do.
-SPAN is a region in the sources, where COMMANDS come from. Often,
+SPAN is a region in the sources, where COMMANDS come from. Often,
additional properties are recorded as properties of SPAN.
COMMANDS is a list of strings, holding the text to be send to the
-prover. It might be the empty list if nothing needs to be sent to
-the prover, such as, for comments. Usually COMMANDS
+prover. It might be the empty list if nothing needs to be sent to
+the prover, such as, for comments. Usually COMMANDS
contains just 1 string, but it might also contains more elements.
The text should be obtained with
`(mapconcat 'identity COMMANDS \" \")', where the last argument
@@ -98,14 +105,13 @@ See the functions `proof-start-queue' and `proof-shell-exec-loop'.")
"Signals that some items are waiting outside of `proof-action-list'.
If this is t it means that some items from the queue region are
waiting for being processed in a place different from
-`proof-action-list'. In this case Proof General must behave as if
-`proof-action-list' would be non-empty, when it is, in fact,
-empty.
+`proof-action-list'. In this case Proof General must behave as if
+`proof-action-list' would be non-empty, when it is, in fact, empty.
This is used, for instance, for parallel background compilation
for Coq: The Require command and the following items are not put
into `proof-action-list' and are stored somewhere else until the
-background compilation finishes. Then those items are put into
+background compilation finishes. Then those items are put into
`proof-action-list' for getting processed.")
@@ -151,8 +157,8 @@ from calling `proof-shell-exit'.")
;;
(defcustom proof-shell-active-scripting-indicator
- '(:eval (propertize
- " Scripting " 'face
+ '(:eval (propertize
+ " Scripting " 'face
(cond
(proof-shell-busy 'proof-queue-face)
((eq proof-shell-last-output-kind 'error) 'proof-script-sticky-error-face)
@@ -217,7 +223,7 @@ No change to current buffer or point."
;;;###autoload
(defsubst proof-shell-live-buffer ()
- "Return non-nil if proof-shell-buffer is live."
+ "Return non-nil if ‘proof-shell-buffer’ is live."
(and proof-shell-buffer
(buffer-live-p proof-shell-buffer)
(scomint-check-proc proof-shell-buffer)))
@@ -255,10 +261,10 @@ If QUEUEMODE is supplied, set the lock to that value."
:group 'proof-shell)
(defvar proof-shell-filter-active nil
- "t when `proof-shell-filter' is running.")
+ "Variable equal to t if `proof-shell-filter' is running.")
(defvar proof-shell-filter-was-blocked nil
- "t when a recursive call of `proof-shell-filter' was blocked.
+ "Variable equal to t if a recursive call of `proof-shell-filter' was blocked.
In this case `proof-shell-filter' must be called again after it finished.")
(defun proof-shell-set-text-representation ()
@@ -284,6 +290,13 @@ In this case `proof-shell-filter' must be called again after it finished.")
(setq pg-response-special-display-regexp
(proof-regexp-alt goals resp trace thms))))
+(defun proof-strip-whitespace-at-end (string)
+ "Return STRING stripped of all trailing whitespace."
+ (while (string-match "[\r\n\t ]+$" string)
+ (setq string (replace-match "" t t string)))
+ string)
+
+
(defun proof-shell-start ()
"Initialise a shell-like buffer for a proof assistant.
Does nothing if proof assistant is already running.
@@ -306,8 +319,9 @@ process command."
(if proof-prog-name-ask
;; if this option is set, an absolute file name is better to show if possible
(let ((prog-name (locate-file proof-prog-name exec-path exec-suffixes 1)))
- (setq proof-prog-name (read-shell-command "Run process: "
- prog-name))))
+ (setq proof-prog-name (proof-strip-whitespace-at-end
+ (read-shell-command "Run process: "
+ prog-name)))))
(let
((proc (downcase proof-assistant)))
@@ -343,7 +357,7 @@ process command."
;; The next few settings control the proof assistant encoding.
- ;; See Elisp manual for recommendations for coding systems.
+ ;; See Elisp manual for recommendations for coding systems.
;; Modern versions of proof systems should be Unicode
;; clean, i.e., outputing only ASCII characters or using a
@@ -361,7 +375,7 @@ process command."
(cons
(if (getenv "LANG")
(format "LANG=%s"
- (replace-regexp-in-string
+ (replace-regexp-in-string
"\\.UTF-8" ""
(getenv "LANG")))
"LANG=C")
@@ -472,7 +486,7 @@ shell buffer, called by `proof-shell-bail-out' if process exits."
(when (and alive proc)
(catch 'exited
(setq proof-shell-exit-in-progress t)
- (set-process-sentinel
+ (set-process-sentinel
proc
(lambda (p m) (throw 'exited t)))
@@ -505,7 +519,7 @@ shell buffer, called by `proof-shell-bail-out' if process exits."
(proof-shell-clear-state)
(run-hooks 'proof-shell-kill-function-hooks)
- ;; Remove auxiliary windows, trying to stop proliferation of
+ ;; Remove auxiliary windows, trying to stop proliferation of
;; frames (NB: loses if user has switched buffer in special frame)
(if (and proof-multiple-frames-enable
proof-shell-fiddle-frames)
@@ -543,7 +557,7 @@ shell buffer, called by `proof-shell-bail-out' if process exits."
This simply kills the `proof-shell-buffer' relying on the hook function
-`proof-shell-kill-function' to do the hard work. If optional
+`proof-shell-kill-function' to do the hard work. If optional
argument DONT-ASK is non-nil, the proof process is terminated
without confirmation.
@@ -665,7 +679,7 @@ In both cases we then sound a beep, clear the queue and spans and
finally we call `proof-shell-handle-error-or-interrupt-hook'.
Commands which are not part of regular script management (with
-non-empty flags='no-error-display) will not cause any display action.
+FLAGS containing 'no-error-display) will not cause any display action.
This is called in two places: (1) from the output processing
functions, in case we find an error or interrupt message output,
@@ -682,7 +696,7 @@ didn't cause prover output."
"Interrupt: script management may be in an inconsistent state
(but it's probably okay)"))
(t ; error
- (if proof-shell-delayed-output-start
+ (if proof-shell-delayed-output-start
(save-excursion
(proof-shell-handle-delayed-output)))
(proof-shell-handle-error-output
@@ -709,11 +723,11 @@ unless the FLAGS for the command are non-nil (see `proof-action-list')."
(proof-with-current-buffer-if-exists proof-script-buffer
(save-excursion
- (proof-script-clear-queue-spans-on-error badspan
+ (proof-script-clear-queue-spans-on-error badspan
(eq err-or-int 'interrupt))))
;; Note: coq-par-emergency-cleanup, which might be called via
;; proof-shell-handle-error-or-interrupt-hook below, assumes that
- ;; proof-action-list is empty on error.
+ ;; proof-action-list is empty on error.
(setq proof-action-list nil)
(proof-release-lock)
(unless flags
@@ -724,7 +738,7 @@ unless the FLAGS for the command are non-nil (see `proof-action-list')."
(run-hooks 'proof-shell-handle-error-or-interrupt-hook))))
(defun proof-goals-pos (span maparg)
- "Given a span, return the start of it if corresponds to a goal, nil otherwise."
+ "Given a SPAN, return the start of it if corresponds to a goal, nil otherwise."
(and (eq 'goal (car (span-property span 'proof-top-element)))
(span-start span)))
@@ -741,7 +755,7 @@ This is a hook function for proof-shell-handle-delayed-output-hook."
(defsubst proof-shell-string-match-safe (regexp string)
- "Like string-match except returns nil if REGEXP is nil."
+ "Like (string-match REGEXP STRING), but return nil if REGEXP is nil."
(and regexp (string-match regexp string)))
(defun proof-shell-handle-immediate-output (cmd start end flags)
@@ -772,7 +786,7 @@ after a completed proof."
(cond
;; TODO: Isabelle has changed (since 2009) and is now amalgamating
;; output between prompts, and does e.g.,
- ;; GOALS
+ ;; GOALS
;; ERROR
;; we need to override delayed output from the previous
;; command with delayed output from this command to handle that!
@@ -863,9 +877,9 @@ single string.
The ACTION argument is a symbol which is typically the name of a
callback for when each string has been processed.
-This calls `proof-shell-insert-hook'. The arguments `action' and
-`scriptspan' may be examined by the hook to determine how to modify
-the `string' variable (exploiting dynamic scoping) which will be
+This calls `proof-shell-insert-hook'. The arguments ACTION and
+SCRIPTSPAN may be examined by the hook to determine how to modify
+the string variable (exploiting dynamic scoping) which will be
the command actually sent to the shell.
Note that the hook is not called for the empty (null) string
@@ -944,7 +958,7 @@ track what happens in the proof queue."
"Non-nil if we should switch to silent mode based on size of queue."
(if (and proof-shell-start-silent-cmd ; configured
(not proof-full-annotation) ; always noisy
- (not proof-tree-external-display) ; no proof-tree display
+ (not proof-tree-external-display) ; no proof-tree display
(not proof-shell-silent)) ; already silent
;; NB: to be more accurate we should only count number
;; of scripting items in the list (not e.g. invisibles).
@@ -1029,7 +1043,7 @@ being processed."
proof-action-list)
(cons (car proof-action-list) ; after current
(cons (proof-shell-stop-silent-item)
- (cdr proof-action-list))))))
+ (cdr proof-action-list))))))
(when nothingthere ; start sending commands
(proof-grab-lock queuemode)
(setq proof-shell-last-output-kind nil)
@@ -1044,11 +1058,11 @@ being processed."
;;;###autoload
(defun proof-start-queue (start end queueitems &optional queuemode)
- "Begin processing a queue of commands in QUEUEITEMS.
+ "Begin processing a queue of commands.
If START is non-nil, START and END are buffer positions in the
active scripting buffer for the queue region.
-This function calls `proof-add-to-queue'."
+This function calls ‘proof-add-to-queue’ with args QUEUEITEMS and QUEUEMODE."
(if start
(proof-set-queue-endpoints start end))
(proof-add-to-queue queueitems queuemode))
@@ -1115,7 +1129,8 @@ contains only invisible elements for Prooftree synchronization."
;; added by proof-shell-empty-action-list-command (prover
;; specific), call it.
(when (and (null proof-action-list)
- (not (memq 'empty-action-list flags)))
+ (not (memq 'empty-action-list flags))
+ proof-shell-empty-action-list-command)
(let* ((cmd (mapconcat 'identity (nth 1 item) " "))
(extra-cmds (apply proof-shell-empty-action-list-command (list cmd)))
;; tag all new items with 'empty-action-list
@@ -1157,7 +1172,7 @@ contains only invisible elements for Prooftree synchronization."
(proof-shell-insert-action-item (car proof-action-list)))
;; process the delayed callbacks now
- (mapc 'proof-shell-invoke-callback cbitems)
+ (mapc 'proof-shell-invoke-callback cbitems)
(unless (or proof-action-list proof-second-action-list-active)
; release lock, cleanup
@@ -1202,8 +1217,8 @@ and indentation. Assumes `proof-script-buffer' is active."
(defun proof-shell-process-urgent-message (start end)
"Analyse urgent message between START and END for various cases.
-Cases are: *trace* output, included/retracted files, cleared
-goals/response buffer, variable setting, xml-encoded PGIP response,
+Cases are: *trace* output, included/retracted files, cleared
+goals/response buffer, variable setting, xml-encoded PGIP response,
theorem dependency message or interactive output indicator.
If none of these apply, display the text between START and END.
@@ -1285,11 +1300,10 @@ A subroutine of `proof-shell-process-urgent-message'."
(defun proof-shell-process-urgent-message-retract (start end)
"A subroutine of `proof-shell-process-urgent-message'.
-Takes files off `proof-included-files-list' and calls
-`proof-restart-buffers' to do the necessary clean-up on those
-buffers visting a file that disappears from
-`proof-included-files-list'. So in some respect this function is
-inverse to `proof-register-possibly-new-processed-file'."
+Take files off `proof-included-files-list' and call `proof-restart-buffers'
+to do the necessary clean-up on those buffers visiting a file that disappears
+from `proof-included-files-list'. So in some respect, this function is inverse
+to `proof-register-possibly-new-processed-file'."
(let ((current-included proof-included-files-list))
(setq proof-included-files-list
(funcall proof-shell-compute-new-files-list))
@@ -1347,7 +1361,7 @@ inverse to `proof-register-possibly-new-processed-file'."
;;
(defun proof-shell-strip-eager-annotations (start end)
- "Strip `proof-shell-eager-annotation-{start,end}' from region."
+ "Strip `proof-shell-eager-annotation-{START,END}' from region."
(goto-char start)
(if (re-search-forward proof-shell-eager-annotation-start end nil)
(setq start (point)))
@@ -1391,20 +1405,20 @@ calls."
(setq proof-shell-filter-active nil
proof-shell-filter-was-blocked nil)
(signal (car err) (cdr err))))
- (setq call-proof-shell-filter proof-shell-filter-was-blocked)))))
+ (setq call-proof-shell-filter proof-shell-filter-was-blocked)))))
(defun proof-shell-filter ()
"Master filter for the proof assistant shell-process.
A function for `scomint-output-filter-functions'.
-Deal with output and issue new input from the queue. This is an
-important internal function. The output must be collected from
-`proof-shell-buffer' for the following reason. This function
+Deal with output and issue new input from the queue. This is an
+important internal function. The output must be collected from
+`proof-shell-buffer' for the following reason. This function
might block inside `process-send-string' when sending input to
-the proof assistant or to prooftree. In this case Emacs might
+the proof assistant or to prooftree. In this case Emacs might
call the process filter again while the previous instance is
-still running. `proof-shell-filter-wrapper' detects and delays
+still running. `proof-shell-filter-wrapper' detects and delays
such calls but does not buffer the output.
Handle urgent messages first. As many as possible are processed,
@@ -1686,7 +1700,7 @@ i.e., 'goals or 'response."
(setq both
(> (- gmark rstart) 4))
(if both
- (proof-shell-display-output-as-response
+ (proof-shell-display-output-as-response
flags
(buffer-substring-no-properties rstart gmark)))
;; display goals output second so it persists in 2-pane mode
@@ -1747,10 +1761,10 @@ Only works when system timer has microsecond count available."
(> (- tm pg-last-tracing-output-time) pg-slow-mode-duration)
(setq dontprint nil))
(when ;; time since last tracing output less than threshold
- (and
- (< (- tm pg-last-tracing-output-time)
+ (and
+ (< (- tm pg-last-tracing-output-time)
(/ pg-fast-tracing-mode-threshold 1000000.0))
- (>= (incf pg-last-trace-output-count)
+ (>= (incf pg-last-trace-output-count)
pg-slow-mode-trigger-count))
;; quickly consecutive tracing outputs: go into slow mode
(setq dontprint t)
@@ -1763,7 +1777,7 @@ Only works when system timer has microsecond count available."
"Handle the end of possibly voluminous tracing-style output.
If the output update was slowed down, show it now."
(proof-trace-buffer-finish)
- (when pg-tracing-slow-mode
+ (when pg-tracing-slow-mode
(proof-display-and-keep-buffer proof-trace-buffer)
(setq pg-tracing-slow-mode nil))
(setq pg-last-trace-output-count 0))
@@ -1784,7 +1798,7 @@ If the output update was slowed down, show it now."
Needed between sequences of commands to maintain synchronization,
because Proof General does not allow for the action list to be extended
-in some cases. Also is considerably faster than leaving the Emacs
+in some cases. Also is considerably faster than leaving the Emacs
top-level command loop to read from the prover.
Called by `proof-shell-invisible-command' and `proof-process-buffer'
@@ -1799,7 +1813,7 @@ If TIMEOUTSECS is a number, time out after that many seconds."
(/ timeoutsecs accepttime))))
(when proverproc
(while (and proof-shell-busy (not quit-flag)
- (if timecount
+ (if timecount
(> (setq timecount (1- timecount)) 0)
t)
(not (and interrupt-on-input (input-pending-p))))
@@ -1810,8 +1824,8 @@ If TIMEOUTSECS is a number, time out after that many seconds."
(error "Proof General: quit in proof-shell-wait")))))
(defun proof-done-invisible (span)
- "Callback for proof-shell-invisible-command.
-Calls proof-state-change-hook."
+ "Callback for ‘proof-shell-invisible-command’.
+Call ‘proof-state-change-hook’."
(run-hooks 'proof-state-change-hook))
;;;###autoload
@@ -1911,7 +1925,6 @@ Error messages are displayed as usual."
;; Proof General shell mode definition
;;
-;(eval-and-compile ; to define vars
;;;###autoload
(define-derived-mode proof-shell-mode scomint-mode
"proof-shell" "Proof General shell mode class for proof assistant processes"
@@ -2006,7 +2019,7 @@ processing."
(if (listp proof-shell-init-cmd)
(mapc 'proof-shell-invisible-command-invisible-result
proof-shell-init-cmd)
- (proof-shell-invisible-command-invisible-result
+ (proof-shell-invisible-command-invisible-result
proof-shell-init-cmd)))
(proof-shell-wait)
(if proof-assistant-settings
diff --git a/generic/proof-site.el b/generic/proof-site.el
index 671c3c82..e339d022 100644
--- a/generic/proof-site.el
+++ b/generic/proof-site.el
@@ -1,13 +1,20 @@
-;; proof-site.el -- Loading stubs for Proof General.
-;;
-;; Copyright (C) 1998-2003 LFCS Edinburgh.
+;;; proof-site.el --- Loading stubs for Proof General.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
-;;
+;;
;; Loading stubs and configuration for site and choice of provers.
;;
;; NB: Normally users do not need to edit this file. Developers/installers
@@ -25,12 +32,12 @@
;;; Code:
;; Entries in proof-assistant-table-default are lists of the form
-;;
+;;
;; (SYMBOL NAME FILE-EXTENSION [AUTOMODE-REGEXP] [IGNORED-EXTENSIONS-LIST])
;;
;; FILE-EXTENSION is without dot ".". AUTOMODE-REGEXP is put into
;; auto-mode-alist, if it is not present, a regexp will be made up from
-;; FILE-EXTENSION. IGNORED-EXTENSIONS-LIST, if present, is appended to
+;; FILE-EXTENSION. IGNORED-EXTENSIONS-LIST, if present, is appended to
;; completion-ignored-extensions. See proof-assistant-table for more info.
;;
(defconst proof-assistant-table-default
@@ -39,11 +46,11 @@
(isar "Isabelle" "thy")
(coq "Coq" "v" nil (".vo" ".glob"))
- (easycrypt "EasyCrypt" "ec" ".*\\.eca?")
+ (easycrypt "EasyCrypt" "ec" "\\.eca?\\'")
+ (phox "PhoX" "phx" nil (".phi" ".pho"))
;; Obscure instances or conflict with other Emacs modes.
- ;; (phox "PhoX" "phx")
;; (lego "LEGO" "l")
;; (ccc "CASL Consistency Checker" "ccc")
@@ -54,7 +61,7 @@
(pgshell "PG-Shell" "pgsh")
(pgocaml "PG-OCaml" "pgml")
(pghaskell "PG-Haskell" "pghci")
-
+
;; Incomplete/obsolete:
;; (hol98 "HOL" "sml")
@@ -73,7 +80,7 @@
(eval-and-compile
;; WARNING: do not edit next line (constant is edited in Makefile.devel)
- (defconst proof-general-version "Proof General Version 4.4.1~pre."
+ (defconst proof-general-version "Proof General Version 4.5-git."
"Version string identifying Proof General release."))
(defconst proof-general-short-version
@@ -149,7 +156,7 @@ You can use customize to set this variable."
;;
(defun proof-add-to-load-path (dir)
- "Add DIR to `load-path' if not contained already"
+ "Add DIR to `load-path' if not contained already."
(add-to-list 'load-path dir))
(proof-add-to-load-path (concat proof-home-directory "generic/"))
@@ -163,7 +170,7 @@ You can use customize to set this variable."
(require 'proof-autoloads)
(eval-when-compile
- (defvar Info-dir-contents nil))
+ (defvar Info-dir-contents))
;; Add the info directory to the Info path
(if (file-exists-p proof-info-directory) ; for safety
@@ -199,10 +206,10 @@ Each entry is a list of the form
The NAME is a string, naming the proof assistant.
The SYMBOL is used to form the name of the mode for the
assistant, `SYMBOL-mode', run when files with AUTOMODE-REGEXP
-\(or with extension FILE-EXTENSION) are visited. If present,
+\(or with extension FILE-EXTENSION) are visited. If present,
IGNORED-EXTENSIONS-LIST is a list of file-name extensions to be
ignored when doing file-name completion (IGNORED-EXTENSIONS-LIST
-is added to completion-ignored-extensions).
+is added to ‘completion-ignored-extensions’).
SYMBOL is also used to form the name of the directory and elisp
file for the mode, which will be
@@ -296,21 +303,21 @@ If ASSISTANT-NAME is omitted, look up in `proof-assistant-table'."
(run-hooks 'proof-ready-for-assistant-hook))))))
-(defvar proof-general-configured-provers
+(defvar proof-general-configured-provers
(or (mapcar 'intern (split-string (or (getenv "PROOFGENERAL_ASSISTANTS") "")))
proof-assistants
(mapcar (lambda (astnt) (car astnt)) proof-assistant-table))
"A list of the configured proof assistants.
Set on startup to contents of environment variable PROOFGENERAL_ASSISTANTS,
-the lisp variable `proof-assistants', or the contents of `proof-assistant-table'.")
-
+the Lisp variable `proof-assistants', or the contents of `proof-assistant-table'.")
+
;; Add auto-loads and load-path elements to support the
;; proof assistants selected, and define stub major mode functions
(let ((assistants proof-general-configured-provers))
(while assistants
(let*
((assistant (car assistants)) ; compiler bogus warning here
- (tableentry
+ (tableentry
(or (assoc assistant
proof-assistant-table)
(error "Symbol %s is not in proof-assistant-table (in proof-site)"
@@ -370,16 +377,16 @@ the lisp variable `proof-assistants', or the contents of `proof-assistant-table'
;;
(defun proof-chose-prover (prompt)
- (completing-read prompt
- (mapcar 'symbol-name
+ (completing-read prompt
+ (mapcar 'symbol-name
proof-general-configured-provers)))
(defun proofgeneral (prover)
"Start proof general for prover PROVER."
(interactive
(list (proof-chose-prover "Start Proof General for theorem prover: ")))
- (proof-ready-for-assistant (intern prover)
- (nth 1 (assoc (intern prover)
+ (proof-ready-for-assistant (intern prover)
+ (nth 1 (assoc (intern prover)
proof-assistant-table-default)))
(require (intern prover)))
@@ -391,7 +398,7 @@ the lisp variable `proof-assistants', or the contents of `proof-assistant-table'
prover "/example."
(nth 2 (assoc (intern prover) proof-assistant-table-default)))))
-
+
(provide 'proof-site)
diff --git a/generic/proof-splash.el b/generic/proof-splash.el
index 25db0946..75164890 100644
--- a/generic/proof-splash.el
+++ b/generic/proof-splash.el
@@ -1,12 +1,18 @@
-;; proof-splash.el -- Splash welcome screen for Proof General
-;;
-;; Copyright (C) 1998-2005, 2009, 2010 LFCS Edinburgh.
+;;; proof-splash.el --- Splash welcome screen for Proof General
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
-;;
+
;;; Commentary:
;;
;; Provide splash screen for Proof General.
@@ -98,7 +104,7 @@ If it is nil, a new line is inserted."
"Name of the Proof General splash buffer.")
(define-derived-mode proof-splash-mode fundamental-mode
- "Splash" "Mode for splash.
+ "Splash" "Mode for splash.
\\{proof-splash-mode-map}"
(set-buffer-modified-p nil)
(setq buffer-read-only t))
@@ -132,12 +138,12 @@ Borrowed from startup-center-spaces."
(glyph-pixwidth (cond ((stringp glyph)
(* avg-pixwidth (length glyph)))
((proof-emacs-imagep glyph)
- (car (with-no-warnings
+ (car (with-no-warnings
; image-size not available in tty emacs
(image-size glyph 'inpixels))))
(t
(error
- "proof-splash-centre-spaces: bad arg")))))
+ "Function proof-splash-centre-spaces: bad arg")))))
(+ left-margin
(round (/ (/ (- fill-area-width glyph-pixwidth) 2) avg-pixwidth)))))
@@ -145,7 +151,7 @@ Borrowed from startup-center-spaces."
;; underneath the splash screen. This is just to be polite.
;; NB: not as polite as it could be: if minibuffer is active,
;; this may deactivate it.
-;; NB2: There is something worse here: pending input
+;; NB2: There is something worse here: pending input
;; causes this function to spoil the mode startup, if the splash
;; buffer is killed before the input has been processed.
;; Symptom is ProofGeneral mode instead of the native script mode.
@@ -155,7 +161,7 @@ Borrowed from startup-center-spaces."
"Remove splash screen and restore window config."
(let ((splashbuf (get-buffer proof-splash-welcome)))
(proof-splash-unset-frame-titles)
- (if (and
+ (if (and
splashbuf
proof-splash-timeout-conf)
(progn
@@ -172,10 +178,10 @@ Borrowed from startup-center-spaces."
"Remove the splash buffer if it's still present."
(let
((splashbuf (get-buffer proof-splash-welcome)))
- (if splashbuf
+ (if splashbuf
;; Kill should be right, but it can cause core dump
;; on XEmacs (kill-buffer splashbuf) (TODO: check Emacs now)
- (if (eq (selected-window) (window-buffer
+ (if (eq (selected-window) (window-buffer
(selected-window)))
(bury-buffer splashbuf)))))
@@ -202,7 +208,7 @@ Borrowed from startup-center-spaces."
(let ((spec (car splash-contents)))
(if (functionp spec)
(setq spec (funcall spec)))
- (indent-to (proof-splash-centre-spaces
+ (indent-to (proof-splash-centre-spaces
(concat (car spec) (cadr spec))))
(insert (car spec))
(insert-button (cadr spec)
@@ -264,7 +270,7 @@ binding to remove this buffer."
(defun proof-splash-message ()
"Make sure the user gets welcomed one way or another."
(interactive)
- (unless (or proof-splash-seen noninteractive)
+ (unless (or proof-splash-seen noninteractive (bound-and-true-p byte-compile-current-file))
(if proof-splash-enable
(progn
;; disable ordinary emacs splash
diff --git a/generic/proof-syntax.el b/generic/proof-syntax.el
index 84b5940d..5871a993 100644
--- a/generic/proof-syntax.el
+++ b/generic/proof-syntax.el
@@ -1,23 +1,27 @@
-;; proof-syntax.el --- Functions for dealing with syntax
-;;
-;; Copyright (C) 1997-2001, 2010 LFCS Edinburgh.
+;;; proof-syntax.el --- Functions for dealing with syntax
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Healfdene Goguen,
;; Thomas Kleymann, Dilip Sequiera
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
-
-(require 'font-lock)
-(require 'proof-config) ; proof-case-fold-search
-(require 'proof-compat) ; proof-buffer-syntactic-context
-(require 'pg-pamacs) ; proof-ass-sym
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;;; Commentary:
;;
;;; Code:
+(require 'font-lock)
+(require 'proof-config) ; proof-case-fold-search
+(require 'proof-compat) ; proof-buffer-syntactic-context
+(require 'pg-pamacs) ; proof-ass-sym
(defsubst proof-ids-to-regexp (l)
"Maps a non-empty list of tokens L to a regexp matching any element.
@@ -60,56 +64,56 @@ nil if a region cannot be found."
;; applicable.
(defsubst proof-search-forward (string &optional bound noerror count)
- "Like search-forward, but set case-fold-search to proof-case-fold-search."
+ "Like ‘search-forward’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(let
((case-fold-search proof-case-fold-search))
(search-forward string bound noerror count)))
;;;###autoload
(defsubst proof-replace-regexp-in-string (regexp rep string)
- "Like replace-regexp-in-string, but set case-fold-search to proof-case-fold-search."
+ "Like ‘replace-regexp-in-string’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(let ((case-fold-search proof-case-fold-search))
(replace-regexp-in-string regexp rep string)))
(defsubst proof-re-search-forward (regexp &optional bound noerror count)
- "Like re-search-forward, but set case-fold-search to proof-case-fold-search."
+ "Like ‘re-search-forward’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(let ((case-fold-search proof-case-fold-search))
(re-search-forward regexp bound noerror count)))
(defsubst proof-re-search-backward (regexp &optional bound noerror count)
- "Like re-search-backward, but set case-fold-search to proof-case-fold-search."
+ "Like ‘re-search-backward’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(let ((case-fold-search proof-case-fold-search))
(re-search-backward regexp bound noerror count)))
(defsubst proof-re-search-forward-safe (regexp &optional bound noerror count)
- "Like re-search-forward, but set case-fold-search to proof-case-fold-search."
+ "Like ‘re-search-forward’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(and regexp
(let ((case-fold-search proof-case-fold-search))
(re-search-forward regexp bound noerror count))))
(defsubst proof-string-match (regexp string &optional start)
- "Like string-match, but set case-fold-search to proof-case-fold-search."
+ "Like ‘string-match’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(let ((case-fold-search proof-case-fold-search))
(string-match regexp string start)))
(defsubst proof-string-match-safe (regexp string &optional start)
- "Like `string-match', but return nil if REGEXP or STRING is nil."
+ "Like ‘string-match’, but return nil if REGEXP or STRING is nil."
(if (and regexp string) (proof-string-match regexp string start)))
(defsubst proof-stringfn-match (regexp-or-fn string)
- "Like proof-string-match if first arg is regexp, otherwise call it."
+ "Like ‘proof-string-match’ if first arg is regexp, otherwise call it."
(cond ((stringp regexp-or-fn)
(proof-string-match regexp-or-fn string))
((functionp regexp-or-fn)
(funcall regexp-or-fn string))))
(defsubst proof-looking-at (regexp)
- "Like looking-at, but set case-fold-search to proof-case-fold-search."
+ "Like ‘looking-at’, but set ‘case-fold-search’ to ‘proof-case-fold-search’."
(let ((case-fold-search proof-case-fold-search))
(looking-at regexp)))
(defsubst proof-looking-at-safe (regexp)
- "Like `proof-looking-at', but return nil if REGEXP is nil."
+ "Like ‘proof-looking-at’, but return nil if REGEXP is nil."
(if regexp (proof-looking-at regexp)))
;;
@@ -232,7 +236,7 @@ this were even more bogus...."
(eval-after-load "font-lock"
'(progn
(defadvice font-lock-fontify-keywords-region
- (before font-lock-fontify-keywords-advice (beg end loudly))
+ (before font-lock-fontify-keywords-advice (beg end &optional loudly))
"Call proof assistant specific syntactic region fontify.
If it's bound, we call <PA>-font-lock-fontify-syntactically-region."
(when (and proof-buffer-type
diff --git a/generic/proof-toolbar.el b/generic/proof-toolbar.el
index af9e8694..88552476 100644
--- a/generic/proof-toolbar.el
+++ b/generic/proof-toolbar.el
@@ -1,11 +1,18 @@
;;; proof-toolbar.el --- Toolbar for Proof General
-;;
-;; Copyright (C) 1998-2009 David Aspinall / LFCS.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; It's a little bit tricky to add prover-specific items:
diff --git a/generic/proof-tree.el b/generic/proof-tree.el
index f0894656..cb85952d 100644
--- a/generic/proof-tree.el
+++ b/generic/proof-tree.el
@@ -1,14 +1,21 @@
-;;; tree-tree.el --- Proof General prooftree communication.
-;;
-;; Copyright (C) 2012 Hendrik Tews
+;;; proof-tree.el --- Proof General prooftree communication.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Hendrik Tews
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
-;; Generic code for the communication with prooftree. Prooftree
+;; Generic code for the communication with prooftree. Prooftree
;; is an ocaml-gtk program that displays proof trees.
;;
;; The main problem with proof tree visualization is that Coq (and
@@ -19,20 +26,20 @@
;;
;; To solve this problem prooftree relies on unique identification
;; strings of goals, which are called goal or sequent ID's in the
-;; code. With these ID's it is easy to keep track which goals are new.
+;; code. With these ID's it is easy to keep track which goals are new.
;;
;; A second problem is that, for an undo command, Coq (and probably
;; other proof assistants as well) does not tell which subgoals and
-;; which finished branches must be deleted. Therefore prooftree needs
+;; which finished branches must be deleted. Therefore prooftree needs
;; a continuously increasing proof state number and keeps a complete
;; undo history for every proof.
;;
;; A third problem is that Coq (and probably other proof assistants as
;; well) is not able to generate the information for a proof tree in
-;; the middle of a proof. Therefore, if the user wants to start the
+;; the middle of a proof. Therefore, if the user wants to start the
;; proof-tree display in the middle of the proof, it is necessary to
;; retract to the start of the proof and then to reassert to the
-;; previous end of the locked region. To achieve this, one has to call
+;; previous end of the locked region. To achieve this, one has to call
;; `accept-process-output' at suitable points to let Proof General
;; process the `proof-action-list'.
;;
@@ -49,36 +56,36 @@
;;
;; * To avoid synchronization trouble the communication between
;; Proof General and prooftree is almost one way only: Only Proof
-;; General sends display or undo commands to Prooftree. Prooftree
+;; General sends display or undo commands to Prooftree. Prooftree
;; never requests any proof-state information from Proof General.
;; Prooftree only sends a quit message to Proof General when the
-;; user closes the proof-tree display of the current proof. This
+;; user closes the proof-tree display of the current proof. This
;; goal requires that some of the heuristics, which decide which
;; subgoals are new and which have to be refreshed, have to be
;; implemented here.
;;
-;; In general the glue code here works on the delayed output. That is,
+;; In general the glue code here works on the delayed output. That is,
;; the glue code here runs when the next proof command has already
-;; been sent to the proof assistant. The glue code makes a light
+;; been sent to the proof assistant. The glue code makes a light
;; analysis on the output of the proof assistant, extracts the
;; necessary parts with regular expressions and sends appropriate
-;; commands to prooftree. This is achieved by calling the main entry
+;; commands to prooftree. This is achieved by calling the main entry
;; here, the function `proof-tree-handle-delayed-output' from the
;; proof shell filter function after `proof-shell-exec-loop' has
;; finished.
;;
-;; However, some aspects can not be delayed. Those are treated by
-;; `proof-tree-urgent-action'. Its primary use is for inserting
+;; However, some aspects can not be delayed. Those are treated by
+;; `proof-tree-urgent-action'. Its primary use is for inserting
;; special goal-displaying commands into `proof-action-list' before
-;; the next real proof command runs. For Coq this needs to be done for
+;; the next real proof command runs. For Coq this needs to be done for
;; newly generated subgoals and for goals that contain an existential
;; variable that got instantiated in the last proof step.
;;
;; Actually, for every proof, Prooftree can display a set of disjunct
-;; proof trees, which are organized into layers. More than one proof
+;; proof trees, which are organized into layers. More than one proof
;; tree in more than one layer is needed to support the Grap
-;; Existential Variables command in Coq. There is one proof tree in
-;; the first layer for the original goal. The second layer contains
+;; Existential Variables command in Coq. There is one proof tree in
+;; the first layer for the original goal. The second layer contains
;; all the goals that the first Grab Existential Variables command
;; created from uninstantiated existential variabes in the main proof.
;; The third layer contains the goals that the second Grap Existential
@@ -88,7 +95,7 @@
(require 'cl)
-(eval-when (compile)
+(eval-when-compile
(require 'proof-shell))
@@ -127,8 +134,8 @@
(defcustom proof-tree-ignored-commands-regexp nil
"Commands that should be ignored for the prooftree display.
The output of commands matching this regular expression is not
-sent to prooftree. It should match commands that display
-additional information but do not make any proof progress. Leave
+sent to prooftree. It should match commands that display
+additional information but do not make any proof progress. Leave
at nil to act on all commands.
For Coq this regular expression should contain all commands such
@@ -139,7 +146,7 @@ as Lemma, that can start a proof."
(defcustom proof-tree-navigation-command-regexp nil
"Regexp to match a navigation command.
A navigation command typically focusses on a different open goal
-without changing any of the open goals. Leave at nil if there are
+without changing any of the open goals. Leave at nil if there are
no navigation commands."
:type '(choice regexp (const nil))
:group 'proof-tree-internals)
@@ -148,15 +155,15 @@ no navigation commands."
"Regexp to match cheating proofer commands.
A cheating command finishes the current goal without proving it
to permit the user to first focus on other parts of the
-development. Examples are \"sorry\" in Isabelle and \"admit\" in
-Coq. Leave at nil if there are no cheating commands."
+development. Examples are \"sorry\" in Isabelle and \"admit\" in
+Coq. Leave at nil if there are no cheating commands."
:type '(choice regexp (const nil))
:group 'proof-tree-internals)
(defcustom proof-tree-new-layer-command-regexp nil
"Regexp to match proof commands that add new goals to a proof.
This regexp must match the command that turns the proof assistant
-into prover mode, which adds the initial goal to the proof. It
+into prover mode, which adds the initial goal to the proof. It
must further match commands that add additional goals after all
previous goals have been proved."
:type 'regexp
@@ -165,7 +172,7 @@ previous goals have been proved."
(defcustom proof-tree-current-goal-regexp nil
"Regexp to match the current goal and its ID.
The regexp is matched against the output of the proof assistant
-to extract the current goal with its ID. The regexp must have 2
+to extract the current goal with its ID. The regexp must have 2
grouping constructs, the first one matches just the ID, the
second one the complete sequent text that is to be sent to
prooftree."
@@ -176,9 +183,9 @@ prooftree."
"Regexp to match a goal and its ID.
The regexp is matched against the output of additional show-goal
commands inserted by Proof General with a command returned by
-`proof-tree-show-sequent-command'. Proof General inserts such
-commands to update the goal text in prooftree. This is necessary,
-for instance, when existential variables get instantiated. This
+`proof-tree-show-sequent-command'. Proof General inserts such
+commands to update the goal text in prooftree. This is necessary,
+for instance, when existential variables get instantiated. This
regexp must have 2 grouping constructs, the first matching the ID
of the goal, the second the complete sequent text."
:type 'regexp
@@ -187,7 +194,7 @@ of the goal, the second the complete sequent text."
(defcustom proof-tree-additional-subgoal-ID-regexp nil
"Regular expression to match ID's of additional subgoals.
This regexp is used to extract the ID's of all additionally open
-goals. The regexp is used in a while loop and must match one
+goals. The regexp is used in a while loop and must match one
subgoal ID with subgroup 1."
:type 'regexp
:group 'proof-tree-internals)
@@ -195,8 +202,8 @@ subgoal ID with subgroup 1."
(defcustom proof-tree-existential-regexp nil
"Regexp to match existential variables.
Existential variables exist for instance in Isabelle/Hol and in
-Coq. They are placeholders for terms that might (for Coq they
-must) get instantiated in a later stage of the proof. This regexp
+Coq. They are placeholders for terms that might (for Coq they
+must) get instantiated in a later stage of the proof. This regexp
should match one existential variable in subgroup 1. It is used
inside a while loop to extract all existential variables from the
goal text or from a list of existential variables.
@@ -212,7 +219,7 @@ Together with `proof-tree-existentials-state-end-regexp', this
regular expression is used to determine the state display of
existential variables, which contains information about which
existentials are still uninstantiated and about dependencies of
-instantiated existential variables. Leave this variable nil, if
+instantiated existential variables. Leave this variable nil, if
there is no such state display."
:type '(choice regexp (const nil))
:group 'proof-tree-internals)
@@ -223,7 +230,7 @@ Together with `proof-tree-existentials-state-start-regexp', this
regular expression is used to determine the state display of
existential variables, which contains information about which
existentials are still uninstantiated and about dependencies of
-instantiated existential variables. If this variable is nil (and
+instantiated existential variables. If this variable is nil (and
if `proof-tree-existentials-state-start-regexp' is non-nil), then
the state display expands to the end of the prover output."
:type '(choice regexp (const nil))
@@ -235,29 +242,29 @@ This must match in precisely the following cases:
- The current branch has been finished but there is no current
open subgoal because the prover has not switched to the next
subgoal.
-- The last open goal has been proved. "
+- The last open goal has been proved."
:type 'regexp
:group 'proof-tree-internals)
(defcustom proof-tree-get-proof-info nil
"Proof assistant specific function for information about the current proof.
-This function takes no arguments. It must return a list, which
+This function takes no arguments. It must return a list, which
contains, in the following order:
* the current state number (as positive integer)
* the name of the current proof (as string) or nil
-The state number is used to implement undo in prooftree. The
+The state number is used to implement undo in prooftree. The
proof name is used to distinguish different proofs inside
prooftree.
The state number is interpreted as the state that has been
-reached after the last command has been processed. It must be
-consistent in the following sense. Firstly, it must be strictly
+reached after the last command has been processed. It must be
+consistent in the following sense. Firstly, it must be strictly
increasing for successive commands that can be individually
-retracted. Secondly, the state number reported after some command
+retracted. Secondly, the state number reported after some command
X has been processed must be strictly greater than the state
-reported when X is retracted. Finally, state numbers of commands
+reported when X is retracted. Finally, state numbers of commands
preceding X must be less than or equal the state reported when X
is retracted (but no stuff before X)."
:type 'function
@@ -270,7 +277,7 @@ variables, that is, if `proof-tree-existential-regexp' is
non-nil.
If defined, this function should return the list of currently
-instantiated existential variables as a list of strings. The
+instantiated existential variables as a list of strings. The
function is called with `proof-shell-buffer' as current
buffer and with two arguments start and stop, which designate the
region containing the last output from the proof assistant.
@@ -284,7 +291,7 @@ function."
"Proof assistant specific function for a show-goal command.
This function is applied to an ID of a goal and should return a
command (as string) that will display the complete sequent with
-that ID. The regexp `proof-tree-update-goal-regexp' should match
+that ID. The regexp `proof-tree-update-goal-regexp' should match
the output of the proof assistant for the returned command, such
that `proof-tree-update-sequent' will update the sequent ID
inside prooftree.
@@ -297,11 +304,11 @@ function should return nil and prooftree will not get updated."
(defcustom proof-tree-find-begin-of-unfinished-proof nil
"Proof assistant specific function for the start of the current proof.
This function is called with no argument when the user switches
-the external proof-tree display on. Then, this function must
+the external proof-tree display on. Then, this function must
determine if there is a currently unfinished proof for which the
-proof-tree display should be started. If yes this function must
+proof-tree display should be started. If yes this function must
return the starting position of the command that started this
-proof. If there is no such proof, this function must return nil."
+proof. If there is no such proof, this function must return nil."
:type 'function
:group 'proof-tree-internals)
@@ -309,8 +316,8 @@ proof. If there is no such proof, this function must return nil."
"Proof assistant specific function for finding the point to undo to.
This function is used to convert the state number, which comes
with an undo command from Prooftree, into a point position for
-`proof-retract-until-point'. This function is called in the
-current scripting buffer with the state number as argument. It
+`proof-retract-until-point'. This function is called in the
+current scripting buffer with the state number as argument. It
must return a buffer position."
:type 'function
:group 'proof-tree-internals)
@@ -320,7 +327,7 @@ must return a buffer position."
This hook is called (indirectly) from inside
`proof-shell-exec-loop' after the preceeding command and any
comments that follow have been choped off `proof-action-list' and
-before the next command is sent to the proof assistant. This hook
+before the next command is sent to the proof assistant. This hook
can therefore be used to insert additional commands into
`proof-action-list' that must be executed before the next real
proof command.
@@ -329,7 +336,7 @@ Functions in this hook can rely on `proof-info' being bound to
the result of `proof-tree-get-proof-info'.
This hook is used, for instance, for Coq to insert Show commands
-for newly generated subgoals. (The normal Coq output does not
+for newly generated subgoals. (The normal Coq output does not
contain the complete sequent text of newly generated subgoals.)"
:type 'hook
:group 'proof-tree-internals)
@@ -342,19 +349,19 @@ contain the complete sequent text of newly generated subgoals.)"
(defvar proof-tree-external-display nil
"Display proof trees in external prooftree windows if t.
Actually, if this variable is t then the user requested an
-external proof-tree display. If there was no unfinished proof
+external proof-tree display. If there was no unfinished proof
when proof-tree display was requested and if no proof has been
started since then, then there is obviously no proof-tree
-display. In this case, this variable stays t and the proof-tree
+display. In this case, this variable stays t and the proof-tree
display will be started for the next proof.
Controlled by `proof-tree-external-display-toggle'.")
(defvar proof-tree-process nil
- "Emacs lisp process object of the prooftree process.")
+ "Emacs Lisp process object of the prooftree process.")
(defconst proof-tree-process-name "proof-tree"
- "Name of the prooftree process for Emacs lisp.")
+ "Name of the prooftree process for Emacs Lisp.")
(defconst proof-tree-process-buffer-name
(concat "*" proof-tree-process-name "*")
@@ -380,13 +387,13 @@ This variable is only maintained and meaningful if
"Hash table to remember sequent ID's.
Needed because some proof assistants do not distinguish between
new subgoals, which have been created by the last proof command,
-and older, currently unfocussed subgoals. If Proof General meets
+and older, currently unfocussed subgoals. If Proof General meets
a goal, it is treated as new subgoal if it is not in this hash yet.
-The hash is mostly used as a set of sequent ID's. However, for
+The hash is mostly used as a set of sequent ID's. However, for
undo operations it is necessary to delete all those sequents from
the hash that have been created in a state later than the undo
-state. For this purpose this hash maps sequent ID's to the state
+state. For this purpose this hash maps sequent ID's to the state
number in which the sequent has been created.
The hash table is initialized in `proof-tree-start-process'.")
@@ -394,9 +401,9 @@ The hash table is initialized in `proof-tree-start-process'.")
(defvar proof-tree-existentials-alist nil
"Alist mapping existential variables to sequent ID's.
Used to remember which goals need a refresh when an existential
-variable gets instantiated. To support undo commands the old
+variable gets instantiated. To support undo commands the old
contents of this list must be stored in
-`proof-tree-existentials-alist-history'. To ensure undo is
+`proof-tree-existentials-alist-history'. To ensure undo is
properly working, this variable should only be changed by using
`proof-tree-delete-existential-assoc',
`proof-tree-add-existential-assoc' or
@@ -418,7 +425,7 @@ This marker points to the next piece of output that needs to get processed.")
(defvar proof-tree-filter-continuation nil
"Continuation when `proof-tree-process-filter' stops early.
A function that handles a command from Prooftee might fail
-because not all data from Prooftee has yet arrived. In this case
+because not all data from Prooftee has yet arrived. In this case
the continuation is stored in this variable and will be called
from `proof-tree-process-filter' when more output arrives.")
@@ -443,7 +450,7 @@ from `proof-tree-process-filter' when more output arrives.")
(defun proof-tree-insert-script (data)
"Handle an insert-command command from Prooftree."
- (let ((command-length (string-to-number data)))
+ (let ((command-length (string-to-number data)))
(if (and (integerp command-length) (> command-length 0))
(condition-case nil
(progn
@@ -761,13 +768,13 @@ state PROOF-STATE."
'proof-tree-existentials-alist-history))
(defun proof-tree-delete-existential-assoc (state ex-assoc)
- "Delete mapping EX-ASSOC from 'proof-tree-existentials-alist'."
+ "Delete mapping EX-ASSOC from ‘proof-tree-existentials-alist’."
(proof-tree-record-existentials-state state)
(setq proof-tree-existentials-alist
(delq ex-assoc proof-tree-existentials-alist)))
(defun proof-tree-add-existential-assoc (state ex-var sequent-id)
- "Add the mapping EX-VAR -> SEQUENT-ID to 'proof-tree-existentials-alist'.
+ "Add the mapping EX-VAR -> SEQUENT-ID to ‘proof-tree-existentials-alist’.
Do nothing if this mapping does already exist."
(let ((ex-var-assoc (assoc ex-var proof-tree-existentials-alist)))
(if ex-var-assoc
@@ -823,7 +830,7 @@ the current output does not come from a command (with the
Urgent actions are only needed if the external proof display is
currently running. Therefore this function should not be called
-when `proof-tree-external-display' is nil.
+when `proof-tree-external-display' is nil.
This function assumes that the prover output is not suppressed.
Therefore, `proof-tree-external-display' being t is actually a
@@ -1066,8 +1073,8 @@ Send the undo command to prooftree and undo changes to the
internal state of this package. The latter involves currently two
points:
* delete those goals from `proof-tree-sequent-hash' that have
- been generated after the state to which we undo now
-* change proof-tree-existentials-alist back to its previous content"
+ been generated after the state to which we undo now;
+* change proof-tree-existentials-alist back to its previous content."
;; (message "PTHU info %s" proof-info)
(let ((proof-state (car proof-info)))
;; delete sequents from the hash
@@ -1096,11 +1103,11 @@ points:
"Prepare an update-sequent command for prooftree.
This function processes delayed output that the proof assistant
generated in response to commands that Proof General inserted in
-order to keep prooftree up-to-date. Such commands are tagged with
+order to keep prooftree up-to-date. Such commands are tagged with
a 'proof-tree-show-subgoal flag.
This function uses `proof-tree-update-goal-regexp' to find a
-sequent and its ID in the delayed output. If something is found
+sequent and its ID in the delayed output. If something is found
an appropriate update-sequent command is sent to prooftree.
The update-sequent command is associated with state PROOF-STATE
@@ -1136,7 +1143,7 @@ The delayed output is in the region
(defun proof-tree-handle-delayed-output (old-proof-marker cmd flags span)
"Process delayed output for prooftree.
This function is the main entry point of the Proof General
-prooftree support. It examines the delayed output in order to
+prooftree support. It examines the delayed output in order to
take appropriate actions and maintains the internal state.
The delayed output to handle is in the region
@@ -1146,7 +1153,7 @@ which contains the position of `proof-marker', before the next
command was sent to the proof assistant.
All other arguments are (former) fields of the `proof-action-list'
-entry that is now finally retired. CMD is the command, FLAGS are
+entry that is now finally retired. CMD is the command, FLAGS are
the flags and SPAN is the span."
;; (message "PTHDO cmd %s flags %s span %s-%s" cmd flags
;; (if span (span-start span)) (if span (span-end span)))
@@ -1208,10 +1215,10 @@ the flags and SPAN is the span."
(defun proof-tree-display-current-proof (proof-start)
"Start an external proof-tree display for the current proof.
Coq (and probably other proof assistants as well) does not
-support outputing the current proof tree. Therefore this function
+support outputing the current proof tree. Therefore this function
retracts to the start of the current proof, switches the
proof-tree display on, and reasserts then until the former end of
-the locked region. Argument PROOF-START must contain the start
+the locked region. Argument PROOF-START must contain the start
position of the current proof."
;;(message "PTDCP %s" proof-tree-external-display)
(unless (and proof-script-buffer
@@ -1240,10 +1247,10 @@ position of the current proof."
(defun proof-tree-external-display-toggle ()
"Toggle the external proof-tree display.
When called outside a proof the external proof-tree display will
-be enabled for the next proof. When called inside a proof the
-proof display will be created for the current proof. If the
+be enabled for the next proof. When called inside a proof the
+proof display will be created for the current proof. If the
external proof-tree display is currently on, then this toggle
-will switch it off. At the end of the proof the proof-tree
+will switch it off. At the end of the proof the proof-tree
display is switched off."
(interactive)
(unless proof-tree-configured
@@ -1280,4 +1287,4 @@ display is switched off."
(provide 'proof-tree)
-;;; tree-tree.el ends here
+;;; proof-tree.el ends here
diff --git a/generic/proof-unicode-tokens.el b/generic/proof-unicode-tokens.el
index 3f9f0199..2deca0e6 100644
--- a/generic/proof-unicode-tokens.el
+++ b/generic/proof-unicode-tokens.el
@@ -1,12 +1,18 @@
;;; proof-unicode-tokens.el --- Support Unicode tokens package
-;;
-;; Copyright (C) 2008, 2009 David Aspinall / LFCS Edinburgh
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
-;;
+
;;; Commentary:
;;
;; Support for Unicode Tokens package: per-prover global enabling, copying
@@ -21,10 +27,10 @@
(eval-when-compile
(require 'cl))
-(eval-when (compile)
- (require 'scomint)
- (require 'proof-auxmodes) ; loaded by proof.el, autoloads us
- (require 'unicode-tokens)) ; it will be loaded by proof-auxmodes
+(eval-when-compile
+ (require 'scomint)
+ (require 'proof-auxmodes) ; loaded by proof.el, autoloads us
+ (require 'unicode-tokens)) ; it will be loaded by proof-auxmodes
(require 'proof-config) ; config variables
diff --git a/generic/proof-useropts.el b/generic/proof-useropts.el
index b2cbb97a..9a60e0ac 100644
--- a/generic/proof-useropts.el
+++ b/generic/proof-useropts.el
@@ -1,11 +1,18 @@
;;; proof-useropts.el --- Global user options for Proof General
-;;
-;; Copyright (C) 2009, 2010, 2011 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; User options for Proof General.
@@ -43,6 +50,7 @@ approximation we test whether proof-config is fully-loaded yet."
(set-default sym value)
(when (and
(not noninteractive)
+ (not (bound-and-true-p byte-compile-current-file))
(featurep 'pg-custom)
(featurep 'proof-config))
(if (fboundp sym)
@@ -184,7 +192,7 @@ and displayed lazily. See `proof-layout-windows'."
and goal and response buffers on the left (one above the
other).
- If 'smart or anything else: 'horizontal when the window
- is wide enough and 'vertical otherwise. The width threshold
+ is wide enough and 'vertical otherwise. The width threshold
is given by `split-width-threshold'.
See `proof-layout-windows'."
@@ -354,8 +362,8 @@ locked (coloured blue); a buffer is completely unprocessed when there
is no locked region.
For some proof assistants (such as Coq) fully processed buffers make
-no sense. Setting this option to 'process has then the same effect
-as leaving it unset (nil). (This behaviour is controlled by
+no sense. Setting this option to 'process has then the same effect
+as leaving it unset (nil). (This behaviour is controlled by
`proof-no-fully-processed-buffer'.)"
:type '(choice
(const :tag "No automatic action; query user" nil)
@@ -400,7 +408,7 @@ Hovers will be added when this option is non-nil. Prover outputs
can be displayed when the mouse hovers over the region that
produced it and output is available (see `proof-full-annotation').
If output is not available, the type of the output region is displayed.
-Changes of this option will not be reflected in already-processed
+Changes of this option will not be reflected in already-processed
regions of the script."
:type 'boolean
:group 'proof-user-options)
@@ -430,7 +438,7 @@ are distracting or too frequent."
:type 'boolean
:group 'proof-user-options)
-(defcustom proof-fast-process-buffer
+(defcustom proof-fast-process-buffer
(or (featurep 'ns) ; Mac OS X
; or Windows (speed up TBC, see Trac #308)
(memq system-type '(windows-nt ms-dos cygwin)))
diff --git a/generic/proof-utils.el b/generic/proof-utils.el
index dff19e76..4a0ca857 100644
--- a/generic/proof-utils.el
+++ b/generic/proof-utils.el
@@ -1,11 +1,18 @@
-;; proof-utils.el --- Proof General utility functions and macros
-;;
-;; Copyright (C) 1998-2002, 2009, 2011 LFCS Edinburgh.
+;;; proof-utils.el --- Proof General utility functions and macros
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Loading note: this file is required immediately from proof.el, so
@@ -59,7 +66,7 @@
;;
(defmacro proof-with-current-buffer-if-exists (buf &rest body)
- "As with-current-buffer if BUF exists and is live, otherwise nothing."
+ "Like ‘with-current-buffer’ if BUF exists and is live, otherwise nothing."
`(if (buffer-live-p ,buf)
(with-current-buffer ,buf
,@body)))
@@ -68,7 +75,7 @@
;; which work from different PG buffers (goals, response), typically
;; bound to toolbar commands.
(defmacro proof-with-script-buffer (&rest body)
- "Execute BODY in some script buffer: current buf or otherwise proof-script-buffer.
+ "Execute BODY in some script buffer: current buf, else ‘proof-script-buffer’.
Return nil if not a script buffer or if no active scripting buffer."
`(cond
((eq proof-buffer-type 'script)
@@ -79,7 +86,7 @@ Return nil if not a script buffer or if no active scripting buffer."
,@body))))
(defmacro proof-map-buffers (buflist &rest body)
- "Do BODY on each buffer in BUFLIST, if it exists."
+ "Eval BODY on each buffer in BUFLIST, if it exists."
`(dolist (buf ,buflist)
(proof-with-current-buffer-if-exists buf ,@body)))
@@ -180,9 +187,9 @@ user accidently killing an associated buffer."
;; Key functions
(defun proof-define-keys (map kbl)
- "Adds keybindings KBL in MAP.
-The argument KBL is a list of tuples (k . f) where `k' is a keybinding
-\(vector) and `f' the designated function."
+ "Add in MAP the keybindings KBL.
+The argument KBL is a list of tuples (K . F) where K is a keybinding
+\(vector) and F the designated function."
(mapcar
(lambda (kbl)
(let ((k (car kbl)) (f (cdr kbl)))
@@ -223,21 +230,21 @@ Leave point at END."
(defvar proof-advertise-layout-freq 30
"Frequency for PG messages to be displayed from time to time.")
(defvar proof-advertise-layout-count proof-advertise-layout-freq
- "counter used to display PG messages from time to time.")
+ "Counter used to display PG messages from time to time.")
(defun proof-get-window-for-buffer (buffer)
"Find a window for BUFFER, display it there, return the window.
-NB: may change the selected window. This function is a wrapper on
-display-buffer. The idea is that if the user has opened and
+NB: may change the selected window. This function is a wrapper on
+‘display-buffer’. The idea is that if the user has opened and
closed some windows we want to preserve the layout by only
-switching buffer in already pg-associate windows. So if the
+switching buffer in already pg-associate windows. So if the
buffer is not already displayed, we try to reuse an existing
-associated window, even if in 3-win mode. If no such window
-exists, we fall back to display-buffer while protecting script
+associated window, even if in 3-win mode. If no such window
+exists, we fall back to ‘display-buffer’ while protecting script
buffer to be hidden or split.
Experimentally we display a message from time to time advertising
-C-c C-l."
+\\[proof-layout-windows]."
;; IF there *isn't* a visible window showing buffer...
(unless (get-buffer-window buffer 0)
(if proof-three-window-enable
@@ -316,7 +323,7 @@ Ensure that point is visible in window."
(kill-local-variable 'mode-line-format))))))))))))
(defun proof-clean-buffer (buffer)
- "Erase buffer and hide from display if proof-delete-empty-windows set.
+ "Erase BUFFER and hide from display if ‘proof-delete-empty-windows’ set.
Auto deletion only affects selected frame. (We assume that the selected
frame is the one showing the script buffer.)
No effect if buffer is dead."
@@ -692,9 +699,10 @@ KEY is added onto proof assistant map."
;;
(defun proof-locate-executable (progname &optional returnnopath extrapath)
- "Search for PROGNAME on environment PATH. Return the full path to PROGNAME, or nil.
+ "Search for PROGNAME on environment PATH.
+Return the full path to PROGNAME, or nil.
If RETURNNOPATH is non-nil, return PROGNAME even if we can't find a full path.
-EXTRAPATH is a list of extra path components"
+EXTRAPATH is a list of extra path components."
(or
(let ((exec-path (append exec-path extrapath)))
(executable-find progname))
diff --git a/generic/proof.el b/generic/proof.el
index 1acfae71..5fa9de33 100644
--- a/generic/proof.el
+++ b/generic/proof.el
@@ -1,14 +1,21 @@
;;; proof.el --- Proof General theorem prover interface.
-;;
-;; Copyright (C) 1998-2009 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: David Aspinall, Yves Bertot, Healfdene Goguen,
;; Thomas Kleymann and Dilip Sequeira
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
+
;; Keywords: languages
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; This file loads Proof General. It is required by the
@@ -26,7 +33,7 @@
(require 'proof-site) ; site/prover config, global vars, autoloads
-(unless noninteractive
+(unless (or noninteractive (bound-and-true-p byte-compile-current-file))
(proof-splash-message)) ; welcome the user now.
(require 'proof-compat) ; Emacs and OS compatibility
diff --git a/hol-light/hol-light-autotest.el b/hol-light/hol-light-autotest.el
index 20c16727..d68b898f 100644
--- a/hol-light/hol-light-autotest.el
+++ b/hol-light/hol-light-autotest.el
@@ -1,21 +1,30 @@
-;; hol-light-autotest.el: tests of HOL Light Proof General.
+;;; hol-light-autotest.el --- tests of HOL Light Proof General.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;;; Commentary:
;;
;; You can run these by issuing "make test.hol-light" in PG home dir.
;;
-;; $Id$
-;;
+
+;;; Code:
(eval-when-compile
(require 'cl))
-(eval-when (compile)
- (require 'proof-site)
- (proof-ready-for-assistant 'coq)
- (defvar coq-compile-before-require nil))
+(require 'proof-site)
+(proof-ready-for-assistant 'hol-light)
(require 'pg-autotest)
-(unless noninteractive
+(unless (bound-and-true-p byte-compile-current-file)
(pg-autotest start 'debug)
(pg-autotest log ".autotest.log") ; convention
diff --git a/hol-light/hol-light-unicode-tokens.el b/hol-light/hol-light-unicode-tokens.el
index df32e4bd..7e24e4b1 100644
--- a/hol-light/hol-light-unicode-tokens.el
+++ b/hol-light/hol-light-unicode-tokens.el
@@ -1,8 +1,17 @@
-;;; -*- coding: utf-8; -*-
-;; coq-unicode-tokens.el --- (No) Tokens for Unicode Tokens package
-;;
-;; Copyright(C) 2012 David Aspinall / University of Edinburgh
+;;; coq-unicode-tokens.el --- (No) Tokens for Unicode Tokens package -*- coding: utf-8; -*-
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
+;;; Commentary:
;;
;; This file is loaded by `proof-unicode-tokens.el'.
;;
@@ -18,6 +27,8 @@
;; - fix unicode tokens sorting so longs tokens handled first (broken?)
;; <=> not <= >
+;;; Code:
+
(require 'proof-unicode-tokens)
(defconst hol-light-token-format "%s") ; plain tokens
diff --git a/hol-light/hol-light.el b/hol-light/hol-light.el
index 85d10607..2b4f3989 100644
--- a/hol-light/hol-light.el
+++ b/hol-light/hol-light.el
@@ -1,24 +1,33 @@
-;; hol-light.el Basic Proof General instance for HOL Light
-;;
-;; Copyright (C) 2010-12 LFCS Edinburgh, David Aspinall.
-;;
+;;; hol-light.el --- Basic Proof General instance for HOL Light
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
;; Mark Adams <mark@proof-technologies.com>
-;;
-;; $Id$
+
+;;; Commentary:
;;
;; See the README file in this directory for information.
;;
+;;; Code:
+
(require 'proof-easy-config) ; easy configure mechanism
(require 'proof-syntax) ; functions for making regexps
(or (proof-try-require 'caml-font) ; use OCaml Emacs mode syntax
(defvar caml-font-lock-keywords nil)) ;
-(eval-when (compile)
- (require 'proof-tree)
- (defvar caml-font-lock-keywords nil))
+(eval-when-compile
+ (require 'proof-tree)
+ (defvar caml-font-lock-keywords nil))
(defcustom hol-light-home
(or (getenv "HOLLIGHT_HOME")
diff --git a/hol98/hol98.el b/hol98/hol98.el
index a96da637..6f89707b 100644
--- a/hol98/hol98.el
+++ b/hol98/hol98.el
@@ -1,15 +1,22 @@
-;; hol98.el Basic Proof General instance for HOL 98
-;;
-;; Copyright (C) 2000 LFCS Edinburgh.
-;;
+;;; hol98.el --- Basic Proof General instance for HOL 98
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
-;;
-;; $Id$
-;;
+
+;;; Commentary:
;; Needs improvement!
;;
;; See the README file in this directory for information.
+;;; Code:
(require 'proof-easy-config) ; easy configure mechanism
(require 'proof-syntax) ; functions for making regexps
diff --git a/isar/isabelle-system.el b/isar/isabelle-system.el
index 5352043d..e399474b 100644
--- a/isar/isabelle-system.el
+++ b/isar/isabelle-system.el
@@ -15,14 +15,13 @@
(eval-when-compile
(require 'cl)) ; mapcan, eval-when
-(eval-when (compile)
- (require 'span)
- (require 'scomint)
+(eval-when-compile
+ (require 'span)
+ (require 'scomint)
(require 'proof-site)
(require 'proof-menu)
(require 'proof-syntax)
- (proof-ready-for-assistant 'isar) ; compile for isar
- (defvar proof-assistant-menu nil))
+ (defvar proof-assistant-menu))
(declare-function mapcan "cl-extra") ; spurious bytecomp warning
@@ -73,6 +72,7 @@ unverified. Otherwise, returns non-nil if isa-isabelle-command
is surely an executable with full path."
(interactive "p")
(when (and (not noninteractive)
+ (not (bound-and-true-p byte-compile-current-file))
(not proof-rsh-command)
(or force
isabelle-not-found
@@ -139,7 +139,7 @@ generated with the Lisp form `(isa-tool-list-logics)'."
:type (list 'string)
:group 'isabelle)
-(unless noninteractive
+(unless (or noninteractive (bound-and-true-p byte-compile-current-file))
(setq isabelle-logics-available (isa-tool-list-logics)))
(defcustom isabelle-chosen-logic nil
@@ -287,7 +287,7 @@ for you, you should disable this behaviour."
:help (format "Switch to %s logic" l)))
isabelle-logics-available)))))
-(unless noninteractive
+(unless (or noninteractive (bound-and-true-p byte-compile-current-file))
(isabelle-logics-menu-calculate))
(defvar isabelle-time-to-refresh-logics t
diff --git a/isar/isar-autotest.el b/isar/isar-autotest.el
index 60fa2ebc..f8784bc2 100644
--- a/isar/isar-autotest.el
+++ b/isar/isar-autotest.el
@@ -10,17 +10,17 @@
(require 'pg-autotest)
-(eval-when (compile)
- (require 'cl)
- (require 'proof-site)
- (proof-ready-for-assistant 'isar))
+(eval-when-compile
+ (require 'cl))
+(require 'proof-site)
+(proof-ready-for-assistant 'isar)
(declare-function isar-tracing:auto-quickcheck-toggle "isar.el")
(declare-function isar-tracing:auto-solve-direct-toggle "isar.el")
(declare-function isar-proof:parallel-proofs-toggle "isar.el")
-(unless noninteractive
+(unless (bound-and-true-p byte-compile-current-file)
(pg-autotest start) ; can add 'debug flag for debug-on-error
@@ -89,10 +89,10 @@
(pg-autotest script-randomjumps "isar/Example.thy" 8)
(when isar-long-tests
- (pg-autotest remark "Larger files...")
- (pg-autotest script-wholefile "etc/isar/AHundredTheorems.thy")
- (pg-autotest script-wholefile "isar/ex/Tarski.thy")
- (pg-autotest script-randomjumps "isar/ex/Tarski.thy" 10)) ; better test?
+ (pg-autotest remark "Larger files...")
+ (pg-autotest script-wholefile "etc/isar/AHundredTheorems.thy")
+ (pg-autotest script-wholefile "isar/ex/Tarski.thy")
+ (pg-autotest script-randomjumps "isar/ex/Tarski.thy" 10)) ; better test?
(pg-autotest remark "Testing restarting the prover")
diff --git a/isar/isar-mmm.el b/isar/isar-mmm.el
deleted file mode 100644
index 3ecc9f7b..00000000
--- a/isar/isar-mmm.el
+++ /dev/null
@@ -1,69 +0,0 @@
-;; isar-mmm.el Configure MMM mode for Isar (for LaTeX, SML mode)
-;;
-;; Copyright (C) 2003 David Aspinall
-;; Authors: David Aspinall <David.Aspinall@ed.ac.uk>
-;; Licence: GPL
-;;
-;; $Id$
-;;
-;; Presently, we deal with several cases of {* text *}.
-;; It's not a good idea to do too much, since searching for the
-;; regions and fontifying them is slow.
-;;
-;; TODO:
-;; --- fontification for antiquotations has been lost, could
-;; add that into LaTeX mode somehow.
-;; --- support for X-Symbols inside MMM mode? (eek)
-;; --- more insertion commands might be nice.
-;; (Presently just C-c % t and C-c % M)
-;;
-
-(require 'mmm-auto)
-(require 'proof-syntax) ; proof-ids-to-regexp
-
-(defconst isar-start-latex-regexp
- (concat
- "\\("
- (proof-ids-to-regexp
- ;; Perhaps section is too much? The fontification is nice but
- ;; section headers are a bit short to use LaTeX mode in.
- (list "text" "header" ".*section"))
- ;; Next one is nice but hammers font lock a bit too much
- ;; if there are lots of -- {* short comments *}
- ;; "\\|\-\-" ;; NB: doesn't work with \\<--\\>
- "\\)[ \t]+{\\*"))
-
-(defconst isar-start-sml-regexp
- (concat
- "\\("
- (proof-ids-to-regexp
- (list "ML" "ML_command" "ML_setup" "typed_print_translation"))
- "\\)[ \t]+{\\*"))
-
-
-(mmm-add-group
- 'isar
- `((isar-latex
- :submode LaTeX-mode
- :face mmm-comment-submode-face
- :front ,isar-start-latex-regexp
- :back "\\*}"
- :insert ((?t isar-text nil @ "text {*" @ " " _ " " @ "*}" @)
- (?t isar-text_raw nil @ "text_raw {*" @ " " _ " " @ "*}" @)
- (?s isar-section nil @ "section {*" @ " " _ " " @ "*}" @)
- (?d isar-header nil @ "header {*" @ " " _ " " @ "*}" @)))
-
- (isar-sml
- :submode sml-mode
- :face mmm-code-submode-face
- :front ,isar-start-sml-regexp
- :back "\\*}"
- :insert ((?u isar-ML-setup nil @ "ML_setup {*" @ " " _ " " @ "*}" @)
- (?c isar-ML-command nil @ "ML_command {*" @ " " _ " " @ "*}" @)
- (?m isar-ML nil @ "ML {*" @ " " _ " " @ "*}" @)
- (?p isar-print-trans nil @ "typed_print_translation {*" @ " " _ " " @ "*}" @)))))
-
-
-(provide 'isar-mmm)
-
-;;; isar-mmm.el ends here
diff --git a/isar/isar-profiling.el b/isar/isar-profiling.el
index 8984f1b0..0cf19348 100644
--- a/isar/isar-profiling.el
+++ b/isar/isar-profiling.el
@@ -8,9 +8,8 @@
(eval-when-compile
(require 'cl))
-(eval-when (compile)
- (require 'proof-site)
- (proof-ready-for-assistant 'isar))
+(require 'proof-site)
+(proof-ready-for-assistant 'isar)
(declare-function isar-tracing:auto-solve-toggle "isar.el")
(declare-function isar-tracing:auto-quickcheck-toggle "isar.el")
@@ -19,7 +18,7 @@
(require 'pg-autotest)
(require 'pg-dev)
-(unless noninteractive
+(unless (bound-and-true-p byte-compile-current-file)
(pg-autotest log ".profile.log") ; convention
diff --git a/isar/isar-unicode-tokens.el b/isar/isar-unicode-tokens.el
index a1e05843..c6f58452 100644
--- a/isar/isar-unicode-tokens.el
+++ b/isar/isar-unicode-tokens.el
@@ -14,7 +14,7 @@
(require 'cl) ; for-loop
-(eval-when (compile)
+(eval-when-compile
(require 'unicode-tokens) ; it's loaded dynamically at runtime
(require 'proof-unicode-tokens)) ; that file loads us at runtime
diff --git a/isar/isar.el b/isar/isar.el
index bc28d34d..bb755d4f 100644
--- a/isar/isar.el
+++ b/isar/isar.el
@@ -19,16 +19,15 @@
(eval-when-compile
(require 'cl))
-(eval-when (compile)
+(eval-when-compile
(require 'span)
(require 'proof-syntax)
(require 'pg-goals)
(require 'pg-vars)
(require 'outline)
- (defvar comment-quote-nested nil)
- (defvar isar-use-find-theorems-form nil)
- (defvar isar-use-linear-undo nil)
- (proof-ready-for-assistant 'isar)) ; compile for isar
+ (defvar comment-quote-nested)
+ (defvar isar-use-find-theorems-form)
+ (defvar isar-use-linear-undo))
(require 'proof)
(require 'isabelle-system) ; system code
@@ -303,28 +302,24 @@ This is called when Proof General spots output matching
;;
;; use eval-and-compile to define vars for byte comp.
-(eval-and-compile
(define-derived-mode isar-shell-mode proof-shell-mode
"Isabelle Shell" nil
- (isar-shell-mode-config)))
+ (isar-shell-mode-config))
-(eval-and-compile
(define-derived-mode isar-response-mode proof-response-mode
"Isar Messages" nil
- (isar-response-mode-config)))
+ (isar-response-mode-config))
-(eval-and-compile
(define-derived-mode isar-goals-mode proof-goals-mode
"Isar Proofstate" nil
- (isar-goals-mode-config)))
+ (isar-goals-mode-config))
-(eval-and-compile
(define-derived-mode isar-mode proof-mode
"Isar"
"Major mode for editing Isar proof scripts.
\\{isar-mode-map}"
- (isar-mode-config)))
+ (isar-mode-config))
diff --git a/lego/lego-syntax.el b/lego/lego-syntax.el
index 44a17ade..1cca4cf2 100644
--- a/lego/lego-syntax.el
+++ b/lego/lego-syntax.el
@@ -1,12 +1,23 @@
-;; lego-syntax.el Syntax of LEGO
-;; Copyright (C) 1994 - 1998 LFCS Edinburgh.
+;;; lego-syntax.el --- Syntax of LEGO
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: Thomas Kleymann and Dilip Sequeira
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Paul Callaghan <P.C.Callaghan@durham.ac.uk>
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
+;;; Commentary:
;;
-;; $Id$
-;;
+
+;;; Code:
(require 'proof-syntax)
diff --git a/lego/lego.el b/lego/lego.el
index 1ead4b9c..29564c87 100644
--- a/lego/lego.el
+++ b/lego/lego.el
@@ -1,12 +1,23 @@
-;; lego.el Major mode for LEGO proof assistants
-;; Copyright (C) 1994 - 1998 LFCS Edinburgh.
+;;; lego.el --- Major mode for LEGO proof assistants
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: Thomas Kleymann and Dilip Sequeira
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Maintainer: Paul Callaghan <P.C.Callaghan@durham.ac.uk>
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
+;;; Commentary:
;;
-;; $Id$
-;;
+
+;;; Code:
(require 'proof)
(require 'lego-syntax)
@@ -149,15 +160,14 @@ Activates extended printing routines required for Proof General.")
(lego-shell-mode-config))
(define-derived-mode lego-mode proof-mode
- "lego" nil
- (lego-mode-config))
-
-(eval-and-compile
- (define-derived-mode lego-response-mode proof-response-mode
- "LEGOResp" nil
- (setq proof-response-font-lock-keywords lego-font-lock-terms)
- (lego-init-syntax-table)
- (proof-response-config-done)))
+ "lego" nil
+ (lego-mode-config))
+
+(define-derived-mode lego-response-mode proof-response-mode
+ "LEGOResp" nil
+ (setq proof-response-font-lock-keywords lego-font-lock-terms)
+ (lego-init-syntax-table)
+ (proof-response-config-done))
(define-derived-mode lego-goals-mode proof-goals-mode
"LEGOGoals" "LEGO Proof State"
diff --git a/lib/bufhist.el b/lib/bufhist.el
index 3d6a123d..65d33cc5 100644
--- a/lib/bufhist.el
+++ b/lib/bufhist.el
@@ -1,16 +1,24 @@
;; bufhist.el --- keep read-only history of buffer contents for browsing
-;; Copyright (C) 2006, 2009 David Aspinall / University of Edinburgh
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
-;; License: GPL (GNU GENERAL PUBLIC LICENSE)
;; Keywords: tools
-;;
-;; $Id$
-;;
+
+;; License: GPL (GNU GENERAL PUBLIC LICENSE)
+
;; This file is distributed under the terms of the GNU General Public
;; License, Version 2. Find a copy of the GPL with your version of
;; GNU Emacs or Texinfo.
+
+;;; Commentary:
;;
;; This library implements a minor mode for which keeps a ring history of
;; buffer contents. Intended to be used for small buffers which are
@@ -29,6 +37,8 @@
;; - buttons are put at top of buffer but inserts happen before them
;;
+;;; Code:
+
(require 'ring)
(declare-function bufhist-ordinary-erase-buffer "bufhist")
@@ -176,7 +186,8 @@ This is as a pair (POINT . CONTENTS)."
(bufhist-insert-buttons))
(defun bufhist-checkpoint-and-erase ()
- "Add buffer contents to history then erase. Only erase if not in bufhist mode"
+ "Add buffer contents to history then erase.
+Only erase if not in bufhist mode."
(interactive)
(bufhist-checkpoint)
(bufhist-erase-buffer))
@@ -231,7 +242,8 @@ If optional NOSAVE is non-nil, do not try to save current contents."
(bufhist-switch-to-index 0 nil 'browsing))
(defun bufhist-prev (&optional n)
- "Browse backward in the history of buffer contents."
+ "Browse backward in the history of buffer contents.
+If N is omitted or nil, move backward by one item."
(interactive "p")
(bufhist-switch-to-index
(mod (+ bufhist-ring-pos (or n 1))
@@ -239,7 +251,8 @@ If optional NOSAVE is non-nil, do not try to save current contents."
nil 'browsing))
(defun bufhist-next (&optional n)
- "Browse forward in the history of buffer contents."
+ "Browse forward in the history of buffer contents.
+If N is omitted or nil, move forward by one item."
(interactive "p")
(bufhist-prev (- (or n 1))))
@@ -274,7 +287,7 @@ If optional NOSAVE is non-nil, do not try to save current contents."
"Initialise a ring history for the current buffer.
The history will be read-only unless READWRITE is non-nil.
For read-only histories, edits to the buffer switch to the latest version.
-The size defaults to `bufhist-ring-size'."
+If RINGSIZE is omitted or nil, the size defaults to ‘bufhist-ring-size’."
(interactive)
(setq bufhist-ring (make-ring (or ringsize bufhist-ring-size)))
(setq bufhist-normal-read-only buffer-read-only)
@@ -360,3 +373,4 @@ The size defaults to `bufhist-ring-size'."
(setq bufhist-top-point (point))))))
(provide 'bufhist)
+;;; bufhist.el ends here
diff --git a/lib/holes.el b/lib/holes.el
index 09eb9dde..9a45037c 100644
--- a/lib/holes.el
+++ b/lib/holes.el
@@ -1,9 +1,14 @@
;;; holes.el --- a little piece of elisp to define holes in your buffer
-;;
-;; Copyright (C) 2001 Pierre Courtieu
-;;
-;; $Id$
-;;
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; This file uses spans, an interface for extent (XEmacs) and overlays
;; (emacs), by Healfdene Goguen for the proofgeneral mode.
;;
@@ -11,7 +16,7 @@
;; cleaner.
;;
;; Further cleanups by David Aspinall.
-;;
+
;; This software is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public
;; License version 2, as published by the Free Software Foundation.
@@ -22,26 +27,22 @@
;;
;; See the GNU General Public License version 2 for more details
;; (enclosed in the file GPL).
-;;
-;; See documentation in variable holes-short-doc.
-;;
;;; Commentary:
;;
+;; See documentation in variable holes-short-doc.
+;;
;; See documentation of `holes-mode'.
-
-(eval-when-compile
- (require 'span))
-(require 'cl)
-
;;; Code:
+(require 'span)
+(require 'cl)
;;;
;;; initialization
;;;
-(defvar holes-default-hole
+(defvar holes-default-hole
(let ((ol (make-overlay 0 0)))
(delete-overlay ol) ol)
"An empty detached hole used as the default hole.
@@ -77,7 +78,7 @@ which should be removed when making the text into a hole."
;(defcustom holes-search-limit 1000
-; "Number of chars to look forward when looking for the next hole, unused for now.")
+; "Number of chars to look forward when looking for the next hole, unused for now.")
;unused for the moment
;; The following is customizable by a command of the form:
@@ -120,18 +121,18 @@ which should be removed when making the text into a hole."
(define-key map [(mouse-2)] 'holes-mouse-forget-hole)
map)
"Keymap to use on the holes's overlays.
-This keymap is used only when point is on a hole.
+This keymap is used only when point is on a hole.
See `holes-mode-map' for the keymap of `holes-mode'.")
(defvar holes-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [(control c) (h)] 'holes-set-make-active-hole)
(define-key map [(control c) (control y)] 'holes-replace-update-active-hole)
- (define-key map [(control meta down-mouse-1)]
+ (define-key map [(control meta down-mouse-1)]
'holes-mouse-set-make-active-hole)
- (define-key map [(control meta shift down-mouse-1)]
+ (define-key map [(control meta shift down-mouse-1)]
'holes-mouse-replace-active-hole)
- (define-key map [(control c) (control j)]
+ (define-key map [(control c) (control j)]
'holes-set-point-next-hole-destroy)
map)
"Keymap of `holes-mode'.
@@ -189,7 +190,7 @@ This is not the keymap used on holes's overlay (see `hole-map' instead).")
(defun holes-hole-start-position (hole)
"Return start position of HOLE."
- (assert (holes-is-hole-p hole) t
+ (assert (holes-is-hole-p hole) t
"holes-hole-start-position: %s is not a hole")
(span-start hole))
@@ -284,7 +285,7 @@ the active hole is already disable."
Error if HOLE is not a hole."
(assert (holes-is-hole-p hole) t
"holes-set-active-hole: %s is not a hole")
- (if (holes-active-hole-exist-p)
+ (if (holes-active-hole-exist-p)
(holes-highlight-hole holes-active-hole))
(setq holes-active-hole hole)
(holes-highlight-hole-as-active holes-active-hole))
@@ -329,7 +330,7 @@ the span."
"Clear the HOLE."
(assert (holes-is-hole-p hole) t
"holes-clear-hole: %s is not a hole")
- (if (and (holes-active-hole-exist-p)
+ (if (and (holes-active-hole-exist-p)
(eq holes-active-hole hole))
(holes-disable-active-hole))
(span-delete hole))
@@ -342,9 +343,10 @@ the span."
(holes-clear-hole (holes-hole-at (or pos (point)))))
-(defun holes-map-holes (function &optional object from to)
- "Map function FUNCTION across holes."
- (fold-spans function object from to nil nil 'hole))
+(defun holes-map-holes (function &optional buffer from to)
+ "Map function FUNCTION across holes in buffer BUFFER.
+Operate between character positions FROM and TO."
+ (fold-spans function buffer from to nil nil 'hole))
(defun holes-clear-all-buffer-holes (&optional start end)
"Clear all holes leaving their contents.
@@ -352,7 +354,7 @@ Operate betwenn START and END if non nil."
(interactive)
(holes-disable-active-hole)
(span-mapcar-spans
- 'holes-clear-hole (or start (point-min)) (or end (point-max))
+ 'holes-clear-hole (or start (point-min)) (or end (point-max))
'hole))
;; limit ?
@@ -360,7 +362,7 @@ Operate betwenn START and END if non nil."
"Return the first hole after POS in BUFFER.
Or after the hole at pos if there is one (default pos=point). If no
hole found, return nil."
- (holes-map-holes
+ (holes-map-holes
(lambda (h x) (and (holes-is-hole-p h) h)) buffer pos))
(defun holes-next-after-active-hole ()
@@ -390,7 +392,8 @@ Default pos = point and buffer = current."
(defun holes-replace-segment (start end str &optional buffer)
- "Erase chars between START and END, and replace them with STR."
+ "Erase chars between START and END, and replace them with STR.
+Operate in buffer BUFFER."
(with-current-buffer (or buffer (current-buffer))
(goto-char end)
;; Insert before deleting, so the markers at `start' and `end'
@@ -444,9 +447,9 @@ following hole if it exists."
(let ((nxthole (holes-next-after-active-hole)))
(holes-replace-active-hole
(or str
- (and mark-active
+ (and mark-active
(holes-copy-active-region))
- (current-kill 0)
+ (current-kill 0)
(error "Nothing to put in hole")))
(if nxthole (holes-set-active-hole nxthole)
(setq holes-active-hole holes-default-hole)))))
@@ -476,7 +479,7 @@ Sets `holes-active-hole' to the next hole if it exists."
(defalias 'holes-track-mouse-selection 'mouse-drag-track)
(defsubst holes-track-mouse-clicks ()
- "See `mouse-track-click-count'"
+ "See `mouse-track-click-count'."
(+ mouse-selection-click-count 1))
(defun holes-mouse-replace-active-hole (event)
@@ -496,7 +499,7 @@ Sets `holes-active-hole' to the next hole if it exists."
(defun holes-destroy-hole (&optional span)
"Destroy the hole SPAN."
(interactive)
- (let* ((sp (or span (holes-hole-at (point))
+ (let* ((sp (or span (holes-hole-at (point))
(error "No hole to destroy"))))
(save-excursion
(if (and (holes-active-hole-exist-p)
@@ -554,7 +557,7 @@ Sets `holes-active-hole' to the next hole if it exists."
(defun holes-set-point-next-hole-destroy ()
- "Moves the point to current active hole (if any and if in current buffer).
+ "Move the point to current active hole (if any and if in current buffer).
Destroy it and makes the next hole active if any."
(interactive)
(assert (holes-active-hole-exist-p) nil "no active hole")
@@ -582,7 +585,10 @@ Destroy it and makes the next hole active if any."
(defun holes-replace-string-by-holes-backward (limit)
"Change each occurrence of REGEXP into a hole.
Sets the active hole to the last created hole and unsets it if no hole is
-created. Return the number of holes created."
+created. Return the number of holes created.
+The LIMIT argument bounds the search; it is a buffer position.
+ The match found must not begin before that position. A value of nil
+ means search to the beginning of the accessible portion of the buffer."
(holes-disable-active-hole)
(let ((n 0))
(save-excursion
@@ -601,10 +607,9 @@ created. Return the number of holes created."
"Default hook after a skeleton insertion: put holes at each interesting position."
;; Not all versions of skeleton provide `skeleton-positions' and the
;; corresponding @ operation :-(
- (unless (boundp 'mmm-inside-insert-by-key) ; pc: this hack is ok for me
- (when (boundp 'skeleton-positions)
- (dolist (pos skeleton-positions) ;; put holes here
- (holes-set-make-active-hole pos pos)))))
+ (when (boundp 'skeleton-positions)
+ (dolist (pos skeleton-positions) ;; put holes here
+ (holes-set-make-active-hole pos pos))))
(defconst holes-jump-doc
(concat "Hit \\[holes-set-point-next-hole-destroy] to jump "
@@ -615,9 +620,9 @@ created. Return the number of holes created."
(defun holes-replace-string-by-holes-backward-jump (pos &optional noindent alwaysjump)
"Put holes between POS and point, backward, indenting.
-\"#\" and \"@{..}\" between this positions will become holes. If
-ALWAYSJUMP is non nil, jump to the first hole even if more than
-one."
+\"#\" and \"@{..}\" between this positions will become holes.
+If NOINDENT is non-nil, skip the indenting step.
+If ALWAYSJUMP is non-nil, jump to the first hole even if more than one."
(unless noindent (save-excursion (indent-region pos (point) nil)))
(let ((n (holes-replace-string-by-holes-backward pos)))
(case n
@@ -634,7 +639,7 @@ one."
;;;###autoload
-(define-minor-mode holes-mode
+(define-minor-mode holes-mode
"Toggle Holes minor mode.
With arg, turn Outline minor mode on if arg is positive, off otherwise.
diff --git a/lib/local-vars-list.el b/lib/local-vars-list.el
index 3fa0103d..4d737d73 100644
--- a/lib/local-vars-list.el
+++ b/lib/local-vars-list.el
@@ -1,10 +1,16 @@
;;; local-vars.el --- local variables list utilities
-;;
-;; Copyright (C) 2006 Pierre Courtieu
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Authors: Pierre Courtieu
;; Maintainer: Pierre Courtieu <Pierre.Courtieu@cnam.fr>
-;;
-;; $Id$
;; This software is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public
@@ -18,21 +24,19 @@
;; (enclosed in the file GPL).
;;; Commentary:
+;;
;; See documentation in variable local-var-list-doc
-
-;;; TODO: Rely on hack-file-local-variables instead
-
-;;; History:
;;
+;; TODO: Rely on hack-file-local-variables instead
-;;; Help:
+;;; Code:
(defconst local-vars-list-doc nil
"From Emacs Info:
-A file can contain a \"local variables list\", which specifies the values to use for
-certain Emacs variables when that file is edited. See info node \"(emacs)File
-Variables\".
+A file can contain a \"local variables list\", which specifies the values to use
+for certain Emacs variables when that file is edited.
+See info node \"(emacs)File Variables\".
local-vars-list provides two useful functions:
@@ -107,7 +111,7 @@ variable definition (or at the \"End:\" line)."
(read (buffer-substring boexp (point))))))) ; TODO: catch errors here?
-;; Only looks for file local vars. Not dir local vars.
+;; Only looks for file local vars. Not dir local vars.
(defun local-vars-list-get (symb)
"Return the value written in the local variable list for variable symb.
Raises an error if symb is not in the list.
@@ -118,14 +122,14 @@ alist. Proceed by looking in the file instead."
(save-excursion
(let*
((lrpat (local-vars-list-find))
- (dummy (if lrpat t (error "local variables zone not found. ")))
+ (dummy (if lrpat t (error "Local variables zone not found")))
(lpat (car lrpat))
(rpat (car (cdr lrpat)))
)
(beginning-of-line)
(if (local-vars-list-goto-var symb lpat rpat)
t
- (error "variable %s not found" symb))
+ (error "Variable %s not found" symb))
(beginning-of-line)
(local-vars-list-get-current lpat rpat))))
@@ -150,3 +154,6 @@ of the buffer first."
;;; fill-column: 85 ***
;;; indent-tabs-mode: nil ***
;;; End: ***
+
+(provide 'local-vars-list)
+;;; local-vars-list.el ends here
diff --git a/lib/maths-menu.el b/lib/maths-menu.el
index b9ddf927..32911a35 100644
--- a/lib/maths-menu.el
+++ b/lib/maths-menu.el
@@ -1,16 +1,20 @@
;;; maths-menu.el --- insert maths characters from a menu -*-coding: iso-2022-7bit;-*-
-;; Copyright (C) 2003, 2012 Free Software Foundation, Inc.
+;; This file is part of Proof General.
+
+;; Portions ,A)(B Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions ,A)(B Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions ,A)(B Copyright 2001-2017 Pierre Courtieu
+;; Portions ,A)(B Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions ,A)(B Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions ,A)(B Copyright 2015-2017 Cl,Ai(Bment Pit-Claudel
;; Author: Dave Love <fx@gnu.org>
;; Keywords: convenience
-
;; Version for Proof General modified by David Aspinall, 2007-8.
;; - Hooks added to insert tokenised versions of unicode characters.
;; - Added more characters to the menus.
;; - Define insertion functions following menu names (useful for keybindings)
-;; $Id$
-
;; 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
@@ -49,12 +53,10 @@
;; the minibuffer via the menu, though presumably it could be added to
;; the minibuffer menu.
-
-
;;; Code:
(defvar maths-menu-filter-predicate (lambda (char) t)
- "Predicate function used to filter menu elements")
+ "Predicate function used to filter menu elements.")
(defvar maths-menu-tokenise-insert #'insert
"Function used to insert possibly formatted or escaped character.")
diff --git a/lib/pg-dev.el b/lib/pg-dev.el
index 3bbda049..8e82a753 100644
--- a/lib/pg-dev.el
+++ b/lib/pg-dev.el
@@ -1,11 +1,18 @@
;;; pg-dev.el --- Developer settings for Proof General
-;;
-;; Copyright (C) 2008-2011 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
- ;;
+
;;; Commentary:
;;
;; Some configuration of Emacs Lisp mode for developing PG, not needed
@@ -19,7 +26,7 @@
(eval-when-compile
(require 'cl))
-(eval-when (compile)
+(eval-when-compile
(require 'proof-site))
(with-no-warnings
@@ -101,13 +108,13 @@
'(proof-splash pg-assoc pg-xml proof-depends proof-indent proof-site
proof-shell proof-menu pg-pbrpm pg-pgip proof-script
proof-autoloads pg-response pg-goals proof-toolbar
- proof-easy-config proof-config proof-mmm proof
+ proof-easy-config proof-config proof
proof-utils proof-syntax pg-user pg-custom
proof-maths-menu proof-unicode-tokens
pg-thymodes pg-autotest
;;
isar-syntax isar-find-theorems isar-unicode-tokens
- isar-autotest interface-setup isabelle-system isar isar-mmm
+ isar-autotest interface-setup isabelle-system isar
isar-keywords
;;
coq-abbrev coq-db coq-unicode-tokens coq-local-vars coq coq-syntax
@@ -123,7 +130,7 @@
;;;###autoload
(defun profile-pg ()
- "Configure Proof General for profiling. Use M-x elp-results to see results."
+ "Configure Proof General for profiling. Use \\[elp-results] to see results."
(interactive)
(elp-instrument-package "proof-")
(elp-instrument-package "pg-")
@@ -135,10 +142,10 @@
(elp-instrument-package "replace-") ; for replace-regexp etc
(elp-instrument-package "re-search-") ; for re-search-forwad etc
(elp-instrument-package "skip-chars-") ; for skip chars etc
- (elp-instrument-list
+ (elp-instrument-list
'(string-match match-string re-search-forward re-search-backward
skip-chars-forward skip-chars-backward
- goto-char insert
+ goto-char insert
set-marker marker-position
nreverse nconc mapc
member
@@ -146,7 +153,7 @@
sit-for
overlay-put overlay-start overlay-end make-overlay
buffer-live-p kill-buffer
- process-status get-buffer-process
+ process-status get-buffer-process
delete-overlay move-overlay
accept-process-output))
(elp-instrument-package "font-lock"))
diff --git a/lib/pg-fontsets.el b/lib/pg-fontsets.el
index 2c0528cc..771e76f1 100644
--- a/lib/pg-fontsets.el
+++ b/lib/pg-fontsets.el
@@ -1,11 +1,18 @@
;;; pg-fontsets.el --- Define fontsets useful for Proof General
-;;
-;; Copyright (C) 2008 David Aspinall / LFCS Edinburgh
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Define some fontsets to try to select fonts that display many symbols.
@@ -21,8 +28,7 @@
;;; Code:
-(eval-and-compile
- (require 'fontset)) ; needed for some emacsen without X
+(require 'fontset)
(defcustom pg-fontsets-default-fontset nil
"*Name of default fontset to use with Proof General."
diff --git a/lib/proof-compat.el b/lib/proof-compat.el
index 1816ed0e..abbdb465 100644
--- a/lib/proof-compat.el
+++ b/lib/proof-compat.el
@@ -1,10 +1,19 @@
-;; proof-compat.el Operating system and Emacs version compatibility
-;;
-;; Copyright (C) 2000-2010 LFCS Edinburgh.
+;;; proof-compat.el --- Operating system and Emacs version compatibility
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk> and others
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
+
+;;; Commentary:
;;
;; This file collects together compatibility hacks for different
;; operating systems and Emacs versions. This is to help keep
@@ -17,9 +26,9 @@
;; Since Proof General 4.0, XEmacs is not supported at all.
;;
-(eval-when-compile
- (require 'easymenu))
+;;; Code:
+(require 'easymenu)
(require 'cl)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -132,6 +141,5 @@ The value returned is the value of the last form in BODY."
(if (and (symbolp this-command) (get this-command 'completion-function))
(funcall (get this-command 'completion-function)))))
-
-;; End of proof-compat.el
(provide 'proof-compat)
+;;; proof-compat.el ends here
diff --git a/lib/scomint.el b/lib/scomint.el
index af8df997..8f7104e8 100644
--- a/lib/scomint.el
+++ b/lib/scomint.el
@@ -1,10 +1,17 @@
;;; scomint.el --- Simplified comint for less interactive shells
-;;
-;; Copyright (C) 2009 LFCS Edinburgh.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
;;; Commentary:
;;
@@ -16,6 +23,8 @@
;; hard to disentangle.
;;
+;;; Code:
+
(defvar scomint-buffer-maximum-size 800000
"The maximum size in characters for SComint buffers.
SComint buffers are truncated from the top to be no greater than this number,
@@ -79,7 +88,7 @@ a TCP connection to be opened via `open-network-stream'. If there is already
a running process in that buffer, it is not restarted. Optional fourth arg
STARTFILE is the name of a file to send the contents of to the process.
-If PROGRAM is a string, any more args are arguments to PROGRAM."
+If PROGRAM is a string, the remaining SWITCHES are arguments to PROGRAM."
(unless (or (fboundp 'start-process)
(fboundp 'start-file-process))
(error "Multi-processing is not supported for this system"))
@@ -103,13 +112,14 @@ a TCP connection to be opened via `open-network-stream'. If there is already
a running process in that buffer, it is not restarted. Optional third arg
STARTFILE is the name of a file to send the contents of the process to.
-If PROGRAM is a string, any more args are arguments to PROGRAM."
+If PROGRAM is a string, the remaining SWITCHES are arguments to PROGRAM."
(apply #'scomint-make-in-buffer name nil program startfile switches))
(defun scomint-exec (buffer name command startfile switches)
- "Start up a process named NAME in buffer BUFFER for Comint modes.
-Runs the given COMMAND with SWITCHES with output to STARTFILE.
+ "In buffer BUFFER, start up a process named NAME for Comint modes.
+Runs the given COMMAND with output to STARTFILE.
+SWITCHES contains the arguments passed to the COMMAND.
Blasts any old process running in the buffer. Doesn't set the buffer mode.
You can use this to cheaply run a series of processes in the same Comint
buffer. The hook `scomint-exec-hook' is run after each exec."
diff --git a/lib/span.el b/lib/span.el
index f1379616..e7e3d68b 100644
--- a/lib/span.el
+++ b/lib/span.el
@@ -1,12 +1,19 @@
;;; span.el --- Datatype of "spans" for Proof General
-;;
-;; Copyright (C) 1998-2009 LFCS Edinburgh
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: Healfdene Goguen
;; Maintainer: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;;; Commentary:
;;
;; Spans are our abstraction of extents/overlays. Nowadays
@@ -16,6 +23,7 @@
;;
;;; Code:
+
(eval-when-compile (require 'cl)) ;For lexical-let.
(defalias 'span-start 'overlay-start)
@@ -31,7 +39,7 @@
(defalias 'span-buffer 'overlay-buffer)
(defun span-p (ol)
- "Check if an overlay belongs to PG."
+ "Check if an overlay OL belongs to PG."
(overlay-get ol 'pg-span))
(defun span-read-only-hook (overlay after start end &optional len)
@@ -111,7 +119,7 @@
(defun span-mapcar-spans-inorder (fn start end prop)
"Map function FN over spans between START and END with property PROP."
- (mapcar fn
+ (mapcar fn
(sort (spans-at-region-prop start end prop)
'span-lt)))
@@ -157,7 +165,7 @@ A span is before PT if it begins before the character before PT."
(defun span-string (span)
(with-current-buffer (overlay-buffer span)
- (buffer-substring-no-properties
+ (buffer-substring-no-properties
(overlay-start span) (overlay-end span))))
(defun set-span-properties (span plist)
@@ -204,7 +212,8 @@ A span is before PT if it begins before the character before PT."
(span-mapc-spans 'span-delete start end prop))
(defun span-property-safe (span name)
- "Like span-property, but return nil if SPAN is nil."
+ "Get the property of span SPAN with property name NAME.
+Like ‘span-property’, but return nil if SPAN is nil."
(and span (span-property span name)))
(defun span-set-start (span value)
diff --git a/lib/texi-docstring-magic.el b/lib/texi-docstring-magic.el
index 6e8c8e49..e39ee51a 100644
--- a/lib/texi-docstring-magic.el
+++ b/lib/texi-docstring-magic.el
@@ -1,16 +1,24 @@
-;; texi-docstring-magic.el --- munge internal docstrings into texi
-;;
-;; Keywords: lisp, docs, tex
+;;; texi-docstring-magic.el --- munge internal docstrings into texi
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
-;; Copyright (C) 1998 David Aspinall
+;; Keywords: lisp, docs, tex
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;; This file is distributed under the terms of the GNU General Public
;; License, Version 2. Find a copy of the GPL with your version of
;; GNU Emacs or Texinfo.
-;;
+
+;;; Commentary:
;;
;; This package generates Texinfo source fragments from Emacs
;; docstrings. This avoids documenting functions and variables in
@@ -82,11 +90,16 @@
;;
;;
+;;; Code:
+
(eval-when-compile
(require 'cl))
(defun texi-docstring-magic-find-face (face)
- ;; Compatibility between FSF Emacs and XEmacs
+ "Return non-nil if FACE is a face name; nil otherwise.
+A face name can be a string or a symbol.
+
+Compatibility between FSF Emacs and XEmacs."
(or (facep face)
(and (fboundp 'find-face) (find-face face))))
@@ -192,13 +205,14 @@ including any whitespace included to delimit matches.")
(defun texi-docstring-magic-untabify (string)
"Convert tabs in STRING into multiple spaces."
- (with-temp-buffer
+ (with-temp-buffer
(insert string)
(untabify (point-min) (point-max))
(buffer-string)))
(defun texi-docstring-magic-munge-docstring (docstring args)
"Markup DOCSTRING for texi according to regexp matches."
+ ;; FIXME(EMD): seems buggy as ARGS is not used
(let ((case-fold-search nil))
(setq docstring (texi-docstring-magic-untabify docstring))
(dolist (test texi-docstring-magic-munge-table)
@@ -251,7 +265,7 @@ including any whitespace included to delimit matches.")
(defun texi-docstring-magic-format-default (default)
"Make a default value string for the value DEFAULT.
-Markup as @code{stuff} or @lisp stuff @end lisp."
+Markup as @code{stuff} or @lisp stuff @end Lisp."
;; NB: might be nice to use a 'default-value-description
;; property here, in case the default value is computed.
(let ((text (format "%S" default)))
@@ -399,3 +413,7 @@ With prefix arg, no errors on unknown symbols. (This results in
(provide 'texi-docstring-magic)
+
+(provide 'texi-docstring-magic)
+
+;;; texi-docstring-magic.el ends here
diff --git a/lib/unicode-chars.el b/lib/unicode-chars.el
index 1e5dedbf..2b854739 100644
--- a/lib/unicode-chars.el
+++ b/lib/unicode-chars.el
@@ -1,7 +1,17 @@
-;; unicode-chars.el --- table of Unicode characters
-;;
+;;; unicode-chars.el --- table of Unicode characters
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall
-;; $Id$
+
+;;; Commentary:
;;
;; Adapted from Norman Walsh's unichars.el (iso8879 names removed)
;;
@@ -9,6 +19,8 @@
;; http://www.unicode.org/unicode/standard/standard.html
;; http://www.unicode.org/Public/UNIDATA
+;;; Code:
+
(defvar unicode-chars-alist
'(;Unicode name Codept
("NULL" . #x000000)
@@ -5051,7 +5063,7 @@
(defun unicode-chars-list-chars ()
"Insert each Unicode character into a buffer.
Lets you see which characters are available for literal display
-in your emacs font."
+in your Emacs font."
(interactive)
(pop-to-buffer "*unicode-chars*")
(let ((chars unicode-chars-alist)
@@ -5069,3 +5081,4 @@ in your emacs font."
(insert (format " %s\n" name)))))))
(provide 'unicode-chars)
+;;; unicode-chars.el ends here
diff --git a/lib/unicode-tokens.el b/lib/unicode-tokens.el
index ba3d036a..4d1d0d35 100644
--- a/lib/unicode-tokens.el
+++ b/lib/unicode-tokens.el
@@ -1,11 +1,18 @@
;;; unicode-tokens.el --- Support for control and symbol tokens
-;;
-;; Copyright(C) 2008-2010 David Aspinall / LFCS Edinburgh
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
;; Author: David Aspinall <David.Aspinall@ed.ac.uk>
+
;; License: GPL (GNU GENERAL PUBLIC LICENSE)
-;;
-;; $Id$
-;;
+
;; This is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
@@ -37,19 +44,13 @@
;; -- simplify/optimise property handling
;; -- support multiple modes with mode-local configs at once
-;;
;;; Code:
-;;
(require 'cl)
(require 'quail)
(eval-when-compile
- (require 'maths-menu) ; nuke compile warnings
- ;; Emacs <24 compatibility
- (when (and (fboundp 'flet)
- (not (get 'flet 'byte-obsolete-info)))
- (defalias 'cl-flet 'flet)))
+ (require 'maths-menu)) ; nuke compile warnings
;;
;; Customizable user options
@@ -66,6 +67,7 @@
:group 'unicode-tokens-options)
(defun unicode-tokens-toggle-add-help-echo ()
+ "Toggle option ‘unicode-tokens-add-help-echo’."
(interactive)
(customize-set-variable 'unicode-tokens-add-help-echo
(not unicode-tokens-add-help-echo))
@@ -263,7 +265,7 @@ This is used for an approximate reverse mapping, see `unicode-tokens-paste'.")
;;
(defconst unicode-tokens-font-family-alternatives
'(("STIXGeneral"
- "DejaVu Sans Mono" "DejaVuLGC Sans Mono"
+ "DejaVu Sans Mono" "DejaVuLGC Sans Mono"
"Lucida Grande" "Lucida Sans Unicode" "Apple Symbols")
("Script"
"Lucida Calligraphy" "URW Chancery L" "Zapf Chancery")
@@ -868,7 +870,7 @@ Starts from point."
(regexp-opt (mapcar 'car unicode-tokens-shortcut-replacement-alist))))
;; override the display of the regexp because it's huge!
;; (doesn't help with C-h: need way to programmatically show string)
- (cl-flet ((query-replace-descr (str)
+ (cl-flet ((query-replace-descr (str)
(if (eq str shortcut-regexp) "shortcut" str)))
(perform-replace shortcut-regexp
(cons 'unicode-tokens-replace-shortcut-match nil)
@@ -882,7 +884,7 @@ Starts from point."
(format unicode-tokens-token-format token)))))
(defun unicode-tokens-replace-unicode ()
- "Query-replace unicode sequences in the buffer with tokens having same appearance.
+ "Query-replace unicode seq. in the buffer with tokens having same appearance.
Starts from point."
(interactive)
(let ((uchar-regexp unicode-tokens-uchar-regexp))
@@ -971,7 +973,7 @@ Starts from point."
(defalias 'unicode-tokens-list-unicode-chars 'unicode-chars-list-chars)
(defun unicode-tokens-encode-in-temp-buffer (str fn)
- "Call FN on encoded version of STR."
+ "Compute an encoded version of STR and call FN onto."
(with-temp-buffer
(insert str)
(goto-char (point-min))
diff --git a/obsolete/demoisa/demoisa-easy.el b/obsolete/demoisa/demoisa-easy.el
index f2e84837..b6e0e67d 100644
--- a/obsolete/demoisa/demoisa-easy.el
+++ b/obsolete/demoisa/demoisa-easy.el
@@ -25,9 +25,8 @@
;; To test this file you must rename it demoisa.el.
;;
-(eval-and-compile
- (require 'proof-site) ; compilation for demoisa
- (proof-ready-for-assistant 'demoisa))
+(require 'proof-site)
+(proof-ready-for-assistant 'demoisa)
(require 'proof)
(require 'proof-easy-config) ; easy configure mechanism
diff --git a/pg-init.el b/pg-init.el
new file mode 100644
index 00000000..a6405361
--- /dev/null
+++ b/pg-init.el
@@ -0,0 +1,66 @@
+;;; pg-init.el --- PG init file for package.el and ELPA compatibility -*- lexical-binding: t; -*-
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;; Author: Clément Pit-Claudel <clement.pitclaudel@live.com>
+;; URL: https://proofgeneral.github.io/
+;; Package-Requires: ((emacs "24.3"))
+;; Version: 4.5-git
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; Proof General's initialization code (in generic/proof-site) is relatively
+;; complex, in part because it was written before package.el existed, and in
+;; part because package.el still doesn't look for autoloads in subdirectories.
+;; This file is a thin, package.el-friendly wrapper around generic/proof-site,
+;; suitable for execution on Emacs start-up. It serves two purposes:
+;;
+;; * Setting up the load path when byte-compiling PG.
+;; * Loading a minimal PG setup on startup (not all of Proof General, of course;
+;; mostly mode hooks and autoloads).
+
+;;; Code:
+
+;;;###autoload
+(eval-and-compile
+ (defvar pg-init--script-full-path
+ (or (and load-in-progress load-file-name)
+ (bound-and-true-p byte-compile-current-file)
+ (buffer-file-name)))
+ (defvar pg-init--pg-root
+ (file-name-directory pg-init--script-full-path)))
+
+;;;###autoload
+(unless (bound-and-true-p byte-compile-current-file)
+ ;; This require breaks compilation, so it must only run when loading the package.
+ (require 'proof-site (expand-file-name "generic/proof-site" pg-init--pg-root)))
+
+(eval-when-compile
+ (let ((byte-compile-directories
+ '("generic" "lib"
+ "coq" "easycrypt" "pghaskell" "pgocaml" "pgshell" "phox")))
+ (dolist (dir byte-compile-directories)
+ (add-to-list 'load-path (expand-file-name dir pg-init--pg-root)))))
+
+(provide 'pg-init)
+;;; pg-init.el ends here
diff --git a/pghaskell/pghaskell.el b/pghaskell/pghaskell.el
index f2aec426..88dd44bc 100644
--- a/pghaskell/pghaskell.el
+++ b/pghaskell/pghaskell.el
@@ -1,6 +1,17 @@
-;; pghaskell.el - Proof General for Haskell scripts.
-;;
-;; David Aspinall. $Id$
+;;; pghaskell.el --- Proof General for Haskell scripts.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;; Author: David Aspinall.
+
+;;; Commentary:
;;
;; This instance of PG is handy just for using script management to
;; cut-and-paste into a buffer running Haskell (ghci)
@@ -18,6 +29,7 @@
;; in proof-site.el).
;;
+;;; Code:
(require 'proof-easy-config)
(require 'proof-syntax)
@@ -59,3 +71,4 @@
)
(provide 'pghaskell)
+;;; pghaskell.el ends here
diff --git a/pgocaml/pgocaml.el b/pgocaml/pgocaml.el
index 4b11c7df..ce899c45 100644
--- a/pgocaml/pgocaml.el
+++ b/pgocaml/pgocaml.el
@@ -1,6 +1,17 @@
-;; pgocaml.el - Proof General for OCaml scripts.
-;;
-;; David Aspinall. $Id$
+;;; pgocaml.el --- Proof General for OCaml scripts.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;; Author: David Aspinall
+
+;;; Commentary:
;;
;; This instance of PG is handy just for using script management to
;; cut-and-paste into a buffer running OCaml
@@ -18,6 +29,7 @@
;; in proof-site.el).
;;
+;;; Code:
(require 'proof-easy-config)
(require 'proof-syntax)
@@ -56,3 +68,4 @@
)
(provide 'pgocaml)
+;;; pgocaml.el ends here
diff --git a/pgshell/pgshell.el b/pgshell/pgshell.el
index aa34e985..0521b3f9 100644
--- a/pgshell/pgshell.el
+++ b/pgshell/pgshell.el
@@ -1,6 +1,17 @@
-;; pgshell.el - Proof General for shell scripts.
-;;
-;; David Aspinall. $Id$
+;;; pgshell.el --- Proof General for shell scripts.
+
+;; This file is part of Proof General.
+
+;; Portions © Copyright 1994-2012 David Aspinall and University of Edinburgh
+;; Portions © Copyright 2003, 2012, 2014 Free Software Foundation, Inc.
+;; Portions © Copyright 2001-2017 Pierre Courtieu
+;; Portions © Copyright 2010, 2016 Erik Martin-Dorel
+;; Portions © Copyright 2011-2013, 2016-2017 Hendrik Tews
+;; Portions © Copyright 2015-2017 Clément Pit-Claudel
+
+;; Author: David Aspinall.
+
+;;; Commentary:
;;
;; This instance of PG is handy just for using script management to
;; cut-and-paste into a buffer running an ordinary shell of some kind.
@@ -13,6 +24,7 @@
;;
;; Feedback welcome.
+;;; Code:
(require 'proof-easy-config)
(require 'proof-syntax)
@@ -35,3 +47,4 @@
)
(provide 'pgshell)
+;;; pgshell.el ends here
diff --git a/phox/.cvsignore b/phox/.cvsignore
deleted file mode 100644
index f0b14b7a..00000000
--- a/phox/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-config
-config.dos
-*~
-#*#
-*.o
-*.a
-*.cmo
-*.cmi
-*.cmx
-*.pho
-*.phi
-*.pht
-*.math.tex
diff --git a/phox/README b/phox/README
deleted file mode 100644
index 635360fb..00000000
--- a/phox/README
+++ /dev/null
@@ -1,18 +0,0 @@
-PhoX Proof General, for Phox.
-
-Written by Christophe Raffalli and others
-
-Status: supported
-Maintainer: Christophe Raffalli <Christophe.Raffalli@univ-savoie.fr>
-PhoX version: 0.8
-PhoX homepage: http://www.lama.univ-savoie.fr/~RAFFALLI/phox.html
-
-===========================================================================
-
-This mode has support for script management with PhoX, and some
-other features ported from PhoX's own Emacs mode.
-
-
-
-$Id$
-
diff --git a/phox/README.pbrpm b/phox/README.pbrpm
deleted file mode 100644
index c0c7bc1b..00000000
--- a/phox/README.pbrpm
+++ /dev/null
@@ -1,26 +0,0 @@
-****
-Projet PhoX : Proof By Rules Popup Menu (PBRPM)
-*****
-
------
-Fichiers concernés :
- ProofGeneral/generic/pg-goals.el
- ProofGeneral/generic/pg-pbrpm.el
- ProofGeneral/phox/phox.el
- ProofGeneral/phox/phox-pbrpm.el
-
-
-- Dans pg-goals.el -
-(l. 58-59)
- inclusion de pg-pbrpm.el
- déclaration du 'CTRL + Click Droit' associé à pg-pbrpm-button-action (dans pg-pbrpm.el)
-
-- Dans pg-pbrpm.el -
- Fonctions indépendantes de PhoX implémentant le PBRPM.
-
-- Dans phox.el -
-(l. 86) inclus phox-pbrpm.el
-(l. 103-104) ajoute le menu de gestion du buffer de selections dans le menu de PhoX
-
-- Dans phox-pbrpm.el -
- Fonctions spécifiques à PhoX. \ No newline at end of file
diff --git a/phox/example.phx b/phox/example.phx
deleted file mode 100644
index 5dacbb20..00000000
--- a/phox/example.phx
+++ /dev/null
@@ -1,22 +0,0 @@
-(*
- Example proof script for PhoX Proof General
-
- $Id$
-*)
-
-(*
-goal /\n:N (ack n N1 >= N2).
-intro 2.
-elim H.
-trivial.
-elim -1 [case] H0.
-trivial.
-trivial.
-save ack_lem7.
-*)
-
-prop (* test *) (* just un test *) test /\X (X -> X).
-print $0.
-trivial.
-save.
-
diff --git a/phox/phox-extraction.el b/phox/phox-extraction.el
deleted file mode 100644
index 87ea70f6..00000000
--- a/phox/phox-extraction.el
+++ /dev/null
@@ -1,178 +0,0 @@
-;; $State$ $Date$ $Revision$
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; program extraction.
-;;
-;; note : program extraction is still experimental This file is very
-;; dependant of the actual state of program extraction in phox.
-;;--------------------------------------------------------------------------;;
-
-(require 'cl)
-
-(eval-when (compile)
- (defvar phox-prog-name nil))
-
-(declare-function proof-shell-invisible-command "proof-shell" (str))
-
-;; configuration :
-
-(defvar phox-prog-orig "phox -pg" "original name of phox binary.")
-
-(defun phox-prog-flags-modify(option)
-"ask for a string that are options to pass to phox binary"
-(interactive "soption :")
-; pas d'analyse de la réponse,
-(let ((process))
- (if (and phox-prog-name
- (progn (string-match " \\|$" phox-prog-name)
- (setq process
- (substring phox-prog-name 0 (match-beginning 0))
- )
- )
- (processp (get-process process))
- (eq (process-status process) 'run))
- (error "Error : exit phox process first !")
- )
-(if (string-match "^ *$" option)
- (progn
- (message
- "no option other than default ones will be passed to phox binary.")
- (setq phox-prog-name phox-prog-orig))
- (progn
- (message (format "option %s will be passed to phox binary." option ))
- (setq phox-prog-name (concat phox-prog-orig " " option))
- )
- )
-)
-)
-
-
-(defun phox-prog-flags-extract()
-"pass option -f to phox binary. A program can be extracted from
-proof of theorem_name with :
-compile theorem_name.
-output."
-(interactive)
-(phox-prog-flags-modify "-f")
-(message
-"WARNING : program extraction is experimental and can disturb the prover !")
-)
-
-(defun phox-prog-flags-erase()
-"no option to phox binary."
-(interactive)
-(phox-prog-flags-modify ""))
-
-; encore une fonction qui devrait être redéfinie en cas d'autres
-; options possibles que -f
-
-(defun phox-toggle-extraction()
-"toggle between extraction mode and ordinary mode for phox process."
-(interactive)
-(cond ((string-equal phox-prog-name phox-prog-orig) ;; à améliorer (espaces)
- (phox-prog-flags-extract))
- ((string-match "\-f$" phox-prog-name) (phox-prog-flags-erase))
- (t (error "option must be empty or -f, use phox-prog-flags-modify.")))
-)
-
-;; commands
-
-; compilation
-(defun phox-compile-theorem(name)
- "Interactive function :
-ask for the name of a theorem and send a compile command to PhoX for it."
- (interactive "stheorem : ")
- (proof-shell-invisible-command (concat "compile " name)))
-
-(defun phox-compile-theorem-on-cursor()
-"Interactive function :
-send a compile command to PhoX for the theorem which name is under the cursor."
- (interactive)
- (let (start end)
- (save-excursion
-; (modify-syntax-entry ?\. "w")
- (forward-word 1)
- (setq start (point))
- (forward-word -1)
- (setq end (point)))
- (if (char-equal (char-after (- end 1)) ?\.)(setq end (- end 1)))
- (phox-compile-theorem (buffer-substring start end))))
-
-; extraction
-
-(defun phox-output ()
-
-"Interactive function :
-send output command to phox in order to obtain programs
-extracted from proofs of all compiled theorems."
-
-
-(interactive)
-(proof-shell-invisible-command "output"))
-
-(defun phox-output-theorem (name)
-"Interactive function :
-ask for the name of a theorem and send an output command to PhoX for it
-in order to obtain a programm extracted from the known proof of this theorem."
- (interactive "stheorem : ")
- (proof-shell-invisible-command (concat "output " name)))
-
-(defun phox-output-theorem-on-cursor()
-"Interactive function :
-send an output command to PhoX for the theorem which name is under the cursor
-in order to obtain a programm extracted from the known proof of this theorem."
- (interactive)
- (let (start
- end
-; (syntax (char-to-string (char-syntax ?\.)))
- )
- (save-excursion
-; (modify-syntax-entry ?\. "w") ; à modifier globablement ?
- (forward-word 1)
- (setq start (point))
- (forward-word -1)
- (setq end (point)))
-; (modify-syntax-entry ?\. syntax)
- (if (char-equal (char-after (- end 1)) ?\.)(setq end (- end 1)))
- (phox-output-theorem (buffer-substring start end))))
-
-; Definitions of lambda-mu terms (tdef nom_de_term = terme.) and
-; normalization (eval term.) have to be "visible" proof commands.
-
-;; menu
-
- (defvar phox-extraction-menu
- '("Extraction"
- ["Program extraction enabled"
- phox-toggle-extraction
- :style radio
- :selected(string-match "\-f$" phox-prog-name)
- ]
- ["------------------------------" nil nil
- ]
- ["Compile theorem on cursor" phox-compile-theorem-on-cursor
- :active(string-match "\-f$" phox-prog-name)
- ]
- ["Extraction for theorem on cursor" phox-output-theorem-on-cursor
- :active(string-match "\-f$" phox-prog-name)
- ]
- ["Extraction for all compiled theorems" phox-output
- :active(string-match "\-f$" phox-prog-name)
- ]
- ["------------------------------" nil nil
- ]
- ["Compile theorem : " phox-compile-theorem
- :active(string-match "\-f$" phox-prog-name)
- ]
- ["Extraction for theorem : " phox-output-theorem
- :active(string-match "\-f$" phox-prog-name)
- ]
- )
-"A list of menu items to deal with program extraction.
-Warning, program extraction is still experimental
-and can disturb the prover !"
-)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(provide 'phox-extraction)
diff --git a/phox/phox-font.el b/phox/phox-font.el
deleted file mode 100644
index 3e86dd28..00000000
--- a/phox/phox-font.el
+++ /dev/null
@@ -1,102 +0,0 @@
-(defvar phox-sym-lock-enabled nil) ; da: for clean compile
-(defvar phox-sym-lock-color nil) ; da: for clean compile
-(defvar phox-sym-lock-keywords nil) ; da: for clean compile
-(declare-function phox-sym-lock "phox-sym-lock")
-
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; Font lock keywords
-;;--------------------------------------------------------------------------;;
-
-(defconst phox-font-lock-keywords
- (list
-;commands
- '("(\\*\\([^*]\\|\\*+[^*)]\\)*\\(\\*+)\\|\\**$\\)"
- 0 'font-lock-comment-face t)
- '("\"\\([^\\\"]\\|\\\\.\\)*\""
- 0 'font-lock-string-face t)
- (cons (concat "\\([ \t]\\|^\\)\\("
- "Cst\\|"
- "Data\\|"
- "I\\(mport\\|nductive\\)\\|"
- "Use\\|"
- "Sort\\|"
- "new_\\(intro\\|e\\(lim\\|quation\\)\\|rewrite\\)\\|"
- "a\\(dd_path\\|uthor\\)\\|"
- "c\\(l\\(aim\\|ose_def\\)\\|or\\(ollary\\)?\\)\\|"
- "d\\(e\\(f\\(\\(_thlist\\|rec\\)\\)?\\|l\\(_proof\\)\\)\\|ocuments\\|epend\\)\\|"
- "e\\(lim_after_intro\\|xport\\|del\\|show\\)\\|"
- "f\\(act\\|lag\\)\\|"
- "goal\\|"
- "in\\(clude\\|stitute\\)\\|"
- "lem\\(ma\\)?\\|"
- "p\\(ath\\|r\\(int\\(_sort\\)?\\|iority\\|op\\(osition\\)?\\|ove_claim\\)\\)\\|"
- "quit\\|"
- "s\\(ave\\|earch\\)\\|"
- "t\\(ex\\(_syntax\\)?\\|heo\\(rem\\)?\\|itle\\|ype\\)"
- "\\)[ \t\n\r.]")
- '(0 'font-lock-keyword-face t))
-;proof command
- (cons (concat "\\([ \t]\\|^\\)\\("
- "a\\(bort\\|fter\\|nd\\|pply\\|ssume\\|xiom\\)\\|"
- "by\\(_absurd\\)?\\|"
- "constraints\\|"
- "elim\\|"
- "deduce\\|"
- "evaluate\\(_hyp\\)?\\|"
- "from\\|"
- "goals\\|"
- "in\\(tros?\\|stance\\)\\|"
- "l\\(oc\\(al\\|k\\)\\|e\\(t\\|fts?\\)\\)\\|"
- "next\\|"
- "of\\|"
- "prove\\|"
- "r\\(e\\(write\\(_hyp\\)?\\|name\\)\\|mh\\)\\|"
- "s\\(elect\\|how\\|lh\\)\\|"
- "t\\(hen\\|rivial\\)\\|"
- "u\\(se\\|n\\(do\\|fold\\(_hyp\\)?\\|lock\\)\\)\\|"
- "with"
- "\\)[ \t.]")
- '(0 'font-lock-type-face t))))
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; phox-sym-lock tables
-;;--------------------------------------------------------------------------;;
-
-(if (featurep 'xemacs) (require 'phox-sym-lock))
-
-;; to change this table, xfd -fn '-adobe-symbol-*--12-*' may be
-;; used to determine the symbol character codes.
-(defconst phox-sym-lock-keywords-table
- '((">=" 0 1 179)
- ("<=" 0 1 163)
- ("!=" 0 1 185)
- (":<" 0 1 206)
- ("[^:]\\(:\\)[^:= \n\t\r]" 1 7 206)
- ("\\\\/" 0 1 36)
- ("/\\\\" 0 1 34)
- ("\\<or\\>" 0 3 218)
- ("\\<in\\>" 0 3 206)
- ("\\<notin\\>" 0 4 207)
- ("\\<inter\\>" 0 3 199)
- ("\\<union\\>" 0 3 200)
- ("\\<minus\\>" 0 3 45)
- ("&" 0 1 217)
- ("<->" 0 1 171)
- ("=>" 0 1 222)
- ("\\<subset\\>" 0 4 204)
- ("->" 0 1 174)
- ("~" 0 1 216)
- ("\\\\" 0 1 108)))
-; "If non nil: Overrides default Phox-Sym-Lock patterns for PhoX.")
-
-(defun phox-sym-lock-start ()
- (if (and (featurep 'phox-sym-lock) phox-sym-lock-enabled)
- (progn
- (setq phox-sym-lock-color
- (face-foreground 'font-lock-function-name-face))
- (if (not phox-sym-lock-keywords)
- (phox-sym-lock phox-sym-lock-keywords-table)))))
-
-
-(provide 'phox-font)
diff --git a/phox/phox-fun.el b/phox/phox-fun.el
deleted file mode 100644
index 08f46c96..00000000
--- a/phox/phox-fun.el
+++ /dev/null
@@ -1,440 +0,0 @@
-;; $State$ $Date$ $Revision$
-;; syntax
-
-(require 'span)
-(require 'proof-syntax)
-(require 'proof-script)
-
-(eval-when-compile
- (require 'proof-utils))
-
-(defconst phox-forget-id-command "del %s.\n")
-(defconst phox-forget-proof-command "del_proof %s.\n")
-(defconst phox-forget-new-elim-command "edel elim %s.\n")
-(defconst phox-forget-new-intro-command "edel intro %s.\n")
-(defconst phox-forget-new-equation-command "edel equation %s.\n")
-(defconst phox-forget-close-def-command "edel closed %s.\n")
-; phox-comments-regexp : a sequence of comments and white spaces
-(defconst phox-comments-regexp "[ \n\t\r]*\\((\\*\\([^*]\\|\\(\\*[^)]\\)\\)*\\*)[ \n\t\r]*\\)*")
-; phox-strict-comments-regexp : a not empty sequence of comments and white spaces
-(defconst phox-strict-comments-regexp "\\([ \n\t\r]+\\((\\*\\([^*]\\|\\(\\*[^)]\\)\\)*\\*)[ \n\t\r]*\\)*\\|\\((\\*\\([^*]\\|\\(\\*[^)]\\)\\)*\\*)[ \n\t\r]*\\)+\\)")
-(defconst phox-ident-regexp "\\(\\([^() \n\t\r=\\[.]\\|\\(\\.[^() \n\t\r]\\)\\)+\\)")
-(defconst phox-inductive-option "\\(\\[[^]]*]\\)?")
-(defconst phox-spaces-regexp "[ \n\t\r]*")
-(defconst phox-sy-definition-regexp (concat
- "\\(Cst\\|\\(def\\(rec\\)?\\)\\)"
- phox-comments-regexp
- "\\(\\(rInfix\\|lInfix\\|Infix\\|Prefix\\|Postfix\\)[^\"]+\"\\([^\"]+\\)\\)"))
-(defconst phox-sy-inductive-regexp (concat
- "Inductive"
- phox-comments-regexp
- phox-inductive-option
- phox-comments-regexp
- "\\(\\(rInfix\\|lInfix\\|Infix\\|Prefix\\|Postfix\\)[^\"]+\"\\([^\"]+\\)\\)"))
-(defconst phox-inductive-regexp (concat
- "Inductive"
- phox-comments-regexp
- phox-inductive-option
- phox-comments-regexp
- phox-ident-regexp))
-(defconst phox-data-regexp (concat
- "\\(Data\\|type\\)"
- phox-comments-regexp
- phox-inductive-option
- phox-comments-regexp
- phox-ident-regexp))
-(defconst phox-definition-regexp (concat
- "\\(Cst\\|def\\(_thlist\\|rec\\)?\\|claim\\|Sort\\)"
- phox-comments-regexp
- phox-ident-regexp))
-(defconst phox-prove-claim-regexp (concat
- "prove_claim"
- phox-comments-regexp
- phox-ident-regexp))
-(defconst phox-new-elim-regexp (concat
- "new_elim\\([^.]\\|\\(\\.[^ \n\t\r]\\)\\)*[ \n\t\r)]"
- phox-ident-regexp))
-(defconst phox-new-intro-regexp (concat
- "new_intro\\([^.]\\|\\(\\.[^ \n\t\r]\\)\\)*[ \n\t\r)]"
- phox-ident-regexp))
-(defconst phox-new-rewrite-regexp (concat
- "new_rewrite\\([^.]\\|\\(\\.[^ \n\t\r]\\)\\)*[ \n\t\r)]"
- phox-ident-regexp))
-(defconst phox-new-equation-regexp (concat
- "new_equation\\([^.]\\|\\(\\.[^ \n\t\r]\\)\\)*[ \n\t\r)]"
- phox-ident-regexp))
-(defconst phox-close-def-regexp (concat
- "close_def"
- phox-comments-regexp
- "\\(\\([^.]\\|\\(\\.[^ \n\t\r]\\)\\)+\\)[. \n\t\r]"))
-
-(defun phox-init-syntax-table (&optional TABLE)
- "Set appropriate values for syntax table in current buffer,
-or for optional argument TABLE."
-;; useful for using forward-word
- (modify-syntax-entry ?_ "w" TABLE)
- (modify-syntax-entry ?\. "w" TABLE)
-;; Configure syntax table for block comments
- (modify-syntax-entry ?\* ". 23" TABLE)
- (modify-syntax-entry ?\( "()1" TABLE)
- (modify-syntax-entry ?\) ")(4" TABLE)
-;; à compléter éventuellement
-)
-
-
-;; completions :
-
-(defvar phox-top-keywords
-'(
-"goal"
-"restart"
-"quit"
-"theorem"
-"claim"
-"cst"
-"Cst"
-"def"
-"def_thlist"
-"del"
-"del_proof"
-"Sort"
-"close_def"
-"edel"
-"new_elim"
-"new_intro"
-"new_equation"
-"new_rewrite"
-"Data"
-"type"
-"Inductive"
-"add_path"
-"Import"
-"include"
-"Use"
-"tex_syntax"
-"depend"
-"eshow"
-"flag"
-"path"
-"print"
-"print_sort"
-"priority"
-"prove_claim"
-"search"
-"compile"
-"tdef"
-"eval"
-"output"
-"compile"
-"compute"
-"Local"
-)
-"Names of phox top commands."
-)
-
-(defvar phox-proof-keywords
-'(
-"axiom"
-"elim"
-"intro"
-"intros"
-"apply"
-"by_absurd"
-"from"
-"left"
-"lefts"
-"prove"
-"use"
-"auto"
-"trivial"
-"rewrite"
-"rewrite_hyp"
-"unfold"
-"unfold_hyp"
-"constraints"
-"instance"
-"lock"
-"unlock"
-"goals"
-"after"
-"next"
-"select"
-"local"
-"rename"
-"rmh"
-"slh"
-"abort"
-"save"
-"undo"
-"Try"
-)
-"Name of phox proof commands."
-)
-
-
-
-(defun phox-find-and-forget (span)
- (let (str ans tmp (lsp -1) name sname) ;; da: added name,sname. are tmp/lsp not used?
- (while span
- (setq str (span-property span 'cmd))
-
- (cond
-
- ((eq (span-property span 'type) 'comment))
-
- ((eq (span-property span 'type) 'proverproc))
-
- ((eq (span-property span 'type) 'goalsave)
- (if (proof-string-match phox-prove-claim-regexp str)
- (setq ans (concat (format phox-forget-proof-command
- (match-string 4 str)) ans))
- (setq ans (concat (format phox-forget-id-command
- (span-property span 'name)) ans))))
-
- ((proof-string-match phox-new-elim-regexp str)
- (setq ans
- (concat (format phox-forget-new-elim-command
- (match-string 3 str)) ans)))
-
- ((proof-string-match phox-new-intro-regexp str)
- (setq ans
- (concat (format phox-forget-new-intro-command
- (match-string 3 str)) ans)))
-
- ((proof-string-match phox-new-rewrite-regexp str) ; deprecated
- (setq ans
- (concat (format phox-forget-new-equation-command
- (match-string 3 str)) ans)))
-
- ((proof-string-match phox-new-equation-regexp str)
- (setq ans
- (concat (format phox-forget-new-equation-command
- (match-string 3 str)) ans)))
-
- ((proof-string-match phox-close-def-regexp str)
- (setq ans
- (concat (format phox-forget-close-def-command
- (match-string 4 str)) ans)))
-
- ((proof-string-match phox-sy-definition-regexp str)
- (setq ans
- (concat (format phox-forget-id-command
- (concat "$" (match-string 7 str))) ans)))
-
- ((proof-string-match phox-sy-inductive-regexp str)
- (setq ans
- (concat (format phox-forget-id-command
- (concat "$" (match-string 10 str))) ans)))
-
- ((proof-string-match phox-inductive-regexp str)
- (setq ans
- (concat (format phox-forget-id-command
- (match-string 8 str)) ans)))
-
- ((proof-string-match phox-data-regexp str)
- (setq
- name (match-string 8 str)
- sname (concat (downcase (substring name 0 1))
- (substring name 1 nil))
- ans (concat (format phox-forget-id-command
- sname) ans)))
-
- ((proof-string-match phox-definition-regexp str)
- (setq ans (concat (format phox-forget-id-command
- (match-string 6 str)) ans))))
-
- (setq lsp (span-start span))
- (setq span (next-span span 'type)))
-
- (when ans (list ans)))) ; was (or ans proof-no-command)
-
-;;
-;; Doing commands
-;;
-
-(defalias 'phox-assert-next-command-interactive 'proof-assert-next-command-interactive)
-;; da: might be able to achieve commented out effect with proof-electric-terminator-noterminator
-;; "Process until the end of the next unprocessed command after point.
-;; If inside a comment, just process until the start of the comment."
-;; (interactive)
-;; ; (if (and (> (point) 1) (char-equal (char-before (point)) ?\.)) (insert "\n"))
-;; (proof-with-script-buffer
-;; (goto-char (proof-queue-or-locked-end))
-;; (proof-assert-next-command)
-;; (proof-maybe-follow-locked-end)))
-
-;;--------------------------------------------------------------------------;;
-;; Obtaining some informations on the system.
-;;
-;;--------------------------------------------------------------------------;;
-;; All the commands in section "Obtaining some informations on the
-;; system." (see cmd_top.tex) are associated to a
-;; function, and appear in the submenu "State" [pr].
-
-(defun phox-depend-theorem(theorem)
- "Interactive function :
-ask for a string and and send a depend command to PhoX for it.
-
-Gives the list of all axioms which have been used to prove the theorem."
-
-(interactive "stheorem: ")
-(proof-shell-invisible-command (concat "depend " theorem)))
-
-(defun phox-eshow-extlist(extlist)
- "Interactive function :
-ask for a string and send an eshow command to PhoX for it.
-
-Shows the given extension-list. Possible extension lists are : equation
-(the list of equations added to unification introduced by the new_equation
-command), elim, intro, (the introduction and elimination rules
-introduced by the new_elim and new_intro {-t} commands), closed
-(closed definitions introduced by the close_def command) and tex
-(introduced by the tex_syntax command)."
-
-(interactive "sextension list: ")
-(proof-shell-invisible-command (concat "eshow " extlist)))
-
-(defun phox-flag-name(name)
-"Interactive function :
-ask for a string and send a flag command to PhoX for it.
-
- Print the value of an internal flag of the
- system. The different flags are listed in the doc, see flag."
-
-(interactive "sname: ")
-(proof-shell-invisible-command (concat "flag " name)))
-
-
-(defun phox-path()
-"Interactive function :
- send a path command to PhoX.
-
- Prints the list of all paths. This path list is used to find
- files when using the include command."
-
-
-(interactive)
-(proof-shell-invisible-command "path"))
-
-(defun phox-print-expression(expr)
-"Interactive function :
-ask for a string and send a print command to PhoX for it.
-
- In case argument expr
- is a closed expression of the language in use, prints it and gives its
- sort, gives an (occasionally) informative error message otherwise. In
- case expr is a defined expression (constant, theorem ...)
- gives the definition."
-
-(interactive "sexpr: ")
-(proof-shell-invisible-command (concat "print " expr)))
-
-(defun phox-print-sort-expression(expr)
-"Interactive function :
-ask for a string and send a print_sort command to PhoX for it.
-
- Similar to print, but gives more information on sorts of bounded
- variable in expressions."
-
-(interactive "sexpr: ")
-(proof-shell-invisible-command (concat "print_sort " expr)))
-
-
-(defun phox-priority-symbols-list(symblist)
-"Interactive function :
-ask for a string and send a priority command to PhoX for it.
-
- Print the priority of the given symbols. If no symbol are
- given, print the priority of all infix and prefix symbols.
-."
-
-(interactive "slist of symbols (possibly empty): ")
-(proof-shell-invisible-command (concat "priority" symblist)))
-
-
-(defun phox-search-string(string type)
- "Interactive function:
-ask for a string and possibly a type and send a search command to PhoX for it.
-
- Prints the list of all loaded symbols which have type and whose name
- contains the string. If no type is given, it prints all symbols whose
- name contains string."
-
-(interactive
-"sstring :
-stype (nothing for any type, 'a as type parameter) :")
-(proof-shell-invisible-command (concat "search \"" string "\" " type)))
-
-;; The followings are proof commands (doc in cmd_proof.tex) :
-
-(defun phox-constraints()
-"Interactive function :
- send a constraints command to PhoX.
-
- Prints the constraints which should be fulfilled by unification variables,
- only works in proofs."
-
-
-(interactive)
-(proof-shell-invisible-command "constraints"))
-
-(defun phox-goals()
-"Interactive function :
- send a goals command to PhoX.
-
- Prints the list of all remaining goals, only works in proofs."
-
-
-(interactive)
-(proof-shell-invisible-command "goals"))
-
-;; menu
-
-(defvar phox-state-menu
- '("State"
-["dependencies of a theorem" phox-depend-theorem t]
-["show an extension list" phox-eshow-extlist t]
-["value of a flag" phox-flag-name t]
-["list of all paths" phox-path t]
-["print expression" phox-print-expression t]
-["print expression with sorts" phox-print-sort-expression t]
-["priority of symbols (all if arg. empty)" phox-priority-symbols-list t]
-["search for loaded symbols matching string" phox-search-string t]
-["------------------" nil nil]
-["constraints (proof command)" phox-constraints t]
-["goals (proof command)" phox-goals t]
-)
-"Phox menu for informations on state of the system."
-)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;--------------------------------------------------------------------------;;
-;;
-;; Deleting symbols
-;;
-;;--------------------------------------------------------------------------;;
-;; obsolète probablement, sinon à modifier pour en étendre la portée.
-
-(defun phox-delete-symbol(symbol)
- "Interactive function :
-ask for a symbol and send a delete command to PhoX for it."
- (interactive "ssymbol : ")
- (proof-shell-invisible-command (concat "del " symbol)))
-
-(defun phox-delete-symbol-on-cursor()
-"Interactive function :
-send a delete command to PhoX for the symbol whose name is under the cursor."
- (interactive)
- (let (start end)
- (save-excursion
- (forward-word -1)
- (setq start (point))
- (forward-word 1)
- (setq end (point)))
- (if (char-equal (char-after (- end 1)) ?\.)(setq end (- end 1)))
- (phox-delete-symbol (buffer-substring start end))))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(provide 'phox-fun)
diff --git a/phox/phox-lang.el b/phox/phox-lang.el
deleted file mode 100644
index dc6ad9ed..00000000
--- a/phox/phox-lang.el
+++ /dev/null
@@ -1,64 +0,0 @@
-;; $State$ $Date$ $Revision$
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; messages in various languages
-
-(provide 'phox-lang)
-(require 'cl) ; for case
-
-(defvar phox-lang
- (let* ((s (or (getenv "LC_ALL")
- (getenv "LANG")
- (getenv "LANGUAGE")))
- (loc (and s
- (> (length s) 1)
- (substring s 0 2))))
- (cond
- ((or (string= loc "en") (string= loc "us")) 'en)
- ((string= loc "fr") 'fr)
- (t 'en))))
-
-(defun phox-lang-absurd ()
- (case phox-lang
- (en "By absurd")
- (fr "Par l'absurde")))
-
-(defun phox-lang-suppress (s)
- (case phox-lang
- (en (concat "Remove hypothesis " s " (if it became useless)"))
- (fr (concat "Supprimer l'hypothèse " s " (si elle est devenue inutile)"))))
-
-(defun phox-lang-opendef ()
- (case phox-lang
- (en "Expand the definition: ")
- (fr "Ouvre la définition : ")))
-
-(defun phox-lang-instance (s)
- (case phox-lang
- (en (concat "Choose " s " = "))
- (fr (concat "Choisissons " s " = "))))
-
-(defun phox-lang-open-instance (s)
- (case phox-lang
- (en (concat "Choose " s " = \\[ \\]"))
- (fr (concat "Choisissons " s " = \\[ \\]"))))
-
-(defun phox-lang-lock (s)
- (case phox-lang
- (en (concat "Lock variable " s))
- (fr (concat "Vérouille la variable " s))))
-
-(defun phox-lang-unlock (s)
- (case phox-lang
- (en (concat "Unlock variable " s))
- (fr (concat "Dévérouille la variable " s))))
-
-(defun phox-lang-prove (s)
- (case phox-lang
- (en (concat "Let us prove \\[" s "\\]"))
- (fr (concat "Prouvons \\[" s "\\]"))))
-
-(defun phox-lang-let (s)
- (case phox-lang
- (en (concat "Let \\[ \\] = \\[" s "\\]"))
- (fr (concat "Définissons \\[ \\] = \\[" s "\\]"))))
diff --git a/phox/phox-outline.el b/phox/phox-outline.el
deleted file mode 100644
index 7ee2710f..00000000
--- a/phox/phox-outline.el
+++ /dev/null
@@ -1,69 +0,0 @@
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; PARAMÉTRAGE du MODE outline
-;;--------------------------------------------------------------------------;;
-
-(require 'outline)
-
-(declare-function phox-lang-absurd "nofile")
-(declare-function phox-lang-suppress "nofile")
-(declare-function phox-lang-instance "nofile")
-(declare-function phox-lang-open-instance "nofile")
-(declare-function phox-lang-opendef "nofile")
-(declare-function phox-lang-unlock "nofile")
-(declare-function phox-lang-lock "nofile")
-(declare-function phox-lang-prove "nofile")
-(declare-function phox-lang-let "nofile")
-
-
-(defconst phox-outline-title-regexp "\\((\\*[ \t\n]*title =\\)")
-(defconst phox-outline-section-regexp "\\((\\*\\*+\\)")
-(defconst phox-outline-save-regexp "\\((\\*#\\)")
-(defconst
- phox-outline-theo-regexp
- "\\((\\*lem\\)\\|\\((\\*prop\\)\\|\\((\\*fact\\)\\|\\((\\*theo\\)\\|\\((\\*def\\)\\|\\((\\*cst\\)")
-(defconst
- phox-outline-theo2-regexp
- "\\(lem\\)\\|\\(prop\\)\\|\\(fact\\)\\|\\(theo\\)\\|\\(def\\)\\|\\(cst\\)\\|\\(claim\\)\\|\\(new_\\)")
-
-(defconst
- phox-outline-regexp
- (concat
- phox-outline-title-regexp "\\|"
- phox-outline-section-regexp "\\|"
- phox-outline-save-regexp "\\|"
- phox-outline-theo-regexp "\\|"
- phox-outline-theo2-regexp))
-
-(defconst phox-outline-heading-end-regexp "\\(\\*)[ \t]*\n\\)\\|\\(\\.[ \t]*\n\\)")
-
-;;(if phox-outline
-;; (add-hook 'phox-mode-hook (lambda () (outline-minor-mode 1)))
-;; )
-
-(defun phox-outline-level()
- "Find the level of current outline heading in some PhoX libraries."
- (let ((retour 0))
- (save-excursion
- (cond ((looking-at phox-outline-title-regexp) 1)
- ((looking-at phox-outline-section-regexp)
- (min 6 (- (match-end 0) (match-beginning 0)))) ; valeur maxi 6
- ((looking-at phox-outline-theo-regexp) 7)
- ((looking-at (concat phox-outline-save-regexp "\\|"
- phox-outline-theo2-regexp )
- ) 8)
- )
- )))
-
-(defun phox-setup-outline ()
- "Set up local variable for outline mode"
- (make-local-variable 'outline-heading-end-regexp)
- (setq outline-heading-end-regexp phox-outline-heading-end-regexp)
- (make-local-variable 'outline-regexp)
- (setq outline-regexp phox-outline-regexp)
- (make-local-variable 'outline-level)
- (setq outline-level 'phox-outline-level)
- (outline-minor-mode 1)
-)
-
-(provide 'phox-outline)
diff --git a/phox/phox-pbrpm.el b/phox/phox-pbrpm.el
deleted file mode 100644
index 544fa1c4..00000000
--- a/phox/phox-pbrpm.el
+++ /dev/null
@@ -1,318 +0,0 @@
-;; $State$ $Date$ $Revision$
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; the proof by rules popup menu part
-;;
-;; Note : program extraction is still experimental This file is very
-;; dependant of the actual state of our developments
-;;--------------------------------------------------------------------------;;
-
-(require 'pg-pbrpm)
-
-(declare-function phox-lang-absurd "nofile")
-(declare-function phox-lang-suppress "nofile")
-(declare-function phox-lang-instance "nofile")
-(declare-function phox-lang-open-instance "nofile")
-(declare-function phox-lang-opendef "nofile")
-(declare-function phox-lang-unlock "nofile")
-(declare-function phox-lang-lock "nofile")
-(declare-function phox-lang-prove "nofile")
-(declare-function phox-lang-let "nofile")
-(declare-function int-char "nofile")
-(declare-function char= "nofile")
-
-;;--------------------------------------------------------------------------;;
-;; Syntactic functions
-;;--------------------------------------------------------------------------;;
-(setq
- pg-pbrpm-start-goal-regexp "^goal \\([0-9]+\\)/[0-9]+\\( (new)\\)?$"
- pg-pbrpm-start-goal-regexp-par-num 1
- pg-pbrpm-end-goal-regexp "^$"
- pg-pbrpm-start-hyp-regexp "^\\([A-Za-z0-9_.']+\\) := "
- pg-pbrpm-start-hyp-regexp-par-num 1
- pg-pbrpm-start-concl-regexp "^ *|- "
- pg-pbrpm-auto-select-regexp "\\(\\(\\(['a-zA-Z0-9]+\\)\\|\\([][><=/~&+*^%!{}:-]+\\)\\)\\(_+\\(\\(['a-zA-Z0-9]+\\)\\|\\([][><=/~&+*^%!{}:-]+\\)\\)\\)*\\)\\|\\(\\?[0-9]+\\)"
-)
-
-
-; TODO : deal with future invisible parentheses (french guillemots)
-(defun phox-pbrpm-left-paren-p (char)
-"Retrun t if the character is a left parenthesis : '(' or a french guillemot '<<'"
- (or
- (char-equal char (int-char 40))
- (char-equal char (int-char 171)))
-)
-
-(defun phox-pbrpm-right-paren-p (char)
-"Retrun t if the character is a right parenthesis ')' or a french guillemot '>>'"
- (or
- (char-equal char (int-char 41))
- (char-equal char (int-char 187)))
-)
-
-
-(defun phox-pbrpm-menu-from-string (order str)
- "build a menu from a string send by phox"
- (setq str (proof-shell-invisible-cmd-get-result str))
- (if (string= str "") nil
- (mapcar
- (lambda (s) (append (list order) (split-string s "\\\\-")
- (list 'phox-pbrpm-rename-in-cmd)))
- (split-string str "\\\\\\\\"))))
-
-(defun phox-pbrpm-rename-in-cmd (cmd spans)
- (let ((modified nil) (prev 0))
- (mapc (lambda (span)
- (if (not (string= (span-property span 'original-text)
- (span-string span)))
- (setq modified (cons span modified)))) spans)
- (setq modified (reverse modified))
- (if modified
- (progn
- (if (= 0 (span-property (car modified) 'goalnum))
- (progn
- (while (and modified (= 0 (span-property (car modified) 'goalnum)))
- (let ((span (pop modified)))
- (setq cmd (concat cmd ";; rename "
- (span-property span 'original-text) " "
- (span-string span)))))
- (if modified (setq cmd (concat "(" cmd ")")))))
- (if modified (setq cmd (concat cmd ";; ")))
- (while modified
- (let* ((span (pop modified))
- (goalnum (span-property span 'goalnum)))
- (while (< (+ prev 1) goalnum)
- (setq cmd (concat cmd "idt @+@ "))
- (setq prev (+ prev 1)))
- (setq cmd (concat cmd "(rename " (span-property span 'original-text) " "
- (span-string span)))
- (setq prev goalnum)
- (if (or (not modified) (< goalnum (span-property (car modified) 'goalnum)))
- (setq cmd (concat cmd ") @+@ "))
- (setq cmd (concat cmd ";; ")))))
- (if (> prev 0) (setq cmd (concat cmd "idt"))))))
- cmd)
-
-(defun phox-pbrpm-get-region-name (region-info)
- (if (= (nth 0 region-info) 1) (nth 1 region-info) (nth 2 region-info)))
-
-(defun phox-pbrpm-escape-string (str)
- "add escape char '\'"
- (concat "\"" (replace-regexp-in-string "\\\\" "\\\\\\\\" str) "\""))
-
-(defun phox-pbrpm-generate-menu (click-infos region-infos)
-"Use informations to build a list of (name , rule)"
- ;click-infos = (goal-number, "whole"/hyp-name/"none", expression, depth-tree-list)
- ;region-infos = idem if in the goal buffer, (0, "none", expression, nil ) if in another buffer, do not display if no region available.
-
- (let
- ((pbrpm-rules-list nil)
- (goal-prefix
- (if (= (nth 0 click-infos) 1) ""
- (concat "["
- (int-to-string (nth 0 click-infos))
- "] "))))
-
-
- ; the first goal is the selected one by default, so we prefer not to display it.
-
- ; if clicking in a conclusion with no selection
- (if (and (string= (nth 1 click-infos) "none") (not region-infos))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list
- (list 4 (phox-lang-absurd) (concat goal-prefix "by_absurd;; elim False")))
- (phox-pbrpm-menu-from-string 0
- (concat "menu_intro "
- (int-to-string (nth 0 click-infos))))
- (phox-pbrpm-menu-from-string 0
- (concat "menu_evaluate "
- (int-to-string (nth 0 click-infos))))
- ); end append
- );end setq
- );end if
-
- ; if clicking a conclusion with a selection
- (if (and (string= (nth 1 click-infos) "none") region-infos)
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (phox-pbrpm-menu-from-string 0
- (concat "menu_intro "
- (int-to-string (nth 0 click-infos))
- (let ((tmp ""))
- (mapc (lambda (region-info)
- (setq tmp
- (concat tmp " " (phox-pbrpm-escape-string (nth 2 region-info)))))
- region-infos)
- tmp)))
- (phox-pbrpm-menu-from-string 1
- (concat "menu_rewrite "
- (int-to-string (nth 0 click-infos)) " "
- (let ((tmp ""))
- (mapc (lambda (region-info)
- (setq tmp
- (concat tmp " " (phox-pbrpm-escape-string (phox-pbrpm-get-region-name region-info)))))
- region-infos)
- tmp))))))
-
- ; if clicking in an hypothesis with no selection
- (if (and
- (not (or (string= (nth 1 click-infos) "none")
- (string= (nth 1 click-infos) "whole")))
- (or (string= "" (nth 2 click-infos)) (not (char= (string-to-char (nth 2 click-infos)) ??)))
- (not region-infos))
- (let ((r (proof-shell-invisible-cmd-get-result (concat "is_hypothesis "
- (int-to-string (nth 0 click-infos))
- " "
- (phox-pbrpm-escape-string (nth 1 click-infos))))))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (if (char= (string-to-char r) ?t)
- (list
- (list 9 (phox-lang-suppress (nth 1 click-infos))
- (concat "[" (int-to-string (nth 0 click-infos)) "] "
- "rmh " (nth 1 click-infos))))
- nil)
- (phox-pbrpm-menu-from-string 1
- (concat "menu_elim "
- (int-to-string (nth 0 click-infos)) " "
- (nth 1 click-infos)))
- (phox-pbrpm-menu-from-string 1
- (concat "menu_evaluate_hyp "
- (int-to-string (nth 0 click-infos)) " "
- (nth 1 click-infos)))
- (phox-pbrpm-menu-from-string 0
- (concat "menu_left "
- (int-to-string (nth 0 click-infos))
- " "
- (nth 1 click-infos)))))))
-
- ; if clicking on an hypothesis with a selection
- (if (and
- (not (or (string= (nth 1 click-infos) "none")
- (string= (nth 1 click-infos) "whole")))
- region-infos)
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (phox-pbrpm-menu-from-string 1
- (concat "menu_apply "
- (int-to-string (nth 0 click-infos)) " "
- (nth 1 click-infos)
- (let ((tmp ""))
- (mapc (lambda (region-info)
- (setq tmp
- (concat tmp " " (phox-pbrpm-escape-string (nth 2 region-info)))))
- region-infos)
- tmp)))
- (phox-pbrpm-menu-from-string 1
- (concat "menu_rewrite_hyp "
- (int-to-string (nth 0 click-infos)) " "
- (nth 1 click-infos)
- (let ((tmp ""))
- (mapc (lambda (region-info)
- (setq tmp
- (concat tmp " " (phox-pbrpm-escape-string (phox-pbrpm-get-region-name region-info)))))
- region-infos)
- tmp))))))
-
- (if (and (not (string= "" (nth 2 click-infos))) (char= (string-to-char (nth 2 click-infos)) ??)
- region-infos (not (cdr region-infos)))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list (list 0 (concat
- (phox-lang-instance (nth 2 click-infos))
- (nth 2 (car region-infos)))
- (concat
- "instance "
- (nth 2 click-infos)
- " "
- (nth 2 (car region-infos))))))))
-
- (if (and (not (string= "" (nth 2 click-infos))) (char= (string-to-char (nth 2 click-infos)) ??)
- (not region-infos))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list (list 0 (concat
- (phox-lang-open-instance (nth 2 click-infos)))
- (concat
- "instance "
- (nth 2 click-infos)
- " ")
- (lambda (cmd spans)
- (let ((span (pop spans)))
- (concat cmd " " (span-string span)))))))))
-
- ; is clicking on a token with no selection
- (if (and (not region-infos) (not (string= (nth 2 click-infos) "")))
- (let ((r (proof-shell-invisible-cmd-get-result (concat "is_definition "
- (int-to-string (nth 0 click-infos))
- " "
- (phox-pbrpm-escape-string (nth 2 click-infos)))))
- (ri (proof-shell-invisible-cmd-get-result (concat "is_definition "
- (int-to-string (nth 0 click-infos))
- " "
- (phox-pbrpm-escape-string (concat "$" (nth 2 click-infos)))))))
- (if (or (char= (string-to-char r) ?t) (char= (string-to-char ri) ?t))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list (list 1 (concat
- (phox-lang-opendef)
- (nth 2 click-infos))
- (concat
- goal-prefix
- (if (or (string= (nth 1 click-infos) "none")
- (string= (nth 1 click-infos) "whole"))
- "unfold -ortho "
- (concat "unfold_hyp " (nth 1 click-infos) " -ortho "))
- "$"
- (nth 2 click-infos))))))
- (if (and (not (string= "" (nth 2 click-infos))) (char= (string-to-char (nth 2 click-infos)) ??))
- (let ((r (proof-shell-invisible-cmd-get-result (concat "is_locked "
- (nth 2 click-infos)))))
- (if (char= (string-to-char r) ?t)
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list (list 0 (phox-lang-unlock (nth 2 click-infos))
- (concat
- goal-prefix
- "unlock "
- (nth 2 click-infos))))))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list (list 0 (phox-lang-lock (nth 2 click-infos))
- (concat
- goal-prefix
- "lock "
- (nth 2 click-infos))))))))))))
-
- (let ((arg (if (and region-infos (not (cdr region-infos))) (nth 2 (car region-infos)) " ")))
- (setq pbrpm-rules-list
- (append pbrpm-rules-list
- (list
- (list 10 "Trivial ?" (concat goal-prefix "trivial"))
- (list 10 (phox-lang-prove arg) (concat goal-prefix "prove")
- (lambda (cmd spans)
- (let ((span (pop spans)))
- (concat cmd " " (span-string span)))))
- (list 10 (phox-lang-let arg) (concat goal-prefix "local")
- (lambda (cmd spans)
- (let ((span1 (pop spans)) (span2 (pop spans)))
- (concat cmd " " (span-string span1) " = "(span-string span2)))))))))
-
- pbrpm-rules-list
-))
-
-
-;;--------------------------------------------------------------------------;;
-;; phox specific functions
-;;--------------------------------------------------------------------------;;
-
-(defalias 'proof-pbrpm-generate-menu 'phox-pbrpm-generate-menu)
-(defalias 'proof-pbrpm-left-paren-p 'phox-pbrpm-left-paren-p)
-(defalias 'proof-pbrpm-right-paren-p 'phox-pbrpm-right-paren-p)
-
-;;--------------------------------------------------------------------------;;
-
-(require 'phox-lang)
-(provide 'phox-pbrpm)
-;; phox-pbrpm ends here
diff --git a/phox/phox-sym-lock.el b/phox/phox-sym-lock.el
deleted file mode 100644
index ef3a9273..00000000
--- a/phox/phox-sym-lock.el
+++ /dev/null
@@ -1,401 +0,0 @@
-;; phox-sym-lock.el --- Extension of Font-Lock mode for symbol fontification.
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Copyright © 1997-1998 Albert Cohen, all rights reserved.
-;; Copying is covered by the GNU General Public License.
-;;
-;; 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.
-
-(require 'proof-compat) ; avoid compile warnings
-
-(defcustom phox-sym-lock-enabled t
- "*Whether to use yum symbol or not."
- :type 'boolean
- :group 'phox)
-
-;; DA: I have crudely hacked this file so that it compiles cleanly.
-;; It won't work now, but I hope we can use Unicode Tokens instead.
-
-(declare-function map-extents "nofile")
-(declare-function extent-face "nofile")
-(declare-function face-property "nofile")
-(declare-function set-extent-endpoints "nofile")
-(declare-function extent-start-position "nofile")
-(declare-function extent-end-position "nofile")
-(declare-function set-extent-property "nofile")
-(declare-function face-font-name "nofile")
-(declare-function font-name "nofile")
-(declare-function char-int "nofile")
-(declare-function obj "nofile")
-(declare-function set-face-property "nofile")
-(declare-function add-menu-button "nofile")
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; History
-;;
-;; first prototype by wg <wg@cs.tu-berlin.de> 5-96
-;; tweaked by Steve Dunham <dunham@gdl.msu.edu> 5-96
-;; rewritten and enhanced by Albert Cohen <Albert.Cohen@prism.uvsq.fr> 3-97
-;; new symbol-face format and ergonomy improvement by Albert Cohen 2-98
-;; major step towards portability and customization by Albert Cohen 5-98
-;; removed bug with multiple appends in hook by Albert Cohen 3-99
-;; removed phox-sym-lock-face&atom which where not working by C Raffalli 4-2000
-
-;; more about symbol font ? check out: xfd -fn '-adobe-symbol-*--12-*'
-
-(require 'font-lock)
-(if (featurep 'xemacs)
- (require 'atomic-extents)) ;; not available on GNU Emacs
-
-(defvar phox-sym-lock-sym-count 0
- "Counter for internal symbols.")
-
-(defvar phox-sym-lock-ext-start nil "Temporary for atomicization.")
-(make-variable-buffer-local 'phox-sym-lock-ext-start)
-(defvar phox-sym-lock-ext-end nil "Temporary for atomicization.")
-(make-variable-buffer-local 'phox-sym-lock-ext-end)
-
-(defvar phox-sym-lock-font-size nil
- "Default size for Phox-Sym-Lock symbol font.")
-(make-variable-buffer-local 'phox-sym-lock-font-size)
-(put 'phox-sym-lock-font-size 'permanent-local t)
-
-(defvar phox-sym-lock-keywords nil
- "Similar to `font-lock-keywords'.")
-(make-variable-buffer-local 'phox-sym-lock-keywords)
-(put 'phox-sym-lock-keywords 'permanent-local t)
-
-(defvar phox-sym-lock-enabled nil
- "Phox-Sym-Lock switch.")
-(make-variable-buffer-local 'phox-sym-lock-enabled)
-(put 'phox-sym-lock-enabled 'permanent-local t)
-
-(defvar phox-sym-lock-color (face-foreground 'default)
- "*Phox-Sym-Lock default color in `font-lock-use-colors' mode.")
-(make-variable-buffer-local 'phox-sym-lock-color)
-(put 'phox-sym-lock-color 'permanent-local t)
-
-(defvar phox-sym-lock-mouse-face 'default
- "*Face for symbols when under mouse.")
-(make-variable-buffer-local 'phox-sym-lock-mouse-face)
-(put 'phox-sym-lock-mouse-face 'permanent-local t)
-
-(defvar phox-sym-lock-mouse-face-enabled t
- "Mouse face switch.")
-(make-variable-buffer-local 'phox-sym-lock-mouse-face-enabled)
-(put 'phox-sym-lock-mouse-face-enabled 'permanent-local t)
-
-(defconst phox-sym-lock-with-mule (featurep 'mule)
- "Are we using Mule Xemacs ?")
-
-(defun phox-sym-lock-gen-symbol (&optional prefix)
- "Generate a new internal symbol."
- ;; where is the standard function to do this ?
- (setq phox-sym-lock-sym-count (+ phox-sym-lock-sym-count 1))
- (intern (concat "phox-sym-lock-gen-" (or prefix "")
- (int-to-string phox-sym-lock-sym-count))))
-
-
-(defun phox-sym-lock-make-symbols-atomic (&optional begin end)
- "Function to make symbol faces atomic."
- (if phox-sym-lock-enabled
- (map-extents
- (lambda (extent maparg)
- (let ((face (extent-face extent)) (ext))
- (if (and face (setq ext (face-property face 'phox-sym-lock-remap)))
- (progn
- (if (numberp ext)
- (set-extent-endpoints
- extent (- (extent-start-position extent) ext)
- (extent-end-position extent)))
- (if ext
- (progn
- (if phox-sym-lock-mouse-face-enabled
- (set-extent-property extent 'mouse-face
- phox-sym-lock-mouse-face))
- (set-extent-property extent 'atomic t)
- (set-extent-property extent 'start-open t))))))
- nil)
- (current-buffer)
- (if begin (save-excursion (goto-char begin) (beginning-of-line) (point))
- (point-min))
- (if end (save-excursion (goto-char end) (end-of-line) (point))
- (point-max))
- nil nil)))
-
-(defun phox-sym-lock-compute-font-size ()
- "Computes the size of the \"better\" symbol font."
- (let ((font-reg (if proof-running-on-win32
- "[^:]*:[^:]*:\\([^:]*\\):[^:]*:[^:]*"
- "-[^-]*-[^-]*-[^-]*-[^-]*-[^-]*-[^-]*-\\([^-]*\\)-.*"))
- (font-pat (if proof-running-on-win32
- "Symbol:Regular:*::Symbol"
- "-adobe-symbol-medium-r-normal--*")))
- (let (
-; face-height is not very good on win32. Why ?
- (num (if (and (not proof-running-on-win32) (fboundp 'face-height))
- (face-height 'default)
- (let ((str (face-font-name 'default)))
- (if
- (string-match font-reg str)
- (string-to-number (substring str (match-beginning 1)
- (match-end 1)))))))
- (maxsize 100) (size) (oldsize)
- (lf (and (fboundp 'list-fonts) ; da: what is this function? not defined
- (list-fonts font-pat))))
- (while (and lf maxsize)
- (if
- (string-match font-reg
- (car lf))
- (let ((str-size (substring (car lf) (match-beginning 1)
- (match-end 1))))
- ; test for variable size fonts. Hope it is generic ?
- (if (or (equal str-size "*")(equal str-size ""))
- (progn
- (setq oldsize num)
- (setq lf nil))
- (setq size (string-to-number str-size))
- (if (and (> size num) (< size maxsize))
- (setq lf nil)
- (setq oldsize size)))))
- (setq lf (cdr lf)))
- (number-to-string (if (and oldsize (< oldsize maxsize)) oldsize num)))))
-
-(defvar phox-sym-lock-font-name
- (if window-system
- (if proof-running-on-win32
- (concat "Symbol:Regular:"
- (if phox-sym-lock-font-size phox-sym-lock-font-size
- (phox-sym-lock-compute-font-size))
- "::Symbol")
- (concat "-adobe-symbol-medium-r-normal--"
- (if phox-sym-lock-font-size phox-sym-lock-font-size
- (phox-sym-lock-compute-font-size))
- "-*-*-*-p-*-adobe-fontspecific"))
- "")
- "Name of the font used by Phox-Sym-Lock.")
-(make-variable-buffer-local 'phox-sym-lock-font-name)
-(put 'phox-sym-lock-font-name 'permanent-local t)
-
-(make-face 'phox-sym-lock-adobe-symbol-face)
-; DA: DISABLED THIS top level form (PG 4.0)
-;; (if phox-sym-lock-with-mule
-;; (progn
-;; (make-charset 'phox-sym-lock-cset-left "Char set for symbol font"
-;; (list 'registry "adobe-fontspecific"
-;; 'dimension 1
-;; 'chars 94
-;; ;; 'final 53
-;; ;; DA PG 3.7: above line doesn't work on XEmacs 21.5b28, gives
-;; ;; Character set already defined for this DIMENSION/CHARS/FINAL/DIRECTION combo (indian-is13194)
-;; ;; DA: Will 55 work?
-;; 'final 55
-;; 'graphic 0))
-;; (make-charset 'phox-sym-lock-cset-right "Char set for symbol font"
-;; (list 'registry "adobe-fontspecific"
-;; 'dimension 1
-;; 'chars 94
-;; 'final 54
-;; 'graphic 1))
-;; (set-face-property 'phox-sym-lock-adobe-symbol-face
-;; 'font phox-sym-lock-font-name nil
-;; ;; DA: removed next line, it breaks "make magic" in doc
-;; ;; '(mule-fonts) 'prepend,
-;; ))
-;; (set-face-font 'phox-sym-lock-adobe-symbol-face phox-sym-lock-font-name 'global))
-
-(defun phox-sym-lock-set-foreground ()
- "Set foreground color of Phox-Sym-Lock faces."
- (if (and (boundp 'phox-sym-lock-defaults) phox-sym-lock-defaults)
- (let ((l (car phox-sym-lock-defaults))
- (color (if (and (boundp 'font-lock-use-fonts) font-lock-use-fonts)
- (face-foreground 'default) phox-sym-lock-color)))
- (if (and (consp l) (eq (car l) 'quote)) (setq l (eval l)))
- (if (symbolp l) (setq l (eval l)))
- (dolist (c l)
- (setq c (nth 2 c))
- (if (consp c) (setq c (eval c)))
- (if (string-match "-adobe-symbol-" (font-name (face-font c)))
- (set-face-foreground c color))))))
-
-(defun phox-sym-lock-translate-char (char)
- (if phox-sym-lock-with-mule
- (let ((code (if (integerp char) char (char-int char))))
- (with-no-warnings ;; da: dynamic scope obj
- (if (< code 128)
- (make-char 'phox-sym-lock-cset-left obj)
- (make-char 'phox-sym-lock-cset-right (- obj 128)))))
- char))
-
-(defun phox-sym-lock-translate-char-or-string (obj)
- (if (stringp obj)
- (if phox-sym-lock-with-mule
- (concat (mapcar 'phox-sym-lock-translate-char obj))
- (obj))
- (make-string 1 (phox-sym-lock-translate-char obj))))
-
-(defun phox-sym-lock-remap-face (pat pos obj atomic)
- "Make a temporary face which remaps the POS char of PAT to the
-given OBJ under `phox-sym-lock-adobe-symbol-face' and all other characters to
-the empty string. OBJ may either be a string or a character."
- (let* ((name (phox-sym-lock-gen-symbol "face"))
- (table (make-display-table))
- (tface (make-face name)))
- (fillarray table "")
- (aset table (string-to-char (substring pat (1- pos) pos))
- (phox-sym-lock-translate-char-or-string obj))
- (set-face-foreground tface (if (and (boundp 'font-lock-use-fonts)
- font-lock-use-fonts)
- (face-foreground 'default) phox-sym-lock-color))
- (set-face-property tface 'display-table table)
- (set-face-property tface 'font (face-font 'phox-sym-lock-adobe-symbol-face))
- (set-face-property tface 'phox-sym-lock-remap atomic) ; mark it
- tface ; return face value and not face name
- ; the temporary face would be otherwise GCed
- ))
-
-(defvar phox-sym-lock-clear-face
- (let* ((name (phox-sym-lock-gen-symbol "face"))
- (table (make-display-table))
- (tface (make-face name)))
- (fillarray table "")
- (set-face-property tface 'display-table table)
- (set-face-property tface 'phox-sym-lock-remap 1) ; mark it
- tface
- ;; return face value and not face name
- ;; the temporary face would be otherwise GCed
- ))
-
-(defun phox-sym-lock (fl)
- "Create font-lock table entries from a list of (PAT NUM POS OBJ) where
-PAT (at NUM) is substituted by OBJ under `phox-sym-lock-adobe-symbol-face'. The
-face's extent will become atomic."
- (message "Computing Phox-Sym-Lock faces...")
- (setq phox-sym-lock-keywords (phox-sym-lock-rec fl))
- (setq phox-sym-lock-enabled t)
- (message "Computing Phox-Sym-Lock faces... done."))
-
-(defun phox-sym-lock-rec (fl)
- (let ((f (car fl)))
- (if f
- (cons (apply 'phox-sym-lock-atom-face f)
- (phox-sym-lock-rec (cdr fl))))))
-
-(defun phox-sym-lock-atom-face (pat num pos obj &optional override)
- "Define an entry for the font-lock table which substitutes PAT (at NUM) by
-OBJ under `phox-sym-lock-adobe-symbol-face'. The face extent will become atomic."
- (list pat num (phox-sym-lock-remap-face pat pos obj t) override))
-
-(defun phox-sym-lock-pre-idle-hook-first ()
- ;; da: XEmacs isms
- ;; (condition-case nil
- ;; (if (and phox-sym-lock-enabled font-lock-old-extent)
- ;; (setq phox-sym-lock-ext-start (extent-start-position font-lock-old-extent)
- ;; phox-sym-lock-ext-end (extent-end-position font-lock-old-extent))
- ;; (setq phox-sym-lock-ext-start nil))
- ;; (error (setq phox-sym-lock-ext-start nil))))
-)
-
-(defun phox-sym-lock-pre-idle-hook-last ()
- (condition-case nil
- (if (and phox-sym-lock-enabled phox-sym-lock-ext-start)
- (phox-sym-lock-make-symbols-atomic phox-sym-lock-ext-start phox-sym-lock-ext-end))
- (error (warn "Error caught in `phox-sym-lock-pre-idle-hook-last'"))))
-
-(add-hook 'font-lock-after-fontify-buffer-hook
- 'phox-sym-lock-make-symbols-atomic)
-
-(defun phox-sym-lock-enable ()
- "Enable Phox-Sym-Lock on this buffer."
- (interactive)
- (if (not phox-sym-lock-keywords)
- (error "No Phox-Sym-Lock keywords defined!")
- (setq phox-sym-lock-enabled t)
- (if font-lock-mode
- (progn
-; (setq font-lock-keywords nil) ; Font-Lock explicit-defaults bug!
- (font-lock-set-defaults)
- (font-lock-fontify-buffer)))
- (message "Phox-Sym-Lock enabled.")))
-
-(defun phox-sym-lock-disable ()
- "Disable Phox-Sym-Lock on this buffer."
- (interactive)
- (if (not phox-sym-lock-keywords)
- (error "No Phox-Sym-Lock keywords defined!")
- (setq phox-sym-lock-enabled nil)
- (if font-lock-mode
- (progn
-; (setq font-lock-keywords nil) ; Font-Lock explicit-defaults bug!
- (font-lock-set-defaults)
- (font-lock-fontify-buffer)))
- (message "Phox-Sym-Lock disabled.")))
-
-(defun phox-sym-lock-mouse-face-enable ()
- "Enable special face for symbols under mouse."
- (interactive)
- (setq phox-sym-lock-mouse-face-enabled t)
- (if phox-sym-lock-enabled
- (font-lock-fontify-buffer)))
-
-(defun phox-sym-lock-mouse-face-disable ()
- "Disable special face for symbols under mouse."
- (interactive)
- (setq phox-sym-lock-mouse-face-enabled nil)
- (if phox-sym-lock-enabled
- (font-lock-fontify-buffer)))
-
-(defun phox-sym-lock-font-lock-hook ()
- "Function called by `font-lock-mode' for initialization purposes."
- (add-hook 'pre-idle-hook 'phox-sym-lock-pre-idle-hook-first)
- (add-hook 'pre-idle-hook 'phox-sym-lock-pre-idle-hook-last t)
- (add-menu-button '("Options" "Syntax Highlighting")
- ["Phox-Sym-Lock"
- (if phox-sym-lock-enabled (phox-sym-lock-disable) (phox-sym-lock-enable))
- :style toggle :selected phox-sym-lock-enabled
- :active phox-sym-lock-keywords] "Automatic")
- (if (and (featurep 'phox-sym-lock) phox-sym-lock-enabled
- font-lock-defaults (boundp 'phox-sym-lock-keywords))
- (progn
- (phox-sym-lock-patch-keywords)
- (phox-sym-lock-set-foreground))))
-
-(defun font-lock-set-defaults (&optional explicit-defaults)
- (when
- (and
- (featurep 'font-lock)
- ;; da: font-lock has changed:
- ;; (if font-lock-auto-fontify
- ;; (not (memq major-mode font-lock-mode-disable-list))
- ;; (memq major-mode font-lock-mode-enable-list))
- ;; (font-lock-set-defaults-1 explicit-defaults)
- (phox-sym-lock-patch-keywords))
- (turn-on-font-lock)))
-
-(defun phox-sym-lock-patch-keywords ()
- (if (and font-lock-keywords phox-sym-lock-enabled
- (boundp 'phox-sym-lock-keywords)
- (listp (car font-lock-keywords))
- (listp (cdar font-lock-keywords))
- (listp (cddar font-lock-keywords))
- (or (listp (caddar font-lock-keywords))
- (not (string-match
- "phox-sym-lock"
- (symbol-name
- (face-name (cadr (cdar
- font-lock-keywords))))))))
- (setq font-lock-keywords (append phox-sym-lock-keywords
- font-lock-keywords))) t)
-
-(add-hook 'font-lock-mode-hook 'phox-sym-lock-font-lock-hook)
-
-(provide 'phox-sym-lock)
diff --git a/phox/phox-tags.el b/phox/phox-tags.el
deleted file mode 100644
index 603622a6..00000000
--- a/phox/phox-tags.el
+++ /dev/null
@@ -1,92 +0,0 @@
-;; $State$ $Date$ $Revision$
-;;--------------------------------------------------------------------------;;
-;;--------------------------------------------------------------------------;;
-;; gestion des TAGS
-;;--------------------------------------------------------------------------;;
-
-; sous xemacs, visit-tags-table n'a pas d'argument optionnel. Sous gnu emacs :
-
-; Normally M-x visit-tags-table sets the global value of `tags-file-name'.
-; With a prefix arg, set the buffer-local value instead.
-
-; mieux vaut sous gnu emacs gérer la variable tags-table-list, qui
-; n'existe pas sous xemacs.
-; Sous xemacs il faut gérer la variable tag-table-alist qui n'existe pas
-; sous gnu emacs.
-
-
-(require 'etags)
-
-(eval-when-compile
- (defvar phox-doc-dir nil)
- (defvar phox-lib-dir nil)
- (defvar phox-etags nil))
-
-
-(defun phox-tags-add-table(table)
- "add tags table"
- (interactive "D directory, location of a file named TAGS to add : ")
- (if (not (boundp 'tags-table-list)) (setq tags-table-list nil))
- (if (member table tags-table-list)
- (message "%s already loaded." table)
- ;; (make-local-variable 'tags-table-list) ; ne fonctionne pas
- (setq tags-table-list (cons table tags-table-list))))
-
-(defun phox-tags-reset-table()
- "Set tags-table-list to nil."
- (interactive)
- (setq tags-table-list nil))
-
-(defun phox-tags-add-doc-table()
- "Add tags in text documentation."
- (interactive)
- (phox-tags-add-table (concat phox-doc-dir "/text/TAGS"))
- )
-
-(defun phox-tags-add-lib-table()
- "Add tags in libraries."
- (interactive)
- (phox-tags-add-table (concat phox-lib-dir "/TAGS"))
- )
-
-(defun phox-tags-add-local-table()
- "Add the tags table created with function phox-create-local-table."
- (interactive)
- (phox-tags-add-table (concat buffer-file-name "TAGS"))
- )
-
-(defun phox-tags-create-local-table()
- "create table on local buffer"
- (interactive)
- (shell-command (concat phox-etags
- " -o "
- (file-name-nondirectory (buffer-file-name))
- "TAGS "
- (file-name-nondirectory (buffer-file-name))))
- )
-
-
-(defun phox-complete-tag()
- "Complete symbol using tags table."
- (interactive)
- (complete-tag))
-
-;; menu
-
-(defvar phox-tags-menu
- '("Tags"
- ["create a tags table for local buffer" phox-tags-create-local-table t]
- ["------------------" nil nil]
- ["add table" phox-tags-add-table t]
- ["add local table" phox-tags-add-local-table t]
- ["add table for libraries" phox-tags-add-lib-table t]
- ["add table for text doc" phox-tags-add-doc-table t]
- ["reset tags table list" phox-tags-reset-table t]
- ["------------------" nil nil]
- ["Find theorem, definition ..." find-tag t]
- ["complete theorem, definition ..." phox-complete-tag t]
- )
-"Phox menu for dealing with tags"
-)
-
-(provide 'phox-tags)
diff --git a/phox/phox.el b/phox/phox.el
index 27b9cac0..5c5674ed 100644
--- a/phox/phox.el
+++ b/phox/phox.el
@@ -1,231 +1,151 @@
-;; $State$ $Date$ $Revision$
-
-(require 'proof) ; load generic parts
-
-
-;; Adjust toolbar entries. (Must be done before proof-toolbar is
-;; loaded).
-
-(eval-when-compile
- (defvar phox-toolbar-entries nil))
-
-(eval-after-load "pg-custom"
- '(setq phox-toolbar-entries
- (assq-delete-all 'context phox-toolbar-entries)))
-
-
-;; ======== User settings for PhoX ========
-;;
-;; Defining variables using customize is pretty easy.
-;; You should do it at least for your prover-specific user options.
-;;
-;; proof-site provides us with two customization groups
-;; automatically: (based on the name of the assistant)
-;;
-;; 'phox - User options for PhoX Proof General
-;; 'phox-config - Configuration of PhoX Proof General
-;; (constants, but may be nice to tweak)
-;;
-;; The first group appears in the menu
-;; ProofGeneral -> Customize -> PhoX
-;; The second group appears in the menu:
-;; ProofGeneral -> Internals -> PhoX config
-;;
-
-(defcustom phox-prog-name "phox -pg"
- "*Name of program to run PhoX."
- :type 'file
- :group 'phox)
-
-(defcustom phox-web-page
- "http://www.lama.univ-savoie.fr/~RAFFALLI/phox.html"
- "URL of web page for PhoX."
- :type 'string
- :group 'phox-config)
-
-(defcustom phox-doc-dir
- "/usr/local/doc/phox"
- "The name of the root documentation directory for PhoX."
- :type 'string
- :group 'phox-config)
-
-(defcustom phox-lib-dir
- "/usr/local/lib/phox"
- "The name of the root directory for PhoX libraries."
- :type 'string
- :group 'phox-config)
-
-(defcustom phox-tags-program
- (concat phox-doc-dir "/tools/phox_etags.sh")
- "Program to run to generate TAGS table for proof assistant."
- :type 'string
- :group 'phox-config)
-
-(defcustom phox-tags-doc
- t
- "*If non nil, tags table for PhoX text documentation is loaded."
- :type 'boolean
- :group 'phox-config)
-
-(defcustom phox-etags
- (concat phox-doc-dir "/tools/phox_etags.sh")
- "Command to build tags table."
- :type 'string
- :group 'phox-config)
-
-(require 'phox-fun)
-(require 'phox-font)
-(require 'phox-extraction)
-(require 'phox-tags)
-(require 'phox-outline)
-(require 'phox-pbrpm)
-
-;; default for tags [da: moved here to fix compilation 15/02/03]
-
-(if phox-tags-doc
- (add-hook 'phox-mode-hook 'phox-tags-add-doc-table))
-
-
-;; ----- PhoX specific menu
-
-(defpgdefault menu-entries
- (cons
- phox-state-menu
- (cons
- phox-tags-menu
- (cons
- phox-extraction-menu
- nil)))
-)
-
-;;
-;; ======== Configuration of generic modes ========
-;;
-
-(defun phox-config ()
- "Configure Proof General scripting for PhoX."
- (if phox-sym-lock-enabled
- (phox-sym-lock-start))
- (setq
- proof-prog-name phox-prog-name
- proof-prog-name-guess t
- proof-prog-name-ask nil
- proof-terminal-string "." ; ends every command
- proof-script-command-end-regexp "[.]\\([ \t\n\r]\\)"
- proof-script-comment-start "(*"
- proof-script-comment-end "*)"
- proof-goal-command-regexp
- "\\`\\(Local[ \t\n\r]+\\)?\\(goal[ \t\n\r]\\|pro\\(p\\(osition\\)?\\|ve_claim\\)\\|lem\\(ma\\)?\\|fact\\|cor\\(ollary\\)?\\|theo\\(rem\\)?\\)"
- proof-save-command-regexp "\\`save"
- proof-goal-with-hole-regexp
- (concat
- "\\`\\(Local[ \t\n\r]+\\)?\\(pro\\(p\\(osition\\)?\\|ve_claim\\)\\(osition\\)?\\|lem\\(ma\\)?\\|fact\\|cor\\(ollary\\)?\\|theo\\(rem\\)?\\)"
- phox-strict-comments-regexp
- phox-ident-regexp)
- proof-goal-with-hole-result 16
- proof-save-with-hole-regexp
- (concat
- "\\`save"
- phox-strict-comments-regexp
- phox-ident-regexp)
- proof-save-with-hole-result 8
- proof-ignore-for-undo-count "\\`\\(constraints\\|flag\\|goals\\|pri\\(nt\\(_sort\\)?\\|ority\\)\\|eshow\\|search\\|depend\\|menu_\\|is_\\)"
- proof-non-undoables-regexp "\\`\\(undo\\|abort\\)"
- proof-shell-error-regexp "^\\([^ \n\t\r]* \\)?\\(\\(e\\|E\\)rror\\)\\|\\(\\(f\\|F\\)ailure\\)"
- proof-goal-command "goal %s."
- proof-save-command "save %s."
- proof-kill-goal-command "abort."
- proof-showproof-command "goals."
- proof-undo-n-times-cmd "undo %s."
- proof-find-and-forget-fn 'phox-find-and-forget
- proof-find-theorems-command "search \"%s\"."
- proof-auto-multiple-files nil
- font-lock-keywords phox-font-lock-keywords
+;;; phox.el --- Major mode for the PhoX proof assistant
+
+;; This file is part of Proof General.
+
+;; Copyright © 2017 Christophe Raffalli
+
+;;; Commentary:
+;;
+
+(require 'proof-site)
+
+;;; Code:
+
+(proof-ready-for-assistant 'phox)
+
+(require 'proof)
+(require 'proof-easy-config) ; easy configure mechanism
+
+(defconst phox-goal-regexp
+ "\\(prop\\(osition\\)?\\)\\|\\(lem\\(ma\\)?\\)\\|\\(fact\\)\\|\\(cor\\(ollary\\)?\\)\\(theo\\(rem\\)?\\)")
+
+(proof-easy-config
+ 'phox "PhoX"
+ proof-prog-name "phox"
+ proof-terminal-string "."
+ proof-script-command-end-regexp"[.][ \n\t\r]"
+ proof-script-comment-start "(*"
+ proof-script-comment-end "*)"
+ proof-script-syntax-table-entries
+ '(?( "()1"
+ ?) ")(4"
+ ?* ". 23"
+ ?$ "w"
+ ?_ "w"
+ ?. "w")
+ proof-shell-syntax-table-entries
+ '(?( "()1"
+ ?) ")(4"
+ ?* ". 23"
+ ?$ "w"
+ ?_ "w"
+ ?. "w")
+ proof-goal-command-regexp (concat "^" phox-goal-regexp)
+ proof-save-command-regexp "^save"
+ proof-goal-with-hole-regexp (concat "^" phox-goal-regexp "\\(\\([a-zA-Z0-9_$]*\\)\\) ")
+ proof-save-with-hole-regexp "save \\(\\([a-zA-Z0-9_$]*\\)\\).[ \n\t\r]"
+ proof-non-undoables-regexp "\\(undo\\)\\|\\(abort\\)\\|\\(show\\)\\(.*\\)[ \n\t\r]"
+ proof-goal-command "fact \"%s\"."
+ proof-save-command "save \"%s\"."
+ proof-kill-goal-command "abort."
+ proof-showproof-command "show."
+ proof-undo-n-times-cmd "undo %s."
+ proof-auto-multiple-files t
+ proof-shell-cd-cmd "cd \"%s\"."
+ proof-shell-interrupt-regexp "Interrupt."
+ proof-shell-start-goals-regexp "goal [0-9]+/[0-9]+"
+ proof-shell-end-goals-regexp "%PhoX%"
+ proof-shell-quit-cmd "quit."
+ proof-assistant-home-page "http://www.lama.univ-savoie.fr/~raffalli/phox.html"
+ proof-shell-annotated-prompt-regexp "^\\(>PhoX>\\)\\|\\(%PhoX%\\) "
+; proof-shell-error-regexp "\\*\\*\\*\\|^.*Error:\\|^uncaught exception \\|^Exception- "
+ proof-shell-init-cmd ""
+; proof-shell-proof-completed-regexp "^No subgoals!"
+ proof-script-font-lock-keywords
+ '("Cst" "Import" "Use" "Sort"
+ "new_intro" "new_elim" "new_rewrite"
+ "add_path" "author" "cd"
+ "claim" "close_def" "def" "del" "documents"
+ "depend" "elim_after_intro" "export"
+ "edel" "eshow" "flag" "goal" "include"
+ "institute" "path" "print_sort" "priority"
+ "quit" "save" "search" "tex" "tex_syntax" "title"
+ "proposition" "prop" "lemma" "lem" "fact" "corollary" "cor"
+ "theorem" "theo"
+ ; proof command, FIXME: another color
+ "abort" "absurd" "apply" "axiom" "constraints"
+ "elim" "from" "goals" "intros" "intro" "instance"
+ "local" "lefts" "left" "next" "rewrite" "rewrite_hyp"
+ "rename" "rmh" "trivial" "slh" "use" "undo" "unfold"
+ "unfold_hyp")
)
- (phox-init-syntax-table)
- (setq pbp-goal-command "intro %s;")
- (setq pbp-hyp-command "elim %s;"))
-
-(defun phox-shell-config ()
- "Configure Proof General shell for PhoX."
- (setq
- ;proof-shell-cd-cmd "cd \"%s\""
- proof-shell-annotated-prompt-regexp "\\(>phox> \\)\\|\\(%phox% \\)"
- proof-shell-interrupt-regexp "Interrupt"
- proof-shell-start-goals-regexp "^\\(Here \\(are\\|is\\) the goal\\)\\|\\([0-9]+ new goals?\\)\\|\\([0-9]+ goals? possibly instanced\\)"
- proof-shell-end-goals-regexp "^End of goals."
- proof-shell-quit-cmd "quit."
- proof-shell-restart-cmd "restart."
- proof-shell-proof-completed-regexp "^.*^proved"
- ))
-
-
-;;
-;; ======== Defining the derived modes ========
-;;
-
-;; The name of the script mode is always <proofsym>-script,
-;; but the others can be whatever you like.
-;;
-;; The derived modes set the variables, then call the
-;; <mode>-config-done function to complete configuration.
-
-(define-derived-mode phox-mode proof-mode
- "PhoX script"
- "Major mode for PhoX proofs.
-
-\\{phox-mode-map}"
- (phox-config)
- (proof-config-done)
- (phox-setup-outline)
- (define-key phox-mode-map [(control j)]
- 'phox-assert-next-command-interactive)
- ;; with the previous binding,
- ;; it is nice to do : xmodmap -e "keysym KP_Enter = Linefeed"
-
- (define-key phox-mode-map [(control c) (meta d)]
- 'phox-delete-symbol-on-cursor))
-
-(define-derived-mode phox-shell-mode proof-shell-mode
- "PhoX shell" nil
- (phox-shell-config)
- (proof-shell-config-done))
-
-(define-derived-mode phox-response-mode proof-response-mode
- "PhoX response" nil
- (setq proof-response-font-lock-keywords phox-font-lock-keywords)
- (phox-sym-lock-start)
- (if (and (featurep 'phox-sym-lock) phox-sym-lock-enabled)
- (add-hook 'proof-shell-handle-delayed-output-hook
- 'phox-sym-lock-font-lock-hook)
- )
- (proof-response-config-done))
-
-(define-derived-mode phox-goals-mode proof-goals-mode
- "PhoX goals" nil
- (setq font-lock-keywords phox-font-lock-keywords)
- (phox-sym-lock-start)
- (if (and (featurep 'phox-sym-lock) phox-sym-lock-enabled)
- (add-hook 'pg-before-fontify-output-hook
- 'phox-sym-lock-font-lock-hook)
- )
- (proof-goals-config-done))
-
-
-;; A more sophisticated instantiation might set font-lock-keywords to
-;; add highlighting, or some of the proof by pointing markup
-;; configuration for the goals buffer.
-
-; completions
-; dans completions.el
-;(setq completion-min-length 6)
-;(setq completion-prefix-min-length 3) les mots de moins de 6 caractères
-; ne sont pas pris en compte. Les prefixes de moins de 3 caractères ne
-; sont pas non plus pris en compte.
-
-; (set-variable 'phox-completion-table
-(defpgdefault completion-table
- (append phox-top-keywords phox-proof-keywords)
-)
+
+;; code for displaying unicode borrowed from
+;; Erik Parmann, PÃ¥l Drange latex-pretty-symbol
+;; cf. https://bitbucket.org/mortiferus/latex-pretty-symbols.el
+(require 'cl-lib)
+
+(defun substitute-pattern-with-unicode-symbol (pattern symbol)
+ "Add a font lock hook to replace the matched part of PATTERN with the Unicode
+symbol SYMBOL.
+Symbol can be the symbol directly, no lookup needed."
+ (interactive)
+ (font-lock-add-keywords
+ nil
+ `((,pattern
+ (0 (progn
+ (compose-region (match-beginning 1) (match-end 1)
+ ,symbol
+ 'decompose-region)
+ nil))))))
+
+(defun substitute-patterns-with-unicode-symbol (patterns)
+ "Mapping over PATTERNS, calling SUBSTITUTE-PATTERN-WITH-UNICODE for each of the patterns."
+ (mapcar #'(lambda (x)
+ (substitute-pattern-with-unicode-symbol (car x)
+ (cl-second x)))
+ patterns))
+
+(defun phox-symbol-regex (str)
+ "Gets a string, e.g. Alpha, returns the regexp matching the escaped
+version of it in Phox code, with no chars in [a-z0-9A-Z] after it."
+ (interactive "MString:")
+ (concat "[^!%&*+,-/:;≤=>@\\^`#|~]\\(" str "\\)[^!%&*+,-/:;≤=>@\\^`#|~]"))
+
+(defun phox-word-regex (str)
+ "Gets a string, e.g. Alpha, returns the regexp matching the escaped
+version of it in Phox code, with no chars in [a-z0-9A-Z] after it."
+ (interactive "MString:")
+ (concat "\\b\\(" str "\\)\\b"))
+
+
+;;Goto http://www.fileformat.info/info/unicode/block/mathematical_operators/list.htm and copy the needed character
+(defun phox-unicode-simplified ()
+ "Adds a bunch of font-lock rules to display phox commands as
+their unicode counterpart"
+ (interactive)
+ (substitute-patterns-with-unicode-symbol
+ (list
+ ;;These need to be on top, before the versions which are not subscriptet
+ (list (phox-symbol-regex "<=")"≤")
+ (list (phox-symbol-regex ">=")"≥")
+ (list (phox-symbol-regex "!=")"≠")
+ (list (phox-symbol-regex ":<")"∈")
+ (list (phox-symbol-regex ":") "∈")
+ (list (phox-symbol-regex "/\\\\")"∀")
+ (list (phox-symbol-regex "\\\\/")"∃")
+ (list (phox-symbol-regex "<->")"↔")
+ (list (phox-symbol-regex "-->")"⟶")
+ (list (phox-symbol-regex "->")"→")
+ (list (phox-symbol-regex "~")"¬")
+ (list (phox-symbol-regex "&")"∧")
+ (list (phox-word-regex "or")"∨")
+ )))
+
+(add-hook 'phox-mode-hook 'phox-unicode-simplified)
+(add-hook 'phox-goals-mode-hook 'phox-unicode-simplified)
+(add-hook 'phox-response-mode-hook 'phox-unicode-simplified)
(provide 'phox)
+
+;;; phox.el ends here
diff --git a/phox/sqrt2.phx b/phox/sqrt2.phx
new file mode 100644
index 00000000..0f08dd55
--- /dev/null
+++ b/phox/sqrt2.phx
@@ -0,0 +1,253 @@
+tex
+ title = "Proof that square root of 2 is not rational"
+ author = "Christophe Raffalli, Paul Rozière"
+ institute = "LAMA, Universit\\'e de Savoie, PPS, Universit\\'e Paris VII"
+ documents = math
+.
+
+Import nat.
+
+flag auto_lvl 2.
+flag auto_type true.
+
+
+(*! math
+\section{The library.}
+
+
+There are two proof rules used \underline{explicitely} from the library :
+
+\begin{itemize}
+\item \verb#elim (N n) with [case].# case reasonning on integers,
+using \[ $$case.N \].
+\item \verb#elim (N n) with [wf]#: well founded induction for the natural order
+ on integers, using \[ $$well_founded.N \].
+\end{itemize}
+
+and the followings theorems.
+
+\begin{itemize}
+\item \verb#demorganl# a set of rewrite rules for Demorgan's law.
+\item \verb#calcul.N# a set of rewrite rules for natural numbers.
+\item \verb#odd_or_even.N#: \[ $$odd_or_even.N \].
+\item \verb#lesseq.case1.N#: \[ $$lesseq.case1.N \].
+\item \verb#lesseq.imply.not.greater.N#: \[ $$lesseq.imply.not.greater.N \].
+\end{itemize}
+
+
+
+Comments: As the default elimination rule on integers is structural
+induction, it is natural to use explicitly these two rules. The first
+three theorems are also natural to use explicitly. The last
+ could probably be removed by adding some \verb#new_intro# or
+\verb#new_elim# in the library. \verb#lesseq.case1.N# is more
+problematic, It would require to extend the system with some kind of
+binary elimination rule (with two principal premices ?).
+
+\section{Some basic lemmas.}
+
+They should be included in the library ?
+*)
+
+lemma not_odd_and_even.N /\y,z:N( N2 * y != N1 + N2 * z).
+(*! math
+\begin{lemma}\label{not_odd_and_even.N}
+An integer can not be odd and even:
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+By induction over \[ y \] , then by case over \[ z \] .
+\end{proof}
+*)
+intro 2.
+(* induction over y *)
+elim H.
+(* y := 0 *)
+ trivial.
+(* y0 -> S y0 *)
+ intros.
+ (* case over z *)
+ elim H2 with [case].
+ (* z := 0 *)
+ trivial.
+ (* z := S y1 *)
+ intro.
+ prove N2 + N2 * y0 = N2 + N1 + N2 * y1.
+ from N2 * S y0 = N1 + N2 + N2 * y1.
+ from N2 * S y0 = N1 + (N2 + N2 * y1).
+ from H5.
+ lefts G.
+ elim H1 with H6.
+save.
+
+
+
+fact sum_square.N /\x,y:N (x + y)^N2 = x^N2 + N2*x*y + y^N2.
+(*! math
+\begin{lemma}\label{sum_square.N}
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+Easy.
+\end{proof}
+*)
+intros.
+rewrite calcul.N mul.left.distributive.N mul.right.distributive.N add.associative.N.
+intro.
+save.
+
+
+fact less.exp.N /\n,x,y:N( x <= y -> x^n <= y^n).
+(*! math
+\begin{lemma}\label{less.exp.N}
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+By induction over \[ n \].
+\end{proof}
+*)
+intros.
+elim H.
+trivial.
+rewrite calcul.N.
+trivial.
+save.
+
+fact less_r.exp.N /\n,x,y:N( x^n < y^n -> x < y).
+(*! math
+\begin{lemma}\label{less_r.exp.N}
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+Follows from lemma \ref{less.exp.N}.
+\end{proof}
+*)
+intros.
+elim lesseq.case1.N with y and x.
+apply less.exp.N with n and H3.
+elim lesseq.imply.not.greater.N with y^n and x^n.
+save.
+
+fact less.ladd.N /\x,y:N (N0 < y -> x < x + y).
+(*! math
+\begin{lemma}\label{less.ladd.N}
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+Easy induction over \[ x \].
+\end{proof}
+*)
+intros.
+trivial.
+(*
+elim H.
+ trivial.
+ trivial.
+*)
+save.
+
+
+(*! math
+\section{The proof itself}
+*)
+
+(** The proof itself. *)
+
+theorem n.square.pair /\n:N /\p:N( n^N2=N2*p -> \/q:N n=N2*q).
+(*! math
+\begin{lemma}\label{n.square.pair}
+ If the square of \[ n \] is even then \[ n \] is even:
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+*)
+intros.
+apply odd_or_even.N with H.
+lefts G $\/ $& $or.
+(*! math
+We assume \[ $$H1 \] ( \[ H1 \] ).
+We distinguish two cases. If \[ n \] is even we get what we want.
+*)
+trivial.
+(*! math
+If \[ n \] is odd we have \[ $$H3 \]
+*)
+prove n^N2 = N1 + N2*(N2*y^N2+N2*y).
+(*! math
+which implies \[ $0 \]
+*)
+ rewrite H3 sum_square.N.
+ from N1+(N2*(N2*y)+ N2*(y *(N2*y)))= N1+N2 * ?1.
+ intro.
+(*! math
+and this gives a contradiction by lemma \ref{not_odd_and_even.N} using ( \[ H1 \] ).
+\end{proof}
+*)
+rewrite_hyp G H1.
+elim not_odd_and_even.N with G.
+save.
+
+lem decrease /\m,n : N (m^ N2 = N2 * n^ N2 -> N0 < n -> n < m).
+(*! math
+\begin{lemma}\label{decrease}
+$$ \[ $0 \] $$
+\end{lemma}
+\begin{proof}
+Using lemma \ref{less_r.exp.N} and lemma \ref{less.ladd.N}.
+\end{proof}
+*)
+intros.
+elim less_r.exp.N with N2.
+prove m^N2 = n^N2 + n^N2. axiom H1. (* fonctionne sans *)
+elim less.ladd.N.
+trivial =H0 H2.
+save.
+
+theorem square2_irrat /\m,n : N (m^ N2 = N2 * n^ N2 -> m = N0 & n = N0).
+(*! math
+\begin{theorem} The square-root of 2 is irrational. For this we just need to prove the following:
+$$ \[ $0 \] $$
+\end{theorem}
+\begin{proof}
+*)
+intro 2.
+elim H with [wf].
+(*! math
+We prove \[ $0 \] by well founded induction over \[ m \]. Induction hypothesis is
+\[ H1 \] : \[ $$H1 \]. *)
+intros.
+elim H2 with [case].
+(* cas n=0 *)
+ intro.
+ rewrite_hyp H3 H4 calcul.N.
+ trivial.
+(*! math
+if \[ n = N0 \] the result is trivial. Suppose now that \[ n > N0 \].
+*)
+(* cas n > 0 *)
+ apply decrease with H3 and N0 < n.
+ trivial.
+(*! math
+Using lemma \ref{decrease} we get \[ $$G \].
+*)
+ elim n.square.pair with H3.
+ left H6.
+(*! math
+Using lemma \ref{n.square.pair} we get \[ q \] such that \[ $$H7 \]
+*)
+(*! math
+The result follow by using induction hypothesis \[ H1 \] ,
+*)
+ elim H1 with G then q.
+ rewrite_hyp H3 H7.
+(*! math
+using \[ $0 \] which follows from \[$$H3 \].
+*)
+ prove N2 * (N2 * q ^N2) = N2 * n ^ N2.
+ from H3.
+ left G0.
+ trivial 0.
+(*! math
+\end{proof}
+*)
+save.
diff --git a/phox/square-root-2.phx b/phox/square-root-2.phx
deleted file mode 100644
index 92a888b3..00000000
--- a/phox/square-root-2.phx
+++ /dev/null
@@ -1,368 +0,0 @@
-tex
- title = "Proof that square root of 2 is not rational"
- author = "Christophe Raffalli, Paul Rozière"
- institute = "LAMA, Universit\\'e de Savoie, PPS, Universit\\'e Paris VII"
- documents = math
-.
-
-Import nat.
-
-flag auto_lvl 1.
-
-(* Cette preuve est à peu près celle envoyée à F. Wiedijk -- Nijmegen
--- The Fifteen Provers of the World --
- http://www.cs.kun.nl/~freek/comparison/index.html
-Voir une preuve plus simple : sqrt2.phx
-*)
-
-(*! math
-\section{The library:}
-
-The theorem used \underline{explicitely} from the library are
-
-\begin{itemize}
-\item \verb#demorganl# a set of rewrite rules for Demorgan's law.
-\item \verb#calcul.N# a set of rewrite rules for natural numbers.
-\item \verb#well_founded.N#: \[ $$well_founded.N \].
-\item \verb#odd_or_even.N#: \[ $$odd_or_even.N \].
-\item \verb#lesseq.case1.N#: \[ $$lesseq.case1.N \].
-\item \verb#neq.less_or_sup.N#: \[ $$neq.less_or_sup.N \].
-\item \verb#not.lesseq.imply.less.N#: \[ $$not.lesseq.imply.less.N \].
-\item \verb#lesseq.imply.not.greater.N#: \[ $$lesseq.imply.not.greater.N \].
-\end{itemize}
-
-Comments: The first four are natural to use explicitely. The last two
-could probably be removed by adding some \verb#new_intro# or
-\verb#new_elim# in the library. \verb#lesseq.case1.N# and
-\verb#neq.less_or_sup.N# are more problematic, they would require to
-extend the system with some kind of binary elimination rule (with two
-principal premices ?).
-
-\section{Some basic lemmas.}
-
-They should be included in the library ?
-*)
-
-theorem minimal.element /\X (\/n:N X n -> \/n:N (X n & /\p:N (X p -> n <= p))).
-(*! math
-\begin{lemma}\label{minimal.element}
-Every non empty subset \[ X \] of \[ N \] admits a minimal element:
-$$ \[ $0 \] $$
-\end{lemma}
-*)
-intro 2.
-by_absurd.
-rewrite_hyp H0 demorganl.
-(*! math
-\begin{proof}
-We assume \[ $$H \] and \[ $$H0 \] ( \[ H0 \] ).
-*)
-use /\n:N ~ X n.
-(*! math
-We get a contradiction from \[ $$G \] which is proven by well founded induction:
-*)
-trivial.
-intros.
-elim well_founded.N with H1.
-intros.
-(*! math
-we assume \[ $$H3 \] and must prove \[ $0 \].
-*)
-intro.
-apply H0 with H4.
-lefts G $& $\/.
-(*! math
-Assuming \[ $$H4 \] and using ( \[ H0 \] ) we get an integer \[ x \] such that
-\[ $$H6 \] and \[ $$H7 \]. This gives a contradiction with \[ $$H3 \].
-\end{proof}
-*)
-elim H3 with H5.
-elim not.lesseq.imply.less.N.
-save.
-
-theorem not_odd_and_even.N /\x,y,z:N (~ (x = N2 * y & x = N1 + N2 * z)).
-(*! math
-\begin{lemma}\label{not_odd_and_even.N}
-An integer can not be odd and even:
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-By induction over \[ x \].
-\end{proof}
-*)
-intro 2.
-elim H.
-trivial 6.
-intros.
-intro.
-left H4.
-elim H2 with [case].
-trivial =H0 H4 H6.
-elim H1.
-axiom H3.
-axiom H6.
-intro.
-rmh H4.
-left H5.
-rmh H5.
-rewrite_hyp H4 H7 calcul.N.
-left H4.
-axiom H4.
-save.
-
-theorem sum_square.N /\x,y:N (x + y)^N2 = x^N2 + N2*x*y + y^N2.
-(*! math
-\begin{lemma}\label{sum_square.N}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-Easy.
-\end{proof}
-*)
-intros.
-rewrite calcul.N mul.left.distributive.N mul.right.distributive.N add.associative.N.
-intro.
-save.
-
-
-fact less.exp.N /\n,x,y:N( x <= y -> x^n <= y^n).
-(*! math
-\begin{lemma}\label{less.exp.N}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-By induction on \[ n \].
-\end{proof}
-*)
-intros.
-elim H.
-trivial.
-rewrite calcul.N.
-trivial.
-save.
-
-fact less_r.exp.N /\n,x,y:N( x^n < y^n -> x < y).
-(*! math
-\begin{lemma}\label{less_r.exp.N}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-Follows from lemma \ref{less.exp.N}.
-\end{proof}
-*)
-intros.
-elim lesseq.case1.N with y and x.
-apply less.exp.N with n and H3.
-elim lesseq.imply.not.greater.N with y^n and x^n ;; Try intros.
-save.
-
-fact less.ladd.N /\x,y:N (N0 < y -> x < x + y).
-(*! math
-\begin{lemma}\label{less.ladd.N}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-Easy induction over \[ x \].
-\end{proof}
-*)
-intros.
-elim H.
-rewrite calcul.N.
-trivial.
-save.
-
-
-(*! math
-\section{The proof itself}
-*)
-
-theorem n.square.pair /\n:N (\/p:N n^N2=N2*p -> \/q:N n=N2*q).
-(*! math
-\begin{lemma}\label{n.square.pair}
- If the square of \[ n \] is even then \[ n \] is even:
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-*)
-intros.
-lefts H0 $\/ $&.
-apply odd_or_even.N with H.
-lefts G $\/ $& $or.
-(*! math
-We assume \[ $$H1 \] ( \[ H1 \] ).
-We distinguish two cases. If \[ n \] is even we get what we want.
-*)
-trivial.
-(*! math
-If \[ n \] is odd we have \[ $$H3 \]
-*)
-prove n^N2 = N2*(N2*y^N2+N2*y) + N1.
-(*! math
-which implies \[ $0 \]
-*)
-rewrite H3 sum_square.N.
-rewrite add.associative.N mul.associative.N mul.left.distributive.N.
-from N1 + N4 * y + (N2 * y) ^ N2 = N1 + N4 * y + N4 * y ^ N2.
-intro.
-(*! math
-and this gives a contradiction by lemma \ref{not_odd_and_even.N} using ( \[ H1 \] )
-\end{proof}
-*)
-elim not_odd_and_even.N with N (n^N2).
-intros.
-select 3.
-intro.
-axiom H1.
-axiom G.
-axiom H0.
-intros.
-save.
-
-lem decrease /\m,n : N (m^ N2 = N2 * n^ N2 -> N0 < n -> n < m).
-(*! math
-\begin{lemma}\label{decrease}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-Using lemma \ref{less_r.exp.N} and lemma \ref{less.ladd.N}
-\end{proof}
-*)
-intros.
-elim less_r.exp.N with N2 ;; Try intros.
-prove m^N2 = n^N2 + n^N2. axiom H1.
-elim less.ladd.N ;; Try intros.
-trivial.
-trivial.
-trivial =H0 H2.
-save.
-
-lem sup_zero /\m,n : N (m^ N2 = N2 * n^ N2 -> N0 < m -> N0 < n).
-(*! math
-\begin{lemma}\label{sup_zero}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-Using lemma \[ $$ neq.less_or_sup.N \] from the library.
-\end{proof}
-*)
-intros.
-elim neq.less_or_sup.N with N0 and n ;; Try intros.
-rewrite_hyp H1 H3 calcul.N.
-trivial.
-trivial.
-save.
-
-def Q m = m > N0 & \/n:N (m^ N2 = N2 * n^ N2).
-(*! math
-\begin{definition}
-We define \[ Q m = $$Q m \].
-\end{definition}
-*)
-
-lem dec /\m:N (Q m -> \/m':N (Q m' & m' < m)).
-(*! math
-\begin{lemma}\label{dec}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-*)
-intros.
-lefts H0 $Q $\/ $&.
-(*! math
-We assume that \[ $$H0 \] and \[ $$H2 \] (\[ H2 \]) and we must prove \[ $0 \].
-*)
-apply sup_zero with H2 and H0.
-(*! math
-By lemma \ref{sup_zero} we get \[ $$G \]. We show that \[ n \] is the integer we are looking for.
-*)
-intro.
-instance ?1 n.
-intros.
-intros.
-trivial.
-(*! math
-We just need to prove \[ $0 \] and \[1 $0 \].
-*)
-prove \/p:N (m ^ N2 = N2 * p).
-intro.
-instance ?2 n^N2.
-trivial.
-apply n.square.pair with G0.
-lefts G1 $& $\/.
-(*! math
-Using lemma \ref{n.square.pair} we get \[ q \] such that \[ $$H4 \]
-*)
-prove n ^N2 = N2 * q ^N2.
-rewrite_hyp H2 H4.
-prove N2 * (N2 * q ^N2) = N2 * n ^ N2.
-from H2.
-left G1.
-intro.
-(*! math
-and then \[ $$G1 \].
-*)
-trivial =H3 G1.
-(*! math
-Finally \[ $0 \] follows from lemma \ref{decrease}.
-\end{proof}
-*)
-elim decrease.
-save.
-
-lem sq2_irrat /\m:N ~Q m.
-(*! math
-\begin{lemma}\label{sq2_irrat}
-$$ \[ $0 \] $$
-\end{lemma}
-\begin{proof}
-Follows from the previous lemma by selecting the minimal element in \[ Q \] (using lemme \ref{minimal.element}) and getting a contradiction.
-\end{proof}
-*)
-intros.
-intro.
-elim minimal.element with Q.
-intros $\/ $&.
-axiom H.
-axiom H0.
-lefts H1.
-elim dec with H2.
-lefts H4.
-apply H3 with H5.
-elim lesseq.imply.not.greater.N with n and m'.
-save.
-
-theorem square2_irrat /\m,n : N (m^ N2 = N2 * n^ N2 -> m = N0 & n = N0).
-(*! math
-\begin{theorem} The square-root of 2 is irrational. For this we just need to prove the following:
-$$ \[ $0 \] $$
-\end{theorem}
-\begin{proof}
-*)
-intros.
-apply sq2_irrat with H.
-(*! math
-We assume \[ $$H1 \].
-By the previous lemma we have \[ $$G \].
-*)
-elim H with [case].
-intro.
-intro.
-(*! math
-If \[ $$H2 \] we easely get \[ $0 \].
-*)
-elim H0 with [case].
-intro.
-rewrite_hyp H1 H2 H4 calcul.N.
-left H1;; intros.
-prove Q m.
-(*! math
-If \[ m > N0 \] then we have \[ Q m \] and a contradiction.
-\end{proof}
-*)
-intros $Q $\/ $&.
-trivial.
-select 2.
-axiom H1.
-trivial.
-elim G.
-save.
diff --git a/proof-general-pkg.el b/proof-general-pkg.el
new file mode 100644
index 00000000..53f33432
--- /dev/null
+++ b/proof-general-pkg.el
@@ -0,0 +1,3 @@
+(define-package "proof-general" "4.5-git"
+ "A generic front-end for proof assistants (interactive theorem provers)"
+ '((emacs "24.3")))
diff --git a/twelf/twelf-old.el b/twelf/twelf-old.el
index 41664839..62763ba4 100644
--- a/twelf/twelf-old.el
+++ b/twelf/twelf-old.el
@@ -2535,38 +2535,38 @@ Mode map
(setq twelf-server-display-commands (not twelf-server-display-commands)))
(defconst twelf-options-menu
- (` ("Options"
- (, (toggle "Display Commands" '(twelf-toggle-server-display-commands)
- 'twelf-server-display-commands))
- ("chatter"
- (, (radio "0" '(twelf-set "chatter" 0) '(= twelf-chatter 0)))
- (, (radio "1" '(twelf-set "chatter" 1) '(= twelf-chatter 1)))
- (, (radio "2" '(twelf-set "chatter" 2) '(= twelf-chatter 2)))
- (, (radio "3*" '(twelf-set "chatter" 3) '(= twelf-chatter 3)))
- (, (radio "4" '(twelf-set "chatter" 4) '(= twelf-chatter 4)))
- (, (radio "5" '(twelf-set "chatter" 5) '(= twelf-chatter 5)))
- (, (radio "6" '(twelf-set "chatter" 6) '(= twelf-chatter 6))))
- (, (toggle "doubleCheck" '(twelf-toggle-double-check)
- '(string-equal twelf-double-check "true")))
- ("Print."
- (, (toggle "implicit" '(twelf-toggle-print-implicit)
- '(string-equal twelf-print-implicit "true")))
- ["depth" (twelf-set-parm "Print.depth") t]
- ["length" (twelf-set-parm "Print.length") t]
- ["indent" (twelf-set-parm "Print.indent") t]
- ["width" (twelf-set-parm "Print.width") t])
- ("Prover."
- ["strategy" (twelf-set-parm "Prover.strategy") t]
- ["maxSplit" (twelf-set-parm "Prover.maxSplit") t]
- ["maxRecurse" (twelf-set-parm "Prover.maxRecurse") t])
- ;;["Trace" nil nil]
- ;; (, (radio "0" '(twelf-set "trace" 0) '(= twelf-trace 0)))
- ;; (, (radio "1" '(twelf-set "trace 1) '(= twelf-trace 1)))
- ;; (, (radio "2" '(twelf-set "trace" 2) '(= twelf-trace 2))))
- ;;["Untrace" nil nil]
- ;;(, (disable-form "Untrace" '(twelf-set "trace" 0)
- ;; '(not (= twelf-trace 0))))
- ["Reset Menubar" twelf-reset-menu t]))
+ `("Options"
+ (, (toggle "Display Commands" '(twelf-toggle-server-display-commands)
+ 'twelf-server-display-commands))
+ ("chatter"
+ (, (radio "0" '(twelf-set "chatter" 0) '(= twelf-chatter 0)))
+ (, (radio "1" '(twelf-set "chatter" 1) '(= twelf-chatter 1)))
+ (, (radio "2" '(twelf-set "chatter" 2) '(= twelf-chatter 2)))
+ (, (radio "3*" '(twelf-set "chatter" 3) '(= twelf-chatter 3)))
+ (, (radio "4" '(twelf-set "chatter" 4) '(= twelf-chatter 4)))
+ (, (radio "5" '(twelf-set "chatter" 5) '(= twelf-chatter 5)))
+ (, (radio "6" '(twelf-set "chatter" 6) '(= twelf-chatter 6))))
+ (, (toggle "doubleCheck" '(twelf-toggle-double-check)
+ '(string-equal twelf-double-check "true")))
+ ("Print."
+ (, (toggle "implicit" '(twelf-toggle-print-implicit)
+ '(string-equal twelf-print-implicit "true")))
+ ["depth" (twelf-set-parm "Print.depth") t]
+ ["length" (twelf-set-parm "Print.length") t]
+ ["indent" (twelf-set-parm "Print.indent") t]
+ ["width" (twelf-set-parm "Print.width") t])
+ ("Prover."
+ ["strategy" (twelf-set-parm "Prover.strategy") t]
+ ["maxSplit" (twelf-set-parm "Prover.maxSplit") t]
+ ["maxRecurse" (twelf-set-parm "Prover.maxRecurse") t])
+ ;;["Trace" nil nil]
+ ;; (, (radio "0" '(twelf-set "trace" 0) '(= twelf-trace 0)))
+ ;; (, (radio "1" '(twelf-set "trace 1) '(= twelf-trace 1)))
+ ;; (, (radio "2" '(twelf-set "trace" 2) '(= twelf-trace 2))))
+ ;;["Untrace" nil nil]
+ ;;(, (disable-form "Untrace" '(twelf-set "trace" 0)
+ ;; '(not (= twelf-trace 0))))
+ ["Reset Menubar" twelf-reset-menu t])
"Menu to change options in Twelf mode.")
(defconst twelf-timers-menu
@@ -2583,12 +2583,12 @@ Mode map
"Fontify current buffer using font-lock minor mode.")
(defconst twelf-syntax-menu
- (` ("Syntax Highlighting"
- ["Highlight Declaration" twelf-font-fontify-decl t]
- ["Highlight Buffer" twelf-font-fontify-buffer t]
- ;(, (toggle "Immediate Highlighting" 'toggle-twelf-font-immediate
- ;'font-lock-mode))
- ))
+ `("Syntax Highlighting"
+ ["Highlight Declaration" twelf-font-fontify-decl t]
+ ["Highlight Buffer" twelf-font-fontify-buffer t]
+ ;;(, (toggle "Immediate Highlighting" 'toggle-twelf-font-immediate
+ ;;'font-lock-mode))
+ )
"Menu for syntax highlighting in Twelf mode.")
(easy-menu-define twelf-menu (list twelf-mode-map)