From 6fb9ccc10d6f40504fe379652568ab95219e60b0 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Thu, 9 Feb 2017 16:07:25 -0500
Subject: [PATCH] remove obviously dead external libraries

---
 externals/Makefile                            |   30 -
 externals/SVNEXTERNALS.txt                    |   22 -
 externals/TODO                                |   18 -
 externals/aalex/LICENSE.txt                   |  340 --
 externals/aalex/README.txt                    |   53 -
 externals/aalex/build.sh                      |   10 -
 externals/aalex/makefile                      |   48 -
 externals/aalex/markov-machine-help.pd        |   69 -
 externals/aalex/markov-machine.pd             |  195 -
 externals/aalex/pcre-help.pd                  |   50 -
 externals/aalex/pcre.c                        |  172 -
 externals/aalex/x11key-help.pd                |   93 -
 externals/aalex/x11key.c                      |  175 -
 externals/aalex/x11mouse-help.pd              |   86 -
 externals/aalex/x11mouse.c                    |  181 -
 externals/aalex/xmms-help.pd                  |   42 -
 externals/aalex/xmms.c                        |  148 -
 externals/algocomp/.cdtproject                |   57 -
 externals/algocomp/.cproject                  |   64 -
 externals/algocomp/.project                   |   85 -
 externals/algocomp/Makefile                   |   85 -
 externals/algocomp/Makefile.advanced          |  104 -
 .../algocomp/algocomp-help-patches/delnote.pd |   42 -
 .../algocomp/algocomp-help-patches/dnote.pd   |   42 -
 .../algocomp-help-patches/help-algocomp.pd    |   16 -
 .../algocomp-help-patches/help-chaosgame.pd   |   70 -
 .../algocomp-help-patches/help-eca.pd         |   30 -
 .../algocomp-help-patches/help-genetic.pd     |  146 -
 .../algocomp-help-patches/help-henon.pd       |   57 -
 .../algocomp-help-patches/help-ifs.pd         |   77 -
 .../algocomp-help-patches/help-ifsmusic.pd    |   13 -
 .../algocomp-help-patches/help-logistic.pd    |   32 -
 .../algocomp-help-patches/help-lorenz.pd      |   64 -
 .../algocomp-help-patches/help-map.pd         |   10 -
 .../algocomp-help-patches/help-oneoverf.pd    |   31 -
 .../algocomp-help-patches/help-selfsimilar.pd |   28 -
 externals/algocomp/algocomp.c                 |  132 -
 externals/algocomp/chaotic.c                  |  108 -
 externals/algocomp/distribute.c               |   35 -
 externals/algocomp/elementaryca.c             |  132 -
 externals/algocomp/fractal.c                  |  118 -
 externals/algocomp/gauss_tilde.c              |   65 -
 externals/algocomp/genetic.c                  |  218 -
 externals/algocomp/helpers.c                  |   42 -
 externals/algocomp/ifs.c                      |  105 -
 externals/algocomp/ifs.c.old                  |   77 -
 externals/algocomp/ifsmusic.c                 |  151 -
 externals/algocomp/logistictilde.c            |   59 -
 externals/algocomp/m_pd.h                     |  635 ---
 externals/algocomp/neural.c                   |  157 -
 externals/algocomp/selfsimilar.c              |  234 -
 externals/algocomp/stochastic.c               |   29 -
 externals/algocomp/utils.c                    |   59 -
 externals/ann/GnuGPL.txt                      |  290 -
 externals/ann/README.txt                      |   54 -
 externals/ann/SConscript                      |   19 -
 externals/ann/examples/ann_mlp-FAQs.txt       |    8 -
 .../examples/ann_mlp_example1/train-and.txt   |    9 -
 .../examples/ann_mlp_example1/train-or.txt    |    9 -
 .../examples/ann_mlp_example1/train-xor.txt   |    9 -
 .../ann/examples/ann_mlp_example1/xor.pd      |   89 -
 .../ann/examples/ann_mlp_example2/README.txt  |   32 -
 .../examples/ann_mlp_example2/cellulaSuono.pd |  195 -
 .../ann/examples/ann_mlp_example2/complex.net |    7 -
 .../ann/examples/ann_mlp_example2/complex.txt |  513 --
 .../ann/examples/ann_mlp_example2/example2.pd |  911 ----
 .../ann/examples/ann_mlp_example2/stereo.pd   |   99 -
 .../ann/examples/ann_mlp_example3/example3.pd |  392 --
 .../ann/examples/ann_mlp_example3/tdnn.net    |    7 -
 .../ann_mlp_example4/gen_trainfile-help.pd    |   39 -
 .../ann_mlp_example4/gen_trainfile.pd         |  180 -
 .../examples/ann_mlp_example4/multidim_net.pd |  387 --
 .../ann/examples/ann_mlp_example4/test.txt    |    7 -
 .../examples/ann_mlp_example4/trainfile.dat   |    9 -
 .../examples/ann_mlp_example4/trainfile2.dat  |    9 -
 externals/ann/examples/ann_som/ann_som.pd     |  144 -
 externals/ann/examples/ann_som/test.som       |  206 -
 externals/ann/examples/ann_td/example.pd      |  316 --
 externals/ann/examples/ann_td/tdnn.net        |    7 -
 externals/ann/examples/tutorial-ann_mlp.pd    |  168 -
 externals/ann/helps/ann_mlp-help.pd           |  415 --
 externals/ann/helps/ann_mlp-manual.txt        |  137 -
 .../ann/helps/ann_mlp-write-trainfile.pd      |  139 -
 externals/ann/helps/ann_td-help.pd            |  251 -
 externals/ann/src/ann.c                       |   74 -
 externals/ann/src/ann.h                       |   15 -
 externals/ann/src/ann_mlp.c                   |  752 ---
 externals/ann/src/ann_som.c                   |  806 ---
 externals/ann/src/ann_td.c                    |  663 ---
 externals/ann/src/makefile.darwin             |   48 -
 externals/ann/src/makefile.irix               |   20 -
 externals/ann/src/makefile.linux              |   98 -
 externals/ann/src/makefile.msvc               |   55 -
 externals/august/readanysf~/Makefile          |   93 -
 externals/august/readanysf~/README            |   47 -
 externals/august/readanysf~/READMEmacpkg.txt  |   11 -
 externals/august/readanysf~/anysndfiler.pd    |  136 -
 .../readanysf~/embed-MacOSX-dependencies.sh   |   84 -
 .../readanysf~/jamesdunn_buzz_stresstest.pd   |   53 -
 .../august/readanysf~/readanysf~-help.pd      |  117 -
 .../august/readanysf~/readanysf~-meta.pd      |    6 -
 .../august/readanysf~/screengrab0.40.png      |  Bin 31276 -> 0 bytes
 .../august/readanysf~/src/FifoAudioFrames.cpp |  159 -
 .../august/readanysf~/src/FifoAudioFrames.h   |   60 -
 .../august/readanysf~/src/FifoVideoFrames.cpp |  139 -
 .../august/readanysf~/src/FifoVideoFrames.h   |   62 -
 externals/august/readanysf~/src/ReadMedia.cpp | 1198 -----
 externals/august/readanysf~/src/ReadMedia.h   |  243 -
 .../august/readanysf~/src/readanysf~.cpp      |  533 --
 externals/clr/Counter/AssemblyInfo.cs         |   58 -
 externals/clr/Counter/Counter.cs              |   84 -
 externals/clr/Counter/Counter.csproj          |  107 -
 externals/clr/Counter/README.txt              |    6 -
 externals/clr/Counter/counter-help.pd         |   24 -
 externals/clr/PureData/AssemblyInfo.cs        |   58 -
 externals/clr/PureData/Atom.cs                |  289 -
 externals/clr/PureData/DynamicMethod.cs       |  101 -
 externals/clr/PureData/PureData.cs            |  670 ---
 externals/clr/PureData/PureData.csproj        |  108 -
 externals/clr/PureData/README.txt             |   10 -
 externals/clr/clr.cpp                         |  703 ---
 externals/clr/makefile                        |   28 -
 externals/clr/makefile.darwin                 |   35 -
 externals/clr/test/AssemblyInfo.cs            |   58 -
 externals/clr/test/test-help.pd               |   68 -
 externals/clr/test/test.cs                    |  109 -
 externals/clr/test/test.csproj                |  112 -
 externals/ffext/atox/Makefile                 |   47 -
 externals/ffext/atox/atox.c                   |   53 -
 externals/ffext/composer/AUTHORS              |    4 -
 externals/ffext/composer/COPYING              |  280 -
 externals/ffext/composer/Common.hpp           |   14 -
 externals/ffext/composer/Editor.cpp           |   96 -
 externals/ffext/composer/Editor.hpp           |   17 -
 externals/ffext/composer/HasMeta.cpp          |   16 -
 externals/ffext/composer/HasMeta.hpp          |   24 -
 externals/ffext/composer/Makefile             |  151 -
 externals/ffext/composer/Pattern.cpp          |   87 -
 externals/ffext/composer/Pattern.hpp          |   34 -
 externals/ffext/composer/PdClasses.cpp        |  527 --
 externals/ffext/composer/PdClasses.hpp        |   53 -
 externals/ffext/composer/Song.cpp             |   42 -
 externals/ffext/composer/Song.hpp             |   33 -
 externals/ffext/composer/Track.cpp            |   75 -
 externals/ffext/composer/Track.hpp            |   43 -
 externals/ffext/composer/editor.tk            |  688 ---
 externals/ffext/notemono/COPYING              |  280 -
 externals/ffext/notemono/README               |    5 -
 externals/ffext/notemono/makefile             |   28 -
 externals/ffext/notemono/notemono-help.pd     |   37 -
 externals/ffext/notemono/notemono.c           |  133 -
 externals/ffext/tms5220~/Makefile             |  298 --
 externals/ffext/tms5220~/README.txt           |   11 -
 externals/ffext/tms5220~/tms5220/driver.h     |    0
 externals/ffext/tms5220~/tms5220/tms5220.c    |  701 ---
 externals/ffext/tms5220~/tms5220/tms5220.h    |   15 -
 externals/ffext/tms5220~/tms5220/tms5220.txt  |   86 -
 externals/ffext/tms5220~/tms5220/tms5220r.c   |  105 -
 externals/ffext/tms5220~/tms5220~-help.pd     |  179 -
 externals/ffext/tms5220~/tms5220~-meta.pd     |    8 -
 externals/ffext/tms5220~/tms5220~.c           |  281 -
 externals/ffext/tracker/CHANGELOG             |   26 -
 externals/ffext/tracker/COPYING               |  280 -
 externals/ffext/tracker/README                |    2 -
 externals/ffext/tracker/TODO                  |    3 -
 externals/ffext/tracker/makefile              |   63 -
 externals/ffext/tracker/tk2c.bash             |   24 -
 externals/ffext/tracker/tracker-help.pd       |  106 -
 externals/ffext/tracker/tracker.c             |  781 ---
 externals/ffext/tracker/tracker.h             |   66 -
 externals/ffext/tracker/tracker.tk            |  121 -
 externals/framesync/LICENSE.txt               |  676 ---
 externals/framesync/Makefile                  |  331 --
 externals/framesync/README.txt                |   12 -
 externals/framesync/TODO.txt                  |    2 -
 externals/framesync/clockrunning-help.pd      |    9 -
 externals/framesync/clockrunning.pd           |   19 -
 externals/framesync/examples/sdf.wav          |  Bin 109708 -> 0 bytes
 externals/framesync/fadeinout-help.pd         |   24 -
 externals/framesync/fadeinout.pd              |   41 -
 externals/framesync/fadeinout~-help.pd        |   26 -
 externals/framesync/fadeinout~.pd             |   24 -
 externals/framesync/filelooper~-help.pd       |   23 -
 externals/framesync/filelooper~.pd            |   93 -
 externals/framesync/fps-help.pd               |   15 -
 externals/framesync/fps.pd                    |   12 -
 externals/framesync/fps_ms-help.pd            |   23 -
 externals/framesync/fps_ms.pd                 |   28 -
 externals/framesync/frameclock-help.pd        |   19 -
 externals/framesync/frameclock.pd             |   89 -
 externals/framesync/framesync-meta.pd         |    7 -
 externals/framesync/fsline-help.pd            |   24 -
 externals/framesync/fsline.pd                 |   42 -
 externals/framesync/fsreadsf~-help.pd         |   24 -
 externals/framesync/fsreadsf~.pd              |  105 -
 externals/framesync/fsrecordctrl.pd           |   46 -
 externals/framesync/fstabplay~-help.pd        |   35 -
 externals/framesync/fstabplay~.pd             |   83 -
 externals/framesync/rangemod.pd               |   12 -
 externals/framesync/tablooper~-help.pd        |   58 -
 externals/framesync/tablooper~.pd             |  104 -
 externals/framesync/tabpitcher~-help.pd       |   37 -
 externals/framesync/tabpitcher~.pd            |   96 -
 externals/framesync/tabstretcher~-help.pd     |   34 -
 externals/framesync/tabstretcher~.pd          |   71 -
 externals/frankenstein/GArhythm.c             |  707 ---
 externals/frankenstein/GArhythm.vcproj        |  130 -
 externals/frankenstein/Makefile               |   42 -
 externals/frankenstein/README.txt             |   79 -
 externals/frankenstein/SHOWME.pd              |   30 -
 externals/frankenstein/bay.orc                |  463 --
 externals/frankenstein/chord_melo.c           | 1137 ----
 externals/frankenstein/chord_melo_test3.pd    |  630 ---
 externals/frankenstein/chords_memory.c        | 1044 ----
 externals/frankenstein/chords_memory.vcproj   |  133 -
 externals/frankenstein/common.c               | 1069 ----
 externals/frankenstein/common.h               |  435 --
 externals/frankenstein/doc/LINKS.txt          |   26 -
 externals/frankenstein/doc/README.txt         |   27 -
 externals/frankenstein/doc/chords_graph.doc   |  Bin 75264 -> 0 bytes
 externals/frankenstein/doc/chords_graph.sxw   |  Bin 16853 -> 0 bytes
 externals/frankenstein/doc/genomes-notes.txt  |  125 -
 externals/frankenstein/doc/maxlibnotes.txt    |   16 -
 externals/frankenstein/doc/model.doc          |  Bin 17920 -> 0 bytes
 externals/frankenstein/doc/model.sxw          |  Bin 6944 -> 0 bytes
 externals/frankenstein/frankenstein.sln       |   45 -
 externals/frankenstein/harmonizer.c           |  823 ---
 externals/frankenstein/harmonizer.vcproj      |  136 -
 externals/frankenstein/makefile.darwin        |   39 -
 externals/frankenstein/makefile.linux         |  103 -
 externals/frankenstein/manager.pd             |   14 -
 externals/frankenstein/patches/GA2005.pd      | 1089 ----
 externals/frankenstein/patches/SHOWME.pd      |   28 -
 externals/frankenstein/patches/bay.orc        |  418 --
 externals/frankenstein/patches/feb05/bay.orc  |  463 --
 externals/frankenstein/patches/feb05/bay.pd   |  250 -
 externals/frankenstein/patches/feb05/bay.sco  |    3 -
 .../frankenstein/patches/feb05/bel0205a.graph |  Bin 168100 -> 0 bytes
 .../patches/feb05/belfast0205.graph           |  Bin 168100 -> 0 bytes
 .../patches/feb05/davidcsoundtest2.pd         |  609 ---
 .../frankenstein/patches/feb05/test2.graph    |  Bin 58564 -> 0 bytes
 externals/frankenstein/patches/organist.pd    |  328 --
 .../frankenstein/patches/percussionist.pd     |  782 ---
 .../frankenstein/patches/sampleplayer.pd      |   80 -
 .../frankenstein/patches/test-GArhythm.pd     |  999 ----
 .../frankenstein/patches/test-harmonizer2.pd  |  313 --
 externals/frankenstein/patches/test.graph     |  Bin 57604 -> 0 bytes
 externals/frankenstein/rhythms_memory.c       |  442 --
 externals/frankenstein/rhythms_memory.vcproj  |  133 -
 externals/frankenstein/ritmo1.c               |  117 -
 externals/frankenstein/sglib.h                | 1947 -------
 externals/frankenstein/test-chords_graph.pd   |   46 -
 externals/frankenstein/test-harmonizer.pd     |  197 -
 externals/frankenstein/test-harmonizer2.pd    |  585 --
 externals/frankenstein/test-rhythm.pd         |    5 -
 externals/frankenstein/test-rhythms_memory.pd |   94 -
 externals/frankenstein/test.c                 |   84 -
 externals/frankenstein/themes_memory.c        |  431 --
 externals/frankenstein/themes_memory.vcproj   |  133 -
 externals/frankenstein/voicing_analyzer.c     |  330 --
 .../frankenstein/voicing_analyzer.vcproj      |  133 -
 externals/input_noticer/INSTALL.TXT           |   27 -
 externals/input_noticer/Makefile              |   33 -
 externals/input_noticer/README.TXT            |   58 -
 externals/input_noticer/input_noticer-help.pd |   82 -
 externals/input_noticer/input_noticer.c       |  371 --
 externals/input_noticer/input_noticer.h       |   58 -
 externals/input_noticer/noticer_test.pd       |   15 -
 externals/input_noticer/parseeventnodenum.c   |   65 -
 externals/input_noticer/test_noticer.c        |  147 -
 .../input_noticer/test_noticer_compile.sh     |    1 -
 externals/jackx/GnuGPL.txt                    |  290 -
 externals/jackx/README                        |   25 -
 externals/jackx/jack-connect-help.pd          |   34 -
 externals/jackx/jack-ports-help.pd            |   24 -
 externals/jackx/jack.pd                       |   47 -
 externals/jackx/jackx.c                       |  399 --
 externals/jackx/makefile                      |   32 -
 externals/k_cext/Makefile                     |   98 -
 externals/k_cext/README                       |  262 -
 externals/k_cext/help-do.pd                   |   30 -
 externals/k_cext/help-fibonacci.pd            |   12 -
 externals/k_cext/help-gcd.pd                  |   24 -
 externals/k_cext/help-k_cext.pd               |  130 -
 externals/k_cext/help-k_cext2.pd              |  128 -
 externals/k_cext/help-k_cfunc.pd              |   34 -
 externals/k_cext/help-markov.pd               |   66 -
 externals/k_cext/help-rangeifelifelse.pd      |   18 -
 externals/k_cext/help-send.pd                 |   29 -
 externals/k_cext/help-send2.pd                |   18 -
 externals/k_cext/help-sort.pd                 |   19 -
 externals/k_cext/help-string.pd               |   11 -
 externals/k_cext/help-value.pd                |   18 -
 externals/k_cext/k_cext.c                     |  380 --
 externals/k_cext/k_cext.h                     |  210 -
 externals/k_cext/k_cext_funchandler.c         |  157 -
 externals/k_cext/k_cext_generatecode.c        |  431 --
 externals/k_cext/k_cext_macosx.c              |   87 -
 externals/k_cext/k_cext_unix.c                |   77 -
 externals/k_cext/k_cext_win.c                 |  101 -
 externals/k_cext/test.pd                      |   16 -
 externals/k_guile/Makefile                    |  114 -
 externals/k_guile/README                      |  108 -
 externals/k_guile/add.scm                     |   15 -
 externals/k_guile/any.scm                     |    5 -
 externals/k_guile/gen_c_scheme.py             |   19 -
 externals/k_guile/global.scm                  |  189 -
 externals/k_guile/help-k_guile.pd             |   83 -
 externals/k_guile/inout.scm                   |   24 -
 externals/k_guile/k_guile.c                   |  597 ---
 externals/k_guile/local.scm                   |  170 -
 externals/k_guile/mozilla.scm                 |    8 -
 externals/k_guile/send_receive.scm            |   24 -
 externals/k_jack~/README                      |   24 -
 externals/k_jack~/k_jack~-help.pd             |   33 -
 externals/k_jack~/k_jack~.c                   |  424 --
 externals/k_jack~/makefile                    |   97 -
 externals/k_vst~/Makefile                     |   38 -
 externals/k_vst~/README                       |   26 -
 externals/k_vst~/abyss.pd                     |   12 -
 externals/k_vst~/config.h                     |   63 -
 externals/k_vst~/help-k_vst~.pd               |   25 -
 externals/k_vst~/help2-k_vst~.pd              |   77 -
 externals/k_vst~/k_vst~.c                     |  812 ---
 externals/k_vst~/plugin~.h                    |  189 -
 externals/k_vst~/plugin~_ladspa.h             |  108 -
 externals/k_vst~/plugin~_vst.c                |  571 --
 externals/k_vst~/plugin~_vst.h                |  108 -
 externals/k_vst~/version.h                    |   28 -
 externals/k_vst~/vstutils.h                   |   50 -
 externals/many/LICENSE.txt                    |  676 ---
 externals/many/Makefile                       |  332 --
 externals/many/README.txt                     |   16 -
 externals/many/TODO.txt                       |    8 -
 externals/many/bundle-help.pd                 |    7 -
 externals/many/bundle.pd                      |  135 -
 externals/many/debian/changelog               |    5 -
 externals/many/debian/compat                  |    1 -
 externals/many/debian/control                 |   38 -
 externals/many/debian/copyright               |   25 -
 externals/many/debian/gbp.conf                |    7 -
 externals/many/debian/links                   |    3 -
 externals/many/debian/rules                   |   17 -
 externals/many/debian/source/format           |    1 -
 externals/many/debian/watch                   |    2 -
 externals/many/examples/aw.wav                |  Bin 133166 -> 0 bytes
 externals/many/examples/petal-test.pd         |   68 -
 externals/many/examples/petal.pd              |   67 -
 externals/many/examples/run-200voicetest.pd   |  109 -
 externals/many/examples/tick.wav              |  Bin 35856 -> 0 bytes
 externals/many/examples/ticker-voice~.pd      |   21 -
 externals/many/examples/ticker.pd             |   44 -
 externals/many/examples/tock.wav              |  Bin 20516 -> 0 bytes
 externals/many/examples/voicetest~.pd         |   40 -
 externals/many/instances-help.pd              |    8 -
 externals/many/instances-template-help.pd     |   14 -
 externals/many/instances-template.pd          |    5 -
 externals/many/instances-template~-help.pd    |   15 -
 externals/many/instances-template~.pd         |   36 -
 externals/many/instances.pd                   |  156 -
 externals/many/instances~-help.pd             |   31 -
 externals/many/instances~.pd                  |  157 -
 externals/many/itest.pd                       |   19 -
 externals/many/many-meta.pd                   |    7 -
 externals/many/polypoly-voice~-help.pd        |   14 -
 externals/many/polypoly-voice~.pd             |   86 -
 externals/many/polypoly-wrap~-help.pd         |    5 -
 externals/many/polypoly-wrap~.pd              |   16 -
 externals/many/polypoly~-help.pd              |   56 -
 externals/many/polypoly~.pd                   |  198 -
 externals/many/rawpoly-test.pd                |   17 -
 externals/many/rawpoly.pd                     |  185 -
 externals/many/voices-template~-help.pd       |   16 -
 externals/many/voices-template~.pd            |   12 -
 externals/many/voices-wrap~-help.pd           |    5 -
 externals/many/voices-wrap~.pd                |   34 -
 externals/many/voices~-help.pd                |   33 -
 externals/many/voices~.pd                     |  176 -
 externals/pd-l2ork-TODO.txt                   |   28 +
 externals/pdvjtools/Makefile                  |  176 -
 externals/pdvjtools/README.txt                |    1 -
 externals/pdvjtools/colorgrid/CHANGES.LOG     |   13 -
 externals/pdvjtools/colorgrid/INSTALL         |   15 -
 externals/pdvjtools/colorgrid/Makefile        |   31 -
 externals/pdvjtools/colorgrid/README          |   20 -
 .../pdvjtools/colorgrid/colorgrid-help.pd     |   47 -
 externals/pdvjtools/colorgrid/colorgrid.c     | 1655 ------
 externals/pdvjtools/pdp_1394L/Makefile        |   14 -
 externals/pdvjtools/pdp_1394L/Makefile.config |   21 -
 externals/pdvjtools/pdp_1394L/dv1394.h        |  258 -
 .../pdvjtools/pdp_1394L/pdp_1394L-help.pd     |   18 -
 externals/pdvjtools/pdp_1394L/pdp_1394L.c     |  546 --
 externals/pdvjtools/pdp_freeframe/CHANGES.LOG |    6 -
 externals/pdvjtools/pdp_freeframe/FreeFrame.h |  228 -
 externals/pdvjtools/pdp_freeframe/INSTALL     |   21 -
 externals/pdvjtools/pdp_freeframe/Makefile    |   16 -
 .../pdvjtools/pdp_freeframe/Makefile.config   |   25 -
 .../pdp_freeframe/pdp_freeframe-help.pd       |  206 -
 .../pdvjtools/pdp_freeframe/pdp_freeframe.c   |  485 --
 externals/pdvjtools/pdp_frei0r/CHANGES.LOG    |    2 -
 externals/pdvjtools/pdp_frei0r/INSTALL        |   20 -
 externals/pdvjtools/pdp_frei0r/Makefile       |   14 -
 .../pdvjtools/pdp_frei0r/Makefile.config      |   22 -
 externals/pdvjtools/pdp_frei0r/frei0r.h       |  567 --
 .../pdvjtools/pdp_frei0r/pdp_frei0r-help.pd   |  330 --
 externals/pdvjtools/pdp_frei0r/pdp_frei0r.c   |  660 ---
 .../pdvjtools/pix_preview/.pix_2pnm.cpp.swp   |  Bin 81920 -> 0 bytes
 .../pdvjtools/pix_preview/.pix_2pnm.h.swp     |  Bin 12288 -> 0 bytes
 .../pdvjtools/pix_preview/.tm_project.cache   |    0
 externals/pdvjtools/pix_preview/BUGS          |    3 -
 externals/pdvjtools/pix_preview/Makefile      |   37 -
 externals/pdvjtools/pix_preview/Makefile.in   |   37 -
 externals/pdvjtools/pix_preview/configure     | 4735 -----------------
 externals/pdvjtools/pix_preview/configure.ac  |   83 -
 externals/pdvjtools/pix_preview/install       |   18 -
 externals/pdvjtools/pix_preview/install-sh    |  251 -
 .../pdvjtools/pix_preview/pix_preview-help.pd |   81 -
 .../pdvjtools/pix_preview/pix_preview.cc      |  478 --
 externals/pdvjtools/pix_preview/pix_preview.h |  142 -
 .../pdvjtools/pix_preview/pix_preview.tk2c    |   34 -
 .../pdvjtools/videogrid/INSTALL_videogrid     |   48 -
 externals/pdvjtools/videogrid/LICENSE         |  674 ---
 externals/pdvjtools/videogrid/Makefile        |   35 -
 .../pdvjtools/videogrid/videogrid-help.pd     |   35 -
 externals/pdvjtools/videogrid/videogrid.cc    | 1830 -------
 externals/pdvjtools/videogrid/videogrid.cc.bk | 1804 -------
 externals/pdvjtools/videogrid/videogrid.libs  |    1 -
 externals/reakin/sdiflists/GnuGPL.txt         |  340 --
 externals/reakin/sdiflists/README             |   61 -
 externals/reakin/sdiflists/loris.STYP         |  107 -
 externals/reakin/sdiflists/makefile           |   52 -
 externals/reakin/sdiflists/sdiflists-help.pd  |   96 -
 externals/reakin/sdiflists/sdiflists.c        |  748 ---
 externals/reakin/sdiflists/sdiftostring.h     |   13 -
 .../reakin/sdiflists/test/meowLoris.sdif      |  Bin 402120 -> 0 bytes
 externals/reakin/sdiflists/test/orgue.sdif    |  Bin 1016 -> 0 bytes
 .../reakin/sdiflists/test/pianoSpear.sdif     |  Bin 136928 -> 0 bytes
 .../reakin/sdiflists/test/richiepooSMS.sdif   |  Bin 253136 -> 0 bytes
 externals/soundfile/Makefile                  |  171 -
 externals/soundfile/sfduration-help.pd        |   10 -
 externals/soundfile/sfduration.c              |   98 -
 externals/soundfile/sfsamples-help.pd         |    6 -
 externals/soundfile/sfsamples.c               |   81 -
 externals/srt/characterfilter.pd              |   64 -
 externals/srt/srtfile-help.pd                 |   67 -
 externals/srt/srtfile.pd                      |  362 --
 externals/srt/utf82codenumber.pd              |  133 -
 externals/tclpd/AUTHORS                       |    7 -
 externals/tclpd/COPYING                       |  280 -
 externals/tclpd/ChangeLog                     |   17 -
 externals/tclpd/INSTALL                       |    1 -
 externals/tclpd/Makefile                      |   61 -
 externals/tclpd/README                        |  112 -
 externals/tclpd/TODO                          |    4 -
 externals/tclpd/bitmap-help.pd                |   77 -
 externals/tclpd/bitmap-madness.pd             |  134 -
 externals/tclpd/bitmap.tcl                    |  346 --
 externals/tclpd/colorpicker.tcl               |  281 -
 externals/tclpd/dynreceive-help.pd            |   22 -
 externals/tclpd/dynreceive.tcl                |   53 -
 externals/tclpd/dynroute-help.pd              |   26 -
 externals/tclpd/dynroute.tcl                  |   57 -
 externals/tclpd/list_change-help.pd           |   21 -
 externals/tclpd/list_change.tcl               |   31 -
 externals/tclpd/pdlib.tcl                     |  257 -
 externals/tclpd/pkgIndex.tcl                  |    1 -
 externals/tclpd/properties.tcl                |  423 --
 externals/tclpd/slider2-help.pd               |   51 -
 externals/tclpd/slider2.tcl                   |  273 -
 externals/tclpd/tcl.i                         |  106 -
 externals/tclpd/tcl_class.cxx                 |  314 --
 externals/tclpd/tcl_extras.h                  |   94 -
 externals/tclpd/tcl_loader.cxx                |   64 -
 externals/tclpd/tcl_proxyinlet.cxx            |   73 -
 externals/tclpd/tcl_setup.cxx                 |   82 -
 externals/tclpd/tcl_typemap.cxx               |   68 -
 externals/tclpd/tcl_widgetbehavior.cxx        |  302 --
 externals/tkwidgets/Makefile                  |  332 --
 externals/tkwidgets/checkbutton-help.pd       |   44 -
 externals/tkwidgets/checkbutton.c             |  494 --
 externals/tkwidgets/frosch.gif                |  Bin 10278 -> 0 bytes
 externals/tkwidgets/photo-help.pd             |   27 -
 externals/tkwidgets/photo.c                   |  236 -
 externals/tkwidgets/text-help.pd              |  251 -
 externals/tkwidgets/text-test.pd              |   27 -
 externals/tkwidgets/text.c                    |  783 ---
 externals/tkwidgets/tkwidgets-meta.pd         |    6 -
 externals/tkwidgets/tkwidgets.c               |  287 -
 externals/tkwidgets/tkwidgets.h               |  109 -
 externals/tkwidgets/volga.gif                 |  Bin 14645 -> 0 bytes
 490 files changed, 28 insertions(+), 79171 deletions(-)
 delete mode 100644 externals/SVNEXTERNALS.txt
 delete mode 100644 externals/TODO
 delete mode 100644 externals/aalex/LICENSE.txt
 delete mode 100644 externals/aalex/README.txt
 delete mode 100755 externals/aalex/build.sh
 delete mode 100644 externals/aalex/makefile
 delete mode 100644 externals/aalex/markov-machine-help.pd
 delete mode 100644 externals/aalex/markov-machine.pd
 delete mode 100644 externals/aalex/pcre-help.pd
 delete mode 100644 externals/aalex/pcre.c
 delete mode 100644 externals/aalex/x11key-help.pd
 delete mode 100644 externals/aalex/x11key.c
 delete mode 100644 externals/aalex/x11mouse-help.pd
 delete mode 100644 externals/aalex/x11mouse.c
 delete mode 100644 externals/aalex/xmms-help.pd
 delete mode 100644 externals/aalex/xmms.c
 delete mode 100755 externals/algocomp/.cdtproject
 delete mode 100644 externals/algocomp/.cproject
 delete mode 100755 externals/algocomp/.project
 delete mode 100755 externals/algocomp/Makefile
 delete mode 100755 externals/algocomp/Makefile.advanced
 delete mode 100755 externals/algocomp/algocomp-help-patches/delnote.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/dnote.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-algocomp.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-chaosgame.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-eca.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-genetic.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-henon.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-ifs.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-ifsmusic.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-logistic.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-lorenz.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-map.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-oneoverf.pd
 delete mode 100755 externals/algocomp/algocomp-help-patches/help-selfsimilar.pd
 delete mode 100755 externals/algocomp/algocomp.c
 delete mode 100755 externals/algocomp/chaotic.c
 delete mode 100755 externals/algocomp/distribute.c
 delete mode 100755 externals/algocomp/elementaryca.c
 delete mode 100755 externals/algocomp/fractal.c
 delete mode 100755 externals/algocomp/gauss_tilde.c
 delete mode 100755 externals/algocomp/genetic.c
 delete mode 100755 externals/algocomp/helpers.c
 delete mode 100755 externals/algocomp/ifs.c
 delete mode 100755 externals/algocomp/ifs.c.old
 delete mode 100755 externals/algocomp/ifsmusic.c
 delete mode 100755 externals/algocomp/logistictilde.c
 delete mode 100755 externals/algocomp/m_pd.h
 delete mode 100755 externals/algocomp/neural.c
 delete mode 100755 externals/algocomp/selfsimilar.c
 delete mode 100755 externals/algocomp/stochastic.c
 delete mode 100755 externals/algocomp/utils.c
 delete mode 100644 externals/ann/GnuGPL.txt
 delete mode 100644 externals/ann/README.txt
 delete mode 100644 externals/ann/SConscript
 delete mode 100644 externals/ann/examples/ann_mlp-FAQs.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example1/train-and.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example1/train-or.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example1/train-xor.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example1/xor.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example2/README.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example2/cellulaSuono.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example2/complex.net
 delete mode 100644 externals/ann/examples/ann_mlp_example2/complex.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example2/example2.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example2/stereo.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example3/example3.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example3/tdnn.net
 delete mode 100644 externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example4/gen_trainfile.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example4/multidim_net.pd
 delete mode 100644 externals/ann/examples/ann_mlp_example4/test.txt
 delete mode 100644 externals/ann/examples/ann_mlp_example4/trainfile.dat
 delete mode 100644 externals/ann/examples/ann_mlp_example4/trainfile2.dat
 delete mode 100644 externals/ann/examples/ann_som/ann_som.pd
 delete mode 100644 externals/ann/examples/ann_som/test.som
 delete mode 100644 externals/ann/examples/ann_td/example.pd
 delete mode 100644 externals/ann/examples/ann_td/tdnn.net
 delete mode 100644 externals/ann/examples/tutorial-ann_mlp.pd
 delete mode 100644 externals/ann/helps/ann_mlp-help.pd
 delete mode 100644 externals/ann/helps/ann_mlp-manual.txt
 delete mode 100644 externals/ann/helps/ann_mlp-write-trainfile.pd
 delete mode 100644 externals/ann/helps/ann_td-help.pd
 delete mode 100644 externals/ann/src/ann.c
 delete mode 100644 externals/ann/src/ann.h
 delete mode 100644 externals/ann/src/ann_mlp.c
 delete mode 100644 externals/ann/src/ann_som.c
 delete mode 100644 externals/ann/src/ann_td.c
 delete mode 100644 externals/ann/src/makefile.darwin
 delete mode 100644 externals/ann/src/makefile.irix
 delete mode 100644 externals/ann/src/makefile.linux
 delete mode 100644 externals/ann/src/makefile.msvc
 delete mode 100644 externals/august/readanysf~/Makefile
 delete mode 100644 externals/august/readanysf~/README
 delete mode 100644 externals/august/readanysf~/READMEmacpkg.txt
 delete mode 100644 externals/august/readanysf~/anysndfiler.pd
 delete mode 100755 externals/august/readanysf~/embed-MacOSX-dependencies.sh
 delete mode 100644 externals/august/readanysf~/jamesdunn_buzz_stresstest.pd
 delete mode 100644 externals/august/readanysf~/readanysf~-help.pd
 delete mode 100644 externals/august/readanysf~/readanysf~-meta.pd
 delete mode 100644 externals/august/readanysf~/screengrab0.40.png
 delete mode 100644 externals/august/readanysf~/src/FifoAudioFrames.cpp
 delete mode 100644 externals/august/readanysf~/src/FifoAudioFrames.h
 delete mode 100644 externals/august/readanysf~/src/FifoVideoFrames.cpp
 delete mode 100644 externals/august/readanysf~/src/FifoVideoFrames.h
 delete mode 100644 externals/august/readanysf~/src/ReadMedia.cpp
 delete mode 100644 externals/august/readanysf~/src/ReadMedia.h
 delete mode 100644 externals/august/readanysf~/src/readanysf~.cpp
 delete mode 100644 externals/clr/Counter/AssemblyInfo.cs
 delete mode 100644 externals/clr/Counter/Counter.cs
 delete mode 100644 externals/clr/Counter/Counter.csproj
 delete mode 100644 externals/clr/Counter/README.txt
 delete mode 100644 externals/clr/Counter/counter-help.pd
 delete mode 100644 externals/clr/PureData/AssemblyInfo.cs
 delete mode 100644 externals/clr/PureData/Atom.cs
 delete mode 100644 externals/clr/PureData/DynamicMethod.cs
 delete mode 100644 externals/clr/PureData/PureData.cs
 delete mode 100644 externals/clr/PureData/PureData.csproj
 delete mode 100644 externals/clr/PureData/README.txt
 delete mode 100644 externals/clr/clr.cpp
 delete mode 100644 externals/clr/makefile
 delete mode 100644 externals/clr/makefile.darwin
 delete mode 100644 externals/clr/test/AssemblyInfo.cs
 delete mode 100644 externals/clr/test/test-help.pd
 delete mode 100644 externals/clr/test/test.cs
 delete mode 100644 externals/clr/test/test.csproj
 delete mode 100644 externals/ffext/atox/Makefile
 delete mode 100644 externals/ffext/atox/atox.c
 delete mode 100644 externals/ffext/composer/AUTHORS
 delete mode 100644 externals/ffext/composer/COPYING
 delete mode 100644 externals/ffext/composer/Common.hpp
 delete mode 100644 externals/ffext/composer/Editor.cpp
 delete mode 100644 externals/ffext/composer/Editor.hpp
 delete mode 100644 externals/ffext/composer/HasMeta.cpp
 delete mode 100644 externals/ffext/composer/HasMeta.hpp
 delete mode 100644 externals/ffext/composer/Makefile
 delete mode 100644 externals/ffext/composer/Pattern.cpp
 delete mode 100644 externals/ffext/composer/Pattern.hpp
 delete mode 100644 externals/ffext/composer/PdClasses.cpp
 delete mode 100644 externals/ffext/composer/PdClasses.hpp
 delete mode 100644 externals/ffext/composer/Song.cpp
 delete mode 100644 externals/ffext/composer/Song.hpp
 delete mode 100644 externals/ffext/composer/Track.cpp
 delete mode 100644 externals/ffext/composer/Track.hpp
 delete mode 100644 externals/ffext/composer/editor.tk
 delete mode 100644 externals/ffext/notemono/COPYING
 delete mode 100644 externals/ffext/notemono/README
 delete mode 100644 externals/ffext/notemono/makefile
 delete mode 100644 externals/ffext/notemono/notemono-help.pd
 delete mode 100644 externals/ffext/notemono/notemono.c
 delete mode 100644 externals/ffext/tms5220~/Makefile
 delete mode 100644 externals/ffext/tms5220~/README.txt
 delete mode 100644 externals/ffext/tms5220~/tms5220/driver.h
 delete mode 100644 externals/ffext/tms5220~/tms5220/tms5220.c
 delete mode 100644 externals/ffext/tms5220~/tms5220/tms5220.h
 delete mode 100644 externals/ffext/tms5220~/tms5220/tms5220.txt
 delete mode 100644 externals/ffext/tms5220~/tms5220/tms5220r.c
 delete mode 100644 externals/ffext/tms5220~/tms5220~-help.pd
 delete mode 100644 externals/ffext/tms5220~/tms5220~-meta.pd
 delete mode 100644 externals/ffext/tms5220~/tms5220~.c
 delete mode 100644 externals/ffext/tracker/CHANGELOG
 delete mode 100644 externals/ffext/tracker/COPYING
 delete mode 100644 externals/ffext/tracker/README
 delete mode 100644 externals/ffext/tracker/TODO
 delete mode 100644 externals/ffext/tracker/makefile
 delete mode 100755 externals/ffext/tracker/tk2c.bash
 delete mode 100644 externals/ffext/tracker/tracker-help.pd
 delete mode 100644 externals/ffext/tracker/tracker.c
 delete mode 100644 externals/ffext/tracker/tracker.h
 delete mode 100644 externals/ffext/tracker/tracker.tk
 delete mode 100644 externals/framesync/LICENSE.txt
 delete mode 100644 externals/framesync/Makefile
 delete mode 100644 externals/framesync/README.txt
 delete mode 100644 externals/framesync/TODO.txt
 delete mode 100644 externals/framesync/clockrunning-help.pd
 delete mode 100644 externals/framesync/clockrunning.pd
 delete mode 100644 externals/framesync/examples/sdf.wav
 delete mode 100644 externals/framesync/fadeinout-help.pd
 delete mode 100644 externals/framesync/fadeinout.pd
 delete mode 100644 externals/framesync/fadeinout~-help.pd
 delete mode 100644 externals/framesync/fadeinout~.pd
 delete mode 100644 externals/framesync/filelooper~-help.pd
 delete mode 100644 externals/framesync/filelooper~.pd
 delete mode 100644 externals/framesync/fps-help.pd
 delete mode 100644 externals/framesync/fps.pd
 delete mode 100644 externals/framesync/fps_ms-help.pd
 delete mode 100644 externals/framesync/fps_ms.pd
 delete mode 100644 externals/framesync/frameclock-help.pd
 delete mode 100644 externals/framesync/frameclock.pd
 delete mode 100644 externals/framesync/framesync-meta.pd
 delete mode 100644 externals/framesync/fsline-help.pd
 delete mode 100644 externals/framesync/fsline.pd
 delete mode 100644 externals/framesync/fsreadsf~-help.pd
 delete mode 100644 externals/framesync/fsreadsf~.pd
 delete mode 100644 externals/framesync/fsrecordctrl.pd
 delete mode 100644 externals/framesync/fstabplay~-help.pd
 delete mode 100644 externals/framesync/fstabplay~.pd
 delete mode 100644 externals/framesync/rangemod.pd
 delete mode 100644 externals/framesync/tablooper~-help.pd
 delete mode 100644 externals/framesync/tablooper~.pd
 delete mode 100644 externals/framesync/tabpitcher~-help.pd
 delete mode 100644 externals/framesync/tabpitcher~.pd
 delete mode 100644 externals/framesync/tabstretcher~-help.pd
 delete mode 100644 externals/framesync/tabstretcher~.pd
 delete mode 100644 externals/frankenstein/GArhythm.c
 delete mode 100755 externals/frankenstein/GArhythm.vcproj
 delete mode 100755 externals/frankenstein/Makefile
 delete mode 100644 externals/frankenstein/README.txt
 delete mode 100644 externals/frankenstein/SHOWME.pd
 delete mode 100755 externals/frankenstein/bay.orc
 delete mode 100644 externals/frankenstein/chord_melo.c
 delete mode 100644 externals/frankenstein/chord_melo_test3.pd
 delete mode 100644 externals/frankenstein/chords_memory.c
 delete mode 100755 externals/frankenstein/chords_memory.vcproj
 delete mode 100644 externals/frankenstein/common.c
 delete mode 100644 externals/frankenstein/common.h
 delete mode 100644 externals/frankenstein/doc/LINKS.txt
 delete mode 100644 externals/frankenstein/doc/README.txt
 delete mode 100755 externals/frankenstein/doc/chords_graph.doc
 delete mode 100755 externals/frankenstein/doc/chords_graph.sxw
 delete mode 100644 externals/frankenstein/doc/genomes-notes.txt
 delete mode 100644 externals/frankenstein/doc/maxlibnotes.txt
 delete mode 100755 externals/frankenstein/doc/model.doc
 delete mode 100755 externals/frankenstein/doc/model.sxw
 delete mode 100755 externals/frankenstein/frankenstein.sln
 delete mode 100644 externals/frankenstein/harmonizer.c
 delete mode 100755 externals/frankenstein/harmonizer.vcproj
 delete mode 100755 externals/frankenstein/makefile.darwin
 delete mode 100644 externals/frankenstein/makefile.linux
 delete mode 100644 externals/frankenstein/manager.pd
 delete mode 100644 externals/frankenstein/patches/GA2005.pd
 delete mode 100644 externals/frankenstein/patches/SHOWME.pd
 delete mode 100755 externals/frankenstein/patches/bay.orc
 delete mode 100755 externals/frankenstein/patches/feb05/bay.orc
 delete mode 100644 externals/frankenstein/patches/feb05/bay.pd
 delete mode 100755 externals/frankenstein/patches/feb05/bay.sco
 delete mode 100644 externals/frankenstein/patches/feb05/bel0205a.graph
 delete mode 100644 externals/frankenstein/patches/feb05/belfast0205.graph
 delete mode 100644 externals/frankenstein/patches/feb05/davidcsoundtest2.pd
 delete mode 100755 externals/frankenstein/patches/feb05/test2.graph
 delete mode 100644 externals/frankenstein/patches/organist.pd
 delete mode 100644 externals/frankenstein/patches/percussionist.pd
 delete mode 100644 externals/frankenstein/patches/sampleplayer.pd
 delete mode 100644 externals/frankenstein/patches/test-GArhythm.pd
 delete mode 100644 externals/frankenstein/patches/test-harmonizer2.pd
 delete mode 100755 externals/frankenstein/patches/test.graph
 delete mode 100644 externals/frankenstein/rhythms_memory.c
 delete mode 100755 externals/frankenstein/rhythms_memory.vcproj
 delete mode 100644 externals/frankenstein/ritmo1.c
 delete mode 100644 externals/frankenstein/sglib.h
 delete mode 100644 externals/frankenstein/test-chords_graph.pd
 delete mode 100644 externals/frankenstein/test-harmonizer.pd
 delete mode 100644 externals/frankenstein/test-harmonizer2.pd
 delete mode 100644 externals/frankenstein/test-rhythm.pd
 delete mode 100644 externals/frankenstein/test-rhythms_memory.pd
 delete mode 100644 externals/frankenstein/test.c
 delete mode 100644 externals/frankenstein/themes_memory.c
 delete mode 100755 externals/frankenstein/themes_memory.vcproj
 delete mode 100644 externals/frankenstein/voicing_analyzer.c
 delete mode 100755 externals/frankenstein/voicing_analyzer.vcproj
 delete mode 100644 externals/input_noticer/INSTALL.TXT
 delete mode 100644 externals/input_noticer/Makefile
 delete mode 100644 externals/input_noticer/README.TXT
 delete mode 100644 externals/input_noticer/input_noticer-help.pd
 delete mode 100644 externals/input_noticer/input_noticer.c
 delete mode 100644 externals/input_noticer/input_noticer.h
 delete mode 100644 externals/input_noticer/noticer_test.pd
 delete mode 100644 externals/input_noticer/parseeventnodenum.c
 delete mode 100644 externals/input_noticer/test_noticer.c
 delete mode 100644 externals/input_noticer/test_noticer_compile.sh
 delete mode 100644 externals/jackx/GnuGPL.txt
 delete mode 100644 externals/jackx/README
 delete mode 100644 externals/jackx/jack-connect-help.pd
 delete mode 100644 externals/jackx/jack-ports-help.pd
 delete mode 100644 externals/jackx/jack.pd
 delete mode 100644 externals/jackx/jackx.c
 delete mode 100644 externals/jackx/makefile
 delete mode 100644 externals/k_cext/Makefile
 delete mode 100644 externals/k_cext/README
 delete mode 100644 externals/k_cext/help-do.pd
 delete mode 100644 externals/k_cext/help-fibonacci.pd
 delete mode 100644 externals/k_cext/help-gcd.pd
 delete mode 100644 externals/k_cext/help-k_cext.pd
 delete mode 100644 externals/k_cext/help-k_cext2.pd
 delete mode 100644 externals/k_cext/help-k_cfunc.pd
 delete mode 100644 externals/k_cext/help-markov.pd
 delete mode 100644 externals/k_cext/help-rangeifelifelse.pd
 delete mode 100644 externals/k_cext/help-send.pd
 delete mode 100644 externals/k_cext/help-send2.pd
 delete mode 100644 externals/k_cext/help-sort.pd
 delete mode 100644 externals/k_cext/help-string.pd
 delete mode 100644 externals/k_cext/help-value.pd
 delete mode 100644 externals/k_cext/k_cext.c
 delete mode 100644 externals/k_cext/k_cext.h
 delete mode 100644 externals/k_cext/k_cext_funchandler.c
 delete mode 100644 externals/k_cext/k_cext_generatecode.c
 delete mode 100644 externals/k_cext/k_cext_macosx.c
 delete mode 100644 externals/k_cext/k_cext_unix.c
 delete mode 100644 externals/k_cext/k_cext_win.c
 delete mode 100644 externals/k_cext/test.pd
 delete mode 100644 externals/k_guile/Makefile
 delete mode 100644 externals/k_guile/README
 delete mode 100644 externals/k_guile/add.scm
 delete mode 100644 externals/k_guile/any.scm
 delete mode 100755 externals/k_guile/gen_c_scheme.py
 delete mode 100644 externals/k_guile/global.scm
 delete mode 100644 externals/k_guile/help-k_guile.pd
 delete mode 100644 externals/k_guile/inout.scm
 delete mode 100644 externals/k_guile/k_guile.c
 delete mode 100644 externals/k_guile/local.scm
 delete mode 100644 externals/k_guile/mozilla.scm
 delete mode 100644 externals/k_guile/send_receive.scm
 delete mode 100644 externals/k_jack~/README
 delete mode 100644 externals/k_jack~/k_jack~-help.pd
 delete mode 100644 externals/k_jack~/k_jack~.c
 delete mode 100644 externals/k_jack~/makefile
 delete mode 100644 externals/k_vst~/Makefile
 delete mode 100644 externals/k_vst~/README
 delete mode 100644 externals/k_vst~/abyss.pd
 delete mode 100644 externals/k_vst~/config.h
 delete mode 100644 externals/k_vst~/help-k_vst~.pd
 delete mode 100644 externals/k_vst~/help2-k_vst~.pd
 delete mode 100644 externals/k_vst~/k_vst~.c
 delete mode 100644 externals/k_vst~/plugin~.h
 delete mode 100644 externals/k_vst~/plugin~_ladspa.h
 delete mode 100644 externals/k_vst~/plugin~_vst.c
 delete mode 100644 externals/k_vst~/plugin~_vst.h
 delete mode 100644 externals/k_vst~/version.h
 delete mode 100644 externals/k_vst~/vstutils.h
 delete mode 100644 externals/many/LICENSE.txt
 delete mode 100644 externals/many/Makefile
 delete mode 100644 externals/many/README.txt
 delete mode 100644 externals/many/TODO.txt
 delete mode 100644 externals/many/bundle-help.pd
 delete mode 100644 externals/many/bundle.pd
 delete mode 100644 externals/many/debian/changelog
 delete mode 100644 externals/many/debian/compat
 delete mode 100644 externals/many/debian/control
 delete mode 100644 externals/many/debian/copyright
 delete mode 100644 externals/many/debian/gbp.conf
 delete mode 100644 externals/many/debian/links
 delete mode 100755 externals/many/debian/rules
 delete mode 100644 externals/many/debian/source/format
 delete mode 100644 externals/many/debian/watch
 delete mode 100644 externals/many/examples/aw.wav
 delete mode 100644 externals/many/examples/petal-test.pd
 delete mode 100644 externals/many/examples/petal.pd
 delete mode 100644 externals/many/examples/run-200voicetest.pd
 delete mode 100644 externals/many/examples/tick.wav
 delete mode 100644 externals/many/examples/ticker-voice~.pd
 delete mode 100644 externals/many/examples/ticker.pd
 delete mode 100644 externals/many/examples/tock.wav
 delete mode 100644 externals/many/examples/voicetest~.pd
 delete mode 100644 externals/many/instances-help.pd
 delete mode 100644 externals/many/instances-template-help.pd
 delete mode 100644 externals/many/instances-template.pd
 delete mode 100644 externals/many/instances-template~-help.pd
 delete mode 100644 externals/many/instances-template~.pd
 delete mode 100644 externals/many/instances.pd
 delete mode 100644 externals/many/instances~-help.pd
 delete mode 100644 externals/many/instances~.pd
 delete mode 100644 externals/many/itest.pd
 delete mode 100644 externals/many/many-meta.pd
 delete mode 100644 externals/many/polypoly-voice~-help.pd
 delete mode 100644 externals/many/polypoly-voice~.pd
 delete mode 100644 externals/many/polypoly-wrap~-help.pd
 delete mode 100644 externals/many/polypoly-wrap~.pd
 delete mode 100644 externals/many/polypoly~-help.pd
 delete mode 100644 externals/many/polypoly~.pd
 delete mode 100644 externals/many/rawpoly-test.pd
 delete mode 100644 externals/many/rawpoly.pd
 delete mode 100644 externals/many/voices-template~-help.pd
 delete mode 100644 externals/many/voices-template~.pd
 delete mode 100644 externals/many/voices-wrap~-help.pd
 delete mode 100644 externals/many/voices-wrap~.pd
 delete mode 100644 externals/many/voices~-help.pd
 delete mode 100644 externals/many/voices~.pd
 delete mode 100644 externals/pdvjtools/Makefile
 delete mode 100644 externals/pdvjtools/README.txt
 delete mode 100755 externals/pdvjtools/colorgrid/CHANGES.LOG
 delete mode 100755 externals/pdvjtools/colorgrid/INSTALL
 delete mode 100755 externals/pdvjtools/colorgrid/Makefile
 delete mode 100755 externals/pdvjtools/colorgrid/README
 delete mode 100644 externals/pdvjtools/colorgrid/colorgrid-help.pd
 delete mode 100644 externals/pdvjtools/colorgrid/colorgrid.c
 delete mode 100644 externals/pdvjtools/pdp_1394L/Makefile
 delete mode 100644 externals/pdvjtools/pdp_1394L/Makefile.config
 delete mode 100755 externals/pdvjtools/pdp_1394L/dv1394.h
 delete mode 100644 externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd
 delete mode 100644 externals/pdvjtools/pdp_1394L/pdp_1394L.c
 delete mode 100755 externals/pdvjtools/pdp_freeframe/CHANGES.LOG
 delete mode 100644 externals/pdvjtools/pdp_freeframe/FreeFrame.h
 delete mode 100644 externals/pdvjtools/pdp_freeframe/INSTALL
 delete mode 100644 externals/pdvjtools/pdp_freeframe/Makefile
 delete mode 100644 externals/pdvjtools/pdp_freeframe/Makefile.config
 delete mode 100644 externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd
 delete mode 100644 externals/pdvjtools/pdp_freeframe/pdp_freeframe.c
 delete mode 100644 externals/pdvjtools/pdp_frei0r/CHANGES.LOG
 delete mode 100644 externals/pdvjtools/pdp_frei0r/INSTALL
 delete mode 100644 externals/pdvjtools/pdp_frei0r/Makefile
 delete mode 100644 externals/pdvjtools/pdp_frei0r/Makefile.config
 delete mode 100644 externals/pdvjtools/pdp_frei0r/frei0r.h
 delete mode 100644 externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd
 delete mode 100644 externals/pdvjtools/pdp_frei0r/pdp_frei0r.c
 delete mode 100644 externals/pdvjtools/pix_preview/.pix_2pnm.cpp.swp
 delete mode 100644 externals/pdvjtools/pix_preview/.pix_2pnm.h.swp
 delete mode 100644 externals/pdvjtools/pix_preview/.tm_project.cache
 delete mode 100644 externals/pdvjtools/pix_preview/BUGS
 delete mode 100644 externals/pdvjtools/pix_preview/Makefile
 delete mode 100755 externals/pdvjtools/pix_preview/Makefile.in
 delete mode 100755 externals/pdvjtools/pix_preview/configure
 delete mode 100755 externals/pdvjtools/pix_preview/configure.ac
 delete mode 100755 externals/pdvjtools/pix_preview/install
 delete mode 100755 externals/pdvjtools/pix_preview/install-sh
 delete mode 100644 externals/pdvjtools/pix_preview/pix_preview-help.pd
 delete mode 100644 externals/pdvjtools/pix_preview/pix_preview.cc
 delete mode 100644 externals/pdvjtools/pix_preview/pix_preview.h
 delete mode 100755 externals/pdvjtools/pix_preview/pix_preview.tk2c
 delete mode 100755 externals/pdvjtools/videogrid/INSTALL_videogrid
 delete mode 100644 externals/pdvjtools/videogrid/LICENSE
 delete mode 100755 externals/pdvjtools/videogrid/Makefile
 delete mode 100644 externals/pdvjtools/videogrid/videogrid-help.pd
 delete mode 100644 externals/pdvjtools/videogrid/videogrid.cc
 delete mode 100644 externals/pdvjtools/videogrid/videogrid.cc.bk
 delete mode 100644 externals/pdvjtools/videogrid/videogrid.libs
 delete mode 100644 externals/reakin/sdiflists/GnuGPL.txt
 delete mode 100644 externals/reakin/sdiflists/README
 delete mode 100644 externals/reakin/sdiflists/loris.STYP
 delete mode 100644 externals/reakin/sdiflists/makefile
 delete mode 100644 externals/reakin/sdiflists/sdiflists-help.pd
 delete mode 100644 externals/reakin/sdiflists/sdiflists.c
 delete mode 100644 externals/reakin/sdiflists/sdiftostring.h
 delete mode 100644 externals/reakin/sdiflists/test/meowLoris.sdif
 delete mode 100644 externals/reakin/sdiflists/test/orgue.sdif
 delete mode 100644 externals/reakin/sdiflists/test/pianoSpear.sdif
 delete mode 100644 externals/reakin/sdiflists/test/richiepooSMS.sdif
 delete mode 100644 externals/soundfile/Makefile
 delete mode 100644 externals/soundfile/sfduration-help.pd
 delete mode 100644 externals/soundfile/sfduration.c
 delete mode 100644 externals/soundfile/sfsamples-help.pd
 delete mode 100644 externals/soundfile/sfsamples.c
 delete mode 100644 externals/srt/characterfilter.pd
 delete mode 100644 externals/srt/srtfile-help.pd
 delete mode 100644 externals/srt/srtfile.pd
 delete mode 100644 externals/srt/utf82codenumber.pd
 delete mode 100644 externals/tclpd/AUTHORS
 delete mode 100644 externals/tclpd/COPYING
 delete mode 100644 externals/tclpd/ChangeLog
 delete mode 100644 externals/tclpd/INSTALL
 delete mode 100644 externals/tclpd/Makefile
 delete mode 100644 externals/tclpd/README
 delete mode 100644 externals/tclpd/TODO
 delete mode 100644 externals/tclpd/bitmap-help.pd
 delete mode 100644 externals/tclpd/bitmap-madness.pd
 delete mode 100644 externals/tclpd/bitmap.tcl
 delete mode 100644 externals/tclpd/colorpicker.tcl
 delete mode 100644 externals/tclpd/dynreceive-help.pd
 delete mode 100644 externals/tclpd/dynreceive.tcl
 delete mode 100644 externals/tclpd/dynroute-help.pd
 delete mode 100644 externals/tclpd/dynroute.tcl
 delete mode 100644 externals/tclpd/list_change-help.pd
 delete mode 100644 externals/tclpd/list_change.tcl
 delete mode 100644 externals/tclpd/pdlib.tcl
 delete mode 100644 externals/tclpd/pkgIndex.tcl
 delete mode 100644 externals/tclpd/properties.tcl
 delete mode 100644 externals/tclpd/slider2-help.pd
 delete mode 100644 externals/tclpd/slider2.tcl
 delete mode 100644 externals/tclpd/tcl.i
 delete mode 100644 externals/tclpd/tcl_class.cxx
 delete mode 100644 externals/tclpd/tcl_extras.h
 delete mode 100644 externals/tclpd/tcl_loader.cxx
 delete mode 100644 externals/tclpd/tcl_proxyinlet.cxx
 delete mode 100644 externals/tclpd/tcl_setup.cxx
 delete mode 100644 externals/tclpd/tcl_typemap.cxx
 delete mode 100644 externals/tclpd/tcl_widgetbehavior.cxx
 delete mode 100644 externals/tkwidgets/Makefile
 delete mode 100644 externals/tkwidgets/checkbutton-help.pd
 delete mode 100644 externals/tkwidgets/checkbutton.c
 delete mode 100644 externals/tkwidgets/frosch.gif
 delete mode 100644 externals/tkwidgets/photo-help.pd
 delete mode 100644 externals/tkwidgets/photo.c
 delete mode 100644 externals/tkwidgets/text-help.pd
 delete mode 100644 externals/tkwidgets/text-test.pd
 delete mode 100644 externals/tkwidgets/text.c
 delete mode 100644 externals/tkwidgets/tkwidgets-meta.pd
 delete mode 100644 externals/tkwidgets/tkwidgets.c
 delete mode 100644 externals/tkwidgets/tkwidgets.h
 delete mode 100644 externals/tkwidgets/volga.gif

diff --git a/externals/Makefile b/externals/Makefile
index 7837fff34..99e2c7e56 100644
--- a/externals/Makefile
+++ b/externals/Makefile
@@ -621,36 +621,6 @@ fluid_install:
 fluid_clean:
 	make -C $(externals_src)/fluid~ clean
 
-#------------------------------------------------------------------------------#
-# FRANKENSTEIN
-FRANKENSTEIN_NAME=frankenstein
-# exclude test.c since it is not used
-FRANKENSTEIN_OBJECTS := $(wildcard $(externals_src)/frankenstein/*.c)
-frankenstein: $(FRANKENSTEIN_OBJECTS:.c=.$(EXTENSION))
-
-frankenstein_install: frankenstein
-	install -d $(DESTDIR)$(objectsdir)/$(FRANKENSTEIN_NAME)
-	$(scripts_src)/generate-libdir-metafile.sh $(DESTDIR)$(objectsdir) $(FRANKENSTEIN_NAME) \
-		--author "" \
-		--description "" \
-		--license "" \
-		--version ""
-	install -p $(FRANKENSTEIN_OBJECTS:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(FRANKENSTEIN_NAME)
-	install -d $(DESTDIR)$(manualsdir)/$(FRANKENSTEIN_NAME)
-	install -p $(externals_src)/frankenstein/doc/*.* \
-		$(DESTDIR)$(manualsdir)/$(FRANKENSTEIN_NAME)
-	install -d $(DESTDIR)$(examplesdir)/$(FRANKENSTEIN_NAME)
-	install -p $(externals_src)/frankenstein/patches/*.* \
-		$(DESTDIR)$(examplesdir)/$(FRANKENSTEIN_NAME)
-
-frankenstein_clean:
-	-rm -f -- $(externals_src)/frankenstein/*.$(EXTENSION)
-	-rm -f -- $(externals_src)/frankenstein/*.o
-	-rm -f -- $(externals_src)/frankenstein/*.bak
-	-rm -f -- $(externals_src)/frankenstein/*.*~
-
-
-
 #------------------------------------------------------------------------------#
 # FREEVERB
 freeverb:
diff --git a/externals/SVNEXTERNALS.txt b/externals/SVNEXTERNALS.txt
deleted file mode 100644
index e6c5ca71a..000000000
--- a/externals/SVNEXTERNALS.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-# svn:external references to pd-externals hosted in other repositories
-#
-# adding external-references:
-#       - add a new line below with the format: <directory-name> <external link>
-#       - the directory must not exist yet
-#       - if possible use an external link that would allow commits (for authorized)
-#         e.g. "https://" instead of "http://"
-#
-#       - finally run:
-# 		% svn propset svn:externals -F SVNEXTERNALS.txt .
-# 		% svn commit
-#
-# deleting external-references:
-# 	- just delete the offending reference and re-run:
-# 		% svn propset svn:externals -F SVNEXTERNALS.txt .
-# 		% svn commit
-#
-# you should be able to retrieve this file by running
-# 		svn propget svn:externals .
-
-## example:
-gridflow https://gridflow.ca/svn/trunk/
diff --git a/externals/TODO b/externals/TODO
deleted file mode 100644
index c5d21d097..000000000
--- a/externals/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
-
-- add version number getters from packages/Makefile
-
-- document externals building following the smlib example
-
-- add "test lib" functionality to binary building in externals/Makefile
-
-- add in mtx_ objects with special characters using setup functions and
-  filenames with 0x escapes (mtx_/ and mtx_./ for example).  Make sure to have
-  the objects call the correct setup function since it can change the
-  functionality
-
-- add these to the build system:
-      PDContainer
-      ann
-		grh
-		iemstream
-		iemxmlrpc
diff --git a/externals/aalex/LICENSE.txt b/externals/aalex/LICENSE.txt
deleted file mode 100644
index 67282dd67..000000000
--- a/externals/aalex/LICENSE.txt
+++ /dev/null
@@ -1,340 +0,0 @@
-        GNU GENERAL PUBLIC LICENSE
-           Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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 Lesser General
-Public License instead of this License.
diff --git a/externals/aalex/README.txt b/externals/aalex/README.txt
deleted file mode 100644
index df8afc35f..000000000
--- a/externals/aalex/README.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-ABOUT aalex's
-
-These are objects for Pure Data. 
-
-[x11mouse] generates a X11 mouse event
-[x11key]   generates a X11 keyboard event
-[xmms]     controls the X Multimedia System
-[pcre]     matches a symbol against a Perl compatible regular expression. Still needs symbol as a selector for arguments.
-
-
-I also include a few of my abstractions : 
-
-
-=================================================
-INSTALL
-
-To use on Linux, add the path to this directory into your ~/.pdrc invisible file. 
-Currenly, the only one to work on Mac is [matches]. All the others are for GNU/Linux.
-
-
-=================================================
-COMPILE
-
-To compile on Debian, execute the follwing command in a terminal. 
-It could probably work on Mac too, instlaling the packages with Fink. Tell
-me if ever you need some of them for Mac, as the makefile will need to be modified. 
-
-
-sudo apt-get install xlib-dev xmms-dev
-cd aalex
-make
-
-
-=================================================
-AUTHOR
-
-Alexandre Quessy
-alex@sourcelibre.com
-
-
-=================================================
-LICENSE
-
-GNU Public License
-)c( Copyleft 2006
-Enjoy at your own risks !
-
-
-=================================================
-HISTORY
-
-2006-07-18   Fixed *MD64 compilation flag (thanks to r1). Changed [matches] for [pcre].
-2006-07      Initial release of old externals plus x11 objects.
diff --git a/externals/aalex/build.sh b/externals/aalex/build.sh
deleted file mode 100755
index 872dcc710..000000000
--- a/externals/aalex/build.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-set -o verbose
-CFGLAGS=`pkg-config --cflags x11 xcb-xlib xcb xcursor libxml-2.0 gtk+-x11-2.0 gtk+-2.0 glib-2.0 gmodule-2.0`
-LIBS=`pkg-config --libs x11 xcb-xlib xcb xcursor libxml-2.0 gtk+-x11-2.0 gtk+-2.0 glib-2.0 gmodule-2.0`
-INCLUDES="-I../src -I../../pd/src"
-
-gcc -Wall -Werror $INCLUDES $CFLAGS -W -Wshadow -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -fPIC -lm -lc  -o x11key.o -c x11key.c
-ld  -shared -o x11key.pd_linux x11key.o -lc -lm $LIBS
-strip --strip-unneeded x11key.pd_linux
-
diff --git a/externals/aalex/makefile b/externals/aalex/makefile
deleted file mode 100644
index ae62021a6..000000000
--- a/externals/aalex/makefile
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# For Debian : 
-# apt-get install xlib-dev xmms-dev
-#
-
-
-
-current: pd_linux
-	@echo make pd_linux, pd_darwin, clean ... you must be specific
-	@echo default to pd_linux
-
-
-clean: ; rm -f *.pd_linux *.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: pcre.pd_linux xmms.pd_linux x11mouse.pd_linux x11key.pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS =  -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch -fPIC
-
-LINUXINCLUDE =  -I../src -L/usr/lib/X11 -I/usr/include/X11 -L/usr/X11R6/lib -I../../pd/src
-LINUXLINKS = -lX11 -lXtst -lgtk -lgdk -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm -lxmms
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c \
-    `xmms-config --cflags`
-	ld --export-dynamic -shared -o $*.pd_linux $*.o -lpcre -lc -lm\
-    -L/usr/lib -L/usr/X11R6/lib $(LINUXLINKS)
-	strip --strip-unneeded $*.pd_linux
-	rm $*.o
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: matches.pd_darwin concat.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c -lpcre
-	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $*.o 
-	rm -f $*.o
-
diff --git a/externals/aalex/markov-machine-help.pd b/externals/aalex/markov-machine-help.pd
deleted file mode 100644
index 25329b0d1..000000000
--- a/externals/aalex/markov-machine-help.pd
+++ /dev/null
@@ -1,69 +0,0 @@
-#N canvas 1 53 528 547 10;
-#X text 132 380 current state;
-#X msg 221 149 size 4;
-#X obj 138 111 t b b b b b;
-#X msg 221 170 row 1 1 2 3 4;
-#X obj 88 331 markov-machine 4;
-#X text 60 9 States are numbered from 1 to n.;
-#X text 283 147 Already implied by argument.;
-#X msg 215 192 row 2 4 3 2 1;
-#X msg 220 215 row 3 200 300 4000 0;
-#X msg 220 238 row 4 1 1 1 1;
-#X text 337 240 Equal chances;
-#X obj 4 153 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 86 60 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X msg 18 165 next;
-#X msg 91 66 bang;
-#X obj -34 245 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X msg -30 257 set 1;
-#X text 92 43 1 Setup;
-#X text 4 133 2 Get state;
-#X text -34 225 3 Set state;
-#X msg 276 294 content;
-#X obj -40 -118 cnv 15 450 125 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 277 -17 iemmatrix;
-#X obj 370 -17 zexy;
-#X text -26 -117 )c( Copyleft 2006 Alexandre Quessy http://alexandre.quessy.net/
-;
-#X text 71 -16 Using -lib iemmatrix \, zexy;
-#X text 374 -134 ABOUT;
-#X obj 138 87 loadbang;
-#X text 210 331 A four states weighted FSM;
-#X obj 88 364 nbx 1 28 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 24
--258699 -1 -1 0 256;
-#X text -26 -86 [markov-machine] is a weighted finite states machine
-using an adjacency matrix for storing probabilities to obtain every
-other state next \, It can be illustrated as an oriented graph. Probabilities
-are calculated on the sum of each numbers or every row.;
-#N canvas 345 236 494 251 META 0;
-#X text 12 175 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 45 DESCRIPTION weighted finite states machine using an adjacency
-matrix for storing probabilities to obtain every other state next;
-#X text 12 135 AUTHOR Alexandre Quessy;
-#X text 12 155 WEBSITE http://alexandre.quessy.net/;
-#X text 12 95 INLET_0 bang set next row content;
-#X text 12 115 OUTLET_0 float;
-#X text 12 5 KEYWORDS control abstraction;
-#X restore 411 379 pd META;
-#X connect 1 0 4 0;
-#X connect 2 0 9 0;
-#X connect 2 1 8 0;
-#X connect 2 2 7 0;
-#X connect 2 3 3 0;
-#X connect 2 4 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 29 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 13 0 4 0;
-#X connect 14 0 2 0;
-#X connect 16 0 4 0;
-#X connect 20 0 4 0;
-#X connect 27 0 2 0;
diff --git a/externals/aalex/markov-machine.pd b/externals/aalex/markov-machine.pd
deleted file mode 100644
index 913bd95b9..000000000
--- a/externals/aalex/markov-machine.pd
+++ /dev/null
@@ -1,195 +0,0 @@
-#N canvas 637 33 900 932 10;
-#X obj 93 -33 inlet;
-#X obj 154 644 cnv 15 600 200 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 407 257 cnv 15 200 300 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 97 351 cnv 15 200 150 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 130 110 cnv 15 200 150 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 179 155 matrix;
-#X obj 225 115 prepend row;
-#X msg 139 119 zeros \$1;
-#X obj 18 23 loadbang;
-#X obj 20 50 f \$1;
-#X obj 111 396 f;
-#X text 138 398 current state;
-#X obj 12 755 outlet;
-#X obj 456 325 drip;
-#X obj 495 326 sum;
-#X obj 469 403 /;
-#X obj 159 456 random 1e+06;
-#X obj 159 480 / 1e+06;
-#X text 218 482 1/1000000;
-#X msg 574 339 set;
-#X msg 443 485 0.4 0.7 0.9 1;
-#X msg 468 430 add2 \$1;
-#X msg 409 351 bang;
-#X obj 177 704 moses;
-#X obj 223 706 moses;
-#X obj 271 706 moses;
-#X obj 317 708 moses;
-#X obj 364 708 moses;
-#X obj 410 710 moses;
-#X obj 458 710 moses;
-#X obj 504 712 moses;
-#X obj 546 713 moses;
-#X obj 589 713 moses;
-#X obj 635 715 moses;
-#X obj 677 716 moses;
-#X obj 292 661 unpack f f f f f f f f f f f f f f;
-#X obj 178 819 f;
-#X obj 159 428 t b f;
-#X msg 245 418 row \$1;
-#X text 207 822 next state;
-#X obj 16 694 f;
-#X obj 12 292 t b f;
-#X text 54 288 sets state;
-#X obj 67 311 t b b;
-#X text 109 309 gets next state;
-#X text 452 515 threshold (n/1.0) for each state according to its probability
-;
-#X text 20 -5 arg: size;
-#X obj 453 364 +;
-#X msg 530 329 0;
-#X obj 451 274 t b a a b b;
-#X obj 518 373 f;
-#X text 509 402 Each treshold is added to all the numbers before...
-;
-#X obj 161 250 mtx_print;
-#X obj 267 195 print debug;
-#X msg 178 733 1;
-#X msg 226 731 2;
-#X msg 266 734 3;
-#X msg 323 735 4;
-#X msg 365 737 5;
-#X msg 415 734 6;
-#X msg 453 738 7;
-#X msg 509 740 8;
-#X msg 551 742 9;
-#X msg 599 740 10;
-#X msg 639 743 11;
-#X msg 695 745 12;
-#X obj 145 359 loadbang;
-#X msg 144 378 1;
-#X obj 160 193 route matrix;
-#X obj 160 229 prepend matrix;
-#X text 667 624 MARKOV CHAIN;
-#X text 427 242 WEIGHTS FOR THIS ROW/STATE;
-#X text 260 332 STATE;
-#X text 219 90 ADJACENCY MATRIX;
-#X obj 423 -27 cnv 15 450 125 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 706 74 iemmatrix;
-#X obj 799 74 zexy;
-#N canvas 0 0 485 139 todo 0;
-#N canvas 0 0 450 300 1008-dynamic 0;
-#X restore 69 65 pd \$0-dynamic;
-#X text 67 43 todo: dynamic patching for unlimited number of states
-;
-#X text 67 93 todo: use [list] and not dynamic messages (faster?);
-#X restore 775 -20 pd todo;
-#X text 437 -26 )c( Copyleft 2006 Alexandre Quessy http://alexandre.quessy.net/
-;
-#X text 500 75 Using -lib iemmatrix \, zexy;
-#X text 435 18 [markov-machine] is a weighted finite states machine
-using an adjency matrix for storing probabilities to get to each other
-state \, It can be illustrated as an oriented graph.;
-#X text 837 -43 ABOUT;
-#X msg 23 126 bang;
-#X obj 93 -7 route size row next set content;
-#X obj 261 25 t b;
-#X connect 0 0 83 0;
-#X connect 5 0 68 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 8 0 9 0;
-#X connect 9 0 7 0;
-#X connect 10 0 37 0;
-#X connect 10 0 40 1;
-#X connect 13 0 47 0;
-#X connect 14 0 15 1;
-#X connect 15 0 21 0;
-#X connect 16 0 17 0;
-#X connect 17 0 23 0;
-#X connect 19 0 20 0;
-#X connect 20 0 35 0;
-#X connect 21 0 20 0;
-#X connect 22 0 20 0;
-#X connect 23 0 54 0;
-#X connect 23 1 24 0;
-#X connect 24 0 55 0;
-#X connect 24 1 25 0;
-#X connect 25 0 56 0;
-#X connect 25 1 26 0;
-#X connect 26 0 57 0;
-#X connect 26 1 27 0;
-#X connect 27 0 28 0;
-#X connect 27 0 58 0;
-#X connect 28 0 59 0;
-#X connect 28 1 29 0;
-#X connect 29 0 60 0;
-#X connect 29 1 30 0;
-#X connect 30 0 61 0;
-#X connect 30 1 31 0;
-#X connect 31 0 62 0;
-#X connect 31 1 32 0;
-#X connect 32 0 63 0;
-#X connect 32 1 33 0;
-#X connect 33 0 64 0;
-#X connect 33 1 34 0;
-#X connect 34 0 65 0;
-#X connect 35 0 23 1;
-#X connect 35 1 24 1;
-#X connect 35 2 25 1;
-#X connect 35 3 26 1;
-#X connect 35 4 27 1;
-#X connect 35 5 28 1;
-#X connect 35 7 29 1;
-#X connect 35 9 30 1;
-#X connect 35 10 31 1;
-#X connect 35 11 32 1;
-#X connect 35 12 33 1;
-#X connect 35 13 34 1;
-#X connect 36 0 10 1;
-#X connect 37 0 16 0;
-#X connect 37 1 38 0;
-#X connect 38 0 5 0;
-#X connect 40 0 12 0;
-#X connect 41 0 40 0;
-#X connect 41 1 10 0;
-#X connect 43 0 40 0;
-#X connect 43 1 10 0;
-#X connect 47 0 50 0;
-#X connect 48 0 47 1;
-#X connect 49 0 22 0;
-#X connect 49 1 13 0;
-#X connect 49 2 14 0;
-#X connect 49 3 48 0;
-#X connect 49 4 19 0;
-#X connect 50 0 47 1;
-#X connect 50 0 15 0;
-#X connect 54 0 36 0;
-#X connect 55 0 36 0;
-#X connect 56 0 36 0;
-#X connect 57 0 36 0;
-#X connect 58 0 36 0;
-#X connect 59 0 36 0;
-#X connect 60 0 36 0;
-#X connect 61 0 36 0;
-#X connect 62 0 36 0;
-#X connect 63 0 36 0;
-#X connect 64 0 36 0;
-#X connect 65 0 36 0;
-#X connect 66 0 67 0;
-#X connect 67 0 10 1;
-#X connect 68 1 49 0;
-#X connect 69 0 52 0;
-#X connect 82 0 5 0;
-#X connect 83 0 7 0;
-#X connect 83 1 6 0;
-#X connect 83 2 43 0;
-#X connect 83 3 41 0;
-#X connect 83 4 84 0;
-#X connect 84 0 5 0;
diff --git a/externals/aalex/pcre-help.pd b/externals/aalex/pcre-help.pd
deleted file mode 100644
index 0ab1799b7..000000000
--- a/externals/aalex/pcre-help.pd
+++ /dev/null
@@ -1,50 +0,0 @@
-#N canvas 1 53 679 425 10;
-#X obj 76 -59 cnv 15 200 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 69 161 cnv 15 300 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 116 107 symbol;
-#X obj 179 259 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 92 257 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 88 -23 F#9;
-#X msg 154 -23 D7b9;
-#X text 335 60 Matches a symbol against a Perl-compatible regular expression.
-See man pcre.;
-#X obj 267 262 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 205 -10 Am7;
-#X obj 92 236 pcre #9;
-#X obj 179 237 pcre b9;
-#X obj 267 240 pcre !9;
-#X text 339 30 pcre;
-#X text 106 -53 patterns;
-#X text 80 170 masks;
-#X msg 238 127 foo;
-#X msg 26 11 foo;
-#X obj 257 162 symbol;
-#N canvas 415 274 494 251 META 0;
-#X text 12 155 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 115 AUTHOR Alexandre Quessy;
-#X text 12 135 WEBSITE http://alexandre.quessy.net/;
-#X text 12 5 KEYWORDS control;
-#X text 12 45 DESCRIPTION match a symbol against a Perl-compatible
-regular expression;
-#X text 12 75 INLET_0 symbol;
-#X text 12 95 OUTLET_0 float;
-#X restore 593 318 pd META;
-#X connect 2 0 10 0;
-#X connect 2 0 11 0;
-#X connect 2 0 12 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 9 0 2 0;
-#X connect 10 0 4 0;
-#X connect 11 0 3 0;
-#X connect 12 0 8 0;
-#X connect 16 0 18 0;
-#X connect 17 0 2 0;
-#X connect 18 0 10 1;
diff --git a/externals/aalex/pcre.c b/externals/aalex/pcre.c
deleted file mode 100644
index 747793832..000000000
--- a/externals/aalex/pcre.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * The [pcre] class in Pure Data is an external to verify that a subject 
- * matches a Perl-compatible regular expression mask.
- * 
- * http://alexandre.quessy.net
- * 
- * @author Alexandre Quessy
- * @c GNU General Public License 2006
- */
- 
-#include "m_pd.h"
-#include <string.h>
-#include <stdlib.h>
-#include <pcre.h>
-
-#define CAPTUREVECTORSIZE 30 /* multiple of 3 */
-#define pdpcre_ERROR_PREFIX "[pdpcre]: "
-#define pdpcre_FALSE_MASK "xxxxxxxxxxxxxxxxxxxxxx"
-#define pdpcre_DECIMAL_PRECISION_SIZE_T 4
-
-/** variables of the pd object */
-typedef struct pdpcre {
-  t_object x_ob; /* contient inlets et outlets */
-  t_outlet *x_outlet;
-  pcre *regex; /* mask */
-} t_pdpcre;
-
-/** functions */
-char *_str_replace(const char search, const char replace, const char *subject);
-int _isMatching(t_pdpcre *x, char *text);
-void _compile_pattern(t_pdpcre *x, const char *pattern);
-
-
-/** left inlet: subject */
-void pdpcre_symbol0(t_pdpcre *x, t_symbol *arg) {
-  int isOk =_isMatching(x, arg->s_name);
-  outlet_float(x->x_outlet, isOk);
-}
-
-/* left inlet: subject (when a float) 
-void pdpcre_float0(t_pdpcre *x, t_floatarg arg) {
-  char *str_float = sprintf("%f0", arg);
-  int isOk =_isMatching(x, str_float);
-  outlet_float(x->x_outlet, isOk);
-}
-*/
-
-
-/** right inlet : mask */
-void pdpcre_symbol1(t_pdpcre *x, t_symbol *arg) {
-  _compile_pattern(x, arg->s_name);
-}
-
-/* right inlet 
-void pdpcre_float1(t_pdpcre *x, t_floatarg arg) {
-  char *str_float = sprintf("%f0", arg);
-  _compile_pattern(x, str_float);
-}
-*/
-t_class *pdpcre_class;
-
-/** constructor */
-void *pdpcre_new(t_symbol *selector, int argc, t_atom *argv) {
-  int is_valid = 0;
-  t_pdpcre *x = (t_pdpcre *) pd_new(pdpcre_class);
-  
-  /* set the mask */
-  if (argc < 1) {
-    post("%s No mask given as argument. Please supply one as message.\n", pdpcre_ERROR_PREFIX);
-  } else {
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *tmp = atom_getsymbol(&argv[0]);
-      _compile_pattern(x, tmp->s_name);
-      is_valid = 1;
-    } else {
-      post("%s Argument should be a symbol\n", pdpcre_ERROR_PREFIX);
-    }
-  }
-  if (is_valid == 0) {
-    _compile_pattern(x, pdpcre_FALSE_MASK);
-  }
-  /* add inlets */
-  inlet_new(&x->x_ob, &x->x_ob.ob_pd, gensym("symbol"), gensym("mask")); /* selecteur, renomme mask */
-  
-  /* add outlet */
-  x->x_outlet = outlet_new(&x->x_ob, gensym("float"));
-  return (void *)x;
-}
-
-/** setup */
-void pcre_setup(void) {
-  pdpcre_class = class_new(gensym("pcre"), (t_newmethod) pdpcre_new, 0, sizeof(t_pdpcre), 0, A_GIMME, 0);
-  class_addmethod(pdpcre_class, (t_method) pdpcre_symbol0, gensym("symbol"), A_SYMBOL, 0);
-  class_addmethod(pdpcre_class, (t_method) pdpcre_symbol1, gensym("mask"), A_SYMBOL, 0);
-}
-
-
-
-
-/* ############################### functions ###################### */
-
-
-
-
-/** clone of the PHP function */
-char *_str_replace(const char search, const char replace, const char *subject) {
-  int i, len;
-  char *result = strdup(subject);
-  len = strlen(result);
-  for (i = 0; i <= len; i++) {
-    if(result[i] == search) { 
-      result[i] = replace;
-    }
-  }
-  return result;
-}
-
-/** 
- * returns 1 if pdpcre, 0 if not 
- * TODO use stdbool.h, I think
- */
-int _isMatching(t_pdpcre *x, char *text) { /* 2nd is const */
-  int capturevector[CAPTUREVECTORSIZE];
-  int rc;
-  int i;
-  int result = 0;
-  
-  rc = pcre_exec(x->regex, NULL, text, (int) strlen(text), 0, 0, capturevector, CAPTUREVECTORSIZE);
-  
-  if (rc < 0) {
-    result = 0;
-  } else {
-    result = 1;
-  }
-  
-  /* ok, a partir d'ici c'est different de l'autre exemple, sauf qu'on avait mis des parentheses dans le pattern */
-  if (rc == 0) {
-    rc = CAPTUREVECTORSIZE / 3;
-    post("ovector only has room for %d captured substrings\n", rc - 1);
-  }
-  for (i = 0; i < rc; i++) {
-    char *substring_start = text + capturevector[2 * i]; /* ovector */
-    int substring_length = capturevector[2 * i + 1] - capturevector[2 * i];
-    //post("%2d matching: %.*s", i, substring_length, substring_start);
-  }
-  /* I think that from here I should clean up my memory */
-  
-  return result;
-}
-
-/* ############## begin class pdpcre ####################### */
-
-/** 
- * private method to set and compile the mask 
- * TODO : use pcre_malloc() and pcre_free()
- */
-void _compile_pattern(t_pdpcre *x, const char *pattern) {
-  pcre *regex;
-  const char *regex_error; 
-  int erroroffset;
-  char *mask = _str_replace('`', '\\', pattern);
-  
-  regex = pcre_compile(mask, 0, &regex_error, &erroroffset, NULL);
-  if (regex == NULL) {
-    post("%s Compilation failed at offset %d : %s", pdpcre_ERROR_PREFIX, erroroffset, regex_error);
-    regex = pcre_compile(pdpcre_FALSE_MASK, 0, &regex_error, &erroroffset, NULL); /* will always return false if invalid pattern */
-  } else {
-    post("%s New PCRE mask: %s", pdpcre_ERROR_PREFIX, mask);
-  }
-  /* free(x->regex); */
-  x->regex = regex;
-}
diff --git a/externals/aalex/x11key-help.pd b/externals/aalex/x11key-help.pd
deleted file mode 100644
index 9e68e2fb7..000000000
--- a/externals/aalex/x11key-help.pd
+++ /dev/null
@@ -1,93 +0,0 @@
-#N canvas 1 53 743 591 10;
-#X obj 73 -42 cnv 15 150 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 265 -43 cnv 15 200 140 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 157 301 x11key;
-#X msg 83 221 help;
-#X msg 95 42 letter a;
-#X msg 94 -24 bang;
-#X msg 279 -19 bang;
-#X obj 278 45 delay 1000;
-#X obj 96 20 delay 1000;
-#X obj 377 47 delay 2000;
-#X msg 275 70 keysym A 1;
-#X msg 379 67 keysym A 0;
-#X obj 280 23 t b b;
-#X text 300 219 [x11key] simulates X11 keyboard events.;
-#X text 304 292 Comments are welcome. The API (the messages for every
-is likely to change.;
-#X text 669 438 pureX11;
-#N canvas 0 0 410 183 todo 0;
-#X msg 35 78 display :0.0;
-#X text 31 46 Not yet implemented;
-#X restore 28 382 pd todo;
-#X obj 518 41 t b b b;
-#X obj 519 -32 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X text 546 -35 control-A;
-#X msg 498 92 keysym Control_L \$1;
-#X msg 563 67 1;
-#X msg 489 67 0;
-#X msg 499 115 keysym A 1 \, keysym A 0;
-#X text 272 -35 triggers on and off a key;
-#X text 301 242 The examples above generate keys as if you typed it
-on your keyboard. Give the focus to an other application than PD \,
-in order to see that you really fake letters typing.;
-#X text 83 -42 types a key;
-#X text 420 465 Released under the GNU Public License v2.0;
-#X text 224 408 <-- see a bigger list of the keynames you can generate
-;
-#N canvas 0 0 500 345 more_keynames_possibles 0;
-#X text 19 116 BackSpace \, Tab \, Linefeed \, Clear \, Return \, Pause
-\, Scroll_Lock \, Sys_Req \, Escape \, Delete \, Home \, Left \, Up
-\, Right \, Down \, Prior \, Page_Up \, Next \, Page_Down \, End \,
-Begin \, Shift_L \, Shift_R \, Control_L \, Control_R \, Caps_Lock
-\, Shift_Lock \, Meta_L \, Meta_R \, Alt_L \, Alt_R \, space \, exclam
-\, quotedbl \, numbersign \, dollar \, percent \, ampersand \, apostrophe
-\, quoteright \, parenleft \, parenright \, asterisk \, plus \, comma
-\, minus \, period \, slash \, 0 \, 1 \, 2 \, 3 \, 4 \, 5 \, 6 \, 7
-\, 8 \, 9 \, colon \, semicolon \, less \, equal \, greater \, question
-\, at \, 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
-\, bracketleft;
-#X text 19 54 Here are some ideas you can send using [keysym Tab 1<
-and [keysym Tab 0< \, for instance.;
-#X text 86 279 ...and much more. See /usr/include/X11/keysymdef.h;
-#X restore 28 405 pd more_keynames_possibles;
-#X text 302 325 [letter X< generate a letter (simple version);
-#X text 304 346 [keysym X 1|0< triggers a keystroke on or off \, depending
-on the second argument value.;
-#X obj 498 146 s to_x11key;
-#X obj 191 275 r to_x11key;
-#X text 443 449 )c( Copyleft 2006-2007 Alexandre Quessy;
-#N canvas 405 282 494 251 META 0;
-#X text 12 125 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 85 AUTHOR Alexandre Quessy;
-#X text 12 105 WEBSITE http://alexandre.quessy.net/;
-#X text 12 45 DESCRIPTION simulate X11 keyboard events;
-#X text 12 5 KEYWORDS control user_input;
-#X text 12 65 INLET_0 help letter keysym;
-#X restore 669 505 pd META;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 8 0;
-#X connect 6 0 12 0;
-#X connect 7 0 10 0;
-#X connect 8 0 4 0;
-#X connect 9 0 11 0;
-#X connect 10 0 2 0;
-#X connect 11 0 2 0;
-#X connect 12 0 7 0;
-#X connect 12 1 9 0;
-#X connect 17 0 22 0;
-#X connect 17 1 23 0;
-#X connect 17 2 21 0;
-#X connect 18 0 17 0;
-#X connect 20 0 32 0;
-#X connect 21 0 20 0;
-#X connect 22 0 20 0;
-#X connect 23 0 32 0;
-#X connect 33 0 2 0;
diff --git a/externals/aalex/x11key.c b/externals/aalex/x11key.c
deleted file mode 100644
index eb2ac91c4..000000000
--- a/externals/aalex/x11key.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/**
- * [x11kry] Generates X11 keyboard events on Linux
- * @author Alexandre Quessy <alex@sourcelibre.com>
- * @license GNU Public License    )c( 2006
- */
-
-#include <X11/Xlib.h>
-#include <X11/Xresource.h>
-#include <X11/extensions/XTest.h>
-#include <X11/keysym.h>
-// #include <stdio.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include "m_pd.h"
-
-#define PUREX11_DEFAULT_KEYSTATE 0
-#define PUREX11_DEFAULT_DISPLAY 0
-
-/** variables of the pd object */
-typedef struct x11key {
-  t_object x_ob; /* The instance. Contains inlets and outlets */
-  int *displayName;
-} t_x11key;
-
-/**
- * letter : types the letter you give it.
- */
-void x11key_letter(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  KeySym keysym;
-  KeyCode keycode;
-  int result;
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *sym = atom_getsymbolarg(0, argc, argv);
-      char *theChars = sym->s_name;
-      //keysym = XK_q;
-      keysym = XStringToKeysym(theChars);
-      /* should be hostname:number.screen_number */
-      display = XOpenDisplay(NULL); /* defaults to $DISPLAY */
-      if (display == NULL) {
-        post("Error : could not open display.\n");
-      }else {
-        // printf("Display opened successfully.\n");
-        keycode = XKeysymToKeycode(display, keysym);
-        //post("letter = %s", theChars);
-        //post("keycode = %d", (int) keycode);
-        /** Pushes on and off the letter */
-        /*
-        if (argc >= 2) {
-          if (argv[1].a_type == A_FLOAT) {
-            int isPressed = (atom_getfloatarg(0, argc, argv) == 0) ? true: false;
-            result = XTestFakeKeyEvent(display, keycode, isPressed, 0);
-            //post("result = %d", result);
-            if (result == 0) {
-              post("Error : could not simulate typing the letter.");
-            }
-          }
-        } else { */
-          // defaults to press and release
-          result = XTestFakeKeyEvent(display, keycode, True, 0);
-          //post("result = %d", result);
-          if (result == 0) {
-            post("Error : could not simulate typing the letter.");
-          }
-          result = XTestFakeKeyEvent(display, keycode, False, 0); 
-          if (result == 0) {
-            post("Error : could not simulate typing the letter.");
-          }
-        /* } //endif argc >= 2 */
-        XCloseDisplay(display);
-      }
-    } else {
-      post("Error : Bad argument type. Must be a symbol. Try [symbol 7< if you want to type a number.");
-    }
-  } else {
-    post("Error : Missing argument. The letter to type.");
-  }
-}
-
-
-
-/**
- * key : types the key symbol you give it. See /usr/include/X11/keysymdef.h
- */
-void x11key_keysym(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  KeySym keysym;
-  KeyCode keycode;
-  int result;
-  int state = PUREX11_DEFAULT_KEYSTATE;
-  bool boolState;
-  
-  if (argc >= 2) {
-    if (argv[1].a_type == A_FLOAT) { 
-      state = (int) atom_getfloatarg(1, argc, argv);
-    }
-  }
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *sym = atom_getsymbolarg(0, argc, argv);
-      char *theChars = sym->s_name;
-      //keysym = XK_q;
-      keysym = XStringToKeysym(theChars);
-      /* should be hostname:number.screen_number */
-      display = XOpenDisplay(NULL); /* defaults to $DISPLAY */
-      if (display == NULL) {
-        post("Error : could not open display.\n");
-      }else {
-        // printf("Display opened successfully.\n");
-        keycode = XKeysymToKeycode(display, keysym);
-        
-        /** Pushes on and off the letter */
-        boolState = (state == 0) ? False : True;
-        result = XTestFakeKeyEvent(display, keycode, boolState, 0);
-        if (result == 0) {
-          post("Error : could not simulate typing the letter.");
-        }
-        XCloseDisplay(display);
-      }
-    } else {
-      post("Error : Bad argument type. Must be a symbol. ");
-    }
-  } else {
-    post("Error : Missing argument. The letter to type.");
-  }
-}
-
-
-
-/** display */
-void x11key_display(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  post("Not yet implemented.");
-}
-
-/** help */
-void x11key_help(t_x11key *x, t_symbol *s, int argc, t_atom *argv) {
-  post("keysym [see /usr/include/X11/keysymdef.h for the key symbols]");
-  post("letter [letter a-zA-Z0-9...]");
-  post("help");
-  post("display : not yet implemented");
-}
-
-
-
-
-
-/** The class */
-t_class *x11key_class;
-
-/** constructor */
-void *x11key_new(t_symbol *selector, int argc, t_atom *argv) {
-  t_x11key *x = (t_x11key *) pd_new(x11key_class);
-  //x->displayName = PUREX11_DEFAULT_DISPLAY;
-  return (void *)x;
-}
-
-/** setup */
-void x11key_setup(void) {
-  x11key_class = class_new(gensym("x11key"), (t_newmethod) x11key_new, 0, sizeof(t_x11key), 0, A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_letter, gensym("letter"), A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_keysym, gensym("keysym"), A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_display, gensym("display"), A_GIMME, 0);
-  class_addmethod(x11key_class, (t_method)x11key_help, gensym("help"), A_GIMME, 0);
-  
-  post("==============================================");
-  post("                Pure X11");
-  post("Copyleft 2006 Alexandre Quessy");
-  post("GNU Public License");
-  post("[x11key] simulates X11 keyboard events.");
-  post("==============================================");
-  
-}
diff --git a/externals/aalex/x11mouse-help.pd b/externals/aalex/x11mouse-help.pd
deleted file mode 100644
index e4185f93f..000000000
--- a/externals/aalex/x11mouse-help.pd
+++ /dev/null
@@ -1,86 +0,0 @@
-#N canvas 1 53 997 581 10;
-#X obj 13 10 cnv 15 150 140 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 385 63 cnv 15 100 100 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 521 275 cnv 15 420 230 empty empty x11mouse_object 20 12 0 14
--258699 -66577 0;
-#X obj 189 152 cnv 15 150 140 empty empty empty 20 12 0 14 -258699
--66577 0;
-#X obj 569 70 cnv 15 100 100 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 760 23 cnv 15 200 200 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 271 468 x11mouse;
-#X msg 32 107 click;
-#X msg 199 261 press 1 1;
-#X msg 49 339 help;
-#X obj 848 95 f 0;
-#X obj 889 95 + 1;
-#X msg 927 58 0;
-#X obj 802 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 810 186 move \$1 \$1;
-#X obj 848 125 > 50;
-#X obj 32 85 delay 500;
-#X msg 32 30 bang;
-#X obj 90 158 print;
-#X obj 199 240 delay 500;
-#X msg 196 189 bang;
-#X obj 587 116 delay 500;
-#X msg 587 76 bang;
-#X msg 587 137 press 3 1;
-#X msg 392 124 move 400 200;
-#X floatatom 763 186 5 0 0 0 - - -;
-#X obj 847 146 sel 1;
-#X obj 848 65 metro 50;
-#X obj 813 123 * 4;
-#X text 542 395 Comments are welcome. The API (the messages for every
-is likely to change.;
-#X text 544 457 )c( Copyleft 2006 Alexandre Quessy;
-#X text 547 472 Released under the GNU Public License;
-#X text 547 441 pureX11;
-#X text 16 -10 1 Click and keep your mouse over the message;
-#X text 197 164 2 Click and keep your mouse over the message;
-#X text 388 48 3 Moves the mouse;
-#X text 766 7 5 Moves the mouse around;
-#X text 548 306 [x11mouse] simulates X11 mouse events.;
-#X text 564 51 4 Right-clicks (button 3);
-#X text 545 337 Try all examples.;
-#X text 221 297 press 1 on;
-#X text 218 320 press 1 off;
-#N canvas 455 314 494 251 META 0;
-#X text 12 125 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 85 AUTHOR Alexandre Quessy;
-#X text 12 105 WEBSITE http://alexandre.quessy.net/;
-#X text 12 5 KEYWORDS control user_input;
-#X text 12 45 DESCRIPTION simulate X11 mouse events;
-#X text 12 65 INLET_0 help click press move;
-#X restore 906 533 pd META;
-#X connect 7 0 6 0;
-#X connect 7 0 18 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 10 0 11 0;
-#X connect 10 0 15 0;
-#X connect 10 0 28 0;
-#X connect 11 0 10 1;
-#X connect 12 0 10 1;
-#X connect 12 0 27 0;
-#X connect 13 0 27 0;
-#X connect 14 0 6 0;
-#X connect 15 0 26 0;
-#X connect 16 0 7 0;
-#X connect 17 0 16 0;
-#X connect 19 0 8 0;
-#X connect 20 0 19 0;
-#X connect 21 0 23 0;
-#X connect 22 0 21 0;
-#X connect 23 0 6 0;
-#X connect 24 0 6 0;
-#X connect 26 0 12 0;
-#X connect 27 0 10 0;
-#X connect 28 0 14 0;
-#X connect 28 0 25 0;
diff --git a/externals/aalex/x11mouse.c b/externals/aalex/x11mouse.c
deleted file mode 100644
index b13ace0fc..000000000
--- a/externals/aalex/x11mouse.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * [x11mouse] Generates X11 mouse events on Linux
- * @author Alexandre Quessy <alex@sourcelibre.com>
- * @license GNU Public License    )c( 2006
- */
-
-#include <X11/Xlib.h>
-#include <X11/Xresource.h>
-#include <X11/extensions/XTest.h>
-#include <stdio.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include "m_pd.h"
-
-#define PUREX11_DEFAULT_MOUSEBUTTON 1
-#define PUREX11_DEFAULT_MOUSESTATE 0
-#define PUREX11_DEFAULT_DISPLAY 0
-#define PUREX11_DEFAULT_XVALUE 0
-#define PUREX11_DEFAULT_YVALUE 0
-
-
-/** variables of the pd object */
-typedef struct x11mouse {
-  t_object x_ob; /* The instance. Contains inlets and outlets */
-  int *displayName;
-} t_x11mouse;
-
-
-
-/** 
- * Mouse click
- * @param int Button number
- */
-void x11mouse_click(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  int result;
-  
-  int button = PUREX11_DEFAULT_MOUSEBUTTON;
-  
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      button = (int) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  
-  result = XTestFakeButtonEvent(display, button, True, CurrentTime);
-  result = XTestFakeButtonEvent(display, button, False, CurrentTime);
-  XCloseDisplay(display);
-}
-
-/** 
- * Mouse button press or release
- * @param int State. Defaults to 0.
- * @param int Button number
- */
-void x11mouse_press(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  int result;
-  
-  int button = PUREX11_DEFAULT_MOUSEBUTTON;
-  int state = PUREX11_DEFAULT_MOUSESTATE;
-  bool boolState;
-  
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  
-  if (argc >= 2) {
-    if (argv[1].a_type == A_FLOAT) { 
-      button = (int) atom_getfloatarg(1, argc, argv);
-    }
-    if (argv[0].a_type == A_FLOAT) { 
-      state = (int) atom_getfloatarg(0, argc, argv);
-    }
-  } else if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      state = (int) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  
-  boolState = (state == 0) ? False : True;
-  result = XTestFakeButtonEvent(display, button, boolState, CurrentTime);
-  if (!result) {
-    post("[x11mouse] error : could not fake button event.");
-  }
-  XCloseDisplay(display);
-}
-
-/**
- * Moves the mouse to the coordonates you give it.
- */
-void x11mouse_move(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  int result;
-  int xCoord = PUREX11_DEFAULT_XVALUE;
-  int yCoord = PUREX11_DEFAULT_YVALUE;
-  
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  
-  if (argc >= 2) {
-    if (argv[1].a_type == A_FLOAT) { 
-      yCoord = (int) atom_getfloatarg(0, argc, argv);
-    }
-    if (argv[0].a_type == A_FLOAT) { 
-      xCoord = (int) atom_getfloatarg(0, argc, argv);
-    }
-  } else if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      xCoord = (int) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  
-  result = XTestFakeMotionEvent(display, 0, xCoord, yCoord, CurrentTime);
-  if (!result) {
-    post("[x11mouse] error : could not fake motion event.");
-  }
-  XCloseDisplay(display);
-}
-
-/**
- * Sets the X11 display name.
- * Defaults to $DISPLAY, usually :0.0
- * 
- * Not currently implemented. You cannot change the display. (for now)
- * @todo Allow the user to change the display
- */
-void x11mouse_display(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  Display *display;
-  display = XOpenDisplay(0); /* defaults to $DISPLAY if 0 */
-  if (display == NULL) {
-    post("[x11mouse] error : could not open display.");
-  }
-  XCloseDisplay(display);
-}
-
-void x11mouse_help(t_x11mouse *x, t_symbol *s, int argc, t_atom *argv) {
-  post("press [state 0/1] [button number 1-3]");
-  post("move [x] [y]");
-  post("click [button number 1-3]");
-  post("help");
-  post("display not yet implemented");
-  
-  
-  
-}
-
-/** The class */
-t_class *x11mouse_class;
-
-/** constructor */
-void *x11mouse_new(t_symbol *selector, int argc, t_atom *argv) {
-  t_x11mouse *x = (t_x11mouse *) pd_new(x11mouse_class);
-  //x->displayName = PUREX11_DEFAULT_DISPLAY;
-  return (void *)x;
-}
-
-/** setup */
-void x11mouse_setup(void) {
-  x11mouse_class = class_new(gensym("x11mouse"), (t_newmethod) x11mouse_new, 0, sizeof(t_x11mouse), 0, A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_press, gensym("press"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_move, gensym("move"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_display, gensym("display"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_click, gensym("click"), A_GIMME, 0);
-  class_addmethod(x11mouse_class, (t_method)x11mouse_help, gensym("help"), A_GIMME, 0);
-  
-  post("==============================================");
-  post("                Pure X11");
-  post("Copyleft 2006 Alexandre Quessy");
-  post("GNU Public License");
-  post("[x11mouse] simulates X11 mouse events.");
-  post("==============================================");
-  
-}
diff --git a/externals/aalex/xmms-help.pd b/externals/aalex/xmms-help.pd
deleted file mode 100644
index c75874b24..000000000
--- a/externals/aalex/xmms-help.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 1 53 447 336 10;
-#X obj 14 113 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 79 112 cnv 15 50 50 empty empty empty 20 12 0 14 -24198 -66577
-0;
-#X obj 158 105 cnv 15 50 50 empty empty empty 20 12 0 14 -258699 -66577
-0;
-#X obj 259 104 cnv 15 50 50 empty empty empty 20 12 0 14 -24198 -66577
-0;
-#X obj 208 105 cnv 15 50 50 empty empty empty 20 12 0 14 -241291 -66577
-0;
-#X obj 60 274 xmms;
-#X msg 79 112 next;
-#X msg 15 113 prev;
-#X msg 265 122 play;
-#X msg 165 121 stop;
-#X msg 213 122 pause;
-#X obj 56 11 keyname;
-#X obj 99 35 select h j k l;
-#X msg 317 232 volume \$1;
-#X obj 318 172 vsl 15 50 0 100 0 0 empty empty empty 0 -8 0 8 -62784
--1 -1 0 1;
-#X msg 213 206 forward 4000;
-#X msg 214 183 backward 4000;
-#X msg 210 229 backward;
-#N canvas 29 134 494 392 META 0;
-#X text 12 5 KEYWORDS control needs_work;
-#X text 12 65 INLET_0 pre next stop pause play backward forward volume
-;
-#X text 12 85 AUTHOR Alexandre Quessy;
-#X text 12 105 WEBSITE http://alexandre.quessy.net/;
-#X text 12 125 HELP_PATCH_AUTHORS Jonathan Wilkes revised the patch
-to conform to the PDDP template for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 45 DESCRIPTION control the X Multimedia System;
-#X restore 388 291 pd META;
-#X connect 11 1 12 0;
-#X connect 12 0 16 0;
-#X connect 12 1 10 0;
-#X connect 12 2 8 0;
-#X connect 12 3 15 0;
-#X connect 14 0 13 0;
diff --git a/externals/aalex/xmms.c b/externals/aalex/xmms.c
deleted file mode 100644
index ef17659d9..000000000
--- a/externals/aalex/xmms.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * [xmms] is a Pure Data object to control the X Multimedia System, an audio player.
- *
- * @url http://alexandre.quessy.net/
- * @author Alexandre Quessy <alexandre@quessy.net>
- * @license GNU General Public License 2006
- * thanks to Andy Gimblett for code examples
- */
-/*
-To know which flags to use for compilation: 
-`xmms-config --cflags --libs`
-
-On Debian, you need libxmms and xmms-festalon if you want to read nsf files.
-*/
-
-//#define _GNU_SOURCE
-
-/* PD includes */
-#include "m_pd.h"
-#include <math.h>
-// #include <string.h>
-#include <stdlib.h>
-// #include <stdio.h>
-
-/* XMMS includes */
-#include <xmms/xmmsctrl.h>
-// #include <glib.h>
-/* local constants */
-#define PDXMMS_DEFAULTSKIP 5000
-
-
-//need following declarations so internal XMMS functions can be called
-//(ripped from XMMS source)
-//from xmms.c
-//gboolean playlist_load(gchar * inpipefile);
-
-
-/** variables of the pd object */
-typedef struct xmms {
-  t_object x_ob; /* The instance. Contains inlets and outlets */
-  /* xmms session. 0 is the first one when we start it */
-  int session;
-  //t_outlet *x_outlet;
-} t_xmms;
-
-
-
-void xmms_prev(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_playlist_prev(x->session);
-}
-
-void xmms_next(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_playlist_next(x->session);
-}
-
-void xmms_play(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_play(x->session);
-}
-
-void xmms_pause(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_pause(x->session);
-}
-
-void xmms_stop(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  xmms_remote_stop(x->session);
-}
-
-void xmms_volume(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  float f;
-  int l, r;
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      f = (float) atom_getfloatarg(0, argc, argv);
-      l = (int) f;
-      //if (mute_flag) mute_flag = 0;
-      if (l > 100) l = 100;
-      else if (l < 0) l = 0;
-      //if (r > 100) r = 100;
-      //else if (r < 0) r = 0;
-      r = f;
-      xmms_remote_set_volume(x->session, l, r);
-    }
-  }
-}
-
-
-/* skipf and skipb */
-void xmms_forward(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  int time = xmms_remote_get_output_time(x->session);
-  double skip = PDXMMS_DEFAULTSKIP;
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      skip = (double) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  xmms_remote_jump_to_time(x->session, (int) rint(time + skip));
-}
-
-void xmms_backward(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  int time = xmms_remote_get_output_time(x->session);
-  double skip = PDXMMS_DEFAULTSKIP;
-  
-  if (argc >= 1) {
-    if (argv[0].a_type == A_FLOAT) { 
-      skip = (double) atom_getfloatarg(0, argc, argv);
-    }
-  }
-  xmms_remote_jump_to_time(x->session, (int) rint(time - skip));
-}
-
-/*
-void xmms_load0(t_xmms *x, t_symbol *s, int argc, t_atom *argv) {
-  if (argc >= 1) { 
-    if (argv[0].a_type == A_SYMBOL) {
-      t_symbol *tmp = atom_getsymbol(&argv[0]);
-      playlist_load(tmp->s_name);
-    }
-  }
-}
-  */
-/** The class */
-t_class *xmms_class;
-
-/** constructor */
-void *xmms_new(t_symbol *selector, int argc, t_atom *argv) {
-  t_xmms *x = (t_xmms *) pd_new(xmms_class);
-  //x->x_outlet = outlet_new(&x->x_ob, gensym("symbol"));
-  x->session = 0;
-  // if (!xmms_remote_is_running(x->session)) return 0;
-  return (void *)x;
-}
-
-/** setup */
-void xmms_setup(void) {
-  xmms_class = class_new(gensym("xmms"), (t_newmethod) xmms_new, 0, sizeof(t_xmms), 0, A_GIMME, 0);
-  
-  class_addmethod(xmms_class, (t_method)xmms_stop, gensym("stop"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_play, gensym("play"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_pause, gensym("pause"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_next, gensym("next"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_prev, gensym("prev"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_forward, gensym("forward"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_backward, gensym("backward"), A_GIMME, 0);
-  class_addmethod(xmms_class, (t_method)xmms_volume, gensym("volume"), A_GIMME, 0);
-  //class_addmethod(xmms_class, (t_method)xmms_load0, gensym("load"), A_GIMME, 0);
-}
-
diff --git a/externals/algocomp/.cdtproject b/externals/algocomp/.cdtproject
deleted file mode 100755
index f4957ec0d..000000000
--- a/externals/algocomp/.cdtproject
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse-cdt version="2.0"?>
-
-<cdtproject id="org.eclipse.cdt.make.core.make">
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
-<data>
-<item id="scannerConfiguration">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-</item>
-<item id="org.eclipse.cdt.core.pathentry">
-<pathentry kind="src" path=""/>
-<pathentry kind="out" path=""/>
-<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-</item>
-</data>
-</cdtproject>
diff --git a/externals/algocomp/.cproject b/externals/algocomp/.cproject
deleted file mode 100644
index 67324f9f7..000000000
--- a/externals/algocomp/.cproject
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?>
-
-<cproject>
-<storageModule moduleId="org.eclipse.cdt.core.settings">
-<cconfiguration id="converted.config.111355161">
-<storageModule moduleId="scannerConfiguration">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="false"/>
-</scannerInfoProvider>
-</profile>
-</storageModule>
-<storageModule moduleId="org.eclipse.cdt.core.pathentry">
-<pathentry kind="src" path=""/>
-<pathentry kind="out" path=""/>
-<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-</storageModule>
-<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.111355161" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
-<externalSettings/>
-<extensions>
-<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-</extensions>
-</storageModule>
-</cconfiguration>
-</storageModule>
-</cproject>
diff --git a/externals/algocomp/.project b/externals/algocomp/.project
deleted file mode 100755
index 6deef2ce1..000000000
--- a/externals/algocomp/.project
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>algocomp</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.make.core.makeBuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.arguments</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.core.errorOutputParser</key>
-					<value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.environment</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.inc</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.clean</key>
-					<value>clean</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.command</key>
-					<value>make</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.full</key>
-					<value>clean all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.auto</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>false</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.make.core.makeNature</nature>
-		<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
-	</natures>
-</projectDescription>
diff --git a/externals/algocomp/Makefile b/externals/algocomp/Makefile
deleted file mode 100755
index 6e7bdf87d..000000000
--- a/externals/algocomp/Makefile
+++ /dev/null
@@ -1,85 +0,0 @@
-# set Name and system
-
-NAME=algocomp
-#SYSTEM = nt
-SYSTEM = linux
-# set paths for windows
-
-# where is VC++ ???
-VC="C:\Programme\Microsoft Visual C++ Toolkit 2003"
-VCLINK="C:\Programme\Microsoft Visual C++ Toolkit 2003\bin\link"
-# where is pd
-#PDPATH="E:\Program Files\pd-0.38-3"
-PDPATH=C:\Programme\pd-0.38-3
-LIBPATH="$(PDPATH)/bin"
-
-install: install_$(SYSTEM)
-
-all: $(SYSTEM)
-#all: pd_linux install_linux
-
-# ----------------------- LINUX i386 -----------------------
-
-linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-# where is your m_pd.h ???
-LINUXINCLUDE =  -I../../src 
-
-.c.pd_linux:
-	cc -O2 -Wall -DPD -fPIC $(LINUXCFLAGS) $(LINUXINCLUDE) -c $*.c 
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc 
-	strip --strip-unneeded $*.pd_linux 
-
-install_linux:
-	sudo cp *.pd_linux /usr/lib/pd/extra/
-	cp *.pd_linux ../../download
-
-# ----------------------- NT -----------------------
-
-nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-PDNTINCLUDE = /I. /I$(PDPATH)\tcl\include /I$(PDPATH)\src /I$(VC)\include /Iinclude
-PDNTLDIR = "C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib"
-
-PDNTLIB = "C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib\libc.lib" \
-	"C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib\oldnames.lib" \
-	"C:\Programme\Microsoft Visual C++ Toolkit 2003\Lib\kernel32.lib" \
-	"$(PDPATH)\bin\pd.lib"
-
-
-.c.dll: algocomp.c chaotic.c ifs.c selfsimilar.c chaossignals.c pan.c
-	cl /W3 /WX /O2 /G6 /DNT /DPD /nologo /I. /I"C:\Programme\flextbuild\pd\tcl\include" /I"C:\Programme\flextbuild\pd\src" /I"C:\Programme\Microsoft Visual C++ Toolkit 2003\include" /Iinclude /c $(NAME).c
-	link /dll /export:$(NAME)_setup $*.obj $(PDNTLIB)
-
-#.c.dll:
-#	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-#	link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB)
-	
-install_nt:
-	cp $(NAME).dll $(PDPATH)\externs
-# -------------------------- XP --------------------------
-
-# $(CXX) $(LDFLAGS) -shared $(patsubst %,-L%,$(LIBPATH)) $^ $(patsubst %,-l%,$(LIBS)) -o $@
-
-pd_xp:
-	gcc -O2 -Wall -DPD -L$(LIBPATH) -c $(NAME).c 
-	ld --export-dynamic -shared -o $(NAME).dll -lc 
-
-
-install_xp:
-#	copy $(NAME).dll $(PDPATH)/externs
-	cp $(NAME).dll $(PDPATH)/externs
-
-clean:
-	rm -f *.o *.dll *.exp *.obj *.lib
-	rm -f *.o *.pd_* *.dll so_locations
-	
diff --git a/externals/algocomp/Makefile.advanced b/externals/algocomp/Makefile.advanced
deleted file mode 100755
index fb48ca960..000000000
--- a/externals/algocomp/Makefile.advanced
+++ /dev/null
@@ -1,104 +0,0 @@
-NAME=patcher~
-CSYM=patcher_tilde
-
-current: pd_nt pd_linux pd_darwin
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-
-# where is VC++ ???
-VC="C:\Programme\Microsoft Visual Studio\VC98"
-
-# where is your m_pd.h ???
-PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDNTLDIR)\user32.lib \
-	$(PDNTLDIR)\uuid.lib \
-	c:\pd\bin\pd.lib
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- MAX OS X -----------------------
-
-pd_darwin: $(NAME).pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -DUNIX -O2 -DMACOSX \
-    -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-DARWININCLUDE =  -I../../src 
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
-	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $*.o
-	rm -f $*.o ../$*.pd_darwin
-	ln -s $*/$*.pd_darwin ..
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-# where is your m_pd.h ???
-LINUXINCLUDE =  -I../../src 
-
-.c.pd_linux:
-	cc -O2 -Wall -DPD -fPIC $(LINUXCFLAGS) $(LINUXINCLUDE) -c $*.c 
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc 
-	strip --strip-unneeded $*.pd_linux 
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
\ No newline at end of file
diff --git a/externals/algocomp/algocomp-help-patches/delnote.pd b/externals/algocomp/algocomp-help-patches/delnote.pd
deleted file mode 100755
index bed2181ff..000000000
--- a/externals/algocomp/algocomp-help-patches/delnote.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 88 99 482 332 12;
-#X obj 25 70 del;
-#X obj 29 157 unpack 0 0;
-#X floatatom 111 186 5 0 0 0 - - -;
-#X floatatom 161 187 5 0 0 0 - - -;
-#X obj 29 130 pack 0 0;
-#X obj 29 106 f;
-#X obj 76 14 inlet;
-#X obj 126 15 inlet;
-#X obj 31 207 f;
-#X obj 61 207 t b f;
-#X obj 31 237 makenote 60 100 100;
-#X obj 25 14 inlet;
-#X obj 193 215 outlet;
-#X obj 25 40 t b f;
-#X obj 29 267 noteout;
-#X obj 255 212 s note;
-#X obj 252 182 pack 0 0 0 0 0 0 0 0;
-#X floatatom 312 154 5 0 0 0 - - -;
-#X connect 0 0 5 0;
-#X connect 1 0 2 0;
-#X connect 1 0 8 1;
-#X connect 1 0 16 1;
-#X connect 1 1 3 0;
-#X connect 1 1 9 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 1;
-#X connect 7 0 4 1;
-#X connect 8 0 10 0;
-#X connect 8 0 16 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 2;
-#X connect 9 1 12 0;
-#X connect 9 1 16 2;
-#X connect 10 0 14 0;
-#X connect 10 1 14 1;
-#X connect 11 0 13 0;
-#X connect 13 0 0 0;
-#X connect 13 1 0 1;
-#X connect 16 0 15 0;
-#X connect 17 0 16 3;
diff --git a/externals/algocomp/algocomp-help-patches/dnote.pd b/externals/algocomp/algocomp-help-patches/dnote.pd
deleted file mode 100755
index 04f67a30b..000000000
--- a/externals/algocomp/algocomp-help-patches/dnote.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 88 99 482 332 12;
-#X obj 25 70 del;
-#X obj 29 157 unpack 0 0;
-#X floatatom 111 186 5 0 0 0 - - -;
-#X floatatom 161 187 5 0 0 0 - - -;
-#X obj 29 130 pack 0 0;
-#X obj 29 106 f;
-#X obj 76 14 inlet;
-#X obj 126 15 inlet;
-#X obj 31 207 f;
-#X obj 61 207 t b f;
-#X obj 31 237 makenote 60 100 100;
-#X obj 25 14 inlet;
-#X obj 100 269 outlet;
-#X obj 25 40 t b f;
-#X obj 29 267 noteout;
-#X obj 240 270 s note;
-#X obj 237 240 pack 0 0 0 0 0 0 0 0;
-#X floatatom 297 212 5 0 0 0 - - -;
-#X connect 0 0 5 0;
-#X connect 1 0 2 0;
-#X connect 1 0 8 1;
-#X connect 1 0 16 1;
-#X connect 1 1 3 0;
-#X connect 1 1 9 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 1;
-#X connect 7 0 4 1;
-#X connect 8 0 10 0;
-#X connect 8 0 16 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 2;
-#X connect 9 1 12 0;
-#X connect 9 1 16 2;
-#X connect 10 0 14 0;
-#X connect 10 1 14 1;
-#X connect 11 0 13 0;
-#X connect 13 0 0 0;
-#X connect 13 1 0 1;
-#X connect 16 0 15 0;
-#X connect 17 0 16 3;
diff --git a/externals/algocomp/algocomp-help-patches/help-algocomp.pd b/externals/algocomp/algocomp-help-patches/help-algocomp.pd
deleted file mode 100755
index 4bc2185e2..000000000
--- a/externals/algocomp/algocomp-help-patches/help-algocomp.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 493 243 450 300 10;
-#X obj 169 33 help-oneoverf;
-#X obj 66 132 help-eca;
-#X obj 57 58 help-henon;
-#X obj 50 81 help-lorenz;
-#X text 24 12 chaos functions;
-#X obj 36 34 help-logistic;
-#X text 165 13 fractal;
-#X obj 169 56 help-ifs;
-#X text 32 113 elementary CA;
-#X obj 272 33 help-selfsimilar;
-#X obj 272 56 help-ifsmusic;
-#X obj 65 210 help-map;
-#X obj 166 134 help-genetic;
-#X text 164 113 genetic algorithm;
-#X text 23 187 linear mapping;
diff --git a/externals/algocomp/algocomp-help-patches/help-chaosgame.pd b/externals/algocomp/algocomp-help-patches/help-chaosgame.pd
deleted file mode 100755
index 4b7c5fd58..000000000
--- a/externals/algocomp/algocomp-help-patches/help-chaosgame.pd
+++ /dev/null
@@ -1,70 +0,0 @@
-#N canvas 540 1 452 619 12;
-#X obj 33 83 chaosgame;
-#X obj 30 17 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 53 13 stop;
-#X obj 15 203 gemhead;
-#X obj 14 237 translateXYZ;
-#X obj 128 340 loadbang;
-#X obj 32 467 gemwin;
-#X msg 182 423 1;
-#X msg 176 448 0;
-#X msg 82 403 create;
-#X msg 83 430 destroy;
-#N canvas 95 194 342 231 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 24 350 pd Gem.init;
-#X obj 128 367 t b b b;
-#X obj 39 401 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 16 173 t b f;
-#X obj 12 266 colorRGB 1 1 1;
-#X obj 14 293 sphere 0.02;
-#X floatatom 157 146 5 0 0 0 - - -;
-#X floatatom 176 124 5 0 0 0 - - -;
-#X obj 174 281 noteout;
-#X obj 295 178 noteout;
-#X obj 161 214 map -2 2 52 88;
-#X obj 290 108 map -2 2 64 100;
-#X obj 32 44 metro 100;
-#X obj 165 250 makenote 100 150;
-#X obj 294 145 makenote 100 250;
-#X connect 0 0 14 0;
-#X connect 0 0 17 0;
-#X connect 0 1 4 2;
-#X connect 0 1 18 0;
-#X connect 1 0 23 0;
-#X connect 2 0 23 0;
-#X connect 3 0 4 0;
-#X connect 4 0 15 0;
-#X connect 5 0 12 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 10 0 6 0;
-#X connect 11 0 6 0;
-#X connect 12 0 6 0;
-#X connect 12 1 7 0;
-#X connect 12 2 9 0;
-#X connect 13 0 6 0;
-#X connect 14 0 3 0;
-#X connect 14 1 4 1;
-#X connect 15 0 16 0;
-#X connect 17 0 21 0;
-#X connect 18 0 22 0;
-#X connect 21 0 24 0;
-#X connect 22 0 25 0;
-#X connect 23 0 0 0;
-#X connect 24 0 19 0;
-#X connect 24 1 19 1;
-#X connect 25 0 20 0;
-#X connect 25 1 20 1;
diff --git a/externals/algocomp/algocomp-help-patches/help-eca.pd b/externals/algocomp/algocomp-help-patches/help-eca.pd
deleted file mode 100755
index 00d2b3f0e..000000000
--- a/externals/algocomp/algocomp-help-patches/help-eca.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 385 55 466 361 12;
-#X msg 128 59 randomize;
-#X msg 128 36 init;
-#X floatatom 129 82 5 0 0 0 - - -;
-#X obj 26 276 makenote 100 125;
-#X obj 26 304 noteout 10;
-#X obj 26 28 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 26 104 eca 110 9 1;
-#X obj 26 157 unpack 0 0 0 0 0 0 0 0 0;
-#X obj 26 128 map 0 9 34 42;
-#X obj 26 48 metro 200;
-#X connect 0 0 6 0;
-#X connect 1 0 6 0;
-#X connect 2 0 6 1;
-#X connect 3 0 4 0;
-#X connect 3 1 4 1;
-#X connect 5 0 9 0;
-#X connect 6 0 8 0;
-#X connect 7 0 3 0;
-#X connect 7 1 3 0;
-#X connect 7 2 3 0;
-#X connect 7 3 3 0;
-#X connect 7 4 3 0;
-#X connect 7 5 3 0;
-#X connect 7 6 3 0;
-#X connect 7 7 3 0;
-#X connect 7 8 3 0;
-#X connect 8 0 7 0;
-#X connect 9 0 6 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-genetic.pd b/externals/algocomp/algocomp-help-patches/help-genetic.pd
deleted file mode 100755
index eba2e9cac..000000000
--- a/externals/algocomp/algocomp-help-patches/help-genetic.pd
+++ /dev/null
@@ -1,146 +0,0 @@
-#N canvas 0 21 995 664 12;
-#X obj 432 142 unpack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X obj 8 115 map 0 32 52 84;
-#X obj 8 408 t b f;
-#X msg 8 432 0;
-#X obj 834 486 t b f;
-#X obj 834 513 del;
-#X obj 8 92 genetic 128 80 5;
-#X obj 432 118 map 0 64 0 1000;
-#X msg 147 23 0 7 4 2 11 12 6 4 12 7 12 11 2 7 12;
-#X obj 432 94 genetic 128 96 6;
-#X msg 571 24 16 32 16 16 16 16 32 16 32 7 7 7 32 16 16 32;
-#X obj 430 171 s d1;
-#X obj 454 197 s d2;
-#X obj 473 171 s d3;
-#X obj 495 197 s d4;
-#X obj 515 170 s d5;
-#X obj 539 196 s d6;
-#X obj 558 170 s d7;
-#X obj 580 196 s d8;
-#X obj 598 171 s d9;
-#X obj 622 197 s d10;
-#X obj 641 171 s d11;
-#X obj 675 197 s d12;
-#X obj 693 171 s d13;
-#X obj 745 172 s d15;
-#X obj 780 197 s d16;
-#X obj 728 197 s d14;
-#X obj 834 538 s retrigger;
-#X obj 47 433 r d1;
-#X obj 95 433 r d2;
-#X obj 149 433 r d3;
-#X obj 205 433 r d4;
-#X obj 255 433 r d5;
-#X obj 307 435 r d6;
-#X obj 360 435 r d7;
-#X obj 411 436 r d8;
-#X obj 462 437 r d9;
-#X obj 519 439 r d10;
-#X obj 579 438 r d11;
-#X obj 633 436 r d12;
-#X obj 8 138 unpack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X obj 693 436 r d13;
-#X obj 802 437 r d15;
-#X obj 748 436 r d14;
-#X obj 853 434 r d16;
-#X obj 287 460 dnote;
-#X obj 295 48 bng 15 250 50 0 empty retrigger empty 0 -6 0 8 -262144
--1 -1;
-#X obj 8 457 dnote;
-#X obj 68 458 dnote;
-#X obj 126 458 dnote;
-#X obj 182 459 dnote;
-#X obj 233 459 dnote;
-#X obj 338 461 dnote;
-#X obj 390 461 dnote;
-#X obj 445 461 dnote;
-#X obj 499 461 dnote;
-#X obj 556 461 dnote;
-#X obj 613 461 dnote;
-#X obj 671 461 dnote;
-#X obj 727 461 dnote;
-#X obj 781 461 dnote;
-#X obj 833 462 dnote;
-#X msg 8 56 randomize;
-#X msg 432 63 randomize;
-#X connect 0 0 11 0;
-#X connect 0 1 12 0;
-#X connect 0 2 13 0;
-#X connect 0 3 14 0;
-#X connect 0 4 15 0;
-#X connect 0 5 16 0;
-#X connect 0 6 17 0;
-#X connect 0 7 18 0;
-#X connect 0 8 19 0;
-#X connect 0 9 20 0;
-#X connect 0 10 21 0;
-#X connect 0 11 22 0;
-#X connect 0 12 23 0;
-#X connect 0 13 26 0;
-#X connect 0 14 24 0;
-#X connect 0 15 25 0;
-#X connect 1 0 40 0;
-#X connect 2 0 3 0;
-#X connect 2 1 47 1;
-#X connect 3 0 47 0;
-#X connect 4 0 5 0;
-#X connect 4 1 5 1;
-#X connect 5 0 27 0;
-#X connect 6 0 1 0;
-#X connect 7 0 0 0;
-#X connect 8 0 6 1;
-#X connect 9 0 7 0;
-#X connect 10 0 9 1;
-#X connect 28 0 47 2;
-#X connect 29 0 48 2;
-#X connect 30 0 49 2;
-#X connect 31 0 50 2;
-#X connect 32 0 51 2;
-#X connect 33 0 45 2;
-#X connect 34 0 52 2;
-#X connect 35 0 53 2;
-#X connect 36 0 54 2;
-#X connect 37 0 55 2;
-#X connect 38 0 56 2;
-#X connect 39 0 57 2;
-#X connect 40 0 2 0;
-#X connect 40 1 48 1;
-#X connect 40 2 49 1;
-#X connect 40 3 50 1;
-#X connect 40 4 51 1;
-#X connect 40 5 45 1;
-#X connect 40 6 52 1;
-#X connect 40 7 53 1;
-#X connect 40 8 54 1;
-#X connect 40 9 55 1;
-#X connect 40 10 56 1;
-#X connect 40 11 57 1;
-#X connect 40 12 58 1;
-#X connect 40 13 59 1;
-#X connect 40 14 60 1;
-#X connect 40 15 61 1;
-#X connect 41 0 58 2;
-#X connect 42 0 60 2;
-#X connect 43 0 59 2;
-#X connect 44 0 61 2;
-#X connect 45 0 52 0;
-#X connect 46 0 9 0;
-#X connect 46 0 6 0;
-#X connect 47 0 48 0;
-#X connect 48 0 49 0;
-#X connect 49 0 50 0;
-#X connect 50 0 51 0;
-#X connect 51 0 45 0;
-#X connect 52 0 53 0;
-#X connect 53 0 54 0;
-#X connect 54 0 55 0;
-#X connect 55 0 56 0;
-#X connect 56 0 57 0;
-#X connect 57 0 58 0;
-#X connect 58 0 59 0;
-#X connect 59 0 60 0;
-#X connect 60 0 61 0;
-#X connect 61 0 4 0;
-#X connect 62 0 6 0;
-#X connect 63 0 9 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-henon.pd b/externals/algocomp/algocomp-help-patches/help-henon.pd
deleted file mode 100755
index 05ffa4f5c..000000000
--- a/externals/algocomp/algocomp-help-patches/help-henon.pd
+++ /dev/null
@@ -1,57 +0,0 @@
-#N canvas 614 4 408 558 12;
-#X floatatom 112 45 5 0 0 0 - - -;
-#X floatatom 159 44 5 0 0 0 - - -;
-#X obj 15 203 gemhead;
-#X obj 14 237 translateXYZ;
-#X obj 32 467 gemwin;
-#X msg 157 432 1;
-#X msg 158 459 0;
-#X msg 82 403 create;
-#X msg 81 430 destroy;
-#N canvas 95 194 338 227 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 25 375 pd Gem.init;
-#X obj 63 403 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 74 121 * 2;
-#X obj 35 119 * 2;
-#X obj 16 173 t b f;
-#X floatatom 122 189 5 0 0 0 - - -;
-#X floatatom 125 153 5 0 0 0 - - -;
-#X obj 12 266 colorRGB 1 1 1;
-#X obj 14 293 sphere 0.02;
-#X obj 32 44 metro 50;
-#X obj 37 79 henon 2 0.3;
-#X obj 32 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X connect 0 0 19 1;
-#X connect 1 0 19 2;
-#X connect 2 0 3 0;
-#X connect 3 0 16 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 4 0;
-#X connect 11 0 3 2;
-#X connect 11 0 15 0;
-#X connect 12 0 13 0;
-#X connect 13 0 2 0;
-#X connect 13 1 3 1;
-#X connect 13 1 14 0;
-#X connect 16 0 17 0;
-#X connect 18 0 19 0;
-#X connect 19 0 12 0;
-#X connect 19 1 11 0;
-#X connect 20 0 18 0;
-#X coords 0 0 0.00123609 0.0020202 200 140 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-ifs.pd b/externals/algocomp/algocomp-help-patches/help-ifs.pd
deleted file mode 100755
index 28c981f85..000000000
--- a/externals/algocomp/algocomp-help-patches/help-ifs.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#N canvas 275 21 646 602 12;
-#X obj 31 272 gemhead;
-#X obj 31 296 translateXYZ;
-#X obj 32 467 gemwin;
-#X msg 170 433 1;
-#X msg 170 456 0;
-#X msg 82 403 create;
-#X msg 83 430 destroy;
-#N canvas 95 194 342 231 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 32 376 pd Gem.init;
-#X obj 59 403 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 31 249 t b f;
-#X obj 31 320 colorRGB 1 1 1;
-#X obj 31 344 sphere 0.02;
-#X obj 198 267 makenote 64 250;
-#X obj 198 293 noteout;
-#X obj 345 295 noteout;
-#X msg 15 3 0.5 0.5 0 0 1 0.5 0.5 0.5 0 1 0.5 0.5 0.25 0.5 1;
-#X msg 50 26 0.5 0.5 0 0 1 1 0.5 0.5 0.5 1 0.5 0.5 0 1 1;
-#X msg 74 50 0.5 0.5 0.25 0 1 0.5 0.25 1 0.5 1 1 0.5 0 0.5 1;
-#X obj 100 272 * 2;
-#X obj 67 222 t b f;
-#X obj 31 223 f;
-#X obj 31 198 * 2;
-#X obj 198 170 ifs;
-#X msg 86 74 0.333 0.1 0 0 1 0.667 0.333 0 0.667 1 0.333 0.667 0.667
-0 1;
-#X obj 198 215 map 0 2 52 88;
-#X obj 345 214 map 0 2 52 88;
-#X obj 345 268 makenote 64 100 250;
-#X obj 198 147 metro 250;
-#X obj 198 127 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X connect 0 0 1 0;
-#X connect 1 0 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 7 0 2 0;
-#X connect 8 0 2 0;
-#X connect 9 0 0 0;
-#X connect 9 1 1 1;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 12 1 13 1;
-#X connect 15 0 22 0;
-#X connect 16 0 22 0;
-#X connect 17 0 22 0;
-#X connect 18 0 1 2;
-#X connect 19 0 20 0;
-#X connect 19 1 18 0;
-#X connect 20 0 9 0;
-#X connect 21 0 20 1;
-#X connect 22 0 21 0;
-#X connect 22 0 24 0;
-#X connect 22 1 19 0;
-#X connect 22 1 25 0;
-#X connect 23 0 22 0;
-#X connect 24 0 12 0;
-#X connect 25 0 26 0;
-#X connect 26 0 14 0;
-#X connect 26 1 14 1;
-#X connect 27 0 22 0;
-#X connect 28 0 27 0;
-#X coords 0 0 0.00123609 0.0020202 200 140 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-ifsmusic.pd b/externals/algocomp/algocomp-help-patches/help-ifsmusic.pd
deleted file mode 100755
index c3083604d..000000000
--- a/externals/algocomp/algocomp-help-patches/help-ifsmusic.pd
+++ /dev/null
@@ -1,13 +0,0 @@
-#N canvas 0 0 482 332 12;
-#X obj 22 109 makenote 64;
-#X obj 22 134 noteout;
-#X obj 22 5 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1;
-#X obj 22 24 metro 250;
-#X msg 52 50 1 0 -1 1 -1 0 1 1;
-#X obj 22 83 ifsmusic 66 82 54 75 71;
-#X connect 0 0 1 0;
-#X connect 0 1 1 1;
-#X connect 2 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-logistic.pd b/externals/algocomp/algocomp-help-patches/help-logistic.pd
deleted file mode 100755
index ce233b5e9..000000000
--- a/externals/algocomp/algocomp-help-patches/help-logistic.pd
+++ /dev/null
@@ -1,32 +0,0 @@
-#N canvas 136 94 652 298 12;
-#X obj 140 84 tabwrite logistic;
-#N canvas 0 0 450 300 graph1 0;
-#X array logistic 96 float 2;
-#X coords 0 1 95 0 200 180 1;
-#X restore 315 16 graph;
-#X obj 14 132 noteout;
-#X floatatom 118 41 5 0 0 0 - - -;
-#X obj 235 59 + 1;
-#X obj 181 63 float;
-#X msg 181 41 0;
-#X obj 14 85 map 0 1 52 76;
-#X obj 14 40 metro 250;
-#X obj 223 41 select 96;
-#X obj 14 63 logistic 3.59;
-#X obj 15 20 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 14 107 makenote 100 250 500;
-#X connect 3 0 10 1;
-#X connect 4 0 5 1;
-#X connect 4 0 0 1;
-#X connect 4 0 9 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 0;
-#X connect 7 0 12 0;
-#X connect 8 0 5 0;
-#X connect 8 0 10 0;
-#X connect 10 0 0 0;
-#X connect 10 0 7 0;
-#X connect 11 0 8 0;
-#X connect 12 0 2 0;
-#X connect 12 1 2 1;
diff --git a/externals/algocomp/algocomp-help-patches/help-lorenz.pd b/externals/algocomp/algocomp-help-patches/help-lorenz.pd
deleted file mode 100755
index 13b855458..000000000
--- a/externals/algocomp/algocomp-help-patches/help-lorenz.pd
+++ /dev/null
@@ -1,64 +0,0 @@
-#N canvas 529 21 335 453 12;
-#X floatatom 68 86 5 0 0 0 - - -;
-#X floatatom 120 86 5 0 0 0 - - -;
-#X obj 16 198 gemhead;
-#X obj 16 223 translateXYZ;
-#X obj 23 394 gemwin;
-#X msg 154 358 1;
-#X msg 156 381 0;
-#X msg 73 330 create;
-#X msg 74 357 destroy;
-#N canvas 95 194 338 227 Gem.init 0;
-#X obj 118 18 loadbang;
-#X msg 201 78 reset;
-#X obj 118 113 outlet;
-#X obj 118 45 t b b;
-#X msg 22 77 buffer 1;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 3 1 1 0;
-#X connect 4 0 2 0;
-#X restore 16 305 pd Gem.init;
-#X obj 49 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 16 173 t b f;
-#X obj 16 248 colorRGB 1 1 1;
-#X floatatom 173 87 5 0 0 0 - - -;
-#X obj 16 108 lorenz 10 28 2.666;
-#X obj 16 148 / 20;
-#X obj 84 198 / 20;
-#X obj 126 198 / 20;
-#X floatatom 25 129 5 0 0 0 - - -;
-#X floatatom 102 131 5 0 0 0 - - -;
-#X floatatom 175 132 5 0 0 0 - - -;
-#X obj 16 273 sphere 0.01;
-#X obj 16 65 metro 10;
-#X obj 17 43 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X connect 0 0 14 1;
-#X connect 1 0 14 2;
-#X connect 2 0 3 0;
-#X connect 3 0 12 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 4 0;
-#X connect 11 0 2 0;
-#X connect 11 1 3 1;
-#X connect 12 0 21 0;
-#X connect 13 0 14 3;
-#X connect 14 0 15 0;
-#X connect 14 0 18 0;
-#X connect 14 1 16 0;
-#X connect 14 1 19 0;
-#X connect 14 2 17 0;
-#X connect 14 2 20 0;
-#X connect 15 0 11 0;
-#X connect 16 0 3 2;
-#X connect 17 0 3 3;
-#X connect 22 0 14 0;
-#X connect 23 0 22 0;
-#X coords 0 0 0.00123609 0.0020202 200 140 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-map.pd b/externals/algocomp/algocomp-help-patches/help-map.pd
deleted file mode 100755
index 4f610c5ad..000000000
--- a/externals/algocomp/algocomp-help-patches/help-map.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X obj 21 44 map 0 5 0 100;
-#X floatatom 21 23 5 0 0 0 - - -;
-#X floatatom 21 67 5 0 0 0 - - -;
-#X msg 64 22 3 2 0.2 1.4;
-#X text 155 21 rescale to the desired range arguments: float or list
-of floats;
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-oneoverf.pd b/externals/algocomp/algocomp-help-patches/help-oneoverf.pd
deleted file mode 100755
index ebde8ca1b..000000000
--- a/externals/algocomp/algocomp-help-patches/help-oneoverf.pd
+++ /dev/null
@@ -1,31 +0,0 @@
-#N canvas 41 117 658 266 12;
-#X obj 14 35 metro 100;
-#X obj 120 91 + 1;
-#X obj 156 91 select 100;
-#X msg 120 38 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array oneoverf 100 float 0;
-#X coords 0 1 99 0 300 140 1;
-#X restore 328 16 graph;
-#X obj 30 118 tabwrite oneoverf;
-#X obj 14 199 noteout;
-#X obj 14 148 map 0 1 0 127;
-#X obj 14 63 oneoverf 8;
-#X obj 14 15 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 14 173 makenote 100 100 100;
-#X obj 120 65 f;
-#X connect 0 0 8 0;
-#X connect 0 0 11 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 1;
-#X connect 1 0 11 1;
-#X connect 2 0 3 0;
-#X connect 3 0 11 0;
-#X connect 7 0 10 0;
-#X connect 8 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 0 0;
-#X connect 10 0 6 0;
-#X connect 10 1 6 1;
-#X connect 11 0 1 0;
diff --git a/externals/algocomp/algocomp-help-patches/help-selfsimilar.pd b/externals/algocomp/algocomp-help-patches/help-selfsimilar.pd
deleted file mode 100755
index 427afe3ac..000000000
--- a/externals/algocomp/algocomp-help-patches/help-selfsimilar.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#N canvas 51 221 474 392 12;
-#X obj 31 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 31 114 s n_out;
-#X obj 269 113 s n_out;
-#X obj 150 112 s n_out;
-#X obj 31 238 noteout;
-#X obj 31 161 r n_out;
-#X obj 31 212 makenote 60 100 250;
-#X obj 31 186 unpack;
-#X obj 31 61 selfsimilar 3 7 48 52 59 55;
-#X obj 31 32 metro 250;
-#X obj 31 88 pack 0 125;
-#X obj 150 87 pack 0 400;
-#X obj 269 87 pack 0 1000;
-#X connect 0 0 9 0;
-#X connect 5 0 7 0;
-#X connect 6 0 4 0;
-#X connect 6 1 4 1;
-#X connect 7 0 6 0;
-#X connect 7 1 6 2;
-#X connect 8 0 10 0;
-#X connect 8 1 11 0;
-#X connect 8 2 12 0;
-#X connect 9 0 8 0;
-#X connect 10 0 1 0;
-#X connect 11 0 3 0;
-#X connect 12 0 2 0;
diff --git a/externals/algocomp/algocomp.c b/externals/algocomp/algocomp.c
deleted file mode 100755
index 708351444..000000000
--- a/externals/algocomp/algocomp.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-* Main library file
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "helpers.c"
-#include "chaotic.c"
-#include "fractal.c"
-#include "ifs.c"
-#include "ifsmusic.c"
-#include "selfsimilar.c"
-#include "logistictilde.c"
-#include "gauss_tilde.c"
-#include "utils.c"
-#include "elementaryca.c"
-#include "genetic.c"
-#include "neural.c"
-#include "distribute.c"
-
-
-void algocomp_setup(void) {
-  logistic_class = class_new(gensym("logistic"),
-        (t_newmethod)logistic_new,
-        0, sizeof(t_logistic),
-        CLASS_DEFAULT, A_DEFFLOAT,0);
-  		class_addbang(logistic_class, logistic_bang);
-  henon_class = class_new(gensym("henon"),
-        (t_newmethod)henon_new,
-        0, sizeof(t_henon),
-        CLASS_DEFAULT, A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(henon_class, henon_bang);	
-  lorenz_class = class_new(gensym("lorenz"),
-        (t_newmethod)lorenz_new,
-        0, sizeof(t_lorenz),
-        CLASS_DEFAULT, A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(lorenz_class, lorenz_bang);
-   chaosgame_class = class_new(gensym("chaosgame"),
-        (t_newmethod)chaosgame_new,
-        0, sizeof(t_chaosgame),
-        CLASS_DEFAULT, A_DEFFLOAT,0);
-  		class_addbang(chaosgame_class, chaosgame_bang);
-   selfsimilar_class = class_new(gensym("selfsimilar"),
-        (t_newmethod)selfsimilar_new,
-        0, sizeof(t_selfsimilar),
-        CLASS_DEFAULT, A_GIMME,0);
-  		class_addbang(selfsimilar_class, selfsimilar_bang);
-   selfsimilarrhythm_class = class_new(gensym("selfsimilarrhythm"),
-        (t_newmethod)selfsimilarrhythm_new,
-        0, sizeof(t_selfsimilarrhythm),
-        CLASS_DEFAULT, A_DEFFLOAT,0);
- 		class_addbang(selfsimilarrhythm_class, selfsimilarrhythm_bang);	
-  ifs_class = class_new(gensym("ifs"),
-        (t_newmethod)ifs_new,
-        0, sizeof(t_ifs),
-        CLASS_DEFAULT, 0);
-  		class_addbang(ifs_class, ifs_bang);
-  		class_addmethod(ifs_class,(t_method)ifs_setFunctions,gensym("list"), A_GIMME,0);
-  distribute_class = class_new(gensym("distribute"),
-        (t_newmethod)distribute_new,
-        0, sizeof(t_distribute),
-        CLASS_DEFAULT,  A_DEFFLOAT, 0);
-  		class_addmethod(distribute_class,(t_method)distribute_float,gensym("float"), A_FLOAT,0);
-  		
-  		
-  ifsmusic_class = class_new(gensym("ifsmusic"),
-        (t_newmethod)ifsmusic_new,
-        0, sizeof(t_ifsmusic),
-        CLASS_DEFAULT, A_GIMME, 0);
-  		class_addbang(ifsmusic_class, ifsmusic_bang);
-  		class_addmethod(ifsmusic_class,(t_method)ifsmusic_setFunctions,gensym("list"), A_GIMME,0);	
-  		class_addmethod(ifsmusic_class,(t_method)ifsmusic_setNotes,gensym("notes"), A_GIMME,0);	
-   		class_addmethod(ifsmusic_class,(t_method)ifsmusic_outputSerie,gensym("serie"), 0); 		
-  eca_class = class_new(gensym("eca"),
-        (t_newmethod)eca_new,
-        0, sizeof(t_eca),
-        CLASS_DEFAULT,A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(eca_class, eca_bang);
-  		class_addmethod(eca_class,(t_method)eca_randomize,gensym("randomize"), 0);
-  		class_addmethod(eca_class,(t_method)eca_activateMiddleCell,gensym("init"), 0);	
-  genetic_class = class_new(gensym("genetic"),
-        (t_newmethod)genetic_new,
-        0, sizeof(t_genetic),
-        CLASS_DEFAULT,A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,0);
-  		class_addbang(genetic_class, genetic_bang);
-  		class_addmethod(genetic_class,(t_method)genetic_randomize,gensym("randomize"), 0);
-  		class_addmethod(genetic_class,(t_method)genetic_setTarget,gensym("target"), A_GIMME,0);				
-	//void class_addlist(t_class *c, t_method fn);
-  mlp_class = class_new(gensym("mlp"),
-        (t_newmethod)mlp_new,
-        0, sizeof(t_mlp),
-        CLASS_DEFAULT,0);
-  		class_addbang(mlp_class, mlp_bang);
-  		class_addmethod(mlp_class,(t_method)mlp_inputed,gensym("list"), A_GIMME, 0);  		
-  		class_addmethod(mlp_class,(t_method)mlp_train,gensym("train"), 0);
-  		class_addmethod(mlp_class,(t_method)mlp_setTarget,gensym("target"), A_GIMME,0);
-  oneoverf_class = class_new(gensym("oneoverf"),
-        (t_newmethod)oneoverf_new,
-        0, sizeof(t_oneoverf),
-        CLASS_DEFAULT,A_DEFFLOAT,  0);
-  		class_addbang(oneoverf_class, oneoverf_bang);
-	logistic_tilde_class = class_new(gensym("logistic~"),
-		(t_newmethod)logistic_tilde_new,
-		0, sizeof(t_logistic_tilde),
-		CLASS_DEFAULT,
-		A_DEFFLOAT, 
-		0);
-		class_addmethod(logistic_tilde_class, 
-		(t_method)logistic_tilde_dsp, gensym("dsp"), 0);
-	// CLASS_MAINSIGNALIN(logistic_tilde_class, t_logistic_tilde, f);	
-	gauss_tilde_class = class_new(gensym("gauss~"), 
-		(t_newmethod)gauss_tilde_new, 0,
-    	sizeof(t_gauss_tilde), 
-    	0, A_DEFFLOAT, A_DEFFLOAT, 0);
-    class_addmethod(gauss_tilde_class, (t_method)gauss_tilde_dsp, 
-    gensym("dsp"), 0);
-    // class_addbang(rand_gauss_class, rand_gauss_bang);
-	map_class = class_new(gensym("map"),
-		(t_newmethod)map_new,
-		0, sizeof(t_map),
-		CLASS_DEFAULT,
-		A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0);
-		
-	class_addfloat(map_class, map_float);
-	class_addmethod(map_class,(t_method)map_list,gensym("list"), A_GIMME, 0);
-	
-	post("AlgoComp library loaded - v_0.20060116");	
-	
-}
-
diff --git a/externals/algocomp/chaotic.c b/externals/algocomp/chaotic.c
deleted file mode 100755
index ef3977ad7..000000000
--- a/externals/algocomp/chaotic.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-* Chaotic function objects
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *logistic_class;
-static t_class *henon_class;
-static t_class *lorenz_class;
-
-
-typedef struct _logistic {
-  t_object  x_obj;
-  t_float x;
-  t_float a;
-  t_outlet *note_out;
-} t_logistic;
-
-void logistic_bang(t_logistic *x)
-{
-if (x->a > 4) x->a = 4;
-if (x->a <= 0) x->a = 0.01;
-outlet_float(x->note_out, x->x);
-x->x = x->a*x->x*(1-x->x);
-}
-
-void *logistic_new(t_floatarg f)
-{
-  t_logistic *x = (t_logistic *)pd_new(logistic_class);
-  x->a = f;
-  x->x = 0.5;
-  x->note_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->a);
-  return (void *)x;
-}
-
-typedef struct _henon {
-  t_object  x_obj;
-  t_float x,y,B,A;
-  t_outlet *x_out, *y_out;
-} t_henon;
-
-void henon_bang(t_henon *x)
-{
-outlet_float(x->x_out, x->x);
-outlet_float(x->y_out, x->y);
-x->x = x->y+1-x->A*x->x*x->x;
-x->y = x->B*x->x;
-}
-
-void *henon_new(t_floatarg f1,t_floatarg f2)
-{
-  t_henon *x = (t_henon *)pd_new(henon_class);
-  x->A = f1;
-  x->B = f2;
-  x->x = 0;
-  x->y = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  
-  floatinlet_new(&x->x_obj, &x->A);
-  floatinlet_new(&x->x_obj, &x->B);
-  
-  return (void *)x;
-}
-
-typedef struct _lorenz {
-  t_object  x_obj;
-  t_float x,y,z,B,R,S,xdot,ydot,zdot,dt;
-  t_outlet *x_out, *y_out, *z_out;
-} t_lorenz;
-
-void lorenz_bang(t_lorenz *x)
-{
-outlet_float(x->x_out, x->x);
-outlet_float(x->y_out, x->y);
-outlet_float(x->z_out, x->z);
-x->xdot = x->S * (x->y - x->x);
-x->ydot = x->R * x->x - x->y  - (x->x * x->z);
-x->zdot = x->x * x->y - x->B * x->z;
-x->x = x->x + x->xdot * x->dt;
-x->y = x->y + x->ydot * x->dt;
-x->z = x->z + x->zdot * x->dt;
-
-}
-
-void *lorenz_new(t_floatarg f1,t_floatarg f2,t_floatarg f3,t_floatarg f4)
-{
-  t_lorenz *x = (t_lorenz *)pd_new(lorenz_class);
-  x->S = f1;
-  x->R = f2;
-  x->B = f3;
-  x->x = 0.1;
-  x->y = 0.1;
-  x->z = 0.1;
-  x->dt = 0.01;
-  if (f4 != 0) x->dt = f4;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  x->z_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->S);  
-  floatinlet_new(&x->x_obj, &x->R);
-  floatinlet_new(&x->x_obj, &x->B);  
-  return (void *)x;
-}
diff --git a/externals/algocomp/distribute.c b/externals/algocomp/distribute.c
deleted file mode 100755
index d39d16a75..000000000
--- a/externals/algocomp/distribute.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *distribute_class;
-
-typedef struct _distribute {
-  t_object x_obj;
-  t_int counter;
-  t_int max;
-  t_outlet *out[128];//,*r_out,*n_out;
-} t_distribute;
-
-void distribute_float(t_distribute *x,t_float in)
-{
-outlet_float(x->out[x->counter],in);
-x->counter++;
-if (x->counter == x->max)
-x->counter = 0;
-//x->out[x->counter] = in;
-}
-
-void *distribute_new(t_floatarg f1)
-{
-	int i;
-	t_distribute *x = (t_distribute *)pd_new(distribute_class);
-	x->counter = 0;
-	if ((f1>0) && (f1<128))
-	x->max = (t_int) f1;
-	else x->max = 8;
-  	for (i=0;i<x->max;i++)
-  	x->out[i] = outlet_new(&x->x_obj,&s_float);
-  	return (void *)x;
-}
diff --git a/externals/algocomp/elementaryca.c b/externals/algocomp/elementaryca.c
deleted file mode 100755
index 52ee6fb7a..000000000
--- a/externals/algocomp/elementaryca.c
+++ /dev/null
@@ -1,132 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define TRUE  1
-#define FALSE 0
-#define MAX_ARRAY_SIZE 256
-
-//Already defined elsewhere ??
-//typedef short boolean;
-
-static t_class *eca_class;
-
-
-typedef struct _eca {
-  t_object  x_obj;
-  t_int counter;
-  boolean cells[256];
-  t_int size;
-  //t_int offset;
-  t_outlet *on_cells;
-  //t_outlet *firstcell;
-  t_atom oncells[256];
-  boolean ruletable[8];
-  t_int rule;
-  t_float inrule;
-} t_eca;
-
-void randomizeCells(t_eca *x) {
-	int i;
-	for (i=0;i<x->size;i++) {
-	x->cells[i] = ((t_float) rand())/RAND_MAX*2;	
-	}
-}
-
-void eca_activateMiddleCell(t_eca *x) {
-	int i;
-	post("activate middle cell");
-	for (i=0;i<x->size;i++) {
-	x->cells[i] = FALSE;	
-	}
-	x->cells[x->size/2] = TRUE;
-}
-
-void calculateCellStates(t_eca *x) {
-	
-	int i;
-	
-	boolean newstates[MAX_ARRAY_SIZE];
-	newstates[0] = x->ruletable[x->cells[x->size-1]*4+x->cells[0]*2+x->cells[1]];
-	newstates[x->size-1] = x->ruletable[x->cells[x->size-2]*4+x->cells[x->size-1]*2+x->cells[0]];
-	for (i=1;i<x->size-1;i++) {
-	newstates[i] = x->ruletable[x->cells[i-1]*4+x->cells[i]*2+x->cells[i+1]];
-	}
-	for (i=0;i<x->size;i++) {
-	x->cells[i] = newstates[i];
-	}
-}
-
-void eca_randomize(t_eca *x) {
-post("Randomize called");	
-randomizeCells(x);
-}
-
-void createRuleTable(t_eca *x,unsigned short decimalcode) {
-	
-	int i;
-	post("Rule changed to %d",x->rule);
-	//decimalcode to binary
-	fast_d2b(decimalcode,x->ruletable);
-	//for (i=0;i<8;i++) 
-	//post("%d",x->ruletable[i]);
-}
-
-void eca_bang(t_eca *x)
-{
-t_atom *y;
-int i;
-int k = 0;
-if ((t_int) x->inrule != x->rule) {
-x->rule = (t_int) x->inrule/1;
-createRuleTable(x,(unsigned short) x->rule);
-}
-//startpost("%d",x->counter);
-for (i=0;i<x->size;i++) {
-	if (x->cells[i]==TRUE)
-	{
-		//startpost("& $\\bullet$ ");
-		SETFLOAT(&x->oncells[k],i);
-//		SETFLOAT(&x->oncells[k],i+x->offset);
-//		oncells[k] = y;
-		k++;
-	}
-	//else startpost("& ");
-	
-	
-}
-//post("\\tabularnewline");
-x->counter++;
-//randomizeCells(x);
-outlet_list(x->on_cells,&s_list, k, &x->oncells[0]);
-calculateCellStates(x); // calculate for next step
-//outlet_float(x->firstcell,x->cells[0]);
-}
-
-
-
-/*
- * take argument rule, size, init (0=random), (1=middlecell active)
- */
-void *eca_new(t_floatarg rule,t_floatarg size,t_floatarg init)
-{
-  
-  t_eca *x = (t_eca *)pd_new(eca_class);
-  //inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("randomize"));
-  if (size != 0)
-  x->size = size;
-  else (size = 16);
-  //x->offset = offset;
-  
-  if (init == 0) randomizeCells(x);
-  else if (init == 1) eca_activateMiddleCell(x);
-  x->rule = rule;	
-  x->inrule = rule;
-  x->counter = 1;
-  createRuleTable(x,(unsigned short) rule);
-  x->on_cells = outlet_new(&x->x_obj,&s_list);
-  //x->firstcell = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->inrule);  
-  return (void *)x;
-}
diff --git a/externals/algocomp/fractal.c b/externals/algocomp/fractal.c
deleted file mode 100755
index 26c0cccbc..000000000
--- a/externals/algocomp/fractal.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *oneoverf_class;
-static t_class *chaosgame_class;
-
-
-/* 
- * Implementation of 1/f noise sequences
- */
-
-typedef struct _oneoverf {
-  t_object x_obj;
-//  t_int nrp;
-  t_int nrbits;
-  t_float bits;
-  t_float output;
-  t_float rans[32];
-//  t_int count[16];
-  t_int counter;
-//  t_float avg[16];  
-  t_outlet *note_out;//,*r_out,*n_out;
-} t_oneoverf;
-
-void oneoverf_bang(t_oneoverf *x)
-{
-if ((t_int) x->bits != x->nrbits) {
-post("Changed number of bits");
-x->nrbits = (t_int) x->bits;
-x->counter = 0;	
-}
-int i;
-outlet_float(x->note_out, x->output);
-//outlet_float(x->r_out, x->nrp);
-//outlet_float(x->n_out, x->nrp);
-x->output = 0; // ((t_float) rand())/RAND_MAX/x->nrbits;
-x->counter++;
-for (i=x->nrbits-1;i>=0;i--) {
-//  x->avg[i] = ((t_float) (x->avg[i]*(x->count[i]-1)+x->old))/x->count[i];
-  
-  if (x->counter%((int) pow(2,i)) == 0) {
-  if (i == x->nrbits-1) x->counter = 0;
-//  x->count[i] = 1;
-//  x->avg[i] = 0;
-  x->rans[i] = ((t_float) rand())/RAND_MAX/x->nrbits;
-  post("Changing value of %d, counter: %d",i,x->counter);
-  i = -1; // break
-  }
-}
-for (i=0;i<x->nrbits;i++) {
-  x->output += x->rans[i];
-}
-}
-
-void *oneoverf_new(t_floatarg f1)
-{
-  t_oneoverf *x = (t_oneoverf *)pd_new(oneoverf_class);
-  int i;
-  x->bits = f1;
-  x->nrbits = (t_int) f1;
-  if (f1 < 1) x->nrbits = 1;
-  else if (f1 > 32) x->nrbits = 32;
-  x->output = 0;
-  x->counter = 0;
-  for (i=0;i<x->nrbits;i++) {
-  x->rans[i] = (((t_float) rand())/RAND_MAX)/x->nrbits;
- // x->count[i] = 1;
-//  x->avg[i] = 0;
-  x->output += x->rans[i];
-  post("Random generators: %d", x->nrbits);
-  }
-  x->note_out = outlet_new(&x->x_obj,&s_float);
-    floatinlet_new(&x->x_obj, &x->bits);  
-  //x->r_out = outlet_new(&x->x_obj,&s_float);
-  //x->n_out = outlet_new(&x->x_obj,&s_float);
-  return (void *)x;
-}
-
-/*
- * Implementation of the chaos game!
- */
-typedef struct _chaosgame {
-  t_object x_obj;
-  t_float x,y;
-  t_float px[3],py[3];
-  t_outlet *x_out,*y_out;
-} t_chaosgame;
-
-
-void chaosgame_bang(t_chaosgame *x)
-{	
-int i;	
-outlet_float(x->x_out, x->x);
-outlet_float(x->y_out, x->y);
-i = 3*rand()/32765;
-x->x = (x->x + x->px[i])/2;
-x->y = (x->y + x->py[i])/2;
-}
-
-void *chaosgame_new(t_floatarg f1)
-{
-  t_chaosgame *x = (t_chaosgame *)pd_new(chaosgame_class);
-	x->px[0] = -1;
-    x->py[0] = -1;
-    x->px[1] = 0;
-    x->py[1] = 1;
-    x->px[2] = 1;
-    x->py[2] = -1;
-
-	x->x = rand()/RAND_MAX;
-	x->y = rand()/RAND_MAX;
-	
-	x->x_out = outlet_new(&x->x_obj,&s_float);
-  	x->y_out = outlet_new(&x->x_obj,&s_float);
-  	return (void *)x;
-}
diff --git a/externals/algocomp/gauss_tilde.c b/externals/algocomp/gauss_tilde.c
deleted file mode 100755
index b04b61a4b..000000000
--- a/externals/algocomp/gauss_tilde.c
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "m_pd.h"
-
-
-#define fran()         (t_float)rand()/(t_float)RAND_MAX
-
-static char *version = "gauss v0.1, generates a Gaussian distributed random variable\n"
-                       "            with mean 'mu' and standard deviation 'sigma',\n"
-                       "            written by Olaf Matthes <olaf.matthes@gmx.de>";
-
-/* -------------------------- rand_gauss ------------------------------ */
-
-static t_class *gauss_tilde_class;
-
-typedef struct _gauss_tilde
-{
-    t_object x_obj;
-	t_float  x_sigma;
-	t_float  x_mu;
-} t_gauss_tilde;
-
-
-
-t_int *gauss_tilde_perform(t_int *w)
-{
-	t_gauss_tilde *x = (t_gauss_tilde *)(w[1]);
-	t_sample *out = (t_sample *)(w[2]);
-	int n = (int)(w[3]);
-	t_float u, halfN = 6.0, sum = 0, scale;
-	t_int k, N = 12;
-	scale = 1/sqrt(N/12);
-	while (n--){
-		sum = 0;
-		for(k = 1; k <= N; k++)
-		sum += fran();
-	 	*out++ = x->x_sigma*scale*(sum-halfN)+x->x_mu;
-	 }
-	 return (w+4);
-}
-
-void gauss_tilde_dsp(t_gauss_tilde *x, t_signal **sp)
-{
-dsp_add(gauss_tilde_perform, 3, x,
-sp[0]->s_vec, 
-sp[0]->s_n);
-}
-
-
-void *gauss_tilde_new(t_floatarg fs, t_floatarg fm)
-{
-    t_gauss_tilde *x = (t_gauss_tilde *)pd_new(gauss_tilde_class);
-
-    floatinlet_new(&x->x_obj, &x->x_sigma);
-    floatinlet_new(&x->x_obj, &x->x_mu);
-    outlet_new(&x->x_obj, &s_signal);
-	x->x_sigma = fs;
-	x->x_mu = fm;
-    return (x);
-}
-
-
-
-
-
-
-
diff --git a/externals/algocomp/genetic.c b/externals/algocomp/genetic.c
deleted file mode 100755
index 5c908f2f7..000000000
--- a/externals/algocomp/genetic.c
+++ /dev/null
@@ -1,218 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define TRUE  1
-#define FALSE 0
-#define MAX_ARRAY_SIZE 256
-//typedef short boolean;
-
-static t_class *genetic_class;
-
-typedef struct _individual {
-	boolean genes[MAX_ARRAY_SIZE];
-	float fitness;
-	t_int length;
-} 	t_individual;
-
-typedef struct _genetic {
-  t_object  x_obj;
-  float cumulativeprobability;
-  t_int individuallength;
-  t_individual population[MAX_ARRAY_SIZE];
-  t_int populationsize;
-  t_individual targetindividual;
-  t_atom out[MAX_ARRAY_SIZE];
-  t_int chunksize;
-  t_outlet *outlist;
-} t_genetic;
-
-void randomizeIndividuals(t_genetic *x) {
-	int i,k;
-	for (k=0;k<x->populationsize;k++) {
-	for (i=0;i<x->individuallength;i++) {
-	x->population[k].genes[i] = ((t_float) rand())/RAND_MAX*2;	
-	}
-	x->population[k].length = x->individuallength;
-	}
-//	x->population[0].genes[0] = 1;
-//	x->population[0].genes[1] = 0;
-}
-
-void printTarget(t_genetic *x) {
-	unsigned int out[MAX_ARRAY_SIZE];
-	int i;	
-	for (i=0;i< x->targetindividual.length/x->chunksize;i++) {
-	fast_b2short(&out[i],&x->targetindividual.genes[i*x->chunksize],x->chunksize);	
-	SETFLOAT(&x->out[i],out[i]);
-	}
-	outlet_list(x->outlist,&s_list, i, &x->out[0]);
-}
-
-
-void randomTargetIndividual(t_genetic *x) {
-	int i;
-	for (i=0;i<x->individuallength;i++) {
-	x->targetindividual.genes[i] = ((t_float) rand())/RAND_MAX*2;	
-	}
-	x->targetindividual.length = x->individuallength;
-	//printTarget(&x->targetindividual,x);
-}
-
-/*float evaluateFitness(t_genetic *x,int index) {
-	int fitness = 0;
-	int i;
-//	post("Fitness eval");
-	for (i=0;i<x->individuallength;i++) {
-	//if (x->targetindividual.genes[i] == x->population[index].genes[i])
-	//if (x->population[index].genes[i] == TRUE)
-	fitness += x->population[0].genes[0];
-	//fitness++;
-	}
-	return fitness/x->individuallength;
-	//return 1;
-}
-*/
-void startReproduction(t_genetic *x) {
-	int selectedIndividuals[MAX_ARRAY_SIZE];
-	int count = 0;
-	int i;
-	float r;
-	t_individual childs[MAX_ARRAY_SIZE];
-	int childindex = 0;
-	for (count =0; count < x->populationsize/4; count++) {
-		float sum = 0;
-		i = 0;
-		r = ((t_float) rand())/RAND_MAX * x->cumulativeprobability;
-		while (r > sum) {
-				sum += x->population[i].fitness;
-				i++;
-		}
-		selectedIndividuals[count] = i;
-	}
-	post("parents: %d",count);
-	i=0;
-	while (i<count) {
-	int k = 0;
-	for (k=0;k<8;k++) {
-	int l;
-	r = ((t_float) rand())/RAND_MAX * x->individuallength;
-	for (l=0;l<x->individuallength;l++) {
-	if (l<r) childs[childindex].genes[l] = x->population[selectedIndividuals[i]].genes[l];
-	else childs[childindex].genes[l] = x->population[selectedIndividuals[i+1]].genes[l];
-	}
-	// mutation
-	r = ((t_float) rand())/RAND_MAX * x->individuallength;
-	childs[childindex].genes[(int)r] = 1-childs[childindex].genes[(int)r];
-	childindex++;
-	}
-	i+=2;
-	}
-	for (i=0;i<childindex;i++) {
-	x->population[i] = childs[i];	
-	}
-	post("New childs: %d",childindex);
-	
-}
-
-
-int evaluatePopulation(t_genetic *x) {
-	int i,k;
-	int f;
-	int highestfitnessindex = 0;
-	float highestfitness = 0;
-	float mean;
-	x->cumulativeprobability = 0;
-	for (k=0; k < x->populationsize; k++) {
-		float fitness = 0;
-		for (i=0;i<x->individuallength;i++) {
-		//x->population[k].genes[i] = 0;
-		if (x->targetindividual.genes[i] == x->population[k].genes[i])
-		fitness++;
-//		fitness += x->population[k].genes[i];
-		}
-		x->population[k].fitness = fitness/x->individuallength;
-		x->population[k].fitness = (fitness/x->individuallength)*(fitness/x->individuallength);
-
-		if (x->population[k].fitness > highestfitness) {
-		// post("fitness of %d: %f",k,fitness);
-		highestfitness = x->population[k].fitness;
-		highestfitnessindex = k;
-		}
-		x->cumulativeprobability+=x->population[k].fitness;
-	}
-	//recalculate 
-	mean = x->cumulativeprobability/x->populationsize;
-	x->cumulativeprobability = 0;
-	for (k=0;k < x->populationsize; k++) {
-		if (x->population[k].fitness < mean)
-		x->population[k].fitness = 0;
-		else x->cumulativeprobability += x->population[k].fitness;	
-	}
-	post("Highest fitness: %f",highestfitness);
-	return highestfitnessindex;
-}
-
-
-void genetic_setTarget(t_genetic *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-post("target called: %d",argc);
-	for (i=0;i< x->individuallength/x->chunksize;i++) {
-		if (i >= argc) break;
-		fast_d2bl(atom_getint(&argv[i]),&x->targetindividual.genes[i*x->chunksize],x->chunksize);
-
-	}
-	printTarget(x);
-}
-
-void genetic_randomize(t_genetic *x) {
-post("Randomize called");	
-randomizeIndividuals(x);
-}
-
-void genetic_bang(t_genetic *x)
-{
-	int selected = 1;
-	unsigned int out[MAX_ARRAY_SIZE];
-	int i;	
-	selected = evaluatePopulation(x);
-	//post("Selected individual: %d",selected);
-	for (i=0;i< x->individuallength/x->chunksize;i++) {
-		//out[i] = ((t_float) rand())/RAND_MAX*2;
-		fast_b2short(&out[i],&x->population[selected].genes[i*x->chunksize],x->chunksize);
-		//fast_b2short8(&out[i],&x->population[selected].genes[i*8]);	
-		SETFLOAT(&x->out[i],out[i]);
-	} 
-	//	fast_b2d(&out,&x->population[0].genes[0]);
-//	fast_b2short(&out,&x->population[0].genes[0]);
-//	fast_b2d(&out,&test[0]);
-//	out = 100;
-//	SETFLOAT(&x->out[1],out);
-	outlet_list(x->outlist,&s_list, i, &x->out[0]);
-	startReproduction(x);
-}
-
-
-/*
- * take argument rule, size, and offset
- */
-void *genetic_new(t_float popsize,t_float indsize, t_float chunksize)
-{
-  t_genetic *x = (t_genetic *)pd_new(genetic_class);
-  //inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("randomize"));
-  if ((popsize > 0) && (popsize <= 256))
-  x->populationsize = popsize;
-  else x->populationsize = 256;
-  if ((indsize > 0) && (indsize <= 256))
-  x->individuallength = indsize;
-  else x->individuallength = 256;
-  if ((chunksize <= 16) && (chunksize > 0))
-  x->chunksize = (int) chunksize;
-  else x->chunksize = 8;
-  randomizeIndividuals(x);
-  randomTargetIndividual(x);
-  inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("target"));
-  x->outlist = outlet_new(&x->x_obj,&s_list);
-  return (void *)x;
-}
diff --git a/externals/algocomp/helpers.c b/externals/algocomp/helpers.c
deleted file mode 100755
index dc7e754ff..000000000
--- a/externals/algocomp/helpers.c
+++ /dev/null
@@ -1,42 +0,0 @@
-void fast_d2bl(int x, short *c, short length) {
-	int i;
-	for (i=0;i<length;i++) 
-	*(c++) = (x >> i) & 0x1;
-}
-
-void fast_d2b(unsigned short x, short *c) {
-	int i;
-	for (i=0;i<8;i++) 
-	*(c++) = (x >> i) & 0x1;
-}
-
-
-void fast_b2d(unsigned long int *n, short *c) {
-int i = 32;
-*n = 0;
-while(i--) {
-*n <<=1;
-*n+= *(c+i);
-}
-}
-
-void fast_b2short8(unsigned short *n, short *c) {
-int i = 8;
-*n = 0;
-while(i--) {
-*n <<=1;
-*n+= *(c+i);
-}
-}
-
-void fast_b2short(unsigned int *n, short *c,short length) {
-int i;
-if ((length <= 16) && (length > 0))
-i = length;
-else i = 8;
-*n = 0;
-while(i--) {
-*n <<=1;
-*n+= *(c+i);
-}
-}
diff --git a/externals/algocomp/ifs.c b/externals/algocomp/ifs.c
deleted file mode 100755
index 55207b305..000000000
--- a/externals/algocomp/ifs.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *ifs_class;
-
-
-/*
- * An interated function system music example
- * a more general approach is needed.
- */
-typedef struct _ifs {
-  t_object  x_obj;
-  t_int nr_functions;
-  t_float R1,R2;
-  t_float T1[6],T2[6],S1[6],S2[6];
-  t_float A[6], B[6];
-  t_float C[6], D[6], P[6];
-  t_float x,y;
-  t_outlet *x_out,*y_out, *i_out;
-} t_ifs;
-
-
-void ifs_bang(t_ifs *x)
-{
-float r = ((float) rand())/RAND_MAX;
-int i = 0;
-while (r > x->P[i])
-i++;
-//post("Applying function nr: %d",i);
-//x->x = x->A[i]*x->x + x->B[i]*x->y + x->T1[i];
-//x->y = x->C[i]*x->x + x->D[i]*x->y + x->T2[i];
-x->x = x->S1[i]*x->x + x->T1[i];
-x->y = x->S2[i]*x->y + x->T2[i];
-outlet_float(x->x_out,x->x);
-outlet_float(x->y_out,x->y);
-//outlet_float(x->i_out,r);
-}
-
-void ifs_setFunctions(t_ifs *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-float p = 0;
-x->nr_functions = argc/5;
-post("%d new function set!",x->nr_functions);
-
-for (i=0;i<x->nr_functions;i++) {
-	x->S1[i] = atom_getfloat(&argv[i*5]);
-	x->S2[i] = atom_getfloat(&argv[i*5+1]);
-	x->T1[i] = atom_getfloat(&argv[i*5+2]);
-	x->T2[i] = atom_getfloat(&argv[i*5+3]);
-	x->P[i] = p+atom_getfloat(&argv[i*5+4]);
-	p = x->P[i];
-}	
-
-if (p != 1.0) {
-	float scale = 1.0/p;
-	post("%d new function set. Scale probabilities by %f",x->nr_functions,scale);
-	for (i=0;i<x->nr_functions;i++) {
-	x->P[i] = scale*x->P[i];	
-	startpost("p for %d: %f; ",i,x->P[i]);
-	}
-}
-
-}
-
-void *ifs_new(t_floatarg f1)
-{
-  t_ifs *x = (t_ifs *)pd_new(ifs_class);
-  t_float p;
-  t_float R1[6],R2[6],S1[6],S2[6];
-  t_int i; 
-  x->nr_functions = 3;
-  p = 1.0/x->nr_functions;
-  //R1[0]=R1[1]=R1[2]=R1[3]=R1[4]=R1[5]= 1;
-  //R2[0]=R2[1]=R2[2]=R2[3]=R2[4]=R2[5]= 0;
-  //S1[0]=S1[1]=S1[2]=S1[3]=S1[4]=S1[5]= 0.5;//0.33333;
-  //S2[0]=S2[1]=S2[2]=S2[3]=S2[4]=S2[5]= 1;//0.33333;
-  
-  x->S1[0]=0.333;
-  x->S2[0]=0.333;
-  x->S1[1]=0.667;
-  x->S2[1]=0.333;
-  x->S1[2]=0.333;
-  x->S2[2]=0.333;
-  x->T1[0] = 0;
-  x->T2[0] = 0;
-  x->T1[1] = 0.333;
-  x->T2[1] = 0.333;
-  x->T1[2] = 0;
-  x->T2[2] = 0.667;
-
-  for (i = 0;i<x->nr_functions;i++) {
-  x->P[i] = p*(i+1);
-  post("prob %d: %f",i,x->P[i]);
-  }
-  x->x = 0;
-  x->y = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  //x->i_out = outlet_new(&x->x_obj,&s_float); 
-  post("ifs initialized");
-  return (void *)x;
-}
-
diff --git a/externals/algocomp/ifs.c.old b/externals/algocomp/ifs.c.old
deleted file mode 100755
index 670de6006..000000000
--- a/externals/algocomp/ifs.c.old
+++ /dev/null
@@ -1,77 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *ifs_class;
-
-
-/*
- * An interated function system music example
- * a more general approach is needed.
- */
-typedef struct _ifs {
-  t_object  x_obj;
-  t_float R1,R2,S1,S2;
-  t_float T1[6],T2[6];
-  t_float A[6], B[6];
-  t_float C[6], D[6],P[6];
-  t_float x,y;
-  t_outlet *x_out,*y_out, *i_out;
-} t_ifs;
-
-
-void ifs_bang(t_ifs *x)
-{
-float r = ((float) rand())/RAND_MAX;
-int i = 0;
-while (r > x->P[i])
-i++;
-x->x = x->A[i]*x->x + x->B[i]*x->y + x->T1[i];
-x->y = x->C[i]*x->x + x->D[i]*x->y + x->T2[i];
-outlet_float(x->x_out,x->x);
-outlet_float(x->y_out,x->y);
-outlet_float(x->i_out,r);
-}
-
-
-
-void *ifs_new(t_floatarg f1)
-{
-  x->nr_functions = 3;
-  t_float R1[6],R2[6],S1[6],S2[6];
-  t_ifs *x = (t_ifs *)pd_new(ifs_class);
-  t_int i; 
-  t_float p = 1/x->nr_functions;
-  R1[0]=R1[1]=R1[2]=R1[3]=R1[4]=R1[5]= 1;
-  R2[0]=R2[1]=R2[2]=R2[3]=R2[4]=R2[5]= 0;
-  S1[0]=S1[1]=S1[2]=S1[3]=S1[4]=S1[5]= 0.5;//0.33333;
-  S2[0]=S2[1]=S2[2]=S2[3]=S2[4]=S2[5]= 1;//0.33333;
-  x->T1[0] = 0;
-  x->T2[0] = 2;
-  x->T1[1] = 1.5;
-  x->T2[1] = 1;
-  x->T1[2] = 1.5;
-  x->T2[2] = -1;
-  x->T1[3] = 0;
-  x->T2[3] = -2;
-  x->T1[4] = -1.5;
-  x->T2[4] = -1;
-  x->T1[5] = -1.5;
-  x->T2[5] = 1;
-  for (i = 0;i<6;i++) {
-  x->A[i] = S1[i]*cos(R1[i]);
-  x->B[i] = -S2[i]*sin(R2[i]);
-  x->C[i] = S1[i]*sin(R1[i]);
-  x->D[i] = S2[i]*cos(R2[i]);
-  x->P[i] = p*(i+1);
-  }
-  x->x = 0;
-  x->y = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  x->y_out = outlet_new(&x->x_obj,&s_float);
-  x->i_out = outlet_new(&x->x_obj,&s_float); 
-  post("ifs initialized");
-  return (void *)x;
-}
-
diff --git a/externals/algocomp/ifsmusic.c b/externals/algocomp/ifsmusic.c
deleted file mode 100755
index 342050e6a..000000000
--- a/externals/algocomp/ifsmusic.c
+++ /dev/null
@@ -1,151 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *ifsmusic_class;
-
-/*
- * An interated function system music example
- */
-typedef struct _ifsmusic {
-  t_object x_obj;
-  t_int nr_notes;
-  t_int nr_functions;
-//  t_int melodylength;
-  t_float T[16];
-  t_float S[16];
-  t_float P[16];
-  t_int R[16];
-  t_int count;
-  t_float note[16];
-  t_atom notesout[16];
-  t_outlet *x_out;
-} t_ifsmusic;
-
-
-
-
-void nextSerie(t_ifsmusic *x) {
-int i;
-if (x->count == x->nr_notes) {	
-t_float ra = rand();
-t_float r = ra/RAND_MAX;
-int k = 0;
-t_float noten[16];
-x->count = 0;
-while (r>x->P[k]) k++;
-post("Selected function %d, r=%f",k,r);
-for (i=1;i<x->nr_notes;i++) {
-x->note[i]  = ((x->note[i] - x->note[0])*x->S[k]) + x->note[0];
-}
-
-for (i=0;i<x->nr_notes;i++) {
-x->note[i] = x->note[i] + x->T[k];
-}
-if (x->R[k] == -1) {
-for (i=0;i<x->nr_notes;i++) 
-noten[x->nr_notes-1-i]=x->note[i];
-for (i=0;i<x->nr_notes;i++) 
-x->note[i]=noten[i];
-}
-}
-}
-
-void ifsmusic_outputSerie(t_ifsmusic *x)
-{
-	int i;	
-	for (i=0;i< x->nr_notes;i++) {
-	//x->notesout[i] = x->note[i];
-	SETFLOAT(&x->notesout[i],x->note[i]);
-	}
-	
-outlet_list(x->x_out,&s_list, x->nr_notes, &x->notesout[0]);	
-x->count = x->nr_notes;	
-nextSerie(x);	
-}
-
-void ifsmusic_bang(t_ifsmusic *x)
-{
-outlet_float(x->x_out,x->note[x->count]);
-x->count++;
-nextSerie(x);
-}
-
-void ifsmusic_setNotes(t_ifsmusic *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-x->nr_notes = argc;
-post("%d new notes set!",x->nr_notes);
-for (i=0;i<x->nr_notes;i++) {
-	x->note[i] = atom_getfloat(&argv[i]);
-}	
-}
-
-void ifsmusic_setFunctions(t_ifsmusic *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-float p = 0;
-x->nr_functions = argc/4;
-post("%d new function set!",x->nr_functions);
-
-for (i=0;i<x->nr_functions;i++) {
-	x->S[i] = atom_getfloat(&argv[i*4]);
-	x->T[i] = atom_getfloat(&argv[i*4+1]);
-//	x->T2[i] = atom_getfloat(&argv[i*5+2]);
-	x->P[i] = p+atom_getfloat(&argv[i*4+3]);
-	x->R[i] = (t_int) atom_getfloat(&argv[i*4+2]);
-	p = x->P[i];
-	post("function %d: %f %f %d %f",i,x->S[i],x->T[i],x->R[i],x->P[i]);
-}	
-
-if (p != 1.0) {
-	float scale = 1.0/p;
-	// post("%d new function set. Scale probabilities by %f",x->nr_functions,scale);
-	for (i=0;i<x->nr_functions;i++) {
-	x->P[i] = scale*x->P[i];	
-	// startpost("p for %d: %f; ",i,x->P[i]);
-	}
-}
-
-}
-
-
-void ifsmusic_initDummyNoteSequence(t_ifsmusic *x) {
-  x->nr_notes = 3;
-  x->note[0] = 66;
-  x->note[1] = 70;
-  x->note[2] = 63;
-}
-
-void ifsmusic_initDummyFunctions(t_ifsmusic *x) {
-  int i; 
-  x->T[0] = 0;
-  x->T[1] = 0;
-  x->T[2] = 0;
-  x->S[0] = 1;
-  x->S[1] = 1;
-  x->S[2] = 1;
-  x->R[0] = 1;
-  x->R[1] = 1;
-  x->R[2] = 1;  
-  x->nr_functions = 3;
-  for (i=0;i<x->nr_functions;i++) x->P[i] = (t_float) (i+1)/x->nr_functions;
-}
-	
-
-void *ifsmusic_new(t_symbol *s, int argc, t_atom *argv)
-{
-  t_ifsmusic *x = (t_ifsmusic *)pd_new(ifsmusic_class);
-  x->count = 0;
-  x->x_out = outlet_new(&x->x_obj,&s_float);
-  //x->mapped_out = outlet_new(&x->x_obj,&s_float);
-  if (argc == 0) ifsmusic_initDummyNoteSequence(x);
-  else {
-  	int i;
-  	x->nr_notes = argc;
-  	for (i=0;i<argc;i++) 
-  	x->note[i] = atom_getfloat(argv+i);
-  }
-  ifsmusic_initDummyFunctions(x);
-  post("Ifsmusic initialised with sequence length: %d",x->nr_notes);
-  return (void *)x;
-}
diff --git a/externals/algocomp/logistictilde.c b/externals/algocomp/logistictilde.c
deleted file mode 100755
index 72aa59237..000000000
--- a/externals/algocomp/logistictilde.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Trying logistic function for audio processing
-*/
-
-#include "m_pd.h"
-
-static t_class *logistic_tilde_class;
-
-typedef struct _logistic_tilde {
-t_object x_obj;
-t_sample f_logistic;
-t_sample f;
-t_float a;
-} t_logistic_tilde;
-
-t_sample logistic(t_sample x,t_float a) {
-	return a*x*(1-x);
-}
-
-t_int *logistic_tilde_perform(t_int *w)
-{
-t_logistic_tilde *x = (t_logistic_tilde *)(w[1]);
-//t_sample *in1 = (t_sample *)(w[2]);
-//t_sample *in2 = (t_sample *)(w[3]);
-t_sample *out = (t_sample *)(w[2]);
-int n = (int)(w[3]);
-//t_sample f_logistic = (x->f_logistic<0)?0.0:(x->f_logistic>1)?1.0:x->f_logistic;
-while (n--){
-	  x->f_logistic = logistic(x->f_logistic,x->a);
-	 *out++ = x->f_logistic - 0.5;
-	 }
-
-return (w+4);
-}
-
-
-
-void logistic_tilde_dsp(t_logistic_tilde *x, t_signal **sp)
-{
-dsp_add(logistic_tilde_perform, 3, x,
-sp[0]->s_vec, 
-//sp[1]->s_vec, 
-//sp[2]->s_vec,
-sp[0]->s_n);
-}
-
-void *logistic_tilde_new(t_floatarg f)
-{
-t_logistic_tilde *x = (t_logistic_tilde *)pd_new(logistic_tilde_class);
-x->f_logistic = 0.5;
-x->a = 3.7;
-if (x->a < 0) x->a = 1;
-if (x->a > 4) x->a = 4;
-//inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
-floatinlet_new (&x->x_obj, &x->a);
-outlet_new(&x->x_obj, &s_signal);
-return (void *)x;
-}
-
diff --git a/externals/algocomp/m_pd.h b/externals/algocomp/m_pd.h
deleted file mode 100755
index fc9d6abdc..000000000
--- a/externals/algocomp/m_pd.h
+++ /dev/null
@@ -1,635 +0,0 @@
-/* Copyright (c) 1997-1999 Miller Puckette.
-* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
-
-#ifndef __m_pd_h_
-
-#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
-extern "C" {
-#endif
-
-#define PD_MAJOR_VERSION 0
-#define PD_MINOR_VERSION 38   
-
-/* old name for "MSW" flag -- we have to take it for the sake of many old
-"nmakefiles" for externs, which will define NT and not MSW */
-#if defined(NT) && !defined(MSW)
-#define MSW
-#endif
-
-#ifdef MSW
-/* #pragma warning( disable : 4091 ) */
-#pragma warning( disable : 4305 )  /* uncast const double to float */
-#pragma warning( disable : 4244 )  /* uncast float/int conversion etc. */
-#pragma warning( disable : 4101 )  /* unused automatic variables */
-#endif /* MSW */
-
-    /* the external storage class is "extern" in UNIX; in MSW it's ugly. */
-#ifdef MSW
-#ifdef PD_INTERNAL
-#define EXTERN __declspec(dllexport) extern
-#else
-#define EXTERN __declspec(dllimport) extern
-#endif /* PD_INTERNAL */
-#else
-#define EXTERN extern
-#endif /* MSW */
-
-    /* and depending on the compiler, hidden data structures are
-    declared differently: */
-#if defined( __GNUC__) || defined( __BORLANDC__ ) || defined( __MWERKS__ )
-#define EXTERN_STRUCT struct
-#else
-#define EXTERN_STRUCT extern struct
-#endif
-
-
-#if !defined(_SIZE_T) && !defined(_SIZE_T_)
-#include <stddef.h>     /* just for size_t -- how lame! */
-#endif
-
-#define MAXPDSTRING 1000        /* use this for anything you want */
-#define MAXPDARG 5              /* max number of args we can typecheck today */
-
-/* signed and unsigned integer types the size of a pointer:  */
-/* GG: long is the size of a pointer */
-typedef long t_int;
-
-typedef float t_float;  /* a floating-point number at most the same size */
-typedef float t_floatarg;  /* floating-point type for function calls */
-
-typedef struct _symbol
-{
-    char *s_name;
-    struct _class **s_thing;
-    struct _symbol *s_next;
-} t_symbol;
-
-EXTERN_STRUCT _array;
-#define t_array struct _array       /* g_canvas.h */
-
-/* pointers to glist and array elements go through a "stub" which sticks
-around after the glist or array is freed.  The stub itself is deleted when
-both the glist/array is gone and the refcount is zero, ensuring that no
-gpointers are pointing here. */
-
-#define GP_NONE 0       /* the stub points nowhere (has been cut off) */
-#define GP_GLIST 1      /* the stub points to a glist element */
-#define GP_ARRAY 2      /* ... or array */
-
-typedef struct _gstub
-{
-    union
-    {
-        struct _glist *gs_glist;    /* glist we're in */
-        struct _array *gs_array;    /* array we're in */
-    } gs_un;
-    int gs_which;                   /* GP_GLIST/GP_ARRAY */
-    int gs_refcount;                /* number of gpointers pointing here */
-} t_gstub;
-
-typedef struct _gpointer           /* pointer to a gobj in a glist */
-{
-    union
-    {   
-        struct _scalar *gp_scalar;  /* scalar we're in (if glist) */
-        union word *gp_w;           /* raw data (if array) */
-    } gp_un;
-    int gp_valid;                   /* number which must match gpointee */
-    t_gstub *gp_stub;               /* stub which points to glist/array */
-} t_gpointer;
-
-typedef union word
-{
-    t_float w_float;
-    t_symbol *w_symbol;
-    t_gpointer *w_gpointer;
-    t_array *w_array;
-    struct _glist *w_list;
-    int w_index;
-} t_word;
-
-typedef enum
-{
-    A_NULL,
-    A_FLOAT,
-    A_SYMBOL,
-    A_POINTER,
-    A_SEMI,
-    A_COMMA,
-    A_DEFFLOAT,
-    A_DEFSYM,
-    A_DOLLAR, 
-    A_DOLLSYM,
-    A_GIMME,
-    A_CANT
-}  t_atomtype;
-
-#define A_DEFSYMBOL A_DEFSYM    /* better name for this */
-
-typedef struct _atom
-{
-    t_atomtype a_type;
-    union word a_w;
-} t_atom;
-
-EXTERN_STRUCT _class;
-#define t_class struct _class
-
-EXTERN_STRUCT _outlet;
-#define t_outlet struct _outlet
-
-EXTERN_STRUCT _inlet;
-#define t_inlet struct _inlet
-
-EXTERN_STRUCT _binbuf;
-#define t_binbuf struct _binbuf
-
-EXTERN_STRUCT _clock;
-#define t_clock struct _clock
-
-EXTERN_STRUCT _outconnect;
-#define t_outconnect struct _outconnect
-
-EXTERN_STRUCT _glist;
-#define t_glist struct _glist
-#define t_canvas struct _glist  /* LATER lose this */
-
-typedef t_class *t_pd;      /* pure datum: nothing but a class pointer */
-
-typedef struct _gobj        /* a graphical object */
-{
-    t_pd g_pd;              /* pure datum header (class) */
-    struct _gobj *g_next;   /* next in list */
-} t_gobj;
-
-typedef struct _scalar      /* a graphical object holding data */
-{
-    t_gobj sc_gobj;         /* header for graphical object */
-    t_symbol *sc_template;  /* template name (LATER replace with pointer) */
-    t_word sc_vec[1];       /* indeterminate-length array of words */
-} t_scalar;
-
-typedef struct _text        /* patchable object - graphical, with text */
-{
-    t_gobj te_g;                /* header for graphical object */
-    t_binbuf *te_binbuf;        /* holder for the text */
-    t_outlet *te_outlet;        /* linked list of outlets */
-    t_inlet *te_inlet;          /* linked list of inlets */
-    short te_xpix;              /* x&y location (within the toplevel) */
-    short te_ypix;
-    short te_width;             /* requested width in chars, 0 if auto */
-    unsigned int te_type:2;     /* from defs below */
-} t_text;
-
-#define T_TEXT 0        /* just a textual comment */
-#define T_OBJECT 1      /* a MAX style patchable object */
-#define T_MESSAGE 2     /* a MAX stype message */
-#define T_ATOM 3        /* a cell to display a number or symbol */
-
-#define te_pd te_g.g_pd
-
-   /* t_object is synonym for t_text (LATER unify them) */
-
-typedef struct _text t_object;
-
-#define ob_outlet te_outlet
-#define ob_inlet te_inlet
-#define ob_binbuf te_binbuf
-#define ob_pd te_g.g_pd
-#define ob_g te_g
-
-typedef void (*t_method)(void);
-typedef void *(*t_newmethod)( void);
-typedef void (*t_gotfn)(void *x, ...);
-
-/* ---------------- pre-defined objects and symbols --------------*/
-EXTERN t_pd pd_objectmaker;     /* factory for creating "object" boxes */
-EXTERN t_pd pd_canvasmaker;     /* factory for creating canvases */
-EXTERN t_symbol s_pointer;
-EXTERN t_symbol s_float;
-EXTERN t_symbol s_symbol;
-EXTERN t_symbol s_bang;
-EXTERN t_symbol s_list;
-EXTERN t_symbol s_anything;
-EXTERN t_symbol s_signal;
-EXTERN t_symbol s__N;
-EXTERN t_symbol s__X;
-EXTERN t_symbol s_x;
-EXTERN t_symbol s_y;
-EXTERN t_symbol s_;
-
-/* --------- prototypes from the central message system ----------- */
-EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv);
-EXTERN t_symbol *gensym(char *s);
-EXTERN t_gotfn getfn(t_pd *x, t_symbol *s);
-EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s);
-EXTERN void nullfn(void);
-EXTERN void pd_vmess(t_pd *x, t_symbol *s, char *fmt, ...);
-#define mess0(x, s) ((*getfn((x), (s)))((x)))
-#define mess1(x, s, a) ((*getfn((x), (s)))((x), (a)))
-#define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b)))
-#define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c)))
-#define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d)))
-#define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), (a),(b),(c),(d),(e)))
-EXTERN void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN t_pd *pd_newest(void);
-
-/* --------------- memory management -------------------- */
-EXTERN void *getbytes(size_t nbytes);
-EXTERN void *getzbytes(size_t nbytes);
-EXTERN void *copybytes(void *src, size_t nbytes);
-EXTERN void freebytes(void *x, size_t nbytes);
-EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
-
-/* -------------------- atoms ----------------------------- */
-
-#define SETSEMI(atom) ((atom)->a_type = A_SEMI, (atom)->a_w.w_index = 0)
-#define SETCOMMA(atom) ((atom)->a_type = A_COMMA, (atom)->a_w.w_index = 0)
-#define SETPOINTER(atom, gp) ((atom)->a_type = A_POINTER, \
-    (atom)->a_w.w_gpointer = (gp))
-#define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f))
-#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
-    (atom)->a_w.w_symbol = (s))
-#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
-    (atom)->a_w.w_index = (n))
-#define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \
-    (atom)->a_w.w_symbol= (s))
-
-EXTERN t_float atom_getfloat(t_atom *a);
-EXTERN t_int atom_getint(t_atom *a);
-EXTERN t_symbol *atom_getsymbol(t_atom *a);
-EXTERN t_symbol *atom_gensym(t_atom *a);
-EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
-EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv);
-EXTERN t_symbol *atom_getsymbolarg(int which, int argc, t_atom *argv);
-
-EXTERN void atom_string(t_atom *a, char *buf, unsigned int bufsize);
-
-/* ------------------  binbufs --------------- */
-
-EXTERN t_binbuf *binbuf_new(void);
-EXTERN void binbuf_free(t_binbuf *x);
-EXTERN t_binbuf *binbuf_duplicate(t_binbuf *y);
-
-EXTERN void binbuf_text(t_binbuf *x, char *text, size_t size);
-EXTERN void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp);
-EXTERN void binbuf_clear(t_binbuf *x);
-EXTERN void binbuf_add(t_binbuf *x, int argc, t_atom *argv);
-EXTERN void binbuf_addv(t_binbuf *x, char *fmt, ...);
-EXTERN void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y);
-EXTERN void binbuf_addsemi(t_binbuf *x);
-EXTERN void binbuf_restore(t_binbuf *x, int argc, t_atom *argv);
-EXTERN void binbuf_print(t_binbuf *x);
-EXTERN int binbuf_getnatom(t_binbuf *x);
-EXTERN t_atom *binbuf_getvec(t_binbuf *x);
-EXTERN void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv);
-EXTERN int binbuf_read(t_binbuf *b, char *filename, char *dirname,
-    int crflag);
-EXTERN int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname,
-    int crflag);
-EXTERN int binbuf_write(t_binbuf *x, char *filename, char *dir,
-    int crflag);
-EXTERN void binbuf_evalfile(t_symbol *name, t_symbol *dir);
-EXTERN t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av,
-    int tonew);
-
-/* ------------------  clocks --------------- */
-
-EXTERN t_clock *clock_new(void *owner, t_method fn);
-EXTERN void clock_set(t_clock *x, double systime);
-EXTERN void clock_delay(t_clock *x, double delaytime);
-EXTERN void clock_unset(t_clock *x);
-EXTERN double clock_getlogicaltime(void);
-EXTERN double clock_getsystime(void); /* OBSOLETE; use clock_getlogicaltime() */
-EXTERN double clock_gettimesince(double prevsystime);
-EXTERN double clock_getsystimeafter(double delaytime);
-EXTERN void clock_free(t_clock *x);
-
-/* ----------------- pure data ---------------- */
-EXTERN t_pd *pd_new(t_class *cls);
-EXTERN void pd_free(t_pd *x);
-EXTERN void pd_bind(t_pd *x, t_symbol *s);
-EXTERN void pd_unbind(t_pd *x, t_symbol *s);
-EXTERN t_pd *pd_findbyclass(t_symbol *s, t_class *c);
-EXTERN void pd_pushsym(t_pd *x);
-EXTERN void pd_popsym(t_pd *x);
-EXTERN t_symbol *pd_getfilename(void);
-EXTERN t_symbol *pd_getdirname(void);
-EXTERN void pd_bang(t_pd *x);
-EXTERN void pd_pointer(t_pd *x, t_gpointer *gp);
-EXTERN void pd_float(t_pd *x, t_float f);
-EXTERN void pd_symbol(t_pd *x, t_symbol *s);
-EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
-#define pd_class(x) (*(x))
-
-/* ----------------- pointers ---------------- */
-EXTERN void gpointer_init(t_gpointer *gp);
-EXTERN void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto);
-EXTERN void gpointer_unset(t_gpointer *gp);
-EXTERN int gpointer_check(const t_gpointer *gp, int headok);
-
-/* ----------------- patchable "objects" -------------- */
-EXTERN t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1,
-    t_symbol *s2);
-EXTERN t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp);
-EXTERN t_inlet *floatinlet_new(t_object *owner, t_float *fp);
-EXTERN t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp);
-EXTERN void inlet_free(t_inlet *x);
-
-EXTERN t_outlet *outlet_new(t_object *owner, t_symbol *s);
-EXTERN void outlet_bang(t_outlet *x);
-EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp);
-EXTERN void outlet_float(t_outlet *x, t_float f);
-EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
-EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
-EXTERN t_symbol *outlet_getsymbol(t_outlet *x);
-EXTERN void outlet_free(t_outlet *x);
-EXTERN t_object *pd_checkobject(t_pd *x);
-
-
-/* -------------------- canvases -------------- */
-
-EXTERN void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
-
-EXTERN void canvas_setargs(int argc, t_atom *argv);
-EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
-EXTERN t_symbol *canvas_getcurrentdir(void);
-EXTERN t_glist *canvas_getcurrent(void);
-EXTERN void canvas_makefilename(t_glist *c, char *file,
-    char *result,int resultsize);
-EXTERN t_symbol *canvas_getdir(t_glist *x);
-EXTERN int sys_fontwidth(int fontsize);
-EXTERN int sys_fontheight(int fontsize);
-EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b);
-
-/* ---------------- widget behaviors ---------------------- */
-
-EXTERN_STRUCT _widgetbehavior;
-#define t_widgetbehavior struct _widgetbehavior
-
-EXTERN_STRUCT _parentwidgetbehavior;
-#define t_parentwidgetbehavior struct _parentwidgetbehavior
-EXTERN t_parentwidgetbehavior *pd_getparentwidget(t_pd *x);
-
-/* -------------------- classes -------------- */
-
-#define CLASS_DEFAULT 0         /* flags for new classes below */
-#define CLASS_PD 1
-#define CLASS_GOBJ 2
-#define CLASS_PATCHABLE 3
-#define CLASS_NOINLET 8
-
-#define CLASS_TYPEMASK 3
-
-
-EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod,
-    t_method freemethod, size_t size, int flags, t_atomtype arg1, ...);
-EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s, 
-    t_atomtype type1, ...);
-EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
-    t_atomtype arg1, ...);
-EXTERN void class_addbang(t_class *c, t_method fn);
-EXTERN void class_addpointer(t_class *c, t_method fn);
-EXTERN void class_doaddfloat(t_class *c, t_method fn);
-EXTERN void class_addsymbol(t_class *c, t_method fn);
-EXTERN void class_addlist(t_class *c, t_method fn);
-EXTERN void class_addanything(t_class *c, t_method fn);
-EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s);
-EXTERN void class_setwidget(t_class *c, t_widgetbehavior *w);
-EXTERN void class_setparentwidget(t_class *c, t_parentwidgetbehavior *w);
-EXTERN t_parentwidgetbehavior *class_parentwidget(t_class *c);
-EXTERN char *class_getname(t_class *c);
-EXTERN char *class_gethelpname(t_class *c);
-EXTERN void class_setdrawcommand(t_class *c);
-EXTERN int class_isdrawcommand(t_class *c);
-EXTERN void class_domainsignalin(t_class *c, int onset);
-#define CLASS_MAINSIGNALIN(c, type, field) \
-    class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0)
-
-         /* prototype for functions to save Pd's to a binbuf */
-typedef void (*t_savefn)(t_gobj *x, t_binbuf *b);
-EXTERN void class_setsavefn(t_class *c, t_savefn f);
-EXTERN t_savefn class_getsavefn(t_class *c);
-        /* prototype for functions to open properties dialogs */
-typedef void (*t_propertiesfn)(t_gobj *x, struct _glist *glist);
-EXTERN void class_setpropertiesfn(t_class *c, t_propertiesfn f);
-EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
-
-#ifndef PD_CLASS_DEF
-#define class_addbang(x, y) class_addbang((x), (t_method)(y))
-#define class_addpointer(x, y) class_addpointer((x), (t_method)(y))
-#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
-#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
-#define class_addlist(x, y) class_addlist((x), (t_method)(y))
-#define class_addanything(x, y) class_addanything((x), (t_method)(y))
-#endif
-
-/* ------------   printing --------------------------------- */
-EXTERN void post(const char *fmt, ...);
-EXTERN void startpost(const char *fmt, ...);
-EXTERN void poststring(const char *s);
-EXTERN void postfloat(float f);
-EXTERN void postatom(int argc, t_atom *argv);
-EXTERN void endpost(void);
-EXTERN void error(const char *fmt, ...);
-EXTERN void bug(const char *fmt, ...);
-EXTERN void pd_error(void *object, const char *fmt, ...);
-EXTERN void sys_logerror(const char *object, const char *s);
-EXTERN void sys_unixerror(const char *object);
-EXTERN void sys_ouch(void);
-
-
-/* ------------  system interface routines ------------------- */
-EXTERN int sys_isreadablefile(const char *name);
-EXTERN void sys_bashfilename(const char *from, char *to);
-EXTERN void sys_unbashfilename(const char *from, char *to);
-EXTERN int open_via_path(const char *name, const char *ext, const char *dir,
-    char *dirresult, char **nameresult, unsigned int size, int bin);
-EXTERN int sched_geteventno(void);
-EXTERN double sys_getrealtime(void);
-EXTERN int (*sys_idlehook)(void);   /* hook to add idle time computation */
-
-
-/* ------------  threading ------------------- */
-/* T.Grill - see m_sched.c */
- 
-EXTERN void sys_lock(void);
-EXTERN void sys_unlock(void);
-EXTERN int sys_trylock(void);
-
-
-/* --------------- signals ----------------------------------- */
-
-typedef float t_sample;
-#define MAXLOGSIG 32
-#define MAXSIGSIZE (1 << MAXLOGSIG)
-
-typedef struct _signal
-{
-    int s_n;            /* number of points in the array */
-    t_sample *s_vec;    /* the array */
-    float s_sr;         /* sample rate */
-    int s_refcount;     /* number of times used */
-    int s_isborrowed;   /* whether we're going to borrow our array */
-    struct _signal *s_borrowedfrom;     /* signal to borrow it from */
-    struct _signal *s_nextfree;         /* next in freelist */
-    struct _signal *s_nextused;         /* next in used list */
-} t_signal;
-
-
-typedef t_int *(*t_perfroutine)(t_int *args);
-
-EXTERN t_int *plus_perform(t_int *args);
-EXTERN t_int *zero_perform(t_int *args);
-EXTERN t_int *copy_perform(t_int *args);
-
-EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n);
-EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n);
-EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n);
-EXTERN void dsp_add_zero(t_sample *out, int n);
-
-EXTERN int sys_getblksize(void);
-EXTERN float sys_getsr(void);
-EXTERN int sys_get_inchannels(void);
-EXTERN int sys_get_outchannels(void);
-
-EXTERN void dsp_add(t_perfroutine f, int n, ...);
-EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec);
-EXTERN void pd_fft(float *buf, int npoints, int inverse);
-EXTERN int ilog2(int n);
-
-EXTERN void mayer_fht(float *fz, int n);
-EXTERN void mayer_fft(int n, float *real, float *imag);
-EXTERN void mayer_ifft(int n, float *real, float *imag);
-EXTERN void mayer_realfft(int n, float *real);
-EXTERN void mayer_realifft(int n, float *real);
-
-EXTERN float *cos_table;
-#define LOGCOSTABSIZE 9
-#define COSTABSIZE (1<<LOGCOSTABSIZE)
-
-EXTERN int canvas_suspend_dsp(void);
-EXTERN void canvas_resume_dsp(int oldstate);
-EXTERN void canvas_update_dsp(void);
-
-/* IOhannes { (up/downsampling) */
-typedef struct _resample
-{
-  int method;       /* up/downsampling method ID */
-
-  t_int downsample; /* downsampling factor */
-  t_int upsample;   /* upsampling factor */
-
-  t_float *s_vec;   /* here we hold the resampled data */
-  int      s_n;
-
-  t_float *coeffs;  /* coefficients for filtering... */
-  int      coefsize;
-
-  t_float *buffer;  /* buffer for filtering */
-  int      bufsize;
-} t_resample;
-
-EXTERN void resample_init(t_resample *x);
-EXTERN void resample_free(t_resample *x);
-
-EXTERN void resample_dsp(t_resample *x, t_sample *in, int insize, t_sample *out, int outsize, int method);
-EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsize, int method);
-EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method);
-/* } IOhannes */
-
-/* ----------------------- utility functions for signals -------------- */
-EXTERN float mtof(float);
-EXTERN float ftom(float);
-EXTERN float rmstodb(float);
-EXTERN float powtodb(float);
-EXTERN float dbtorms(float);
-EXTERN float dbtopow(float);
-
-EXTERN float q8_sqrt(float);
-EXTERN float q8_rsqrt(float);
-#ifndef N32     
-EXTERN float qsqrt(float);  /* old names kept for extern compatibility */
-EXTERN float qrsqrt(float);
-#endif
-/* --------------------- data --------------------------------- */
-
-    /* graphical arrays */
-EXTERN_STRUCT _garray;
-#define t_garray struct _garray
-
-EXTERN t_class *garray_class;
-EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec);
-EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx);
-EXTERN void garray_redraw(t_garray *x);
-EXTERN int garray_npoints(t_garray *x);
-EXTERN char *garray_vec(t_garray *x);
-EXTERN void garray_resize(t_garray *x, t_floatarg f);
-EXTERN void garray_usedindsp(t_garray *x);
-EXTERN void garray_setsaveit(t_garray *x, int saveit);
-EXTERN t_class *scalar_class;
-
-EXTERN t_float *value_get(t_symbol *s);
-EXTERN void value_release(t_symbol *s);
-EXTERN int value_getfloat(t_symbol *s, t_float *f);
-EXTERN int value_setfloat(t_symbol *s, t_float f);
-
-/* ------- GUI interface - functions to send strings to TK --------- */
-typedef void (*t_guicallbackfn)(t_gobj *client, t_glist *glist);
-
-EXTERN void sys_vgui(char *fmt, ...);
-EXTERN void sys_gui(char *s);
-EXTERN void sys_pretendguibytes(int n);
-EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f);
-EXTERN void sys_unqueuegui(void *client);
-    /* dialog window creation and destruction */
-EXTERN void gfxstub_new(t_pd *owner, void *key, const char *cmd);
-EXTERN void gfxstub_deleteforkey(void *key);
-
-extern t_class *glob_pdobject;  /* object to send "pd" messages */
-
-/*-------------  Max 0.26 compatibility --------------------*/
-
-/* the following reflects the new way classes are laid out, with the class
-   pointing to the messlist and not vice versa. Externs shouldn't feel it. */
-typedef t_class *t_externclass;
-
-EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine,
-    t_method freeroutine, t_symbol *name, size_t size, int tiny, \
-    t_atomtype arg1, ...);
-EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...);
-
-#define t_getbytes getbytes
-#define t_freebytes freebytes
-#define t_resizebytes resizebytes
-#define typedmess pd_typedmess
-#define vmess pd_vmess
-
-/* A definition to help gui objects straddle 0.34-0.35 changes.  If this is
-defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */
-
-#define PD_USE_TE_XPIX
-
-
-#ifdef __i386__
-/* a test for NANs and denormals.  Should only be necessary on i386. */
-#define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \
-    (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000))
-/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
-#define PD_BIGORSMALL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
-    (((*(unsigned int*)&(f))&0x60000000)==0x60000000))
-#else
-#define PD_BADFLOAT(f) 0
-#define PD_BIGORSMALL(f) 0
-#endif
-
-#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
-}
-#endif
-
-#define __m_pd_h_
-#endif /* __m_pd_h_ */
diff --git a/externals/algocomp/neural.c b/externals/algocomp/neural.c
deleted file mode 100755
index 3f23523eb..000000000
--- a/externals/algocomp/neural.c
+++ /dev/null
@@ -1,157 +0,0 @@
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define MAX_LAYERS 3
-#define MAX_UNITS 3
-
-
-static t_class *mlp_class;
-
-
-typedef struct _mlp {
-	t_object  x_obj;
-	int nr_inputunits;
-	int nr_hiddenunits;
-	int nr_outunits;
-	int nr_layers;
-	t_float weights[2][MAX_UNITS][MAX_UNITS];
-	t_float output[3][MAX_UNITS];
-	t_float bias[2][MAX_UNITS];
-	t_float input[MAX_UNITS];
-	t_float target[MAX_UNITS];
-	float eta;
-	t_outlet *out,*error_out;
-} 	t_mlp;
-
-
-void calculateOutput(t_mlp *x) {
-	int i,k,l;
-	for (k=0;k<x->nr_hiddenunits;k++) {
-			x->output[1][k] = x->bias[0][k];
-			for (l=0;l<x->nr_inputunits;l++) {
-			x->output[1][k] += x->output[0][l]*x->weights[0][l][k];
-			}
-		x->output[1][k] = 1.0/(1.0-exp(-x->output[1][k]));
-	}
-	for (k=0;k<x->nr_outunits;k++) {
-			x->output[2][k] = x->bias[1][k];
-			for (l=0;l<x->nr_hiddenunits;l++) {
-			x->output[2][k] += x->output[1][l]*x->weights[1][l][k];
-			}
-		x->output[2][k] = 1.0/(1.0-exp(-x->output[2][k]));	
-	}
-}
-
-void measureError(t_mlp *x) {
-//post("Measuring Error");
-int i,k,j;
-float Error = 0.0;
-float SumDOW[MAX_UNITS];
-float DeltaH[MAX_UNITS];
-float DeltaO[MAX_UNITS];
-float DeltaWeightIH[MAX_UNITS][MAX_UNITS];
-float DeltaWeightHO[MAX_UNITS][MAX_UNITS];
-  
-  for(k=0 ;k<x->nr_outunits;k++) {
-  	Error +=0.5*(x->target[k]-x->output[2][k])*(x->target[k]-x->output[2][k]);
- 	DeltaO[k] = (x->target[k]-x->output[2][k]);//*x->output[2][k] * (1 - x->output[2][k]);
-	}
-	
-  post("Target: %f Error: %f Delta: %f", x->target[0], Error, DeltaO[0]);
-  outlet_float(x->error_out, Error);
-  for(j=0;j<x->nr_hiddenunits;j++) {         /* 'back-propagate' errors to hidden layer */
-      SumDOW[j] = 0.0 ;
-      for(k=0 ; k<=x->nr_outunits; k++ ) {
-            SumDOW[j] += x->weights[1][j][k]*DeltaO[k] ;
-      }
-      DeltaH[j] = SumDOW[j] * x->output[1][j]* (1.0 - x->output[1][j]);
-  }
-   for(j = 0 ;j<x->nr_hiddenunits; j++) {         /* update weights WeightIH */
-      //DeltaWeightIH[0][j] = + x->alpha*DeltaWeightIH[0][j];
-      x->bias[0][j] += x->eta*DeltaH[j];
-      for(i = 0; i < x->nr_inputunits ; i++ ) {
-            DeltaWeightIH[i][j] = x->eta * x->output[0][i] * DeltaH[j];// + x->alpha * DeltaWeightIH[i][j];
-            x->weights[0][i][j] += DeltaWeightIH[i][j];
-      }
-	}
-	for( k = 0; k < x->nr_outunits; k++) {         /* update weights WeightHO */
-      x->bias[1][k] += x->eta*DeltaO[k];
-//      DeltaWeightHO[0][k] = x->eta * DeltaO[k] + x->alpha * DeltaWeightHO[0][k] ;
-//      x->weights[1][0][k] += DeltaWeightHO[0][k];
-      for(j = 0; j < x->nr_hiddenunits; j++ ) {
-            DeltaWeightHO[j][k] = x->eta * x->output[1][j] * DeltaO[k];// + x->alpha * DeltaWeightHO[j][k] ;
-            x->weights[1][j][k] += DeltaWeightHO[j][k];
-      }
-}
-}
-
-
-void mlp_bang(t_mlp *x)
-{
-	calculateOutput(x);
-	outlet_float(x->out, x->output[2][0]);
-}
-
-void mlp_inputed(t_mlp *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-post("inputed called");
-for (i=0;i<argc;i++) {
-	if (i > x->nr_inputunits) break;
-	x->output[0][i] = atom_getfloat(&argv[i]);
-}
-mlp_bang(x);
-}
-
-void mlp_setTarget(t_mlp *x,t_symbol *s, int argc, t_atom *argv) {
-int i;
-//post("target called: %d",argc);
-for (i=0;i<argc-1;i++) {
-	if (i > x->nr_inputunits) break;
-	x->output[0][i] = atom_getfloat(&argv[i]);
-}
-post("set targetto: %f",atom_getfloat(&argv[argc-1]));
-x->target[0] = atom_getfloat(&argv[argc-1]);
-mlp_bang(x);
-measureError(x);
-}
-
-
-void initializeWeights(t_mlp *x) {
-	int i,k,l;
-	for (k=0;k<x->nr_hiddenunits;k++) {
-			x->bias[0][k] =  0;//((t_float) rand())/RAND_MAX;
-			for (i=0;i<x->nr_inputunits;i++) 
-				x->weights[0][i][k] = ((t_float) rand())/RAND_MAX;
-			for (l=0;l<x->nr_outunits;l++) 
-				x->weights[1][k][l] = ((t_float) rand())/RAND_MAX;
-	}
-	for (l=0;l<x->nr_outunits;l++) 
-		x->bias[1][l] =  0;//((t_float) rand())/RAND_MAX;
-	
-}
-
-
-void mlp_train(t_mlp *x) {
-post("train called");	
-}
-	
-void *mlp_new(void)
-{
-  int i;
-  t_mlp *x = (t_mlp *)pd_new(mlp_class);
-  x->eta = 0.1;
-  x->nr_layers = 3;
-  x->nr_hiddenunits = 4;
-  x->nr_inputunits = 8;
-  x->nr_outunits = 1;
-  //for (i=0;i<x->nr_inputunits;i++)
-  //x->output[0][i] = ((t_float) rand())/RAND_MAX*5;
-  initializeWeights(x);
-  inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("list"), gensym("target"));
-  x->out = outlet_new(&x->x_obj,&s_float);
-  x->error_out = outlet_new(&x->x_obj,&s_float);
-  return (void *)x;
-}	
-	
diff --git a/externals/algocomp/selfsimilar.c b/externals/algocomp/selfsimilar.c
deleted file mode 100755
index e927fafa5..000000000
--- a/externals/algocomp/selfsimilar.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-* Selfsimilar melodies and rhythm.
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-#define TRUE  1
-#define FALSE 0
-#define MAX_LEVELS 16
-
-
-typedef short boolean;
-static t_class *selfsimilar_class;
-static t_class *selfsimilarrhythm_class;
-/*
- * Self-similar music
- */
-typedef struct _selfsimilar {
-  t_object x_obj;
-  t_int counter;
-  t_int nr_notes;
-  t_int transpose;
-  t_int note_level[MAX_LEVELS]; // notes for all level 
-  t_int melodypos[MAX_LEVELS]; // position in melody for each level
-  short poschanged[MAX_LEVELS]; // position changed?
-  t_int melody[16]; // melody
-  t_int levels; // number of levels (MAX 16)
-  t_outlet *note_out;
-  t_outlet *note_at_level[MAX_LEVELS];
-} t_selfsimilar;
-
-
-boolean changeposition(int level,t_selfsimilar *x) {
-	if (level == 0) {
-	x->melodypos[level]++;
-	x->poschanged[level]=TRUE;
-	}
-	else 
-	if (changeposition((level-1),x) == TRUE) {
-		x->melodypos[level]++;
-		x->poschanged[level]=TRUE;
-	}
-	else {
-     	x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-	if (x->melodypos[level] > x->nr_notes-1) {
-	x->melodypos[level] = 0;
-	x->poschanged[level]=TRUE;
-	return TRUE;	
-	}
-	else {
-		//x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-}
-
-t_int createmelody(int level,t_selfsimilar *x,int currentupper) {
-	t_int note = 0; // not used!!!
-	if (level == 0) {
-		note = x->melody[x->melodypos[level]]-x->melody[0];
-		x->note_level[level] = note+currentupper;	
-	}
-	else {
-		int current = x->melody[x->melodypos[level]]-x->melody[0]+currentupper;
-		int y = createmelody((level-1),x,current+x->transpose);
-		x->note_level[level] = current;
-		//note = x->melody[x->melodypos[level]]+y-x->melody[0]+x->transpose;
-	}
-	return note;
-}
-
-void selfsimilar_bang(t_selfsimilar *x)
-{
-	int i = 0;
-	t_int note = 0;
-	for (i=0;i<x->levels;i++) {
-	 	if (x->poschanged[i] == TRUE)
-		outlet_float(x->note_at_level[i],x->note_level[i]);
-	}
-	//post("upper pos: %d",x->melodypos[x->levels-1]);
-	changeposition((x->levels-1),x);
-	x->note_level[x->levels-1] = x->melody[x->melodypos[x->levels-1]];
-	note = createmelody(x->levels-2,x,x->note_level[x->levels-1]+x->transpose);
-	note += x->melody[x->melodypos[x->levels-1]];
-	//post("notes: %d %d %d",x->note_level[0],x->note_level[1],x->note_level[2]);
-	
-	//outlet_float(x->note_out,note);
-
-}
-
-void selfsimilar_initDummyNoteSequence(t_selfsimilar *x) {
-  x->nr_notes = 4;
-/*  x->melody[0] = 1;
-  x->melody[1] = 2;
-  x->melody[2] = 3;
-  x->melody[3] = 4;
-  x->melody[4] = 5;
-*/
-  
-  x->melody[0] = 54;
-  x->melody[1] = 57;
-  x->melody[2] = 52;
-  x->melody[3] = 61;
-}
-
-void *selfsimilar_new(t_symbol *s, int argc, t_atom *argv)
-{
-  int i = 0;
-  int y;
-  t_selfsimilar *x = (t_selfsimilar *)pd_new(selfsimilar_class);
-  
-  
-  if (argc > 2) {
-  x->levels = atom_getfloat(&argv[0]); 
-  x->transpose = atom_getfloat(&argv[1]); 
-  x->nr_notes = argc-2;
-  for (i=2;i<argc;i++) 
-  	x->melody[i-2] = atom_getfloat(&argv[i]);
-  }
-  else {
-  	selfsimilar_initDummyNoteSequence(x);
-    if (argc < 2) {
-    x->transpose = 12;
-    if (argc == 0) x->levels = 3;
-    else x->levels= atom_getfloat(&argv[0]);  }
-    else x->transpose = atom_getfloat(&argv[1]);
-  } 
-  if (x->levels > MAX_LEVELS) x->levels = MAX_LEVELS; // levels between 2 and 10
-  if (x->levels < 2) x->levels = 2;
-  //x->note_out = outlet_new(&x->x_obj,&s_float);
-  for (i=0;i<x->levels;i++) {
-  	x->melodypos[i] = 0; // position of each level
-  	x->poschanged[i] = TRUE; // notes on each level should start playing
-	x->note_at_level[i] = outlet_new(&x->x_obj,&s_float); // connect outlet for each level
-	x->note_level[i] = x->melody[0] + x->transpose*(x->levels-i-1);
-  }
-  return (void *)x;
-}
-
-typedef struct _selfsimilarrhythm {
-  t_object x_obj;
-  t_int counter;
-  t_float time_level[MAX_LEVELS]; // times for all level 
-  t_int melodypos[10]; // position in melody for each level
-  short poschanged[MAX_LEVELS]; // position changed?
-  t_float melody[5]; // melody
-  t_int levels; // number of levels (MAX 16)
-  t_outlet *time_out;
-  t_outlet *time_at_level[MAX_LEVELS];
-} t_selfsimilarrhythm;
-
-
-boolean changepositiontime(int level,t_selfsimilarrhythm *x) {
-	if (level == 0) {
-	x->melodypos[level]++;
-	x->poschanged[level]=TRUE;
-	}
-	else 
-	if (changepositiontime((level-1),x) == TRUE) {
-		x->melodypos[level]++;
-		x->poschanged[level]=TRUE;
-	}
-	else {
-     	x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-	if (x->melodypos[level] > 4) {
-	x->melodypos[level] = 0;
-	x->poschanged[level]=TRUE;
-	return TRUE;	
-	}
-	else {
-		x->poschanged[level]=FALSE;
-		return FALSE;
-	}
-}
-
-
-t_float createrhytm(int level,t_selfsimilarrhythm *x,int currentupper) {
-	t_float time;
-	if (level == 0) {
-		time = x->melody[x->melodypos[level]];
-		x->time_level[level] = time;	
-	}
-	else {
-		float current = x->melody[x->melodypos[level]]*currentupper/1000;
-		float y = createrhytm((level-1),x,current);
-		x->time_level[level] = current;
-		time = x->melody[x->melodypos[level]]*y;
-	}
-	return time;
-}
-
-void selfsimilarrhythm_bang(t_selfsimilarrhythm *x)
-{
-	int i = 0;
-	t_float time = 0;
-	time = createrhytm((x->levels-1),x,x->melody[x->melodypos[x->levels-1]]);
-	//time += x->melody[x->melodypos[x->levels-1]];
-	changepositiontime((x->levels-1),x);
-	outlet_float(x->time_out,time);
-
-//	for (i=0;i<x->levels;i++) {
-//	 if (x->poschanged[i] == TRUE)
-//	 outlet_float(x->time_at_level[i],x->time_level[i]);
-//	}
-	
-}
-
-void *selfsimilarrhythm_new(t_floatarg f1)
-{
-  int i = 0;
-  int y;
-  t_selfsimilarrhythm *x = (t_selfsimilarrhythm *)pd_new(selfsimilarrhythm_class);
-  x->levels = f1;
-  if (x->levels > 16) x->levels = 16; // levels between 2 and 10
-  if (x->levels < 2) x->levels = 2;
-  x->melody[0] = 1000;
-  x->melody[1] = 250;
-  x->melody[2] = 250;
-  x->melody[3] = 500;
-  x->time_out = outlet_new(&x->x_obj,&s_float);
-  for (i=0;i<x->levels;i++) {
-  	x->melodypos[i] = 0; // position of each level
-  	x->poschanged[i] = TRUE; // times on each level should start playing
-//	x->time_at_level[i] = outlet_new(&x->x_obj,&s_float); // connect outlet for each level
-  }
-  return (void *)x;
-}
diff --git a/externals/algocomp/stochastic.c b/externals/algocomp/stochastic.c
deleted file mode 100755
index 47b0c8ab4..000000000
--- a/externals/algocomp/stochastic.c
+++ /dev/null
@@ -1,29 +0,0 @@
-//TODO Replace with classes fot stochastic
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-typedef struct _logistic {
-  t_object  x_obj;
-  t_float x;
-  t_float a;
-  t_outlet *note_out;
-} t_logistic;
-
-void logistic_bang(t_logistic *x)
-{
-outlet_float(x->note_out, x->x);
-x->x = x->a*x->x*(1-x->x);
-}
-
-void *logistic_new(t_floatarg f)
-{
-  t_logistic *x = (t_logistic *)pd_new(logistic_class);
-  x->a = f;
-  x->x = 0.5;
-  x->note_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->a);
-  return (void *)x;
-}
\ No newline at end of file
diff --git a/externals/algocomp/utils.c b/externals/algocomp/utils.c
deleted file mode 100755
index 0def48040..000000000
--- a/externals/algocomp/utils.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Utilites to be used for algorithmic composition
-*/
-
-#include "m_pd.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static t_class *map_class;
-
-/*
- * linear mapping
- */
-typedef struct _map {
-  t_object  x_obj;
-  t_float x;
-  t_float min1,min2,max1,max2;
-  t_float scale,translate;
-  t_outlet *mapped_out;
-} t_map;
-
-void map_list(t_map *x,t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	float out;
-	x->scale = (x->max2 - x->min2)/(x->max1 - x->min1);
-	for (i=0;i<argc;i++) {
-	out = (atom_getfloat(&argv[i]) - x->min1)*x->scale+x->min1+x->translate;
-	SETFLOAT(&argv[i],out);
-}
-	outlet_list(x->mapped_out, &s_list, argc, argv);
-}
-
-
-void map_float(t_map *x,t_floatarg f)
-{
-float out;
-x->scale = (x->max2 - x->min2)/(x->max1 - x->min1);
-x->translate = x->min2 - x->min1;
-out = (f-x->min1)*x->scale+x->min1+x->translate;
-outlet_float(x->mapped_out, out);
-}
-
-void *map_new(t_floatarg min1, t_floatarg max1, t_floatarg min2,t_floatarg max2)
-{
-  t_map *x = (t_map *)pd_new(map_class);
-  x->min1 = min1;
-  x->min2 = min2;
-  x->max1 = max1;
-  x->max2 = max2;
-  
-  x->scale = (max2 - min2)/(max1 - min1);
-  x->translate = min2 - min1;
-  x->mapped_out = outlet_new(&x->x_obj,&s_float);
-  floatinlet_new(&x->x_obj, &x->min2);
-  floatinlet_new(&x->x_obj, &x->max2);
-  return (void *)x;
-}
diff --git a/externals/ann/GnuGPL.txt b/externals/ann/GnuGPL.txt
deleted file mode 100644
index fa0bef492..000000000
--- a/externals/ann/GnuGPL.txt
+++ /dev/null
@@ -1,290 +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. 
-
-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
diff --git a/externals/ann/README.txt b/externals/ann/README.txt
deleted file mode 100644
index 0b6099e51..000000000
--- a/externals/ann/README.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-ann: Artificial Neural Networks
-
-Authors: 
- IOhannes m zmölnig - forum::für::umläute
- Davide Morelli - www.davidemorelli.it
- 2005, Georg Holzmann - http://grh.mur.at
-
-this software is under the GnuGPL that is provided with these files
-
-ann_som: self-organized maps
-ann_mlp: multi layer perceptrons
-ann_td: time delay
-
-
-FANN libraries version 1.2 are required for ann_mlp and ann_td, see
-http://fann.sourceforge.net/
-(ann works only with 1.2 version)
-
-
----------- Windows users (MSVC):
-
-go to http://fann.sourceforge.net/ and download fann libs
-(use 1.2 version)
-go to MSVC++ folder and open all.dsw
-compile everything
-go in the ann/src folder
-edit makefile.msvc with the correct PATHs
-run the visual studio command prompt and execute:
-nmake makefile.msvc
-
----------- Linux users:
-
-go to http://fann.sourceforge.net/ and download 1.2 fann libs
-compile fann libs from source
-if you don't compile from source edit ann/src/makefile.linux 
-and set correct PATHs
-
-read ann/src/makefile.linux for more info and edit PATHs
-
----------- Irix users:
-
-ann_mlp and ann_td have never been compiled on irix
-
----------- OsX users:
-
-go to http://fann.sourceforge.net/ and download 1.2 fann libs
-compile fann libs from source
-if you don't compile from source edit ann/src/makefile.darwin 
-and set correct PATHs
-
-read ann/src/makefile.darwin for more info and edit PATHs
-
-compile with
-make -f makefile.darwin
diff --git a/externals/ann/SConscript b/externals/ann/SConscript
deleted file mode 100644
index 711f3477d..000000000
--- a/externals/ann/SConscript
+++ /dev/null
@@ -1,19 +0,0 @@
-import glob
-import os
-import re
-Import('env prefix')
-
-ann = env.SharedLibrary(target='ann', source = glob.glob('src/*.c'))
-env.Alias('install', env.Install(os.path.join(prefix, 'extra'), ann))
-Default(ann)
-
-for subann in glob.glob('src/ann_*.c'):
-    ann = env.SharedLibrary(re.sub("\.c$","",os.path.basename(subann)), source = subann)
-    env.Alias('install', env.Install(os.path.join(prefix, 'extra'), ann))
-    Default(ann)
-
-env.Alias('install', env.Install(os.path.join(prefix, 'doc/ann'), glob.glob('helps/*.pd')))
-
-for example in glob.glob('examples/ann*'):
-    env.Alias('install', env.Install(os.path.join(prefix, 'doc/ann/' + example), glob.glob(example+'/*.*')))
-    
diff --git a/externals/ann/examples/ann_mlp-FAQs.txt b/externals/ann/examples/ann_mlp-FAQs.txt
deleted file mode 100644
index 309c0a640..000000000
--- a/externals/ann/examples/ann_mlp-FAQs.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-Ch_uzi couldn't create error:
-ignore it, this object is needed to add GEM spheres in the second example, you don't need to run ann_mlp
-
-error: opening file.net
-the ann weights file are normal textfiles but they don't seem to be cross-platform. 
-i made those files under win32 so they should not work on osx (on linux?)
-
diff --git a/externals/ann/examples/ann_mlp_example1/train-and.txt b/externals/ann/examples/ann_mlp_example1/train-and.txt
deleted file mode 100644
index 4534273b1..000000000
--- a/externals/ann/examples/ann_mlp_example1/train-and.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 1
-0 0
-0
-1 0
-0
-0 1
-0
-1 1
-1
diff --git a/externals/ann/examples/ann_mlp_example1/train-or.txt b/externals/ann/examples/ann_mlp_example1/train-or.txt
deleted file mode 100644
index 733750a3d..000000000
--- a/externals/ann/examples/ann_mlp_example1/train-or.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 1
-0 0
-0
-1 0
-1
-0 1
-1
-1 1
-1
diff --git a/externals/ann/examples/ann_mlp_example1/train-xor.txt b/externals/ann/examples/ann_mlp_example1/train-xor.txt
deleted file mode 100644
index fec3e316b..000000000
--- a/externals/ann/examples/ann_mlp_example1/train-xor.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 1
-0 0
-0
-1 0
-1
-0 1
-1
-1 1
-0
diff --git a/externals/ann/examples/ann_mlp_example1/xor.pd b/externals/ann/examples/ann_mlp_example1/xor.pd
deleted file mode 100644
index b2c9fe120..000000000
--- a/externals/ann/examples/ann_mlp_example1/xor.pd
+++ /dev/null
@@ -1,89 +0,0 @@
-#N canvas 438 239 531 379 10;
-#X msg 50 22 create 2 1;
-#X msg 69 64 train-on-file train-xor.txt;
-#X obj 22 306 nbx 5 14 -1e+037 1e+037 0 0 empty empty output 0 -6 0
-10 -262144 -1 -1 0 256;
-#X msg 117 225 0 0;
-#X msg 152 226 0 1;
-#X msg 191 227 1 0;
-#X msg 228 227 1 1;
-#X text 118 262 once saved you can load your nn at load time using
-passing the filename as argument;
-#X msg 111 167 save xor.net;
-#N canvas 180 57 553 390 train 0;
-#X obj 43 283 outlet;
-#X msg 46 17 train;
-#X obj 168 137 tgl 15 0 empty empty in1 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 205 137 tgl 15 0 empty empty in2 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 246 138 tgl 15 0 empty empty out 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 113 137 bng 15 250 50 0 empty empty train! 0 -6 0 8 -262144
--1 -1;
-#X obj 115 160 pack s f f f;
-#X obj 114 181 unpack s f f f;
-#X obj 136 202 pack f f f;
-#X msg 153 265 run;
-#N canvas 0 0 534 398 auto 0;
-#X obj 210 333 outlet;
-#X text 68 37 auto train OR;
-#X obj 193 35 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 194 63 metro 10;
-#X msg 126 194 0 0 0;
-#X msg 169 194 1 0 1;
-#X msg 212 196 0 1 1;
-#X msg 255 196 1 1 1;
-#X obj 191 124 select 0 1 2 3;
-#X obj 193 96 random 4;
-#X connect 2 0 3 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 4 0;
-#X connect 8 1 5 0;
-#X connect 8 2 6 0;
-#X connect 8 3 7 0;
-#X connect 9 0 8 0;
-#X restore 54 198 pd auto;
-#X text 89 15 1- set train mode;
-#X text 145 108 2- set inputs \, expected output and click "train!"
-;
-#X text 284 135 3- repeat at will;
-#X text 190 263 4- when ready set running mode again;
-#X text 211 176 NOTE: look at the second outlet to know the current
-mse after each training pattern;
-#X connect 1 0 0 0;
-#X connect 2 0 6 1;
-#X connect 3 0 6 2;
-#X connect 4 0 6 3;
-#X connect 5 0 6 0;
-#X connect 6 0 7 0;
-#X connect 7 1 8 0;
-#X connect 7 2 8 1;
-#X connect 7 3 8 2;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X restore 95 104 pd train the net;
-#X text 127 21 1- create the net with 2 ins and 1 out;
-#X text 248 63 2a -train it using a train file;
-#X text 201 99 2b- or train it on-the-fly;
-#X text 193 165 3- set the filename and save it;
-#X text 119 206 4- use the net passing a list of floats;
-#X obj 89 305 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 52 259 ann_mlp;
-#X connect 0 0 16 0;
-#X connect 1 0 16 0;
-#X connect 3 0 16 0;
-#X connect 4 0 16 0;
-#X connect 5 0 16 0;
-#X connect 6 0 16 0;
-#X connect 8 0 16 0;
-#X connect 9 0 16 0;
-#X connect 16 0 2 0;
-#X connect 16 1 15 0;
diff --git a/externals/ann/examples/ann_mlp_example2/README.txt b/externals/ann/examples/ann_mlp_example2/README.txt
deleted file mode 100644
index d32d32dfd..000000000
--- a/externals/ann/examples/ann_mlp_example2/README.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-example 2: a more complex use of ann_mlp
-
-GEM and pmpd are needed to run this example
-
-start example2.pd
-
-start GEM rendering. 
-see how the cursor is locked to the great red ball 
-and how you can push the 6 small balls.
-each small ball has associated a sine wave
-its volume = its velocity
-
-if you want to train the net using different meanings from mine
-you can write a testfile or train the net on the fly or both 
-(train on file then refine on the fly)
-
-training on the fly is simpler
-
-training is a bit tricky but might be more efficient (less error in the nn)
-
-to write a testfile:
-1)toggle ON in [pd write trainfile]
-2)record a list of patterns
-3)toggle OFF when you are ready
-4)write to a file
-5)edit the file adding a line with 3 integers
-6)change training parameters (from the defaul to more flexible ones)
-I now suggest to lower pd's process priority to normal 
-because the training process blocks pd and may slow down your computer
-7) start trainign from file. this will take a long time, 
-wait for the message in console for the training to be completed
-8) now you can activate the metro and run the net and see how it responds.
diff --git a/externals/ann/examples/ann_mlp_example2/cellulaSuono.pd b/externals/ann/examples/ann_mlp_example2/cellulaSuono.pd
deleted file mode 100644
index 1d8b8065d..000000000
--- a/externals/ann/examples/ann_mlp_example2/cellulaSuono.pd
+++ /dev/null
@@ -1,195 +0,0 @@
-#N canvas 139 46 648 666 10;
-#X msg 36 169 setXY \$1 \$2;
-#X obj 36 22 loadbang;
-#X obj 36 144 pack f f;
-#X obj 36 46 t b b;
-#X obj 57 246 gemhead;
-#X obj 57 269 translateXYZ;
-#X obj 46 219 unpack s f f;
-#X obj 143 24 r reset_masse;
-#X msg 36 391 setX \$1 \, setY \$2;
-#X obj 36 70 random 20;
-#X obj 36 116 / 4;
-#X obj 102 69 random 20;
-#X obj 102 115 / 4;
-#X obj 36 93 - 10;
-#X obj 102 91 - 10;
-#X obj 294 353 r link;
-#X obj 36 195 masse2D masse 100;
-#X obj 205 193 unpack s f f f;
-#X obj 189 219 unpack s f f f;
-#X obj 35 499 iCircle2D masse 0 0 1e-006 0.8 0 0 -0.05;
-#X obj 57 302 color 0.5 0 0;
-#N canvas 0 0 747 605 build 0;
-#X obj 137 30 inlet;
-#X obj 143 202 outlet;
-#X obj 144 168 pack f f f;
-#X obj 243 65 t b;
-#X msg 243 91 0;
-#X text 41 246 if input is near 0 it is a low note then i give dark
-color \, if near 1 it is a high one then give bright red color;
-#X obj 102 94 * 0.6;
-#X obj 101 123 + 0.4;
-#X obj 193 93 * -0.7;
-#X obj 193 115 + 0.7;
-#X connect 0 0 3 0;
-#X connect 0 0 6 0;
-#X connect 0 0 8 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 2 2;
-#X connect 6 0 7 0;
-#X connect 7 0 2 0;
-#X connect 8 0 9 0;
-#X connect 9 0 2 1;
-#X restore 232 306 pd build color;
-#N canvas 444 28 999 679 sound 0;
-#X obj 77 43 inlet;
-#X obj 145 45 inlet;
-#X obj 220 44 inlet;
-#X obj 96 403 stereo;
-#X obj 249 300 osc~;
-#X obj 272 201 loadbang;
-#X obj 180 346 *~;
-#X msg 179 213 \$1 5;
-#X text 41 17 todo: invece di usare un sinusoide casuale usare un campione
-;
-#X obj 179 189 clip 0 1;
-#X obj 95 454 throw~ mainL;
-#X obj 178 454 throw~ mainR;
-#X obj 94 260 + 4;
-#X obj 94 281 / 8;
-#X obj 94 302 clip 0 1;
-#X obj 249 279 * 55;
-#X obj 179 238 line;
-#X obj 272 228 random 100;
-#X obj 272 251 tabread armoniche_caso;
-#X obj 309 456 outlet;
-#X text 387 233 weightened random values;
-#X text 385 222 which harmonic am I?;
-#X text 292 280 <-- base frequency = A;
-#X text 376 337 normalized 0-1;
-#X msg 351 186 bang;
-#X obj 309 431 clip 0 1;
-#X obj 320 386 expr sqrt($f1);
-#X obj 333 338 / 50;
-#X obj 354 143 r reset_masse;
-#X text 32 375 TODO: quadriphony;
-#X obj 184 100 - 0.001;
-#X obj 297 41 inlet;
-#X obj 249 113 sel 1 0;
-#X obj 249 94 f;
-#X obj 249 75 bang;
-#X obj 249 132 bang;
-#X obj 216 153 f;
-#X connect 0 0 12 0;
-#X connect 2 0 30 0;
-#X connect 2 0 34 0;
-#X connect 3 0 10 0;
-#X connect 3 1 11 0;
-#X connect 4 0 6 0;
-#X connect 5 0 17 0;
-#X connect 6 0 3 0;
-#X connect 7 0 16 0;
-#X connect 9 0 7 0;
-#X connect 12 0 13 0;
-#X connect 13 0 14 0;
-#X connect 14 0 3 1;
-#X connect 15 0 4 0;
-#X connect 16 0 6 1;
-#X connect 17 0 18 0;
-#X connect 18 0 15 0;
-#X connect 18 0 27 0;
-#X connect 24 0 17 0;
-#X connect 25 0 19 0;
-#X connect 26 0 25 0;
-#X connect 27 0 26 0;
-#X connect 28 0 24 0;
-#X connect 30 0 36 1;
-#X connect 31 0 33 1;
-#X connect 32 0 35 0;
-#X connect 33 0 32 0;
-#X connect 34 0 33 0;
-#X connect 35 0 36 0;
-#X connect 36 0 9 0;
-#X restore 232 285 pd sound;
-#X obj 57 339 sphere 0.3;
-#X text 294 285 make saound;
-#X text 330 304 color the cell;
-#X obj 414 99 r \$1-deactivate;
-#X obj 320 97 r \$1-activate;
-#X msg 321 131 1;
-#X msg 413 133 0;
-#X obj 327 406 sel 1 0;
-#X obj 327 380 f;
-#X obj 326 426 bang;
-#X obj 368 66 loadbang;
-#X obj 186 84 r \$1-posx;
-#X obj 228 103 r \$1-posy;
-#X obj 186 132 pack f f;
-#X obj 49 467 iCircle2D masse 0 0 1e-006 0.5 0 0 1;
-#X obj 429 284 s \$1-X;
-#X obj 509 284 s \$1-Y;
-#X obj 448 404 s \$1-Velo;
-#X obj 429 245 / 4;
-#X obj 429 264 clip -1 1;
-#X text 420 225 scale to [-1 \, 1] and send;
-#X obj 509 245 / 4;
-#X obj 509 264 clip -1 1;
-#X text 409 340 scale to [0 \, 5] and send;
-#X obj 448 360 * 50;
-#X obj 448 383 clip 0 5;
-#X connect 0 0 16 0;
-#X connect 1 0 3 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 3 1 11 0;
-#X connect 4 0 5 0;
-#X connect 5 0 20 0;
-#X connect 6 1 5 1;
-#X connect 6 2 5 2;
-#X connect 7 0 3 0;
-#X connect 8 0 19 0;
-#X connect 8 0 37 0;
-#X connect 9 0 13 0;
-#X connect 10 0 2 0;
-#X connect 11 0 14 0;
-#X connect 12 0 2 1;
-#X connect 13 0 10 0;
-#X connect 14 0 12 0;
-#X connect 15 0 31 0;
-#X connect 16 0 6 0;
-#X connect 16 0 8 0;
-#X connect 16 0 18 0;
-#X connect 16 2 17 0;
-#X connect 17 3 22 2;
-#X connect 17 3 47 0;
-#X connect 18 1 22 0;
-#X connect 18 1 41 0;
-#X connect 18 2 22 1;
-#X connect 18 2 44 0;
-#X connect 20 0 23 0;
-#X connect 21 0 20 1;
-#X connect 22 0 21 0;
-#X connect 26 0 29 0;
-#X connect 27 0 28 0;
-#X connect 28 0 4 0;
-#X connect 28 0 31 1;
-#X connect 28 0 22 3;
-#X connect 29 0 4 0;
-#X connect 29 0 31 1;
-#X connect 29 0 22 3;
-#X connect 30 0 32 0;
-#X connect 31 0 30 0;
-#X connect 32 0 19 0;
-#X connect 32 0 37 0;
-#X connect 33 0 28 0;
-#X connect 34 0 36 0;
-#X connect 35 0 36 1;
-#X connect 36 0 0 0;
-#X connect 41 0 42 0;
-#X connect 42 0 38 0;
-#X connect 44 0 45 0;
-#X connect 45 0 39 0;
-#X connect 47 0 48 0;
-#X connect 48 0 40 0;
diff --git a/externals/ann/examples/ann_mlp_example2/complex.net b/externals/ann/examples/ann_mlp_example2/complex.net
deleted file mode 100644
index c3af274b3..000000000
--- a/externals/ann/examples/ann_mlp_example2/complex.net
+++ /dev/null
@@ -1,7 +0,0 @@
-FANN_FLO_1.1
-3 0.700000 1.000000 0 5 5 5.00000000000000000000e-001 5.00000000000000000000e-001
-21 4 5 
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
-21 21 21 0 
-4 4 4 4 0 
-(0 1.25349550000000000000e+007) (1 -3.52599375000000000000e+006) (2 6.53671600000000000000e+006) (3 2.00417740000000000000e+007) (4 7.30595800000000000000e+006) (5 1.43338820000000000000e+007) (6 -1.64091900000000000000e+007) (7 2.72516540000000000000e+007) (8 8.50143700000000000000e+006) (9 1.94773520000000000000e+007) (10 1.37618080000000000000e+007) (11 9.89361400000000000000e+006) (12 -1.62668140000000000000e+007) (13 1.19877080000000000000e+007) (14 1.38944980000000000000e+007) (15 1.55818800000000000000e+007) (16 -4.50917906250000000000e+005) (17 1.43993210000000000000e+007) (18 1.17652580000000000000e+007) (19 -8.81434000000000000000e+006) (20 -6.01233154296875000000e+002) (0 9.62663600000000000000e+006) (1 -1.60156980000000000000e+007) (2 3.24279360000000000000e+007) (3 2.48126960000000000000e+007) (4 -3.12803475000000000000e+006) (5 3.24320160000000000000e+007) (6 2.56624260000000000000e+007) (7 -2.17010500000000000000e+006) (8 3.24311700000000000000e+007) (9 1.77973300000000000000e+006) (10 7.12998450000000000000e+006) (11 3.24320600000000000000e+007) (12 -6.82372550000000000000e+006) (13 1.10809970000000000000e+007) (14 3.24223120000000000000e+007) (15 1.30904130000000000000e+007) (16 2.12644620000000000000e+007) (17 3.24279100000000000000e+007) (18 3.88056600000000000000e+006) (19 3.25780950000000000000e+006) (20 5.93454052734375000000e+003) (0 -1.02708820000000000000e+007) (1 1.92679760000000000000e+007) (2 2.48948700000000000000e+007) (3 -2.26269800000000000000e+007) (4 1.61687180000000000000e+007) (5 2.51848860000000000000e+007) (6 -2.32199250000000000000e+006) (7 1.89744400000000000000e+007) (8 2.57103520000000000000e+007) (9 -1.62862460000000000000e+007) (10 -7.64894750000000000000e+005) (11 2.58289860000000000000e+007) (12 -1.44739700000000000000e+007) (13 9.75394900000000000000e+006) (14 2.50721400000000000000e+007) (15 -1.48601670000000000000e+007) (16 9.29974700000000000000e+006) (17 2.55408640000000000000e+007) (18 6.27725250000000000000e+005) (19 3.43336175000000000000e+006) (20 -6.19121948242187500000e+002) (21 -2.33448815345764160000e+000) (22 -2.11909532546997070000e-001) (23 1.17793101817369460000e-002) (24 2.53461837768554690000e+000) (21 2.28352487087249760000e-001) (22 3.55203837156295780000e-001) (23 -1.76965391635894780000e+000) (24 1.18609762191772460000e+000) (21 8.16280126571655270000e-001) (22 1.02861607074737550000e+000) (23 1.21739065647125240000e+000) (24 5.82793474197387700000e-001) (21 -8.56908917427062990000e-001) (22 4.63776290416717530000e-001) (23 -1.62467598915100100000e+000) (24 2.01780867576599120000e+000) 
diff --git a/externals/ann/examples/ann_mlp_example2/complex.txt b/externals/ann/examples/ann_mlp_example2/complex.txt
deleted file mode 100644
index 77bafa669..000000000
--- a/externals/ann/examples/ann_mlp_example2/complex.txt
+++ /dev/null
@@ -1,513 +0,0 @@
-255 20 4
-0.749041 0.0896327 0.113853 0.654362 0.185624 0.237424 0.69533 0.298684 0.0945817 0.787286 0.213076 0.20047 0.63797 0.0635322 0.115899 0.759821 -0.061697 0.0982502 3.712 0.336
-0 1 0 0
-0.75188 0.072922 0.175658 0.677723 0.167327 0.0634832 0.725933 0.290761 0.248129 0.797258 0.197974 0.257231 0.635356 0.0615053 0.108949 0.770538 -0.0381485 0.230128 3.712 0.336
-0 1 0 0
-0.753215 0.0884344 0.0793564 0.680155 0.184628 0.238476 0.723468 0.298087 0.279238 0.798776 0.197794 0.0878259 0.637804 0.045632 0.194963 0.779118 -0.0401013 0.0206749 3.712 0.336
-0 1 0 0
-0.765012 0.0987934 0.485579 0.661476 0.190576 0.107862 0.704381 0.305296 0.140133 0.774796 0.214004 0.0806812 0.660061 0.0476808 0.106845 0.773078 -0.0239579 0.166355 3.712 0.32
-0 1 0 0
-0.737361 0.11595 0.096564 0.633068 0.19146 0.251778 0.673542 0.298082 0.109277 0.780341 0.235756 0.167158 0.607566 0.0423194 0.659455 0.714047 -0.0210928 0.227156 3.68 -0.32
-0 1 0 0
-0.728877 0.11395 0.152865 0.616983 0.163505 0.201956 0.65392 0.29779 0.185762 0.756921 0.231865 0.248282 0.531612 0.0691205 0.35364 0.677123 -0.0191748 0.244254 3.248 -0.912
-0 1 0 0
-0.724227 0.0846584 0.152249 0.614024 0.150106 0.0600391 0.624462 0.267903 0.341607 0.725398 0.206856 0.324754 0.503408 0.0987902 0.166635 0.636188 0.0130915 0.419706 2.32 -1.04
-0 1 0 0
-0.717784 0.0608157 0.255306 0.619539 0.129509 0.0605104 0.588228 0.238892 0.281842 0.71156 0.195311 0.0858908 0.497135 0.115492 0.202975 0.564494 0.0200776 0.498901 1.328 -1.056
-0 1 0 0
-0.697403 0.032007 0.201005 0.595866 0.0956293 0.238033 0.567716 0.221569 0.0628842 0.695503 0.198436 0.261058 0.48666 0.138572 0.245613 0.518219 -0.00169279 0.210619 1.056 -1.504
-0 1 0 0
-0.679478 0.0136008 0.21478 0.581874 0.0898834 0.181479 0.548605 0.203123 0.328808 0.672067 0.155186 0.329023 0.46584 0.123395 0.0138875 0.482785 0.014843 0.17054 1.888 -1.504
-0 1 0 0
-0.649936 0.00340794 0.321075 0.544692 0.0774113 0.197586 0.545958 0.195162 0.144501 0.678604 0.118775 0.0935182 0.43064 0.116575 0.239352 0.458632 -0.0140776 0.200957 2.624 -1.584
-0 1 0 0
-0.610324 -0.0210108 0.19351 0.53235 0.0570844 0.112039 0.558602 0.172185 0.126602 0.63726 0.0957648 0.370569 0.415407 0.0903717 0.0623111 0.440429 -0.0217824 0.188029 2.752 -1.696
-0 1 0 0
-0.580734 -0.059172 0.293417 0.518425 0.0404438 0.151336 0.538378 0.159213 0.247988 0.632731 0.0545019 0.249969 0.396412 0.0929845 0.126035 0.436237 -0.0498201 0.105558 2.56 -1.968
-0 1 0 0
-0.549332 -0.0851357 0.200404 0.499852 0.0234589 0.233268 0.522412 0.135146 0.0685323 0.616499 0.0114045 0.307166 0.40027 0.0769862 0.110524 0.432076 -0.0754374 0.323472 2.4 -2
-0 1 0 0
-0.528134 -0.13001 0.238938 0.491263 -0.013595 0.180583 0.505046 0.11472 0.266757 0.614132 -0.0212973 0.23149 0.400948 0.0693484 0.104101 0.411192 -0.099225 0.128791 1.968 -2.272
-0 1 0 0
-0.51754 -0.144531 0.0863679 0.478679 -0.0355039 0.180398 0.516709 0.0772873 0.145967 0.600831 -0.0641163 0.250968 0.387946 0.035722 0.277417 0.397027 -0.111365 0.162249 1.936 -2.784
-0 1 0 0
-0.49081 -0.181737 0.275229 0.481108 -0.0630795 0.231821 0.523131 0.0534381 0.187083 0.598573 -0.0834581 0.16881 0.381838 -1.97579e-005 0.224494 0.384891 -0.126232 0.0103272 2.08 -2.976
-0 1 0 0
-0.472035 -0.209896 0.19943 0.477533 -0.0969937 0.263594 0.524599 0.0143426 0.189489 0.601161 -0.104088 0.10553 0.383311 -0.0241135 0.207984 0.370479 -0.14749 0.156837 2.336 -3.2
-0 1 0 0
-0.455688 -0.249708 0.302194 0.474325 -0.135586 0.239108 0.523684 -0.0197123 0.193743 0.591819 -0.114845 0.166392 0.396339 -0.0436506 0.161846 0.365226 -0.163639 0.072714 2.64 -3.216
-0 1 0 0
-0.421097 -0.280627 0.211942 0.486369 -0.170543 0.282061 0.520926 -0.048991 0.189266 0.605854 -0.129972 0.0832249 0.397826 -0.0748305 0.18137 0.362296 -0.181839 0.12274 3.008 -3.216
-0 1 0 0
-0.419248 -0.306329 0.0650636 0.471421 -0.195656 0.0798919 0.525201 -0.0833181 0.27574 0.607469 -0.163347 0.269247 0.405877 -0.0971638 0.220924 0.349434 -0.202806 0.153315 3.216 -2.944
-0 1 0 0
-0.428219 -0.322598 0.233916 0.472787 -0.21124 0.144816 0.523932 -0.105966 0.0954591 0.597193 -0.218044 0.335494 0.400375 -0.115387 0.159631 0.352926 -0.225807 0.0892543 3.12 -2.592
-0 1 0 0
-0.430761 -0.348258 0.131623 0.469202 -0.234241 0.0787241 0.535595 -0.135357 0.323614 0.585377 -0.251373 0.181356 0.409355 -0.13528 0.166578 0.356397 -0.250857 0.201727 2.848 -2.08
-0 1 0 0
-0.424159 -0.371949 0.232733 0.478675 -0.264496 0.13183 0.54916 -0.167503 0.122521 0.601403 -0.280766 0.171813 0.411255 -0.166539 0.278515 0.355352 -0.270673 0.154787 3.312 -0.944
-0 1 0 0
-0.422577 -0.400409 0.217017 0.486788 -0.29841 0.114008 0.550913 -0.192086 0.207964 0.608436 -0.295173 0.140376 0.440097 -0.183937 0.178442 0.369414 -0.288146 0.042512 3.136 -0.144
-0 1 0 0
-0.43172 -0.408991 0.101839 0.502929 -0.313225 0.100843 0.56385 -0.208858 0.0943393 0.627858 -0.317972 0.136136 0.44517 -0.204925 0.177418 0.379353 -0.310871 0.205612 2.816 0.128
-0 1 0 0
-0.455619 -0.432075 0.127595 0.510124 -0.324926 0.0491225 0.581341 -0.221904 0.0776561 0.63153 -0.332968 0.145098 0.462014 -0.212859 0.167194 0.391683 -0.317819 0.133968 2.368 0.48
-0 1 0 0
-0.465867 -0.42748 0.0740544 0.52228 -0.324247 0.0893203 0.596942 -0.231987 0.0982002 0.639809 -0.34747 0.101301 0.469128 -0.217499 0.101832 0.403133 -0.327137 0.110067 2.24 0.576
-0 1 0 0
-0.468544 -0.428579 0.078357 0.531203 -0.330278 0.0432288 0.603756 -0.236201 0.033095 0.649596 -0.346451 0.10444 0.487082 -0.215744 0.177141 0.412446 -0.319018 0.121599 2.592 0.384
-0 1 0 0
-0.461388 -0.424454 0.135835 0.544249 -0.330317 0.0529295 0.618636 -0.228561 0.0215008 0.664482 -0.341004 0.0818479 0.494279 -0.218824 0.162847 0.421975 -0.309383 0.00589943 2.88 0.208
-0 1 0 0
-0.475168 -0.417971 0.0857406 0.551095 -0.32275 0.107953 0.627646 -0.226994 0.126518 0.673049 -0.33707 0.0697097 0.502703 -0.208722 0.137732 0.430912 -0.298714 0.10425 2.944 0.0480001
-0 1 0 0
-0.379876 -0.506471 4.57491 0.255585 -0.464024 5 0.412348 -0.81901 5 0.806573 -0.514939 3.23281 0.358654 -0.170221 1.93021 0.375444 -0.285591 1.54381 2 -1.712
-0 1 1 0
--0.335896 -0.98429 4.15899 -0.591686 -0.796936 4.99477 -0.0130248 -0.620207 5 0.831339 -0.910623 2.57204 0.0669678 -0.102444 1.57382 0.141217 -0.207767 1.43518 0.768 -2.096
-0 0 1 0
--0.958352 -0.534 3.8405 -0.906127 -0.858887 4.00971 -0.54065 0.00521031 4.68184 0.568775 -0.743912 2.34541 -0.466726 0.309155 5 -0.79535 0.0781092 5 -1.36 -0.576
-0 0 1 0
--0.631305 -0.111059 3.8042 -0.293365 -0.596161 4.98103 -0.960928 0.567395 3.34724 0.330679 -0.463645 2.10316 -0.983122 1 3.04841 -0.539326 0.417833 5 -0.128 -2.72
-0 0 1 0
--0.161009 0.264332 3.30647 0.173372 0.0133566 5 -0.638684 0.960677 2.47737 -0.0476906 0.25746 5 -0.332221 0.467455 5 0.617516 0.704529 5 -0.416 0.096
-0 0 1 0
-0.315078 0.685117 5 0.716085 0.678118 4.84706 -0.30857 0.557489 3.0371 -0.583948 1 4.43053 0.574821 0.0291895 5 0.806443 0.920625 5 1.552 1.376
-0 0 1 0
-0.706587 0.817085 4.57632 0.872341 0.872575 3.94133 -0.0602284 0.210329 1.61892 -0.961249 0.165286 5 0.857852 -0.315692 5 0.00743722 0.744271 4.67193 0.144 0.816
-0 0 1 0
-0.911053 0.149851 3.97041 0.483807 0.418868 3.2484 -0.704081 -0.169851 4.34906 -0.591704 -0.653732 5 0.0717454 -0.625311 4.65172 -0.775875 0.526547 5 -2.176 2.432
-0 0 1 0
-0.643288 -0.424464 3.6059 0.1554 0.0569643 1.92912 -0.852382 -0.520134 3.64324 -0.255687 -0.860341 4.1672 -0.595202 -0.887116 4.05571 -0.729197 0.284827 4.36582 0.624 -0.256
-0 0 1 0
-0.405801 -0.923027 2.82082 -0.224049 0.261665 2.59694 -0.381991 -0.826296 3.17699 0.0379015 -0.288151 3.65113 -0.940265 -0.796949 2.76303 -0.0871998 0.0742855 3.84957 1.088 -2.448
-0 0 1 0
-0.189016 -0.691037 2.60808 -0.581358 0.462809 2.23038 0.0394303 -0.830895 2.70929 0.23104 0.378297 5 -0.45352 -0.606016 2.88434 0.625126 -0.0717008 5 1.344 0.656
-0 0 1 0
-0.0536088 -0.374848 1.08964 -0.88071 0.624741 1.92074 0.397624 -0.609291 2.39256 0.241577 1 3.02513 -0.0463727 -0.463703 1.58213 0.856216 -0.18878 4.21559 0.128 -1.52
-0 0 1 0
-0.655496 0.0290254 4.51242 -0.793989 0.763503 1.58721 0.709319 -0.413322 2.08918 0.253252 0.270734 4.32264 -0.282777 -1 1.90224 0.212046 -0.294026 3.70215 1.696 -1.84
-0 0 1 0
-0.877843 0.432613 3.78353 -0.574061 0.88803 1.33951 0.920831 -0.23641 1.15551 0.262124 -0.418207 3.80786 -0.580636 -0.400177 4.2271 -0.592193 -0.71309 5 -0.608 -1.12
-0 0 1 0
-0.407441 0.7725 3.28657 -0.383144 0.832039 1.248 0.707994 -0.087539 1.52112 0.267454 -0.975969 1.56898 -0.829432 0.200516 3.70741 -0.873174 -0.814918 5 0.912 -1.488
-0 0 1 0
--0.00449232 0.875028 2.82566 -0.211294 0.74313 1.09975 0.510337 0.0420992 1.35194 0.267976 -0.612289 2.74725 -0.848834 0.727461 3.22481 -0.193923 -0.258419 5 -0.16 -0.928
-0 0 1 0
--0.381424 0.683909 2.28491 -0.0416807 0.601343 1.62261 0.330727 0.161647 1.19186 0.265208 -0.175344 2.42085 -0.660506 0.851575 2.67735 -0.106577 0.83561 5 -1.696 -0.224
-0 0 1 0
--0.706742 0.473785 2.74836 0.15469 0.443791 1.44281 0.177216 0.265025 1.11938 0.257202 0.200409 2.08526 -0.501765 0.552772 1.47223 -0.12686 0.594268 5 -2.464 -1.904
-0 0 1 0
--0.921993 0.184156 1.94217 0.219979 0.325261 0.78742 0.0223812 0.382907 1.07732 0.373289 0.474275 2.05376 -0.34021 0.391683 1.29664 -0.145683 -0.283675 5 -2.416 -2
-0 0 1 0
--0.665098 -0.0842602 2.09328 0.14643 0.21991 0.735185 -0.107977 0.489467 0.920939 0.592516 0.71051 1.76845 -0.198275 0.24349 1.1207 -0.166994 -1 1.23722 -2.416 -2
-0 0 1 0
--0.441751 -0.319137 1.85927 0.0793515 0.124666 0.685654 -0.221246 0.577336 0.821476 0.776385 0.90729 1.23876 -0.0805597 0.114356 0.997888 -0.19219 -0.501454 3.60501 -2.608 -2.384
-0 0 1 0
--0.250079 -0.532336 1.63002 0.0755967 0.0609906 0.454123 -0.323232 0.655236 0.744558 0.904405 0.788221 0.98084 -0.0373147 -0.0234125 1.00696 -0.217138 0.0533918 3.14119 -2.608 -2.384
-0 0 1 0
--0.0824097 -0.726689 1.39069 0.136028 0.0263489 0.396875 -0.417006 0.728108 0.647484 0.779422 0.636531 1.11109 -0.0702506 -0.177105 0.871225 -0.241095 0.546979 2.69954 -2.592 -2.384
-0 0 1 0
-0.0504166 -0.887418 1.09942 0.187234 -0.00838957 0.35107 -0.496754 0.78787 0.572932 0.666583 0.507144 0.971391 -0.0991376 -0.308126 0.765231 -0.265523 0.943597 1.22942 -2.512 -2.384
-0 0 1 0
-0.160695 -0.823371 0.963004 0.228601 -0.040272 0.276345 -0.568697 0.837496 0.475732 0.561913 0.39215 0.901992 -0.128434 -0.422779 0.68122 -0.291667 0.696606 1.91403 -2.512 -2.384
-0 0 1 0
-0.257913 -0.708683 0.829121 0.259741 -0.0707029 0.23908 -0.633531 0.876723 0.422109 0.465385 0.28722 0.800005 -0.157415 -0.526774 0.588711 -0.320191 0.396513 1.65842 -2.544 -2.384
-0 0 1 0
-0.338187 -0.610583 0.721503 0.284184 -0.0990459 0.216807 -0.689435 0.864292 0.358797 0.382838 0.191882 0.731755 -0.182035 -0.615111 0.519644 -0.343591 0.140266 1.47715 -2.544 -2.384
-0 0 1 0
-0.405042 -0.522885 0.610019 0.306064 -0.125697 0.195132 -0.737839 0.835895 0.31676 0.311381 0.102966 0.652937 -0.20853 -0.68931 0.453943 -0.363122 -0.0861568 1.29676 -2.624 -2.384
-0 0 1 0
-0.45996 -0.44622 0.507831 0.323035 -0.154841 0.20406 -0.782326 0.808606 0.289623 0.246238 0.0231291 0.569636 -0.240009 -0.753916 0.374899 -0.381595 -0.293667 1.17114 -2.656 -2.432
-0 0 0 0
-0.503885 -0.384076 0.42279 0.335337 -0.182016 0.159536 -0.821357 0.785502 0.254828 0.186763 -0.0476682 0.536218 -0.267491 -0.803994 0.317721 -0.399386 -0.475112 1.05242 -2.768 -2.512
-0 0 0 0
-0.536469 -0.330133 0.366051 0.343683 -0.205212 0.143704 -0.853909 0.764017 0.221307 0.130204 -0.1142 0.514872 -0.293972 -0.843615 0.271142 -0.421036 -0.636342 0.932086 -2.752 -2.512
-0 0 0 0
-0.563958 -0.280474 0.31336 0.348529 -0.222442 0.090122 -0.880881 0.741067 0.145435 0.0744073 -0.177777 0.471222 -0.319627 -0.877511 0.226642 -0.443284 -0.784985 0.840946 -2.704 -2.464
-0 0 0 0
-0.587402 -0.236652 0.272889 0.346256 -0.239583 0.112313 -0.860577 0.718895 0.188204 0.0225144 -0.231927 0.454415 -0.345957 -0.863887 0.152889 -0.466543 -0.899116 0.27131 -2.656 -2.464
-0 0 0 0
-0.604083 -0.198221 0.231166 0.338708 -0.25457 0.104823 -0.838787 0.696564 0.200438 -0.0285756 -0.280494 0.419685 -0.373705 -0.839602 0.304328 -0.490042 -0.807692 0.598428 -2.576 -2.432
-0 0 0 0
-0.613899 -0.163872 0.207778 0.328167 -0.269089 0.119777 -0.819906 0.670453 0.172784 -0.0806062 -0.326772 0.413966 -0.419639 -0.812706 0.378269 -0.500861 -0.715376 0.451656 -2.48 -2.336
-0 0 0 0
-0.620789 -0.135363 0.159132 0.314224 -0.284084 0.116598 -0.806612 0.64702 0.1604 -0.131921 -0.366491 0.380163 -0.465731 -0.804305 0.26639 -0.459693 -0.671347 0.460273 -2.464 -2.336
-0 0 0 0
-0.626237 -0.112438 0.125768 0.296027 -0.296237 0.133745 -0.79847 0.622665 0.146093 -0.18049 -0.402703 0.357772 -0.498823 -0.820381 0.211875 -0.42585 -0.618246 0.349672 -2.464 -2.336
-0 0 0 0
-0.629878 -0.0969861 0.0877299 0.276663 -0.308185 0.132474 -0.790925 0.599517 0.139115 -0.228963 -0.440657 0.349418 -0.534403 -0.826261 0.206034 -0.399178 -0.570684 0.301646 -2.464 -2.336
-0 0 0 0
-0.630933 -0.0852082 0.0470275 0.258861 -0.322672 0.15178 -0.784723 0.577047 0.141837 -0.280342 -0.479252 0.384918 -0.568999 -0.82852 0.208762 -0.374027 -0.525263 0.284613 -2.464 -2.336
-0 0 0 0
-0.635111 -0.0761877 0.0568706 0.236395 -0.337601 0.190237 -0.780523 0.554614 0.141567 -0.261137 -0.489886 0.154169 -0.599964 -0.824962 0.173178 -0.426234 -0.513661 0.357695 -2.464 -2.336
-0 0 0 0
-0.638377 -0.0687162 0.0316515 0.206372 -0.355663 0.212427 -0.777088 0.532314 0.124746 -0.241132 -0.49727 0.102209 -0.626476 -0.813903 0.172923 -0.461563 -0.501891 0.296763 -2.464 -2.336
-0 0 0 0
-0.637203 -0.0654573 0.0357414 0.174414 -0.368113 0.202608 -0.776999 0.513726 0.109513 -0.227645 -0.505114 0.0801233 -0.651253 -0.800931 0.165057 -0.436446 -0.465969 0.239986 -2.464 -2.336
-0 0 0 0
-0.630912 -0.0659618 0.0504923 0.144156 -0.379026 0.200669 -0.775806 0.494476 0.131368 -0.219239 -0.512476 0.0606486 -0.676326 -0.786126 0.172747 -0.41527 -0.43625 0.196499 -2.464 -2.336
-0 0 0 0
-0.624115 -0.0684156 0.0352208 0.109383 -0.383893 0.220875 -0.77358 0.472523 0.11831 -0.214026 -0.515935 0.023471 -0.69426 -0.765728 0.157365 -0.401442 -0.412274 0.133173 -2.464 -2.336
-0 0 0 0
-0.617649 -0.0700315 0.0272526 0.0721575 -0.388278 0.23254 -0.771847 0.453749 0.127716 -0.216721 -0.520886 0.0487614 -0.703601 -0.740535 0.161417 -0.393703 -0.397562 0.0723551 -2.448 -2.336
-0 0 0 0
-0.611619 -0.0692032 0.0441842 0.0347844 -0.394187 0.219785 -0.770044 0.437407 0.0822712 -0.223892 -0.525298 0.0579946 -0.717355 -0.729005 0.152759 -0.391518 -0.387155 0.0452988 -2.448 -2.336
-0 0 0 0
-0.603245 -0.06481 0.0567297 -0.00203434 -0.400739 0.230192 -0.769699 0.421097 0.0869137 -0.233715 -0.529271 0.0689865 -0.73884 -0.734896 0.120256 -0.392132 -0.381807 0.0277983 -2.448 -2.336
-0 0 0 0
-0.595989 -0.0603759 0.0560129 -0.0419145 -0.41073 0.248347 -0.773629 0.405778 0.0865163 -0.245606 -0.533842 0.0833351 -0.756198 -0.733825 0.0903691 -0.395304 -0.380385 0.0331215 -2.448 -2.336
-0 0 0 0
-0.584594 -0.0594666 0.0769258 -0.0814158 -0.420408 0.250209 -0.775067 0.390704 0.0978259 -0.258419 -0.542534 0.1046 -0.770096 -0.730059 0.0713607 -0.404427 -0.381004 0.0672107 -2.448 -2.336
-1 0 0 0
-0.570352 -0.0597812 0.104526 -0.124892 -0.428991 0.279906 -0.773341 0.371657 0.12836 -0.27397 -0.551121 0.101135 -0.777411 -0.722824 0.0654882 -0.418035 -0.381119 0.0887918 -2.528 -2.336
-1 0 0 0
-0.553149 -0.0598284 0.107367 -0.172128 -0.442915 0.325859 -0.76795 0.352595 0.109092 -0.286927 -0.553612 0.0634235 -0.781816 -0.711571 0.0622111 -0.435178 -0.381578 0.101497 -2.64 -2.336
-1 0 0 0
-0.536345 -0.0561239 0.113191 -0.229506 -0.4615 0.265522 -0.765726 0.336785 0.100066 -0.293867 -0.543992 0.147064 -0.822701 -0.741274 0.371089 -0.453451 -0.385261 0.131837 -2.816 -2.352
-1 0 0 0
-0.517296 -0.0515052 0.116045 -0.258792 -0.438909 0.219021 -0.769163 0.319012 0.102681 -0.334275 -0.573455 0.230906 -0.865116 -0.774276 0.281825 -0.475622 -0.393167 0.153913 -2.832 -2.352
-1 0 0 0
-0.498854 -0.0468244 0.113795 -0.296075 -0.438734 0.256098 -0.775642 0.303095 0.108849 -0.359982 -0.581869 0.115677 -0.872673 -0.801558 0.249659 -0.500882 -0.404465 0.189027 -2.864 -2.368
-1 0 0 0
-0.48118 -0.0449461 0.0962891 -0.342559 -0.461955 0.349925 -0.780703 0.285141 0.118684 -0.373082 -0.569822 0.121418 -0.842015 -0.825336 0.218505 -0.528844 -0.415951 0.17812 -2.944 -2.432
-1 0 0 0
-0.467518 -0.0448165 0.0710115 -0.384946 -0.450605 0.266683 -0.787631 0.266759 0.120758 -0.393166 -0.594893 0.20397 -0.810784 -0.841491 0.199122 -0.552675 -0.430643 0.177721 -3.008 -2.528
-1 0 0 0
-0.455792 -0.0431871 0.0732616 -0.435033 -0.453479 0.39803 -0.793816 0.248713 0.116989 -0.416333 -0.603613 0.1531 -0.781128 -0.850686 0.182012 -0.561617 -0.45404 0.154699 -3.056 -2.64
-1 0 0 0
-0.44767 -0.0413512 0.0381104 -0.456636 -0.47795 0.101392 -0.797628 0.232701 0.0980467 -0.446658 -0.585656 0.210911 -0.753059 -0.854528 0.166663 -0.593457 -0.479429 0.363579 -3.056 -2.72
-1 0 0 0
-0.441237 -0.0410319 0.0325263 -0.470946 -0.461632 0.16155 -0.802502 0.215706 0.10018 -0.480887 -0.604511 0.208501 -0.723318 -0.880027 0.237843 -0.628969 -0.510033 0.225396 -3.072 -2.8
-1 0 0 0
-0.437131 -0.0409093 0.0251846 -0.510186 -0.476622 0.380657 -0.80453 0.200534 0.0925972 -0.521891 -0.592118 0.356858 -0.685609 -0.878188 0.362944 -0.637045 -0.544484 0.236087 -3.136 -2.912
-1 0 0 0
-0.435101 -0.0440471 0.0322581 -0.566732 -0.479032 0.325064 -0.806937 0.184887 0.109081 -0.534077 -0.622658 0.237097 -0.634322 -0.862714 0.31327 -0.654858 -0.557861 0.18719 -3.168 -3.056
-1 0 0 0
-0.432986 -0.0531362 0.0655926 -0.609178 -0.484132 0.276807 -0.806909 0.166625 0.119197 -0.551154 -0.642463 0.199678 -0.592472 -0.838265 0.251652 -0.682006 -0.584873 0.199016 -3.184 -3.168
-1 0 0 0
-0.426799 -0.0656014 0.0830876 -0.644721 -0.508867 0.231904 -0.809401 0.1455 0.142457 -0.585995 -0.642424 0.0382502 -0.562685 -0.816676 0.199816 -0.696394 -0.620528 0.405644 -3.184 -3.296
-1 0 0 0
-0.417528 -0.0794103 0.109383 -0.668814 -0.556205 0.268838 -0.81082 0.121157 0.14574 -0.597704 -0.645861 0.163605 -0.545631 -0.784764 0.263913 -0.741388 -0.646819 0.318456 -3.184 -3.392
-1 0 0 0
-0.404551 -0.0933054 0.112776 -0.700095 -0.583529 0.28978 -0.811195 0.0983615 0.126907 -0.630926 -0.675223 0.447194 -0.530751 -0.746142 0.222007 -0.75927 -0.685308 0.192235 -3.152 -3.488
-1 0 0 0
-0.392534 -0.105864 0.0962648 -0.742655 -0.587611 0.198479 -0.813319 0.076126 0.131127 -0.650235 -0.706583 0.191416 -0.516635 -0.735094 0.0843976 -0.78501 -0.689873 0.292792 -2.992 -3.488
-1 0 0 1
-0.380913 -0.118427 0.0934547 -0.756832 -0.575453 0.0786523 -0.815888 0.0543128 0.131057 -0.645559 -0.715738 0.207151 -0.536642 -0.719775 0.105925 -0.817036 -0.692236 0.084344 -2.944 -3.472
-1 0 0 1
-0.368617 -0.133872 0.122271 -0.760579 -0.58993 0.137996 -0.818413 0.0329419 0.125629 -0.679025 -0.677038 0.361313 -0.529329 -0.703697 0.0974188 -0.817604 -0.691463 0.172739 -2.928 -3.472
-1 0 0 1
-0.35686 -0.152209 0.12515 -0.773833 -0.567823 0.181871 -0.81751 0.00953658 0.147395 -0.689383 -0.682078 0.182378 -0.54539 -0.688886 0.196573 -0.801261 -0.709734 0.0928637 -2.928 -3.472
-1 0 0 1
-0.346605 -0.166346 0.109757 -0.792255 -0.575657 0.0580845 -0.816336 -0.0169562 0.169838 -0.687456 -0.694128 0.281759 -0.565472 -0.678147 0.0913436 -0.800099 -0.681988 0.0547008 -2.928 -3.472
-1 0 0 1
-0.33484 -0.18032 0.110805 -0.79572 -0.562741 0.0531035 -0.816304 -0.0460606 0.177258 -0.685209 -0.694497 0.0585401 -0.571928 -0.672731 0.0780219 -0.829493 -0.701239 0.157252 -2.928 -3.472
-1 0 0 1
-0.321245 -0.19306 0.120203 -0.793401 -0.594458 0.228791 -0.816924 -0.0756115 0.185749 -0.716692 -0.682114 0.238986 -0.578568 -0.674286 0.119633 -0.830943 -0.697527 0.044133 -2.928 -3.472
-1 0 0 1
-0.305015 -0.206941 0.137356 -0.7956 -0.589371 0.050858 -0.816975 -0.10461 0.1743 -0.714359 -0.690814 0.257995 -0.599414 -0.680533 0.0760455 -0.841877 -0.727576 0.126776 -2.928 -3.472
-1 0 0 1
-0.288029 -0.221001 0.135093 -0.804 -0.60887 0.17097 -0.815065 -0.134186 0.161881 -0.721539 -0.703817 0.250127 -0.600098 -0.685916 0.11134 -0.847635 -0.738252 0.125942 -2.144 -3.552
-1 0 0 1
-0.273138 -0.23753 0.150212 -0.807632 -0.634641 0.119268 -0.811769 -0.163731 0.196074 -0.728781 -0.718642 0.171089 -0.596755 -0.688498 0.0338146 -0.847992 -0.743054 0.219417 -1.584 -2.64
-1 0 0 1
-0.254836 -0.258338 0.179484 -0.800771 -0.634384 0.205121 -0.807819 -0.195373 0.205534 -0.72568 -0.733778 0.072472 -0.607207 -0.69293 0.142237 -0.84183 -0.767651 0.0955124 -1.616 -2.048
-1 0 0 1
-0.235535 -0.280185 0.174244 -0.800034 -0.654333 0.0604532 -0.80487 -0.233609 0.223468 -0.716047 -0.752129 0.230054 -0.614558 -0.682287 0.161078 -0.834482 -0.767759 0.118807 -2 -1.776
-1 0 0 1
-0.21407 -0.301644 0.18363 -0.792351 -0.662682 0.162972 -0.799766 -0.267079 0.195626 -0.708155 -0.757808 0.137752 -0.622778 -0.67101 0.143203 -0.830826 -0.770219 0.129746 -2.064 -1.776
-1 0 0 1
-0.189585 -0.321743 0.206985 -0.761107 -0.645196 0.241926 -0.794562 -0.299888 0.194015 -0.705769 -0.761221 0.136784 -0.642257 -0.653327 0.214068 -0.827105 -0.781271 0.0491988 -1.984 -1.68
-1 0 0 1
-0.15948 -0.33931 0.211392 -0.762777 -0.65106 0.120806 -0.78669 -0.327479 0.15031 -0.69927 -0.744095 0.25438 -0.627442 -0.64067 0.109742 -0.813854 -0.76749 0.186209 -1.728 -1.68
-1 0 0 1
-0.129143 -0.357119 0.212441 -0.762772 -0.629429 0.252098 -0.775063 -0.347427 0.142167 -0.679249 -0.737544 0.0383521 -0.613497 -0.628214 0.164293 -0.797335 -0.749285 0.166321 -1.696 -1.68
-1 0 0 1
-0.10142 -0.374617 0.201469 -0.726568 -0.624742 0.0651845 -0.756953 -0.361024 0.15342 -0.661649 -0.716779 0.166499 -0.614782 -0.608391 0.311371 -0.787323 -0.725187 0.224827 -1.632 -1.664
-1 0 0 1
-0.0692654 -0.389383 0.216093 -0.708011 -0.594574 0.223646 -0.733436 -0.372696 0.165049 -0.652644 -0.711853 0.215549 -0.592343 -0.579567 0.0998114 -0.766825 -0.710215 0.165424 -1.776 -1.52
-1 0 0 1
-0.0363637 -0.401327 0.216846 -0.702005 -0.583231 0.229549 -0.708167 -0.381533 0.150126 -0.618258 -0.675797 0.192327 -0.571068 -0.573735 0.147674 -0.758207 -0.686911 0.123351 -1.696 -1.44
-1 0 0 1
--0.0007193 -0.410295 0.236778 -0.671327 -0.560385 0.170253 -0.683074 -0.394119 0.190722 -0.617639 -0.660786 0.17223 -0.559703 -0.546699 0.126393 -0.726571 -0.664993 0.259079 -1.664 -1.44
-1 0 0 1
--0.0406947 -0.417777 0.238891 -0.665801 -0.530048 0.125687 -0.651982 -0.423197 0.247293 -0.57919 -0.634875 0.153043 -0.534155 -0.525122 0.281078 -0.714573 -0.63662 0.282502 -1.664 -1.44
-1 0 0 1
--0.0779428 -0.422678 0.226888 -0.639015 -0.521307 0.24323 -0.603776 -0.405218 0.358369 -0.566389 -0.616805 0.18268 -0.526624 -0.488211 0.232057 -0.689359 -0.642821 0.233158 -1.664 -1.44
-1 0 0 1
--0.116634 -0.424447 0.245177 -0.64323 -0.503455 0.0745895 -0.585633 -0.378376 0.025567 -0.546987 -0.618919 0.262591 -0.525168 -0.503241 0.276484 -0.656433 -0.641895 0.0470962 -1.632 -1.44
-1 0 0 1
--0.160048 -0.42491 0.257964 -0.623158 -0.509271 0.247845 -0.596347 -0.394372 0.163533 -0.518091 -0.617458 0.154108 -0.503402 -0.474499 0.200642 -0.654837 -0.616967 0.178426 -1.472 -1.184
-1 0 0 1
--0.201997 -0.423774 0.257862 -0.5951 -0.499778 0.206483 -0.60592 -0.384749 0.0979675 -0.522438 -0.589451 0.164645 -0.46551 -0.478249 0.338091 -0.636981 -0.621328 0.0948557 -1.568 -0.912
-1 0 0 1
--0.247391 -0.421172 0.286388 -0.593394 -0.497433 0.192606 -0.599649 -0.359853 0.0968571 -0.50096 -0.573506 0.179954 -0.440814 -0.47629 0.0493744 -0.613873 -0.610164 0.154749 -1.872 -0.656
-1 0 0 1
--0.298395 -0.412797 0.361263 -0.559818 -0.468086 0.273876 -0.588905 -0.352843 0.141396 -0.489495 -0.560615 0.182391 -0.428945 -0.448631 0.170843 -0.605114 -0.602645 0.132048 -2.512 -0.432
-1 0 0 1
--0.336961 -0.40235 0.138561 -0.557569 -0.453013 0.321539 -0.574965 -0.335693 0.162614 -0.463756 -0.551894 0.151224 -0.448192 -0.435241 0.170522 -0.579886 -0.560842 0.341456 -2.864 -0.512
-1 0 0 1
--0.339522 -0.380974 0.141763 -0.602502 -0.423993 0.196217 -0.548895 -0.311756 0.261002 -0.444387 -0.535527 0.201383 -0.474209 -0.41183 0.259541 -0.565534 -0.559156 0.140585 -2.784 -0.384
-1 0 0 1
--0.3823 -0.377823 0.356231 -0.609969 -0.398434 0.175682 -0.531276 -0.290443 0.102092 -0.427503 -0.496833 0.283856 -0.49271 -0.404984 0.14866 -0.548399 -0.528267 0.344806 -2.784 -0.32
-1 0 0 1
--0.393122 -0.364803 0.182098 -0.631415 -0.36802 0.257124 -0.540077 -0.278257 0.22224 -0.409003 -0.490632 0.138489 -0.507337 -0.380815 0.271436 -0.534179 -0.491404 0.153393 -2.784 -0.192
-1 0 0 1
--0.376097 -0.346903 0.200068 -0.624321 -0.336446 0.111183 -0.570505 -0.232137 0.338434 -0.426039 -0.449849 0.155792 -0.508175 -0.375423 0.127196 -0.537236 -0.499543 0.101213 -2.784 0
-1 0 0 1
--0.382308 -0.320468 0.167492 -0.631283 -0.310801 0.268596 -0.585797 -0.195247 0.13518 -0.425028 -0.440721 0.100831 -0.506062 -0.354037 0.304141 -0.546293 -0.467379 0.194118 -2.784 0.24
-1 0 0 1
--0.390283 -0.30902 0.153962 -0.631203 -0.297118 0.0609473 -0.596481 -0.172952 0.131721 -0.434116 -0.419683 0.139906 -0.521841 -0.312001 0.285066 -0.551654 -0.42276 0.279327 -2.8 0.432
-1 0 0 1
--0.393145 -0.280742 0.155285 -0.641439 -0.287562 0.184068 -0.596908 -0.180306 0.180691 -0.458935 -0.384049 0.411919 -0.514569 -0.272283 0.224822 -0.575769 -0.375231 0.321363 -2.8 0.752
-1 0 0 1
--0.401225 -0.248388 0.271964 -0.669202 -0.258465 0.186428 -0.595052 -0.140994 0.344248 -0.464078 -0.355263 0.0304342 -0.524421 -0.248059 0.177203 -0.595732 -0.362738 0.16264 -2.656 0.896
-1 0 0 1
--0.433359 -0.224286 0.215735 -0.657748 -0.225053 0.324113 -0.604317 -0.114455 0.0461056 -0.482257 -0.329086 0.290123 -0.547923 -0.228558 0.26618 -0.595242 -0.330455 0.0345609 -1.776 0.784
-1 0 0 1
--0.417169 -0.189255 0.209951 -0.679363 -0.202732 0.0773559 -0.608203 -0.0879241 0.18153 -0.491832 -0.299792 0.201465 -0.552761 -0.20219 0.169713 -0.618725 -0.306168 0.344279 -0.96 0.848
-1 0 0 1
--0.424666 -0.178608 0.18252 -0.684246 -0.162627 0.180762 -0.622501 -0.0646202 0.29534 -0.494458 -0.268246 0.177176 -0.553326 -0.169471 0.15151 -0.616417 -0.277666 0.22022 -0.896 0.944
-1 0 0 1
--0.438632 -0.149389 0.165424 -0.672907 -0.136374 0.293434 -0.62215 -0.0306565 0.138998 -0.500579 -0.270013 0.0844696 -0.556248 -0.129934 0.287591 -0.61354 -0.241196 0.0664461 -0.864 0.96
-1 0 0 1
--0.437794 -0.14108 0.145284 -0.677803 -0.104939 0.257563 -0.610851 0.000555582 0.103763 -0.496739 -0.235264 0.239974 -0.559356 -0.111189 0.176596 -0.613119 -0.208505 0.104118 -0.496 1.328
-1 0 0 1
--0.421795 -0.108311 0.144319 -0.663593 -0.0763818 0.242539 -0.59566 0.0205288 0.203775 -0.509412 -0.197867 0.276574 -0.545571 -0.0928785 0.169593 -0.633043 -0.183682 0.108704 -0.256 1.392
-1 0 0 1
--0.428231 -0.0894799 0.173306 -0.672039 -0.0391906 0.169869 -0.573165 0.0534077 0.168855 -0.497223 -0.185025 0.0995872 -0.546577 -0.0686478 0.12722 -0.616435 -0.162986 0.236063 -0.608 -0.944
-1 0 0 1
--0.423091 -0.0749758 0.115564 -0.648228 -0.0220102 0.0705838 -0.570015 0.0676732 0.176816 -0.500298 -0.168533 0.248072 -0.533476 -0.0491761 0.209563 -0.615237 -0.138021 0.0577272 -2.24 -1.632
-1 0 0 1
--0.396679 -0.0836085 0.076993 -0.64888 -0.00650118 0.130737 -0.566581 0.0804825 0.0852176 -0.497329 -0.150607 0.115637 -0.5306 -0.0337238 0.0710105 -0.615716 -0.122455 0.157051 -2.816 -1.44
-1 0 0 1
--0.3989 -0.0811406 0.108208 -0.645854 0.00207823 0.0974334 -0.56353 0.0869721 0.0834833 -0.499438 -0.151663 0.055252 -0.523515 -0.0256678 0.0742021 -0.612881 -0.110015 0.0258734 -3.248 -0.96
-1 0 0 1
--0.417593 -0.0641394 0.097459 -0.636895 0.00692379 0.0570415 -0.551007 0.0953739 0.121547 -0.502958 -0.153375 0.0707206 -0.53089 -0.029221 0.137113 -0.618634 -0.114994 0.0351534 -3.344 0.144
-1 0 0 1
--0.418959 -0.058934 0.0671455 -0.651529 0.0172985 0.0724068 -0.547097 0.082848 0.0804537 -0.508171 -0.140622 0.0561312 -0.538764 -0.029631 0.156932 -0.628527 -0.100753 0.13717 -3.248 1.024
-1 0 0 1
--0.430783 -0.0614779 0.0978821 -0.6499 0.0233705 0.0414527 -0.561093 0.109049 0.154347 -0.522993 -0.14001 0.100715 -0.542784 -0.0194556 0.181455 -0.63392 -0.0957335 0.12134 -3.152 1.952
-1 0 0 1
--0.435477 -0.0636515 0.0486939 -0.665171 0.0387522 0.137514 -0.574914 0.117802 0.081503 -0.533002 -0.133185 0.113554 -0.542424 0.000506611 0.0783357 -0.639797 -0.0740771 0.147712 -2.72 2.672
-1 0 0 1
--0.442805 -0.0449368 0.164674 -0.673975 0.0580824 0.0419576 -0.571192 0.123344 0.0823247 -0.543593 -0.11097 0.120245 -0.55359 0.00941041 0.177756 -0.656912 -0.0608356 0.164281 -2.32 2.88
-1 0 0 1
--0.464342 -0.0195341 0.124363 -0.670832 0.077533 0.160376 -0.569545 0.143931 0.0918051 -0.555377 -0.100038 0.0890576 -0.569439 0.0228869 0.164779 -0.669589 -0.0504187 0.122013 -1.792 2.88
-1 0 0 1
--0.464382 -0.0110161 0.0354019 -0.683908 0.0983093 0.128766 -0.578807 0.157057 0.178747 -0.565738 -0.0764301 0.171427 -0.573551 0.0418748 0.129506 -0.678935 -0.0214786 0.172811 -1.392 2.88
-1 0 0 1
--0.476573 -0.0016174 0.13033 -0.684678 0.118791 0.160947 -0.585067 0.188956 0.105906 -0.57598 -0.0607458 0.0827188 -0.576213 0.0660839 0.153136 -0.68044 -0.00121092 0.132934 -1.2 2.88
-1 0 0 1
--0.476885 0.0190074 0.110731 -0.68769 0.144211 0.142801 -0.582162 0.201982 0.0793607 -0.583203 -0.0398902 0.200833 -0.580704 0.0801522 0.0894241 -0.687788 0.0240162 0.173801 -1.056 2.896
-1 0 0 1
--0.480867 0.0432099 0.176197 -0.684459 0.165087 0.157271 -0.572459 0.220956 0.1264 -0.587401 -0.0191526 0.0500849 -0.58334 0.100653 0.116685 -0.68994 0.0426792 0.161006 -0.96 2.896
-1 0 0 1
--0.476897 0.0573687 0.0947798 -0.682789 0.191811 0.108112 -0.571749 0.244012 0.17548 -0.585544 0.00292602 0.179088 -0.580167 0.122928 0.188442 -0.687719 0.0687345 0.145014 -0.928 2.88
-1 0 0 1
--0.476937 0.0714623 0.130494 -0.673026 0.212558 0.186122 -0.569426 0.270486 0.163153 -0.586137 0.0262288 0.0401729 -0.57123 0.146872 0.166448 -0.682787 0.0941621 0.142462 -0.72 2.88
-1 0 0 1
--0.473139 0.0992501 0.1729 -0.667469 0.241545 0.162332 -0.556496 0.288077 0.0943554 -0.580063 0.0444936 0.228861 -0.570624 0.167423 0.105252 -0.677701 0.118689 0.134698 -0.624 2.992
-1 0 0 1
--0.464208 0.123574 0.11086 -0.658108 0.262377 0.191043 -0.544591 0.308722 0.164868 -0.576783 0.0737526 0.0965536 -0.563348 0.190138 0.140353 -0.677522 0.143048 0.170302 -0.864 3.056
-1 0 0 1
--0.461166 0.136567 0.091368 -0.651755 0.28958 0.139753 -0.539086 0.335955 0.142937 -0.571005 0.0914288 0.197368 -0.551989 0.216055 0.17815 -0.662587 0.169707 0.158036 -1.232 3.056
-1 0 0 1
--0.450885 0.153246 0.163463 -0.638175 0.312891 0.184735 -0.527768 0.358394 0.159081 -0.56594 0.118036 0.0962094 -0.543767 0.235868 0.151482 -0.661886 0.194973 0.138881 -1.536 3.056
-1 0 0 1
--0.449414 0.186108 0.189503 -0.627858 0.340796 0.163731 -0.512426 0.376117 0.157163 -0.560275 0.139642 0.149478 -0.539027 0.261143 0.163917 -0.651447 0.221425 0.157477 -1.984 3.056
-1 0 0 1
--0.437779 0.207168 0.136503 -0.619663 0.366385 0.158251 -0.504581 0.403036 0.155379 -0.553315 0.16978 0.167271 -0.530409 0.286729 0.22055 -0.648389 0.248515 0.200978 -2.304 3.056
-1 0 0 1
--0.432603 0.231179 0.153699 -0.613542 0.395488 0.179285 -0.500724 0.436092 0.194108 -0.547388 0.192909 0.158111 -0.52083 0.31527 0.180247 -0.634287 0.276099 0.169326 -2.336 3.056
-1 0 0 1
--0.424788 0.259643 0.203832 -0.60646 0.422523 0.191113 -0.491228 0.462898 0.172541 -0.541911 0.227453 0.164364 -0.514771 0.34369 0.17209 -0.631587 0.306026 0.180709 -2.272 3.12
-1 0 0 1
--0.421354 0.293085 0.197819 -0.598494 0.454757 0.183115 -0.48208 0.488236 0.18507 -0.535136 0.252142 0.15923 -0.512056 0.371017 0.167599 -0.624539 0.334921 0.169981 -2.272 3.136
-1 0 0 1
--0.415715 0.320568 0.169368 -0.592217 0.482768 0.206982 -0.477096 0.518123 0.203324 -0.530433 0.286882 0.214498 -0.504771 0.401664 0.191399 -0.621079 0.365772 0.182453 -2.48 3.136
-1 0 0 1
--0.411222 0.351354 0.188669 -0.590817 0.517774 0.198273 -0.476508 0.556332 0.199223 -0.525507 0.315471 0.214946 -0.499867 0.435199 0.197831 -0.6127 0.398737 0.160086 -2.64 3.136
-1 0 0 1
--0.406556 0.385626 0.209604 -0.59145 0.543606 0.190576 -0.475863 0.586779 0.187575 -0.522223 0.349546 0.202712 -0.498193 0.466111 0.172196 -0.614603 0.428351 0.166827 -2.864 3.136
-1 0 0 1
--0.408591 0.421239 0.187107 -0.59277 0.575462 0.158694 -0.476371 0.614771 0.180161 -0.520592 0.376154 0.168745 -0.500973 0.496715 0.181354 -0.61229 0.457389 0.185486 -3.168 1.936
-1 0 0 1
--0.406108 0.442729 0.117609 -0.591813 0.607524 0.108056 -0.480861 0.649231 0.25902 -0.518633 0.402545 0.183574 -0.49037 0.529622 0.161874 -0.61001 0.486744 0.163172 -2.064 0.592
-1 0 0 1
--0.400845 0.460743 0.169545 -0.584936 0.624061 0.135645 -0.477458 0.673643 0.041841 -0.514714 0.429272 0.0603358 -0.491376 0.547923 0.213987 -0.611201 0.504268 0.128434 -0.896 0.864
-1 0 0 1
--0.396931 0.486239 0.11978 -0.580797 0.640286 0.171388 -0.466781 0.679588 0.101847 -0.50929 0.442637 0.173552 -0.491144 0.559853 0.0570037 -0.595834 0.520694 0.0850145 -0.624 2.832
-1 0 0 1
--0.38158 0.503446 0.105413 -0.56859 0.653221 0.121335 -0.450646 0.69173 0.049876 -0.498497 0.458589 0.153463 -0.483993 0.571302 0.0995831 -0.596289 0.537557 0.170376 -2.352 3.712
-1 0 0 1
--0.380327 0.510777 0.0716669 -0.560596 0.673535 0.125196 -0.43903 0.710464 0.233495 -0.493776 0.472116 0.0829229 -0.471875 0.590731 0.060425 -0.581285 0.556267 0.158133 -2.784 3.456
-0 0 1 0
--0.0632759 0.378753 4.57668 -0.733727 0.0288115 5 -0.100913 0.826698 2.95931 -0.599406 0.223157 3.63211 -0.0991141 0.0605465 5 -0.777572 0.408522 2.30923 -1.392 1.168
-0 0 1 0
-0.61431 0.1178 4.0021 -0.90811 -0.830736 4.85025 0.345067 0.870381 2.56647 -0.848261 -0.294786 3.15054 0.508396 -0.86399 5 -0.863608 0.201982 1.9297 1.024 -1.104
-0 0 1 0
-0.927888 -0.10654 2.94723 -0.693126 -0.699321 4.05762 0.726124 0.753724 2.26324 -0.835983 -0.735309 2.74388 0.974411 -0.650813 4.25633 -0.625873 0.0220714 1.69272 -0.576 -0.992
-0 0 1 0
-0.458998 -0.304836 2.90001 -0.508227 -0.103838 3.46507 0.904861 0.648718 1.66042 -0.656124 -0.881371 2.2853 0.607824 0.00143831 4.44608 -0.414966 -0.137311 1.65111 1.008 -1.824
-0 0 1 0
-0.194748 -0.230394 1.51025 -0.376771 0.432839 3.03719 0.62474 0.551769 1.64608 -0.492228 -0.555336 2.00869 0.216548 0.585634 3.8528 -0.180801 -0.278414 1.52113 2.24 -2.608
-0 0 1 0
-0.0398116 -0.0614662 1.28457 -0.267127 0.887831 2.62548 0.385442 0.467314 1.43471 -0.35133 -0.2796 1.75585 -0.114927 0.959857 2.16554 0.0232719 -0.400036 1.36409 2.528 -2.592
-0 0 1 0
--0.0927079 0.0832235 1.12142 -0.199718 0.746323 2.20231 0.176251 0.391075 1.26772 -0.223398 -0.0405549 1.55131 -0.381698 0.563114 2.7932 0.205161 -0.508856 1.22694 2.576 -2.592
-0 0 1 0
--0.209867 0.265596 1.45905 -0.14546 0.400433 1.94398 -0.0126526 0.317611 1.12625 -0.106693 0.12412 0.87919 -0.615451 0.186678 2.43633 0.376931 -0.60955 1.12121 2.576 -2.592
-0 0 1 0
--0.323932 0.463772 1.28991 -0.206516 0.101512 1.97549 -0.0654075 0.287759 0.35945 0.00732251 0.190795 0.890503 -0.811417 -0.133881 2.13513 0.486195 -0.703776 0.945828 2.576 -2.592
-0 0 1 0
--0.424612 0.635371 1.13037 -0.341138 -0.172018 1.74854 -0.0550061 0.336176 0.263961 0.138948 0.185636 0.74416 -0.878168 -0.417429 1.85671 0.393476 -0.830868 0.882605 2.576 -2.592
-0 0 1 0
--0.517104 0.788261 0.966795 -0.46175 -0.421614 1.51806 -0.0406643 0.376974 0.235506 0.259895 0.180098 0.694831 -0.731165 -0.674734 1.63513 0.312389 -0.877625 0.708516 2.592 -2.624
-0 0 1 0
--0.591253 0.899904 0.411641 -0.563037 -0.634081 1.34882 -0.0265305 0.411571 0.211716 0.371092 0.171298 0.637978 -0.603898 -0.890498 1.34119 0.246937 -0.787939 0.633404 2.608 -2.624
-0 0 1 0
--0.653462 0.802656 0.706254 -0.648179 -0.824014 1.19458 -0.012496 0.440115 0.162406 0.468689 0.157064 0.573146 -0.495271 -0.803952 1.15953 0.192449 -0.704644 0.56966 2.608 -2.624
-0 0 1 0
--0.709366 0.704659 0.608275 -0.709841 -0.863356 0.969444 0.000866688 0.461417 0.13951 0.560232 0.137605 0.532236 -0.410103 -0.644837 0.985755 0.148821 -0.630017 0.44666 2.608 -2.624
-0 0 1 0
--0.755285 0.623309 0.53419 -0.759789 -0.72187 0.855715 0.0131104 0.477385 0.129642 0.635927 0.118835 0.435023 -0.334488 -0.512841 0.862476 0.115931 -0.570448 0.38532 2.608 -2.624
-0 0 1 0
--0.796855 0.553294 0.469987 -0.804979 -0.593702 0.789021 0.0245787 0.49093 0.0926421 0.698614 0.0966178 0.384309 -0.26467 -0.401073 0.744969 0.0933918 -0.519512 0.290147 2.608 -2.624
-0 0 1 0
--0.833918 0.487883 0.427641 -0.841475 -0.476347 0.673167 0.0351785 0.498756 0.04672 0.757346 0.0712809 0.347235 -0.195183 -0.303476 0.659443 0.0805312 -0.476954 0.242958 2.608 -2.624
-0 0 1 0
--0.864939 0.43099 0.366928 -0.874884 -0.379381 0.582117 0.0417752 0.503942 0.0499184 0.803645 0.0458414 0.307783 -0.129924 -0.222729 0.601497 0.0780076 -0.441002 0.190432 2.608 -2.624
-0 0 1 0
--0.874673 0.380644 0.32504 -0.865281 -0.295233 0.504468 0.0495593 0.509639 0.0567902 0.845527 0.0213504 0.273229 -0.0713799 -0.150803 0.53322 0.0832583 -0.413277 0.156102 2.608 -2.624
-0 0 1 0
--0.852337 0.333591 0.290701 -0.838915 -0.21803 0.444617 0.0589213 0.512287 0.0582795 0.879332 -0.00557841 0.204955 -0.018698 -0.0846926 0.457923 0.0878627 -0.386612 0.148336 2.608 -2.624
-0 0 0 0
--0.83433 0.293933 0.246686 -0.817278 -0.150555 0.411224 0.0672382 0.512363 0.0457917 0.861494 -0.0320735 0.222804 0.028797 -0.0327581 0.40858 0.0971609 -0.365699 0.141969 2.608 -2.624
-0 0 0 0
--0.819485 0.260789 0.220705 -0.796444 -0.0887139 0.378823 0.0718291 0.5079 0.0345826 0.835386 -0.0580878 0.227996 0.0767837 0.0119216 0.377137 0.114063 -0.347458 0.149166 2.608 -2.624
-0 0 0 0
--0.803105 0.229185 0.196639 -0.776146 -0.0333114 0.30877 0.077219 0.500732 0.0603207 0.80891 -0.0874609 0.231492 0.123346 0.0477885 0.325877 0.134541 -0.333756 0.134342 2.608 -2.624
-0 0 0 0
--0.790378 0.201877 0.181105 -0.758888 0.0122988 0.275043 0.0813389 0.490355 0.0785115 0.786022 -0.115619 0.220402 0.16499 0.0741732 0.280072 0.157104 -0.32727 0.145203 2.56 -2.624
-0 0 0 0
--0.778398 0.167702 0.26679 -0.742416 0.0592165 0.322908 0.0850727 0.478873 0.0706766 0.764205 -0.145468 0.212319 0.202391 0.0952534 0.24175 0.180296 -0.324307 0.132758 2.56 -2.624
-0 0 0 0
--0.782785 0.183677 0.148704 -0.706278 0.0512811 0.26556 0.0877111 0.467146 0.0748289 0.745571 -0.179374 0.229957 0.235398 0.114093 0.207018 0.204769 -0.323848 0.151933 2.512 -2.624
-0 0 0 0
--0.786642 0.198854 0.0524123 -0.673887 0.0389847 0.171519 0.0934284 0.457088 0.0667139 0.732821 -0.214898 0.227763 0.265847 0.126758 0.181896 0.230037 -0.328452 0.163767 2.512 -2.624
-0 0 0 0
--0.784385 0.207157 0.0485058 -0.647153 0.0307515 0.178544 0.100623 0.449692 0.0713284 0.718819 -0.2512 0.237481 0.291167 0.133155 0.146337 0.260491 -0.335523 0.204559 2.512 -2.624
-0 0 0 0
--0.780041 0.21734 0.0662004 -0.617805 0.0221532 0.190573 0.10831 0.439449 0.0855353 0.705667 -0.287668 0.235111 0.317241 0.136098 0.165885 0.294366 -0.344592 0.203432 2.512 -2.72
-0 0 0 0
--0.77244 0.228285 0.0819434 -0.588638 0.0130575 0.172088 0.116366 0.428309 0.0828913 0.692636 -0.325732 0.250853 0.342672 0.133259 0.146221 0.326491 -0.356355 0.212026 2.512 -2.72
-0 0 0 0
--0.763988 0.235627 0.05906 -0.563695 0.00677781 0.154032 0.125672 0.419097 0.0853004 0.681215 -0.364643 0.253916 0.365217 0.128038 0.143602 0.355254 -0.367003 0.189185 2.512 -2.736
-0 0 0 0
--0.757502 0.243473 0.0576061 -0.536867 0.00196787 0.156008 0.134965 0.407666 0.0989301 0.67208 -0.406857 0.260071 0.388004 0.122711 0.121789 0.384249 -0.379347 0.181567 2.512 -2.8
-0 0 0 0
--0.750637 0.250255 0.0586443 -0.512031 -0.00187939 0.142135 0.145113 0.392955 0.101924 0.663581 -0.450317 0.259821 0.404059 0.112953 0.111659 0.409907 -0.39427 0.160072 2.512 -2.816
-0 0 0 0
--0.742007 0.253808 0.0559592 -0.489126 -0.00482165 0.138812 0.154174 0.376343 0.131583 0.656311 -0.494835 0.278269 0.418527 0.101522 0.121039 0.431823 -0.409251 0.154837 2.512 -2.864
-0 0 0 0
--0.737789 0.257537 0.0187922 -0.465067 -0.00481318 0.142059 0.164411 0.358031 0.111484 0.652504 -0.54056 0.25314 0.431634 0.0880359 0.105065 0.454471 -0.42287 0.169522 2.576 -2.976
-0 0 0 0
--0.735699 0.259409 0.0206205 -0.44408 -0.00331069 0.112052 0.173278 0.343662 0.107843 0.651616 -0.583311 0.276633 0.440502 0.0735978 0.112791 0.473967 -0.437849 0.149417 2.864 -2.992
-0 0 0 0
--0.729394 0.263002 0.0545594 -0.426823 0.00148888 0.105581 0.181954 0.329629 0.100164 0.636882 -0.590424 0.123055 0.449813 0.0558872 0.134351 0.494245 -0.455723 0.177115 2.896 -3.008
-0 0 0 0
--0.719167 0.265102 0.0639656 -0.407642 0.00519419 0.123615 0.189224 0.314577 0.0952895 0.615767 -0.582229 0.164247 0.458273 0.0350017 0.149677 0.521672 -0.479479 0.288415 2.896 -3.008
-0 0 0 0
--0.71089 0.266043 0.0461162 -0.389425 0.00541943 0.113571 0.194665 0.298657 0.110915 0.610179 -0.594732 0.32223 0.463475 0.0107934 0.1612 0.53725 -0.490414 0.165512 2.896 -3.04
-0 0 0 0
--0.703144 0.268304 0.0525862 -0.370163 -0.000378332 0.130369 0.198187 0.281979 0.0935225 0.618655 -0.629668 0.113735 0.469883 -0.0170407 0.164569 0.533329 -0.483032 0.0377691 2.896 -3.056
-0 0 0 0
--0.696337 0.270126 0.0437905 -0.351259 -0.0102898 0.130174 0.203264 0.265837 0.101111 0.585475 -0.610201 0.265499 0.477544 -0.0427132 0.160017 0.54152 -0.502013 0.213274 2.896 -3.056
-0 0 0 0
--0.69186 0.273132 0.013442 -0.331797 -0.0157559 0.123288 0.20802 0.249455 0.0957872 0.573816 -0.630042 0.182841 0.483545 -0.0682438 0.156592 0.541912 -0.490493 0.114494 2.896 -3.056
-0 0 0 0
--0.686338 0.273394 0.0624606 -0.314094 -0.0255876 0.134681 0.213004 0.236422 0.0716156 0.568203 -0.649312 0.0581879 0.490252 -0.0924991 0.151294 0.548118 -0.48431 0.0701538 2.896 -3.056
-0 0 0 0
--0.675451 0.274135 0.0613845 -0.297181 -0.0405 0.126717 0.217628 0.221886 0.104244 0.563791 -0.649276 0.0718899 0.498672 -0.11742 0.17249 0.561649 -0.500642 0.192637 2.896 -3.056
-0 0 0 0
--0.667455 0.276781 0.0498057 -0.280818 -0.0562834 0.131261 0.222332 0.2044 0.119789 0.561644 -0.640984 0.182771 0.513163 -0.142498 0.189555 0.573553 -0.530302 0.0988588 2.912 -3.056
-0 0 0 0
--0.661188 0.279007 0.0475736 -0.266319 -0.0706538 0.12863 0.225824 0.186047 0.11485 0.55872 -0.668856 0.0663597 0.526865 -0.168056 0.173224 0.585439 -0.525159 0.0877621 2.912 -3.056
-0 0 0 0
--0.649544 0.279898 0.078271 -0.254121 -0.0848535 0.0991653 0.227594 0.165759 0.116929 0.5686 -0.665881 0.108091 0.540442 -0.194562 0.17847 0.591646 -0.554255 0.232213 2.912 -3.056
-0 0 0 0
--0.634828 0.281223 0.0930693 -0.241705 -0.0967004 0.120377 0.229922 0.143869 0.136705 0.571808 -0.690065 0.141113 0.552604 -0.222244 0.19505 0.603937 -0.556318 0.0804956 2.912 -3.056
-0 0 0 0
--0.621142 0.281563 0.0838251 -0.225034 -0.109544 0.124608 0.229737 0.121677 0.116243 0.555841 -0.678032 0.13612 0.561694 -0.253561 0.202071 0.610618 -0.577162 0.172283 2.912 -3.056
-0 0 0 0
--0.608994 0.28366 0.0589943 -0.209917 -0.121565 0.106991 0.229602 0.100846 0.122517 0.536507 -0.684174 0.0838684 0.567773 -0.286175 0.206214 0.628265 -0.586416 0.124517 2.912 -3.056
-0 0 0 0
--0.60178 0.284553 0.0389332 -0.198292 -0.133968 0.097207 0.234248 0.0821836 0.114716 0.536954 -0.67793 0.00978301 0.576695 -0.320278 0.222241 0.629574 -0.614219 0.159894 2.912 -3.056
-0 0 0 0
--0.595826 0.285547 0.0308453 -0.186769 -0.143934 0.0977193 0.239558 0.0642736 0.107336 0.5276 -0.68573 0.0287402 0.587296 -0.35461 0.234226 0.632688 -0.610658 0.111185 2.912 -3.056
-0 0 0 0
--0.591674 0.284878 0.025239 -0.170219 -0.154823 0.121537 0.248366 0.0482767 0.111348 0.534764 -0.689511 0.0985702 0.597825 -0.396158 0.265226 0.619412 -0.601284 0.122712 2.928 -3.008
-0 0 0 0
--0.587334 0.284367 0.0228145 -0.151437 -0.164102 0.127527 0.258992 0.0322697 0.124573 0.544892 -0.692415 0.143876 0.6115 -0.439502 0.314303 0.614315 -0.593308 0.0747323 3.312 -2.224
-0 0 0 0
--0.584025 0.280825 0.0399592 -0.131071 -0.174466 0.139421 0.270697 0.0154396 0.120407 0.558145 -0.688461 0.049877 0.628777 -0.478691 0.193744 0.607264 -0.583871 0.219632 2.32 -0.848
-0 0 0 0
--0.580181 0.2742 0.0529214 -0.106471 -0.183826 0.163405 0.285952 -0.00407108 0.168753 0.551283 -0.716997 0.148487 0.655121 -0.456692 0.105646 0.609978 -0.583081 0.116115 1.456 -1.456
-0 0 0 0
--0.572543 0.267597 0.0554085 -0.0794018 -0.192717 0.170612 0.303385 -0.0323035 0.222613 0.548108 -0.727105 0.0199498 0.662563 -0.45916 0.104595 0.614555 -0.564578 0.041008 1.488 -1.568
-0 0 0 0
--0.566179 0.258453 0.0778755 -0.0509689 -0.19943 0.185173 0.319503 -0.0633738 0.205466 0.544095 -0.718946 0.10091 0.668133 -0.450989 0.056863 0.604417 -0.564756 0.0647726 1.52 -1.632
-0 0 0 0
--0.558933 0.247988 0.0733744 -0.0217113 -0.206072 0.169416 0.335747 -0.0972582 0.228689 0.542787 -0.689679 0.249666 0.662912 -0.461502 0.0171253 0.592071 -0.56212 0.208868 1.52 -1.664
-0 0 0 0
--0.552549 0.239013 0.0745534 0.00463087 -0.216603 0.170076 0.354609 -0.130069 0.230867 0.53542 -0.66827 0.101317 0.651752 -0.470341 0.0393082 0.582241 -0.550851 0.20068 1.52 -1.664
-0 0 0 0
--0.544251 0.230997 0.0766856 0.0299671 -0.230599 0.179117 0.369884 -0.165811 0.236291 0.521779 -0.662288 0.10438 0.662371 -0.446712 0.121483 0.550591 -0.5464 0.180309 1.52 -1.664
-0 0 0 0
--0.531768 0.222816 0.115386 0.0563696 -0.24809 0.194057 0.38331 -0.203224 0.238501 0.50608 -0.646099 0.234934 0.651176 -0.43857 0.147271 0.53667 -0.526542 0.0725484 1.52 -1.664
-0 0 0 1
--0.515744 0.212735 0.123406 0.0851085 -0.262223 0.189905 0.399466 -0.240779 0.25291 0.491903 -0.618626 0.165986 0.623428 -0.445202 0.0893405 0.535043 -0.507909 0.187867 1.52 -1.68
-0 1 0 1
--0.499978 0.199991 0.125796 0.111519 -0.276062 0.183162 0.422958 -0.237784 0.216784 0.466009 -0.619167 0.149982 0.629316 -0.426667 0.0929123 0.546158 -0.511218 0.195949 1.52 -1.68
-0 1 0 1 
--0.480927 0.184068 0.163623 0.138245 -0.292867 0.196305 0.447436 -0.215234 0.169582 0.451348 -0.608227 0.142216 0.624011 -0.415633 0.107597 0.562847 -0.527335 0.0839609 1.52 -1.68
-0 1 0 1
--0.459529 0.167771 0.153131 0.167114 -0.310671 0.199481 0.470245 -0.206347 0.142277 0.458302 -0.576991 0.191394 0.599343 -0.42085 0.153615 0.562897 -0.536681 0.0932194 1.52 -1.68
-0 1 0 1
--0.438586 0.152917 0.17527 0.194433 -0.329485 0.204161 0.4911 -0.205794 0.112232 0.459094 -0.590213 0.156712 0.572681 -0.421284 0.171705 0.582693 -0.543577 0.0814627 1.536 -1.664
-0 1 0 1
--0.412812 0.136269 0.204724 0.225411 -0.34982 0.226564 0.508471 -0.214199 0.114437 0.482065 -0.602309 0.0927151 0.582901 -0.432932 0.400702 0.579487 -0.546327 0.0638609 1.584 -1.648
-0 1 0 1
--0.384381 0.116749 0.213785 0.224758 -0.35855 0.209356 0.521191 -0.226343 0.115998 0.479494 -0.619472 0.0633794 0.642331 -0.426627 0.298931 0.59599 -0.550317 0.064245 1.648 -1.648
-0 1 0 1
--0.353584 0.097407 0.221248 0.198647 -0.356874 0.114272 0.532021 -0.243235 0.118278 0.500317 -0.614105 0.228064 0.674338 -0.447477 0.200715 0.593525 -0.534334 0.121644 1.728 -1.648
-0 1 0 1
--0.321987 0.0740095 0.241808 0.183771 -0.358846 0.072868 0.538314 -0.260586 0.109361 0.511738 -0.615859 0.0354604 0.700166 -0.467689 0.199706 0.585266 -0.508877 0.185636 1.728 -1.632
-0 1 0 1
--0.290582 0.0493199 0.234927 0.175765 -0.365247 0.0352075 0.538291 -0.279778 0.119022 0.520709 -0.601653 0.212535 0.707344 -0.484237 0.128098 0.576001 -0.493019 0.0410867 1.552 -1.664
-0 1 0 1
--0.256393 0.031131 0.232614 0.175102 -0.372795 0.0661911 0.529524 -0.299735 0.158345 0.528536 -0.585695 0.0808051 0.693217 -0.502192 0.155079 0.578096 -0.471868 0.242237 1.392 -1.984
-0 1 0 1
--0.223619 0.0132102 0.207466 0.178795 -0.38459 0.0799002 0.516091 -0.334576 0.278808 0.536482 -0.562399 0.154561 0.680425 -0.520902 0.232933 0.557076 -0.443883 0.213242 1.392 -2.496
-0 1 0 1
--0.196487 -0.00503031 0.19952 0.184962 -0.396198 0.0874947 0.488125 -0.338616 0.177464 0.533837 -0.565268 0.370553 0.646491 -0.525947 0.170566 0.57127 -0.438476 0.200979 1.808 -2.896
-0 1 0 1
--0.168577 -0.0240996 0.186582 0.192332 -0.407705 0.0928671 0.467189 -0.349003 0.153585 0.528887 -0.534002 0.402202 0.647269 -0.534417 0.157452 0.565194 -0.421411 0.0794049 1.824 -2.896
-0 1 0 1
--0.144233 -0.0444024 0.198335 0.197971 -0.423385 0.113424 0.460945 -0.379414 0.283315 0.502096 -0.512533 0.202762 0.634353 -0.522199 0.211746 0.582326 -0.396916 0.151438 2.032 -3.168
-0 1 0 1
--0.12121 -0.0660663 0.181512 0.204292 -0.445987 0.164303 0.464825 -0.398302 0.189863 0.495019 -0.518365 0.322061 0.602502 -0.504492 0.0802397 0.583265 -0.390961 0.16624 2.048 -3.984
-0 1 0 1
--0.099606 -0.0871373 0.175478 0.208734 -0.474645 0.181167 0.45388 -0.390516 0.0789085 0.471898 -0.544105 0.0697885 0.609089 -0.507383 0.111174 0.577704 -0.387144 0.114648 2.048 -3.984
-0 1 0 1
--0.0744782 -0.105515 0.177755 0.215564 -0.503968 0.175275 0.454468 -0.421206 0.286259 0.47764 -0.532164 0.166471 0.584858 -0.520167 0.134278 0.570849 -0.395104 0.0517891 2.048 -3.984
-0 1 0 1
--0.0527216 -0.119996 0.13966 0.221461 -0.534434 0.197508 0.448289 -0.417938 0.0633493 0.461788 -0.561233 0.202018 0.591316 -0.529424 0.173273 0.564554 -0.417635 0.109076 2.048 -3.984
-0 1 0 1
--0.0324585 -0.135434 0.152676 0.228863 -0.564603 0.18807 0.437971 -0.427677 0.147373 0.469145 -0.574318 0.123885 0.58296 -0.555014 0.114605 0.560282 -0.438261 0.235034 2.048 -3.984
-0 1 0 1
--0.012137 -0.150786 0.163911 0.234626 -0.594299 0.17328 0.425123 -0.459927 0.211524 0.468817 -0.560365 0.24222 0.593957 -0.583248 0.216973 0.551097 -0.46933 0.237522 2.048 -3.984
-0 1 0 1
-0.00943659 -0.164572 0.149199 0.243779 -0.619603 0.143425 0.411157 -0.466408 0.138818 0.472821 -0.591623 0.195381 0.601702 -0.611775 0.0985336 0.549222 -0.487714 0.131312 2.048 -3.984
-0 1 0 1
diff --git a/externals/ann/examples/ann_mlp_example2/example2.pd b/externals/ann/examples/ann_mlp_example2/example2.pd
deleted file mode 100644
index 9cd588eab..000000000
--- a/externals/ann/examples/ann_mlp_example2/example2.pd
+++ /dev/null
@@ -1,911 +0,0 @@
-#N canvas 519 124 536 237 10;
-#N canvas 103 30 712 583 guts 0;
-#X obj 18 181 t b b;
-#X obj 17 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 89 147 0 \, destroy;
-#X obj 111 177 gemwin;
-#X msg 94 124 reset \, create \, 1;
-#X obj 18 390 s masse;
-#X obj 266 150 s reset_masse;
-#X msg 266 128 bang;
-#X text 359 281 <- right border;
-#X text 360 303 <- left border;
-#X text 360 325 <- top border;
-#X text 360 347 <- bottom border;
-#N canvas 116 11 813 636 pool 0;
-#N canvas 0 0 819 344 fattori 0;
-#N canvas 0 0 450 300 graph3 0;
-#X array armoniche_caso 100 float 1;
-#A 0 1.06332 1.06332 1.06332 1.38999 1.55333 1.55333 1.55333 1.55333
-1.55333 1.55333 1.55333 1.71666 1.87999 2.04333 2.04333 2.20666 2.20666
-2.20666 2.37 2.53333 2.53333 2.53333 2.69667 2.69667 2.69667 2.69667
-2.69667 2.69667 2.69667 3.18667 3.18667 3.18667 3.18667 3.35 3.35 3.51334
-3.84001 3.84001 4.00334 4.16668 4.16668 4.16668 4.16668 4.49334 4.65668
-4.82001 5.31002 5.47335 5.80002 6.12669 6.61669 6.94336 7.27003 7.43336
-7.92337 8.25003 8.5767 8.90337 9.23004 9.72004 10.3734 10.7 11.0267
-11.19 11.5167 12.0067 12.4967 13.3134 13.64 13.9667 14.2934 14.9467
-16.2534 16.5801 16.7434 17.2334 17.8867 19.0301 19.8467 20.9901 21.6434
-22.1334 22.7867 23.1134 23.7667 24.2568 24.5834 24.9101 27.3601 28.3401
-29.3201 30.3001 31.4435 32.5868 33.5668 34.5468 36.0168 37.8135 39.7735
-50.7169;
-#X coords 0 50 99 1 300 300 1;
-#X restore 43 13 graph;
-#X msg 434 69 \; armoniche_caso const 1;
-#X restore 37 37 pd fattori caso;
-#X text 34 19 weightened random values;
-#X text 32 8 which harmonic am I?;
-#X text 236 34 20 cellule;
-#X obj 49 82 cellulaSuono 1;
-#X obj 48 102 cellulaSuono 2;
-#X obj 44 125 cellulaSuono 3;
-#X obj 143 86 cellulaSuono 4;
-#X obj 140 104 cellulaSuono 5;
-#X obj 146 126 cellulaSuono 6;
-#X restore 398 132 pd pool;
-#N canvas 860 482 327 421 creation 0;
-#X obj 43 319 s pd-new;
-#X msg 86 95 \; pd filename new ./ \; #N canvas \; #X pop 1 \;;
-#X msg 43 289 menuclose;
-#X obj 76 238 pack f f f;
-#X obj 43 47 sel 0 1;
-#X obj 43 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 61 72 t b b;
-#X obj 76 187 t f f f;
-#X obj 103 211 * 10;
-#X obj 76 211 * 10;
-#X obj 61 163 ch_uzi 30;
-#X msg 76 265 obj \$1 \$2 cellulaSuono \$3;
-#X connect 2 0 0 0;
-#X connect 3 0 11 0;
-#X connect 4 0 2 0;
-#X connect 4 1 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 10 0;
-#X connect 6 1 1 0;
-#X connect 7 0 9 0;
-#X connect 7 1 8 0;
-#X connect 7 2 3 2;
-#X connect 8 0 3 1;
-#X connect 9 0 3 0;
-#X connect 10 1 7 0;
-#X connect 11 0 0 0;
-#X restore 398 158 pd creation pool;
-#X obj 61 214 s link;
-#X text 39 39 <- begin (change the metro speed for slow computer);
-#X floatatom 38 132 5 0 0 0 - - -;
-#X text 359 257 <- give random speed and ambient viscosity;
-#X obj 449 446 gemhead;
-#X obj 449 467 translateXYZ;
-#X msg 166 417 setX \$1;
-#X msg 251 418 setY \$1;
-#X obj 520 399 * -1;
-#X obj 449 487 color 0.5 0 0;
-#X obj 501 347 gemmouse 8 8;
-#X obj 481 390 - 4;
-#X obj 523 380 - 4;
-#X obj 90 473 iCircle2D masse 0 0 0.1 8 0 0 -0.0003;
-#X obj 53 280 iLine2D masse 3.5 -3.5 3.5 3.5 1000 0 0 2 1;
-#X obj 63 305 iLine2D masse -3.5 3.5 -3.5 -3.5 1000 0 0 2 1;
-#X obj 78 328 iLine2D masse 3.5 3.5 -3.5 3.5 1000 0 0 2 1;
-#X obj 89 351 iLine2D masse -3.5 -3.5 3.5 -3.5 1000 0 0 2 1;
-#X obj 449 507 sphere 0.6;
-#X obj 18 154 metro 15;
-#N canvas 0 0 555 394 osc 0;
-#X obj 139 70 dumpOSC 10001;
-#X obj 182 106 unpack s f;
-#X msg 179 155 \; \$1 \$2;
-#X obj 180 131 pack s f;
-#X obj 263 113 r x;
-#X obj 337 118 r y;
-#X obj 258 210 s c_x;
-#X obj 354 214 s c_y;
-#X obj 348 151 / 25;
-#X obj 264 151 / 40;
-#X obj 260 176 clip 0 8;
-#X obj 348 182 clip 0 8;
-#X text 128 29 here is where I connect to EyesWeb to move the main
-cell with a webcam following my hand;
-#X connect 0 0 1 0;
-#X connect 1 0 3 0;
-#X connect 1 1 3 1;
-#X connect 3 0 2 0;
-#X connect 4 0 9 0;
-#X connect 5 0 8 0;
-#X connect 8 0 11 0;
-#X connect 9 0 10 0;
-#X connect 10 0 6 0;
-#X connect 11 0 7 0;
-#X restore 499 316 pd osc;
-#X obj 453 365 r c_x;
-#X obj 589 359 r c_y;
-#X msg 156 102 cursor 0;
-#X msg 126 66 bang;
-#X msg 166 150 lighting 1;
-#N canvas 450 44 494 396 sounds 0;
-#X obj 158 307 dac~;
-#X obj 76 66 catch~ mainL;
-#X obj 160 153 line;
-#X msg 159 131 \$1 10;
-#X obj 273 41 vsl 15 128 0 1 0 0 empty empty Volume 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 144 179 *~;
-#X obj 178 179 *~;
-#X obj 164 67 catch~ mainR;
-#X obj 304 42 loadbang;
-#X msg 304 62 1;
-#X obj 145 265 +~;
-#X obj 177 268 +~;
-#X obj 193 233 rev3~ 70 90 3000 20;
-#X connect 1 0 5 0;
-#X connect 2 0 5 1;
-#X connect 2 0 6 1;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 10 0;
-#X connect 5 0 12 0;
-#X connect 6 0 11 0;
-#X connect 6 0 12 1;
-#X connect 7 0 6 0;
-#X connect 8 0 9 0;
-#X connect 9 0 4 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 1;
-#X connect 12 0 10 1;
-#X connect 12 1 11 1;
-#X restore 398 189 pd sounds;
-#X text 463 188 <-- here is the main volue control;
-#N canvas 463 128 573 394 lights 0;
-#X obj 242 277 world_light;
-#X obj 242 163 gemhead 1;
-#X obj 242 225 rotateXYZ;
-#X msg 109 193 debug 0;
-#X msg 110 224 debug 1;
-#X text 20 169 figure out where the light is;
-#X obj 311 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 354 133 pack f f;
-#X obj 334 159 line;
-#X msg 364 42 1;
-#X obj 364 23 loadbang;
-#X obj 344 298 world_light;
-#X obj 346 271 gemhead 1;
-#X obj 429 203 loadbang;
-#X obj 311 63 metro 20000;
-#X msg 400 104 10000;
-#X obj 119 57 delay 10000;
-#X msg 339 96 300;
-#X msg 292 96 50;
-#X msg 364 235 1 1 1;
-#X msg 422 266 0.6 0.3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 8 0 2 2;
-#X connect 9 0 6 0;
-#X connect 10 0 9 0;
-#X connect 10 0 15 0;
-#X connect 12 0 11 0;
-#X connect 13 0 19 0;
-#X connect 13 0 20 0;
-#X connect 14 0 17 0;
-#X connect 14 0 16 0;
-#X connect 15 0 7 1;
-#X connect 16 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 7 0;
-#X connect 19 0 0 1;
-#X connect 20 0 11 1;
-#X restore 266 189 pd lights;
-#X text 337 49 example "stolen" from pmpd examples. move the main cell
-with your mouse (or via osc) every cell is a random harmonic of A (from
-1st to 50th) \, the velo of a cell is its volume also.;
-#X obj 405 432 s posx;
-#X obj 535 427 s posy;
-#X obj 43 260 iAmbient2D masse 0 0 0.01 0.01 0.4;
-#X obj 86 499 iCircle2D masse 0 0 0.1 0.7 0 0 4;
-#X obj 17 19 inlet;
-#X obj 85 19 inlet;
-#X connect 0 0 5 0;
-#X connect 0 1 14 0;
-#X connect 0 1 27 0;
-#X connect 0 1 28 0;
-#X connect 0 1 29 0;
-#X connect 0 1 30 0;
-#X connect 0 1 31 0;
-#X connect 0 1 46 0;
-#X connect 0 1 47 0;
-#X connect 1 0 33 0;
-#X connect 1 0 38 0;
-#X connect 2 0 3 0;
-#X connect 4 0 3 0;
-#X connect 7 0 6 0;
-#X connect 16 0 33 1;
-#X connect 18 0 19 0;
-#X connect 19 0 23 0;
-#X connect 20 0 27 0;
-#X connect 20 0 47 0;
-#X connect 21 0 27 0;
-#X connect 21 0 47 0;
-#X connect 22 0 21 0;
-#X connect 22 0 19 2;
-#X connect 22 0 45 0;
-#X connect 23 0 32 0;
-#X connect 24 0 25 0;
-#X connect 24 1 26 0;
-#X connect 25 0 20 0;
-#X connect 25 0 19 1;
-#X connect 25 0 44 0;
-#X connect 26 0 22 0;
-#X connect 33 0 0 0;
-#X connect 35 0 25 0;
-#X connect 36 0 26 0;
-#X connect 37 0 3 0;
-#X connect 38 0 4 0;
-#X connect 38 0 39 0;
-#X connect 38 0 37 0;
-#X connect 39 0 3 0;
-#X connect 48 0 1 0;
-#X connect 49 0 2 0;
-#X restore 18 68 pd guts;
-#X obj 17 18 tgl 15 0 empty empty rendering 0 -6 0 8 -262144 -1 -1
-0 1;
-#X obj 54 46 bng 15 250 50 0 empty empty destroy_gemwin 0 -6 0 8 -262144
--1 -1;
-#N canvas 206 22 774 557 train 0;
-#X msg 66 15 create 20 4;
-#X obj 66 345 unpack f f f f;
-#X floatatom 45 391 5 0 0 0 - - -;
-#X floatatom 83 390 5 0 0 0 - - -;
-#X floatatom 120 392 5 0 0 0 - - -;
-#X floatatom 160 394 5 0 0 0 - - -;
-#X text 118 405 chaos;
-#N canvas 0 0 642 332 inputs 0;
-#X obj 122 244 outlet;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X obj 76 19 r 1-X;
-#X obj 111 19 r 1-Y;
-#X obj 145 19 r 1-Velo;
-#X obj 86 47 r 2-X;
-#X obj 121 47 r 2-Y;
-#X obj 155 47 r 2-Velo;
-#X obj 222 20 r 3-X;
-#X obj 257 21 r 3-Y;
-#X obj 291 21 r 3-Velo;
-#X obj 220 46 r 4-X;
-#X obj 255 46 r 4-Y;
-#X obj 289 46 r 4-Velo;
-#X obj 359 23 r 5-X;
-#X obj 394 23 r 5-Y;
-#X obj 428 23 r 5-Velo;
-#X obj 358 51 r 6-X;
-#X obj 393 51 r 6-Y;
-#X obj 427 51 r 6-Velo;
-#X obj 420 99 r posx;
-#X obj 464 99 r posy;
-#X obj 61 153 pack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 175 unpack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 213 pack f f f f f f f f f f f f f f f f f f f f;
-#X connect 1 0 23 0;
-#X connect 3 0 23 1;
-#X connect 4 0 23 2;
-#X connect 5 0 23 3;
-#X connect 6 0 23 4;
-#X connect 7 0 23 5;
-#X connect 8 0 23 6;
-#X connect 9 0 23 7;
-#X connect 10 0 23 8;
-#X connect 11 0 23 9;
-#X connect 12 0 23 10;
-#X connect 13 0 23 11;
-#X connect 14 0 23 12;
-#X connect 15 0 23 13;
-#X connect 16 0 23 14;
-#X connect 17 0 23 15;
-#X connect 18 0 23 16;
-#X connect 19 0 23 17;
-#X connect 20 0 23 18;
-#X connect 21 0 23 19;
-#X connect 22 0 23 20;
-#X connect 23 0 24 0;
-#X connect 24 1 25 0;
-#X connect 24 2 25 1;
-#X connect 24 3 25 2;
-#X connect 24 4 25 3;
-#X connect 24 5 25 4;
-#X connect 24 6 25 5;
-#X connect 24 7 25 6;
-#X connect 24 8 25 7;
-#X connect 24 9 25 8;
-#X connect 24 10 25 9;
-#X connect 24 11 25 10;
-#X connect 24 12 25 11;
-#X connect 24 13 25 12;
-#X connect 24 14 25 13;
-#X connect 24 15 25 14;
-#X connect 24 16 25 15;
-#X connect 24 17 25 16;
-#X connect 24 18 25 17;
-#X connect 24 19 25 18;
-#X connect 24 20 25 19;
-#X connect 25 0 0 0;
-#X restore 190 226 pd inputs;
-#X obj 190 206 metro 100;
-#X obj 190 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X text 161 408 calm & close;
-#X obj 42 421 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 80 421 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 115 421 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 154 425 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X msg 247 306 save complex.net;
-#X msg 247 324 load conplex.net;
-#X text 148 15 1- create the ann;
-#N canvas 350 135 693 354 train 0;
-#X obj 107 286 outlet;
-#X msg 73 161 iterations_between_reports 1000;
-#X msg 198 224 train-on-file complex.txt;
-#X text 200 242 training on files with many patterns may take minutes
-\, please be patient.;
-#X msg 73 109 desired_error 0.06;
-#X msg 77 135 max_iterations 200000;
-#X text 69 76 due to the complexity of the input and output data you
-should change the default training parameters:;
-#X text 219 134 smaller cycle;
-#N canvas 190 67 849 551 write 0;
-#X obj 65 417 textfile;
-#X msg 190 337 clear;
-#N canvas 0 0 458 308 alternate 0;
-#X obj 103 117 + 1;
-#X obj 70 119 f 0;
-#X obj 70 171 sel 0 1;
-#X obj 70 146 mod 2;
-#X msg 95 90 0;
-#X obj 68 31 inlet;
-#X obj 140 40 inlet;
-#X obj 140 63 bang;
-#X obj 68 55 bang;
-#X obj 65 205 outlet;
-#X obj 125 206 outlet;
-#X text 59 6 bang;
-#X text 139 18 reset to 0 without bang;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 1 0 3 0;
-#X connect 2 0 9 0;
-#X connect 2 1 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 1;
-#X connect 5 0 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X restore 58 227 pd alternate;
-#X obj 24 81 bng 15 250 50 0 empty empty write-once 0 -6 0 8 -262144
--1 -1;
-#X obj 457 108 bng 15 250 50 0 empty empty reset 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 638 328 inputs 0;
-#X obj 64 271 outlet;
-#X text 118 272 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X obj 76 19 r 1-X;
-#X obj 111 19 r 1-Y;
-#X obj 145 19 r 1-Velo;
-#X obj 86 47 r 2-X;
-#X obj 121 47 r 2-Y;
-#X obj 155 47 r 2-Velo;
-#X obj 222 20 r 3-X;
-#X obj 257 21 r 3-Y;
-#X obj 291 21 r 3-Velo;
-#X obj 220 46 r 4-X;
-#X obj 255 46 r 4-Y;
-#X obj 289 46 r 4-Velo;
-#X obj 359 23 r 5-X;
-#X obj 394 23 r 5-Y;
-#X obj 428 23 r 5-Velo;
-#X obj 358 51 r 6-X;
-#X obj 393 51 r 6-Y;
-#X obj 427 51 r 6-Velo;
-#X obj 420 99 r posx;
-#X obj 464 99 r posy;
-#X obj 61 153 pack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 175 unpack s f f f f f f f f f f f f f f f f f f f f;
-#X obj 127 213 pack f f f f f f f f f f f f f f f f f f f f f;
-#X msg 64 236 add \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 \$13
-\$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21;
-#X connect 2 0 24 0;
-#X connect 4 0 24 1;
-#X connect 5 0 24 2;
-#X connect 6 0 24 3;
-#X connect 7 0 24 4;
-#X connect 8 0 24 5;
-#X connect 9 0 24 6;
-#X connect 10 0 24 7;
-#X connect 11 0 24 8;
-#X connect 12 0 24 9;
-#X connect 13 0 24 10;
-#X connect 14 0 24 11;
-#X connect 15 0 24 12;
-#X connect 16 0 24 13;
-#X connect 17 0 24 14;
-#X connect 18 0 24 15;
-#X connect 19 0 24 16;
-#X connect 20 0 24 17;
-#X connect 21 0 24 18;
-#X connect 22 0 24 19;
-#X connect 23 0 24 20;
-#X connect 24 0 27 0;
-#X connect 25 1 26 0;
-#X connect 25 2 26 1;
-#X connect 25 3 26 2;
-#X connect 25 4 26 3;
-#X connect 25 5 26 4;
-#X connect 25 6 26 5;
-#X connect 25 7 26 6;
-#X connect 27 0 0 0;
-#X restore 58 306 pd inputs;
-#N canvas 0 0 474 324 outputs 0;
-#X obj 131 202 pack f f;
-#X obj 129 178 unpack s f f;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the outputs;
-#X obj 91 51 r output1;
-#X obj 166 51 r output2;
-#X obj 243 51 r output3;
-#X obj 318 51 r output4;
-#X obj 61 153 pack s f f f f;
-#X msg 67 227 add \$2 \$3 \$4 \$5;
-#X connect 1 1 0 0;
-#X connect 1 2 0 1;
-#X connect 4 0 11 0;
-#X connect 7 0 11 1;
-#X connect 8 0 11 2;
-#X connect 9 0 11 3;
-#X connect 10 0 11 4;
-#X connect 11 0 12 0;
-#X connect 12 0 2 0;
-#X restore 149 284 pd outputs;
-#X obj 230 223 f 0;
-#X obj 260 223 + 1;
-#X obj 239 257 nbx 5 14 -1e+037 1e+037 0 0 empty empty how_many_datasets
-0 -6 0 10 -262144 -1 -1 0 256;
-#X text 156 406 todo: write header (a line at the beginning of file
-with 3 int: how many tests \, num_input \, num_output);
-#X obj 122 190 delay 50;
-#X obj 115 159 metro 100;
-#X floatatom 346 70 5 100 5000 2 msec_between_snapshots - -;
-#X obj 127 80 tgl 15 0 empty empty toggle_on-off 0 -6 0 8 -262144 -1
--1 0 1;
-#X obj 219 189 / 2;
-#X obj 347 14 loadbang;
-#X text 293 224 comment;
-#N canvas 262 68 635 591 README 0;
-#X text 11 63 how to use: 1) modify [pd inputs] and [ps outputs] inserting
-[r] objects to receive input data \, and modify [pack]s to handle the
-right number of inputs 2) do the same with [pd outputs] 3) click on
-reset 4) toggle ON and start collectng data 5) when you are ready toggle
-OFF 6) edit [write filename cr( with the actual filename you want for
-your training data (always keep the cr after the filename) 7) open
-the file with training data 8) add a line at the beginning and write
-3 integers: the 1st is the number of training dataset written (see
-"how many datasets" number box) \, the 2nd is how many inputs your
-ann has \, the 3th is how many outputs e.g. i collected 100 training
-snapshots \, for a ann with 10 ins and 2 outs I write: 100 10 2 at
-the very beginning of the file now the training file is ready and can
-be read from nn via train-on-file command;
-#X text 143 489 please help me getting this patch more usable: - how
-to add a line at the very beginning of a text file after i have filled
-it? - how to manage inputs and outputs of different sized without forcing
-the user to edit the patch?;
-#X text 9 7 this tricky patch is usefull to write a file to train ann
-and is intended to be used with the nn external;
-#X restore 33 13 pd README;
-#X text 516 7 by davide morelli info@davidemorelli.it;
-#X text 106 14 <--readme!;
-#X msg 347 34 500;
-#X obj 129 41 inlet;
-#X msg 368 328 write complex.txt cr;
-#X msg 303 180 0;
-#N canvas 0 0 482 332 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 462 312 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 439 206 pd outputs;
-#X obj 431 237 r output1;
-#X obj 499 236 r output2;
-#X floatatom 431 258 5 0 0 0 - - -;
-#X floatatom 498 258 5 0 0 0 - - -;
-#X floatatom 568 256 5 0 0 0 - - -;
-#X floatatom 635 257 5 0 0 0 - - -;
-#X obj 568 235 r output3;
-#X obj 636 235 r output4;
-#X text 431 270 sx;
-#X text 496 272 dx;
-#X text 566 269 chaos;
-#X text 635 269 calm;
-#X text 434 171 4 outputs: using keyboard: asdf: a=sx-ness \, s=dx-ness
-\, d=chaos-ness \, f=calm-ness;
-#X text 363 348 remember to add a line at the beginning of the file
-with 3 integers... how_many_patterns 20 4 ...see README;
-#X text 142 308 <--we have 20 inputs;
-#X text 242 283 <--we have 4 outputs;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 2 1 6 0;
-#X connect 2 1 7 0;
-#X connect 3 0 11 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 4 0 1 0;
-#X connect 4 0 24 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 12 0 2 0;
-#X connect 13 0 12 1;
-#X connect 13 0 15 0;
-#X connect 14 0 12 0;
-#X connect 15 0 11 1;
-#X connect 16 0 21 0;
-#X connect 21 0 13 0;
-#X connect 22 0 14 0;
-#X connect 23 0 0 0;
-#X connect 24 0 7 1;
-#X connect 26 0 28 0;
-#X connect 27 0 29 0;
-#X connect 32 0 30 0;
-#X connect 33 0 31 0;
-#X restore 40 27 pd write trainfile;
-#X text 163 28 1- write a trainfile;
-#X text 69 63 2- adjust parameters before training;
-#X text 225 205 3- train on the file;
-#X text 195 110 higher error allowed;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X restore 114 71 pd train on file;
-#X text 217 70 2a- train using a file or;
-#N canvas 0 0 900 594 train 0;
-#X obj 66 319 outlet;
-#N canvas 0 0 793 344 inputs 0;
-#X obj 122 244 outlet;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X obj 76 19 r 1-X;
-#X obj 111 19 r 1-Y;
-#X obj 145 19 r 1-Velo;
-#X obj 86 47 r 2-X;
-#X obj 121 47 r 2-Y;
-#X obj 155 47 r 2-Velo;
-#X obj 222 20 r 3-X;
-#X obj 257 21 r 3-Y;
-#X obj 291 21 r 3-Velo;
-#X obj 220 46 r 4-X;
-#X obj 255 46 r 4-Y;
-#X obj 289 46 r 4-Velo;
-#X obj 359 23 r 5-X;
-#X obj 394 23 r 5-Y;
-#X obj 428 23 r 5-Velo;
-#X obj 358 51 r 6-X;
-#X obj 393 51 r 6-Y;
-#X obj 427 51 r 6-Velo;
-#X obj 395 88 r posx;
-#X obj 439 88 r posy;
-#X obj 550 29 r output1;
-#X obj 574 48 r output2;
-#X obj 598 68 r output3;
-#X obj 615 87 r output4;
-#X obj 61 153 pack s f f f f f f f f f f f f f f f f f f f f f f f
-f;
-#X obj 127 175 unpack s f f f f f f f f f f f f f f f f f f f f f f
-f f;
-#X obj 127 213 pack f f f f f f f f f f f f f f f f f f f f f f f f
-;
-#X connect 1 0 27 0;
-#X connect 3 0 27 1;
-#X connect 4 0 27 2;
-#X connect 5 0 27 3;
-#X connect 6 0 27 4;
-#X connect 7 0 27 5;
-#X connect 8 0 27 6;
-#X connect 9 0 27 7;
-#X connect 10 0 27 8;
-#X connect 11 0 27 9;
-#X connect 12 0 27 10;
-#X connect 13 0 27 11;
-#X connect 14 0 27 12;
-#X connect 15 0 27 13;
-#X connect 16 0 27 14;
-#X connect 17 0 27 15;
-#X connect 18 0 27 16;
-#X connect 19 0 27 17;
-#X connect 20 0 27 18;
-#X connect 21 0 27 19;
-#X connect 22 0 27 20;
-#X connect 23 0 27 21;
-#X connect 24 0 27 22;
-#X connect 25 0 27 23;
-#X connect 26 0 27 24;
-#X connect 27 0 28 0;
-#X connect 28 1 29 0;
-#X connect 28 2 29 1;
-#X connect 28 3 29 2;
-#X connect 28 4 29 3;
-#X connect 28 5 29 4;
-#X connect 28 6 29 5;
-#X connect 28 7 29 6;
-#X connect 28 8 29 7;
-#X connect 28 9 29 8;
-#X connect 28 10 29 9;
-#X connect 28 11 29 10;
-#X connect 28 12 29 11;
-#X connect 28 13 29 12;
-#X connect 28 14 29 13;
-#X connect 28 15 29 14;
-#X connect 28 16 29 15;
-#X connect 28 17 29 16;
-#X connect 28 18 29 17;
-#X connect 28 19 29 18;
-#X connect 28 20 29 19;
-#X connect 28 21 29 20;
-#X connect 28 22 29 21;
-#X connect 28 23 29 22;
-#X connect 28 24 29 23;
-#X connect 29 0 0 0;
-#X restore 213 222 pd inputs;
-#X obj 213 202 metro 100;
-#X obj 213 183 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 84 16 train;
-#N canvas 0 0 482 332 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 462 312 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 131 57 pd outputs;
-#X obj 130 87 r output1;
-#X obj 198 86 r output2;
-#X floatatom 130 108 5 0 0 0 - - -;
-#X floatatom 197 108 5 0 0 0 - - -;
-#X floatatom 267 106 5 0 0 0 - - -;
-#X floatatom 334 107 5 0 0 0 - - -;
-#X obj 267 85 r output3;
-#X obj 335 85 r output4;
-#X text 128 14 1- change to training mode;
-#X text 204 49 2- change keys if you want;
-#X text 220 61 defaults are "a" "s" "d" "f";
-#X text 239 182 3- toggle on to start training and off to stop;
-#X msg 170 282 run;
-#X text 200 283 4- switch to run mode when ready;
-#X obj 305 226 inlet;
-#X obj 305 249 nbx 8 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -262144 -1 -1 0 256;
-#X text 344 218 note: while in training mode the right outlet gives
-you the mean square error.;
-#X connect 1 0 0 0;
-#X connect 2 0 1 0;
-#X connect 3 0 2 0;
-#X connect 4 0 0 0;
-#X connect 6 0 8 0;
-#X connect 7 0 9 0;
-#X connect 12 0 10 0;
-#X connect 13 0 11 0;
-#X connect 18 0 0 0;
-#X connect 20 0 21 0;
-#X restore 133 114 pd train on the fly;
-#X text 255 113 2b- train on the fly in realtime;
-#X text 224 182 3- run the nn switching this metro ON;
-#X text 277 213 (note \, you must be in run mode);
-#X msg 281 231 run;
-#X text 34 403 left;
-#X text 75 404 right;
-#X text 356 305 4- when you are happy with you nn save it;
-#X text 354 323 remember that you can load it also passing filename
-as argument;
-#X obj 301 404 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 300 422 mse is usefull while training on-the-fly: tells you
-the global error in the net \, how much net's output differs from desired
-output.;
-#X obj 66 325 ann_mlp complex.net;
-#X connect 0 0 31 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 1 2 4 0;
-#X connect 1 3 5 0;
-#X connect 2 0 11 0;
-#X connect 3 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 14 0;
-#X connect 7 0 31 0;
-#X connect 8 0 7 0;
-#X connect 9 0 8 0;
-#X connect 15 0 31 0;
-#X connect 16 0 31 0;
-#X connect 18 0 31 0;
-#X connect 20 0 31 0;
-#X connect 24 0 31 0;
-#X connect 31 0 1 0;
-#X connect 31 1 29 0;
-#X connect 31 1 20 0;
-#X restore 16 142 pd train and run nn;
-#X text 101 12 1- start rendering;
-#X text 141 142 2- open the subpatch and follow instructions;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
diff --git a/externals/ann/examples/ann_mlp_example2/stereo.pd b/externals/ann/examples/ann_mlp_example2/stereo.pd
deleted file mode 100644
index d9cc20281..000000000
--- a/externals/ann/examples/ann_mlp_example2/stereo.pd
+++ /dev/null
@@ -1,99 +0,0 @@
-#N canvas 425 165 329 158 12;
-#X obj 113 -1 inlet~;
-#N canvas 0 0 524 249 graph23 0;
-#X obj 9 6 inlet~;
-#X obj 28 33 hsl 60 20 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 3617 1;
-#X obj 18 193 outlet~;
-#X obj 89 193 outlet~;
-#N canvas 117 45 762 354 guts 0;
-#X obj 160 -30 inlet;
-#X obj 212 167 outlet;
-#X obj 61 191 outlet;
-#X obj 89 71 -;
-#X msg 89 45 1;
-#X obj 86 20 bang;
-#X text 329 -24 calcola i fattori di moltiplicazione;
-#X text 329 -7 usando la formula (x*x);
-#X obj 212 92 expr sqrt($f1);
-#X obj 61 103 expr sqrt($f1);
-#X msg 61 135 \$1 5;
-#X obj 61 160 line;
-#X msg 212 119 \$1 5;
-#X obj 212 144 line;
-#X connect 0 0 3 1;
-#X connect 0 0 5 0;
-#X connect 0 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 8 0 12 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 2 0;
-#X connect 12 0 13 0;
-#X connect 13 0 1 0;
-#X restore 109 87 pd guts;
-#X obj 39 136 *~;
-#X obj 78 135 *~;
-#N canvas 143 79 506 267 help 0;
-#X text 31 23 this abstraction splits one signal into a 2 channels
-(stereo). uses 1/(x*x) formula;
-#X text 115 137 info@davidemorelli.it;
-#X restore 230 87 pd help;
-#X text 154 137 info@davidemorelli.it;
-#X obj 78 7 inlet;
-#N canvas 226 183 486 430 randomswalk 0;
-#X obj 57 44 inlet;
-#X obj 54 387 outlet;
-#X obj 126 44 inlet;
-#X obj 58 130 f;
-#X obj 98 168 +;
-#X obj 161 219 clip 0 1;
-#X obj 128 105 randF 0.2;
-#X obj 126 131 - 0.1;
-#X obj 92 294 line;
-#X obj 128 72 metro 1000;
-#X msg 92 269 \$1 700;
-#X connect 0 0 3 0;
-#X connect 2 0 9 0;
-#X connect 3 0 1 0;
-#X connect 3 0 4 1;
-#X connect 4 0 5 0;
-#X connect 5 0 10 0;
-#X connect 5 0 4 1;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X connect 9 0 6 0;
-#X connect 10 0 8 0;
-#X restore 125 59 pd randomswalk;
-#X obj 436 100 tgl 15 0 empty empty r_walk -15 -6 0 8 -262144 -1 -1
-0 1;
-#X msg 132 12 set \$1;
-#X obj 252 10 loadbang;
-#X msg 253 32 0.5;
-#X connect 0 0 5 0;
-#X connect 0 0 6 0;
-#X connect 1 0 10 0;
-#X connect 4 0 5 1;
-#X connect 4 1 6 1;
-#X connect 5 0 2 0;
-#X connect 6 0 3 0;
-#X connect 9 0 1 0;
-#X connect 10 0 4 0;
-#X connect 10 0 12 0;
-#X connect 11 0 10 1;
-#X connect 12 0 1 0;
-#X connect 13 0 14 0;
-#X connect 14 0 1 0;
-#X coords 0 1 100 -1 90 30 1;
-#X restore 2 1 graph;
-#X obj 1 37 outlet~;
-#X obj 63 37 outlet~;
-#X obj 171 -1 inlet;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 4 0 1 1;
-#X coords 0 0 1 1 70 30 1;
diff --git a/externals/ann/examples/ann_mlp_example3/example3.pd b/externals/ann/examples/ann_mlp_example3/example3.pd
deleted file mode 100644
index d02239530..000000000
--- a/externals/ann/examples/ann_mlp_example3/example3.pd
+++ /dev/null
@@ -1,392 +0,0 @@
-#N canvas 52 54 515 272 12;
-#N canvas 103 30 724 595 guts 0;
-#X msg 89 147 0 \, destroy;
-#X obj 111 177 gemwin;
-#X msg 94 124 reset \, create \, 1;
-#X obj 331 165 gemhead;
-#X obj 331 186 translateXYZ;
-#X obj 402 118 * -1;
-#X obj 331 206 color 0.5 0 0;
-#X obj 383 66 gemmouse 8 8;
-#X obj 363 109 - 4;
-#X obj 405 99 - 4;
-#X obj 331 226 sphere 0.6;
-#X msg 156 102 cursor 0;
-#X msg 126 66 bang;
-#X msg 166 150 lighting 1;
-#N canvas 463 128 573 394 lights 0;
-#X obj 242 277 world_light;
-#X obj 242 163 gemhead 1;
-#X obj 242 225 rotateXYZ;
-#X msg 109 193 debug 0;
-#X msg 110 224 debug 1;
-#X text 20 169 figure out where the light is;
-#X obj 311 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 354 133 pack f f;
-#X obj 334 159 line;
-#X msg 364 42 1;
-#X obj 364 23 loadbang;
-#X obj 344 298 world_light;
-#X obj 346 271 gemhead 1;
-#X obj 429 203 loadbang;
-#X obj 311 63 metro 20000;
-#X msg 400 104 10000;
-#X obj 119 57 delay 10000;
-#X msg 339 96 300;
-#X msg 292 96 50;
-#X msg 364 235 1 1 1;
-#X msg 422 266 0.6 0.3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 8 0 2 2;
-#X connect 9 0 6 0;
-#X connect 10 0 9 0;
-#X connect 10 0 15 0;
-#X connect 12 0 11 0;
-#X connect 13 0 19 0;
-#X connect 13 0 20 0;
-#X connect 14 0 17 0;
-#X connect 14 0 16 0;
-#X connect 15 0 7 1;
-#X connect 16 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 7 0;
-#X connect 19 0 0 1;
-#X connect 20 0 11 1;
-#X restore 543 135 pd lights;
-#X obj 269 139 s posx;
-#X obj 439 152 s posy;
-#X obj 225 25 inlet;
-#X obj 77 19 inlet;
-#X connect 0 0 1 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 2;
-#X connect 5 0 16 0;
-#X connect 6 0 10 0;
-#X connect 7 0 8 0;
-#X connect 7 1 9 0;
-#X connect 8 0 4 1;
-#X connect 8 0 15 0;
-#X connect 9 0 5 0;
-#X connect 11 0 1 0;
-#X connect 12 0 2 0;
-#X connect 12 0 13 0;
-#X connect 12 0 11 0;
-#X connect 13 0 1 0;
-#X connect 17 0 0 0;
-#X connect 18 0 12 0;
-#X restore 10 117 pd guts;
-#X obj 9 67 tgl 15 0 empty empty rendering 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 46 95 bng 15 250 50 0 empty empty destroy_gemwin 0 -6 0 8 -262144
--1 -1;
-#N canvas 492 13 794 577 train 0;
-#X floatatom 45 391 5 0 0 0 - - -;
-#X floatatom 83 390 5 0 0 0 - - -;
-#X floatatom 120 392 5 0 0 0 - - -;
-#X floatatom 160 394 5 0 0 0 - - -;
-#X obj 190 206 metro 100;
-#X obj 190 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 42 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 80 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 115 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 154 434 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X text 164 15 1- create the ann;
-#N canvas 503 57 684 391 train 0;
-#X obj 66 319 outlet;
-#X obj 213 183 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 84 16 train;
-#N canvas 0 0 490 340 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 466 316 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 131 57 pd outputs;
-#X obj 130 87 r output1;
-#X obj 213 86 r output2;
-#X floatatom 130 108 5 0 0 0 - - -;
-#X floatatom 212 108 5 0 0 0 - - -;
-#X floatatom 297 106 5 0 0 0 - - -;
-#X floatatom 378 107 5 0 0 0 - - -;
-#X obj 297 85 r output3;
-#X obj 379 85 r output4;
-#X text 128 14 1- change to training mode;
-#X text 248 49 2- change keys if you want;
-#X text 264 61 defaults are "a" "s" "d" "f";
-#X text 239 182 3- toggle on to start training and off to stop;
-#X msg 170 282 run;
-#X text 200 283 4- switch to run mode when ready;
-#X obj 305 226 inlet;
-#X obj 344 256 nbx 8 14 -1e+037 1e+037 0 0 empty empty MSE 0 -6 0 10
--262144 -1 -1 0 256;
-#N canvas 111 7 806 538 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 227 64 r posx1;
-#X obj 291 65 r posy1;
-#X obj 55 300 outlet;
-#X obj 115 249 s posx1;
-#X obj 147 274 s posy1;
-#X obj 362 64 r posx2;
-#X obj 426 65 r posy2;
-#X obj 185 249 s posx2;
-#X obj 217 274 s posy2;
-#X obj 489 66 r posx3;
-#X obj 553 67 r posy3;
-#X obj 254 248 s posx3;
-#X obj 286 273 s posy3;
-#X obj 616 68 r posx4;
-#X obj 680 69 r posy4;
-#X obj 71 138 pack f f f f f f f f f f;
-#X obj 128 207 unpack f f f f f f f f f f;
-#X obj 321 249 s posx4;
-#X obj 354 274 s posy4;
-#X connect 0 0 2 1;
-#X connect 1 0 19 1;
-#X connect 2 0 19 0;
-#X connect 3 0 2 0;
-#X connect 4 0 19 2;
-#X connect 5 0 19 3;
-#X connect 9 0 19 4;
-#X connect 10 0 19 5;
-#X connect 13 0 19 6;
-#X connect 14 0 19 7;
-#X connect 17 0 19 8;
-#X connect 18 0 19 9;
-#X connect 19 0 6 0;
-#X connect 19 0 20 0;
-#X connect 20 0 7 0;
-#X connect 20 1 8 0;
-#X connect 20 2 11 0;
-#X connect 20 3 12 0;
-#X connect 20 4 15 0;
-#X connect 20 5 16 0;
-#X connect 20 6 21 0;
-#X connect 20 7 22 0;
-#X restore 213 226 pd inputs;
-#N canvas 84 111 790 303 merge 0;
-#X obj 56 34 inlet;
-#X obj 56 73 unpack f f f f f f f f f f;
-#X obj 306 38 r output1;
-#X obj 382 38 r output2;
-#X obj 460 39 r output3;
-#X obj 537 39 r output4;
-#X obj 78 137 pack f f f f f f f f f f f f f f;
-#X obj 78 184 outlet;
-#X connect 0 0 1 0;
-#X connect 1 0 6 0;
-#X connect 1 1 6 1;
-#X connect 1 2 6 2;
-#X connect 1 3 6 3;
-#X connect 1 4 6 4;
-#X connect 1 5 6 5;
-#X connect 1 6 6 6;
-#X connect 1 7 6 7;
-#X connect 1 8 6 8;
-#X connect 1 9 6 9;
-#X connect 2 0 6 10;
-#X connect 3 0 6 11;
-#X connect 4 0 6 12;
-#X connect 5 0 6 13;
-#X connect 6 0 7 0;
-#X restore 140 254 pd merge outputs;
-#X obj 213 202 metro 100;
-#X connect 1 0 22 0;
-#X connect 2 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 7 0;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 16 0 0 0;
-#X connect 18 0 19 0;
-#X connect 20 0 21 0;
-#X connect 21 0 0 0;
-#X connect 22 0 20 0;
-#X restore 133 114 pd train on the fly;
-#X text 224 182 3- run the nn switching this metro ON;
-#X text 277 213 (note \, you must be in run mode);
-#X msg 281 231 run;
-#X text 364 303 4- when you are happy with you nn save it;
-#X text 362 321 remember that you can load it also passing filename
-as argument;
-#X obj 301 404 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 300 422 mse is usefull while training on-the-fly: tells you
-the global error in the net \, how much net's output differs from desired
-output.;
-#N canvas 111 7 814 546 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 227 64 r posx1;
-#X obj 291 65 r posy1;
-#X obj 55 300 outlet;
-#X obj 115 249 s posx1;
-#X obj 147 274 s posy1;
-#X obj 362 64 r posx2;
-#X obj 426 65 r posy2;
-#X obj 185 249 s posx2;
-#X obj 217 274 s posy2;
-#X obj 489 66 r posx3;
-#X obj 553 67 r posy3;
-#X obj 254 248 s posx3;
-#X obj 286 273 s posy3;
-#X obj 616 68 r posx4;
-#X obj 680 69 r posy4;
-#X obj 71 138 pack f f f f f f f f f f;
-#X obj 128 207 unpack f f f f f f f f f f;
-#X obj 321 249 s posx4;
-#X obj 354 274 s posy4;
-#X connect 0 0 2 1;
-#X connect 1 0 19 1;
-#X connect 2 0 19 0;
-#X connect 3 0 2 0;
-#X connect 4 0 19 2;
-#X connect 5 0 19 3;
-#X connect 9 0 19 4;
-#X connect 10 0 19 5;
-#X connect 13 0 19 6;
-#X connect 14 0 19 7;
-#X connect 17 0 19 8;
-#X connect 18 0 19 9;
-#X connect 19 0 6 0;
-#X connect 19 0 20 0;
-#X connect 20 0 7 0;
-#X connect 20 1 8 0;
-#X connect 20 2 11 0;
-#X connect 20 3 12 0;
-#X connect 20 4 15 0;
-#X connect 20 5 16 0;
-#X connect 20 6 21 0;
-#X connect 20 7 22 0;
-#X restore 188 229 pd inputs;
-#X text 325 115 2- train on the fly in realtime;
-#X obj 64 348 unpack f f f f;
-#X msg 66 15 create 10 4;
-#X msg 247 306 save tdnn.net;
-#X msg 247 325 load tdnn.net;
-#X text 24 412 still;
-#X text 72 412 left;
-#X text 111 413 right;
-#X text 156 415 na;
-#X obj 66 325 ann_mlp tdnn.net;
-#X connect 0 0 6 0;
-#X connect 1 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 19 0;
-#X connect 5 0 4 0;
-#X connect 11 0 29 0;
-#X connect 14 0 29 0;
-#X connect 19 0 29 0;
-#X connect 21 0 0 0;
-#X connect 21 1 1 0;
-#X connect 21 2 2 0;
-#X connect 21 3 3 0;
-#X connect 22 0 29 0;
-#X connect 23 0 29 0;
-#X connect 24 0 29 0;
-#X connect 29 0 21 0;
-#X connect 29 1 17 0;
-#X connect 29 1 11 0;
-#X restore 8 191 pd train and run nn;
-#X text 93 61 1- start rendering;
-#X text 71 170 2- open the subpatch and follow instructions;
-#X text 15 5 TDNN implementation (Time Delay Neural Network) useful
-for gesture recognition;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
diff --git a/externals/ann/examples/ann_mlp_example3/tdnn.net b/externals/ann/examples/ann_mlp_example3/tdnn.net
deleted file mode 100644
index 6c9540db0..000000000
--- a/externals/ann/examples/ann_mlp_example3/tdnn.net
+++ /dev/null
@@ -1,7 +0,0 @@
-FANN_FLO_1.1
-3 0.700000 1.000000 0 5 5 5.00000000000000000000e-001 5.00000000000000000000e-001
-11 4 5 
-0 0 0 0 0 0 0 0 0 0 0 
-11 11 11 0 
-4 4 4 4 0 
-(0 3.98359465599060060000e+000) (1 -3.46662133932113650000e-001) (2 1.66724932193756100000e+000) (3 -3.35077017545700070000e-001) (4 -5.66196799278259280000e-001) (5 -3.65077793598175050000e-001) (6 -2.26146197319030760000e+000) (7 1.53752446174621580000e-001) (8 -3.91640329360961910000e+000) (9 4.93833124637603760000e-001) (10 -4.37475204467773440000e+000) (0 2.48541951179504390000e+000) (1 2.93741494417190550000e-001) (2 1.34525704383850100000e+000) (3 3.87542009353637700000e-001) (4 2.62434352189302440000e-002) (5 4.33074653148651120000e-001) (6 -9.10757899284362790000e-001) (7 2.65246361494064330000e-001) (8 -2.17471313476562500000e+000) (9 3.53803992271423340000e-001) (10 -7.55431175231933590000e-001) (0 -4.49254703521728520000e+000) (1 -6.78778812289237980000e-002) (2 -2.04198622703552250000e+000) (3 -1.45705610513687130000e-001) (4 1.97579100728034970000e-001) (5 -4.57823067903518680000e-001) (6 2.62115192413330080000e+000) (7 -2.74485975503921510000e-001) (8 4.33024168014526370000e+000) (9 -2.26368784904479980000e-001) (10 -3.94826436042785640000e+000) (11 -1.19106411933898930000e+000) (12 -2.40987926721572880000e-001) (13 -1.45797419548034670000e+000) (14 2.45804578065872190000e-001) (11 6.82796686887741090000e-002) (12 -3.14634591341018680000e-002) (13 1.29793524742126460000e+000) (14 1.30129599571228030000e+000) (11 1.01107788085937500000e+000) (12 4.44010108709335330000e-001) (13 3.43794375658035280000e-001) (14 8.93330514430999760000e-001) (11 1.50074372683870950000e-016) (12 4.71110857886675280000e-017) (13 1.25351783824343270000e-016) (14 1.36875296494823600000e-017) 
diff --git a/externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd b/externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd
deleted file mode 100644
index 6c3f5bc14..000000000
--- a/externals/ann/examples/ann_mlp_example4/gen_trainfile-help.pd
+++ /dev/null
@@ -1,39 +0,0 @@
-#N canvas 711 130 586 632 10;
-#X text 198 23 ::::_gen_trainfile_::::;
-#X text 46 68 This abstraction generates a trainig file for ann_mlp
-and ann_td;
-#X obj 351 443 gen_trainfile;
-#X msg 437 154 test.txt;
-#X text 313 153 1) set filename:;
-#X msg 394 215 4 2 1;
-#X text 249 217 2) set file header:;
-#X text 183 241 4 = nr. of training datasets;
-#X text 184 255 2 = inputs of the neural net;
-#X text 184 269 1 = output of the neural net;
-#X msg 150 393 0 0 0;
-#X msg 197 393 0 1 1;
-#X msg 247 393 1 0 1;
-#X msg 293 393 1 1 0;
-#X text 46 116 Example:;
-#X text 36 311 3) send training data (first inputs \, then output)
-;
-#X text 58 327 because you have now 4 training datasets you;
-#X text 57 342 must pass 4 lists !!!;
-#X text 162 374 a;
-#X text 209 374 b;
-#X text 259 375 c;
-#X text 302 374 d;
-#X floatatom 351 469 5 0 0 0 - - -;
-#X obj 437 501 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 332 502 file is ready:;
-#X text 238 468 added datasets:;
-#X text 150 573 (c) 2005 \, Georg Holzmann <grh@mur.at>;
-#X connect 2 0 22 0;
-#X connect 2 1 23 0;
-#X connect 3 0 2 2;
-#X connect 5 0 2 1;
-#X connect 10 0 2 0;
-#X connect 11 0 2 0;
-#X connect 12 0 2 0;
-#X connect 13 0 2 0;
diff --git a/externals/ann/examples/ann_mlp_example4/gen_trainfile.pd b/externals/ann/examples/ann_mlp_example4/gen_trainfile.pd
deleted file mode 100644
index 0f134e478..000000000
--- a/externals/ann/examples/ann_mlp_example4/gen_trainfile.pd
+++ /dev/null
@@ -1,180 +0,0 @@
-#N canvas 60 0 578 726 10;
-#X obj 60 466 inlet;
-#X text 95 228 <nr of tests> <nr of inputs> <nr of outputs>;
-#X text 98 248 nr of tests = with how many datasets;
-#X text 197 262 should be trained;
-#X text 97 282 nr of inputs = inputs of the neural net;
-#X text 98 304 nr of outputs = outputs of the neural net;
-#X text 100 380 <input1> <input2> ... <output1> <output2> ...;
-#X obj 418 542 textfile;
-#X text 59 190 1) set filename at 3.inlet;
-#X text 59 210 2) set the following list at 2 inlet:;
-#X text 61 334 3) pass the datasets as a list (one after the other)
-into 1.inlet \, one list contains the input and desired output values
-\, like:;
-#X text 50 443 datalist;
-#X obj 230 467 inlet;
-#X text 229 448 header;
-#X text 40 169 INLETS:;
-#X obj 419 466 inlet;
-#X text 410 447 filename;
-#N canvas 0 0 450 300 write_header 0;
-#X obj 30 29 inlet;
-#X obj 30 67 t l b b;
-#X obj 30 256 s \$0-textfile;
-#X msg 74 97 clear;
-#X msg 52 135 rewind;
-#X msg 30 165 add \$1 \$2 \$3;
-#X obj 170 79 unpack f f f;
-#X obj 170 111 s \$0-size;
-#X obj 209 138 s \$0-ins;
-#X obj 181 206 s \$0-ok_for_new_datasets;
-#X msg 181 180 1;
-#X connect 0 0 1 0;
-#X connect 0 0 6 0;
-#X connect 1 0 5 0;
-#X connect 1 1 4 0;
-#X connect 1 2 3 0;
-#X connect 1 2 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 7 0;
-#X connect 6 1 8 0;
-#X connect 10 0 9 0;
-#X restore 230 493 pd write_header;
-#X obj 418 521 r \$0-textfile;
-#N canvas 672 100 450 561 write_datasets 0;
-#X obj 25 34 inlet;
-#X obj 25 487 outlet;
-#X obj 242 160 niagara;
-#X obj 298 159 r \$0-ins;
-#X obj 303 223 lister;
-#X msg 221 250 add;
-#X obj 242 195 t b b l;
-#X obj 303 245 t b l;
-#X msg 304 271 add;
-#X obj 273 340 s \$0-textfile;
-#X obj 221 277 iem_append;
-#X obj 304 298 iem_append;
-#X obj 139 339 s \$0-write;
-#X obj 62 92 r \$0-ok_for_new_datasets;
-#X obj 25 115 spigot;
-#X obj 25 143 t b l;
-#N canvas 115 166 450 464 count_datasets 0;
-#X obj 86 247 f;
-#X obj 86 98 inlet;
-#X msg 147 247 0;
-#X obj 147 216 loadbang;
-#X obj 86 366 outlet;
-#X obj 116 247 + 1;
-#X obj 86 284 % \$1;
-#X text 89 74 bang;
-#X text 248 125 modulo;
-#X text 147 80 reset;
-#X obj 249 268 - 1;
-#X obj 230 304 sel;
-#X obj 230 365 outlet;
-#X text 219 389 bang after;
-#X text 220 403 one circle;
-#X text 83 389 numbers;
-#X obj 201 248 f \$1;
-#X obj 86 193 t b;
-#X obj 249 146 r \$0-size;
-#X obj 147 98 r \$0-ok_for_new_datasets;
-#X obj 147 120 sel 1;
-#X connect 0 0 6 0;
-#X connect 1 0 17 0;
-#X connect 2 0 0 1;
-#X connect 3 0 2 0;
-#X connect 3 0 16 0;
-#X connect 5 0 0 1;
-#X connect 6 0 5 0;
-#X connect 6 0 4 0;
-#X connect 6 0 11 0;
-#X connect 10 0 11 1;
-#X connect 11 0 12 0;
-#X connect 16 0 10 0;
-#X connect 17 0 0 0;
-#X connect 18 0 6 1;
-#X connect 18 0 10 0;
-#X connect 19 0 20 0;
-#X connect 20 0 2 0;
-#X restore 25 237 pd count_datasets;
-#X obj 139 396 s \$0-ok_for_new_datasets;
-#X msg 139 376 0;
-#X obj 139 487 outlet;
-#X obj 25 58 t l b;
-#N canvas 0 0 450 300 WARNINGS 0;
-#X obj 20 22 inlet;
-#X obj 20 114 == 0;
-#X obj 36 54 r \$0-ok_for_new_datasets;
-#X obj 20 206 print gen_trainfile_WARNING;
-#X obj 20 81 f 0;
-#X msg 20 178 file is full or create new header;
-#X obj 20 141 sel 1;
-#X connect 0 0 4 0;
-#X connect 1 0 6 0;
-#X connect 2 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X restore 289 75 pd WARNINGS;
-#X obj 25 461 + 1;
-#X connect 0 0 20 0;
-#X connect 2 0 6 0;
-#X connect 2 1 4 1;
-#X connect 3 0 2 1;
-#X connect 4 0 7 0;
-#X connect 5 0 10 0;
-#X connect 6 0 4 0;
-#X connect 6 1 5 0;
-#X connect 6 2 10 1;
-#X connect 7 0 8 0;
-#X connect 7 1 11 1;
-#X connect 8 0 11 0;
-#X connect 10 0 9 0;
-#X connect 11 0 9 0;
-#X connect 13 0 14 1;
-#X connect 14 0 15 0;
-#X connect 15 0 16 0;
-#X connect 15 1 2 0;
-#X connect 16 0 22 0;
-#X connect 16 1 18 0;
-#X connect 16 1 12 0;
-#X connect 16 1 19 0;
-#X connect 18 0 17 0;
-#X connect 20 0 14 0;
-#X connect 20 1 21 0;
-#X connect 22 0 1 0;
-#X restore 60 495 pd write_datasets;
-#X text 39 118 NEEDED EXTERNALS: zexy and iemlib (http://pd.iem.at)
-;
-#N canvas 832 484 389 329 write_file 0;
-#X obj 29 37 inlet;
-#X obj 96 151 symbol;
-#X obj 96 91 r \$0-write;
-#X msg 96 177 write \$1 cr;
-#X obj 96 203 s \$0-textfile;
-#X obj 133 126 symbol;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 5 0 1 1;
-#X restore 419 488 pd write_file;
-#X text 40 137 HOW TO Use it: (see also help file);
-#X obj 60 561 outlet;
-#X obj 222 563 outlet;
-#X text 48 583 written datasets;
-#X text 216 585 file is ready and written (bang);
-#X text 134 658 (c) 2005 \, Georg Holzmann <grh@mur.at>;
-#X text 72 72 This abstraction generates a trainig file for ann_mlp
-and ann_td.;
-#X text 192 25 ::::_gen_trainfile_::::;
-#X connect 0 0 19 0;
-#X connect 12 0 17 0;
-#X connect 15 0 21 0;
-#X connect 18 0 7 0;
-#X connect 19 0 23 0;
-#X connect 19 1 24 0;
diff --git a/externals/ann/examples/ann_mlp_example4/multidim_net.pd b/externals/ann/examples/ann_mlp_example4/multidim_net.pd
deleted file mode 100644
index 41acb5fb8..000000000
--- a/externals/ann/examples/ann_mlp_example4/multidim_net.pd
+++ /dev/null
@@ -1,387 +0,0 @@
-#N canvas 57 0 663 539 10;
-#X obj 396 55 grid grid1 200 -1 1 200 -1 1 1 0.001 0.001 2 2 450 248
-;
-#X floatatom 396 261 5 0 0 0 - - -;
-#X floatatom 589 262 5 0 0 0 - - -;
-#X obj 397 278 pack f f;
-#X obj 81 136 h_vector sample_pool;
-#X msg 183 119 print;
-#N canvas 143 0 450 300 pushback 0;
-#X obj 22 21 inlet;
-#X msg 22 120 pushback;
-#X obj 22 195 outlet;
-#X obj 22 156 iem_append;
-#X obj 22 76 t b a;
-#X connect 0 0 4 0;
-#X connect 1 0 3 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 0;
-#X connect 4 1 3 1;
-#X restore 81 97 pd pushback;
-#X msg 183 98 clear;
-#X text 37 27 add new datasets to the vector:;
-#N canvas 504 132 747 729 train_net_on_datasets 0;
-#X obj 116 562 gen_trainfile;
-#X text 91 404 2) step through all;
-#X text 85 108 1) create net;
-#X text 106 151 a) get nr. of inputs:;
-#X obj 122 205 h_vector sample_pool;
-#X msg 122 183 get 0;
-#X obj 122 227 length;
-#X obj 122 249 - 1;
-#X text 297 151 b) get nr. of outputs:;
-#X obj 314 199 h_vector sample_pool;
-#X msg 314 178 getsize;
-#X obj 122 129 t b b;
-#X obj 122 288 pack 0 0 0;
-#X obj 122 345 s \$0-to_net;
-#X obj 46 41 inlet;
-#X obj 159 488 pack 0 0 0 0;
-#X msg 159 536 \$2 \$3 \$4;
-#N canvas 754 184 450 454 step_through_datas 0;
-#X obj 21 20 inlet;
-#X obj 79 423 outlet;
-#X obj 130 99 h_vector sample_pool;
-#X msg 130 79 getsize;
-#X obj 21 138 h_for;
-#X obj 21 213 h_vector sample_pool;
-#X msg 21 191 get \$1;
-#X obj 21 257 niagara 1;
-#X text 62 278 input;
-#X obj 21 48 t b b;
-#X obj 21 164 t f f;
-#X obj 203 257 h_muxlist;
-#X text 183 279 output;
-#X obj 79 353 glue;
-#X connect 0 0 9 0;
-#X connect 2 1 4 1;
-#X connect 2 1 11 1;
-#X connect 3 0 2 0;
-#X connect 4 0 10 0;
-#X connect 5 0 7 0;
-#X connect 6 0 5 0;
-#X connect 7 1 13 0;
-#X connect 9 0 4 0;
-#X connect 9 1 3 0;
-#X connect 10 0 6 0;
-#X connect 10 1 11 0;
-#X connect 11 0 13 1;
-#X connect 13 0 1 0;
-#X restore 116 458 pd step_through_datas;
-#X obj 116 429 t b b b;
-#X text 65 601 3) train the net on it;
-#X msg 202 512 tmp/trainfile.dat;
-#X obj 46 694 s \$0-to_net;
-#X obj 46 68 t b b b;
-#X msg 106 623 FANN_TRAIN_RPROP;
-#X msg 106 646 FANN_TRAIN_QUICKPROP;
-#X obj 46 577 t b b;
-#X obj 187 265 * 2;
-#X msg 46 671 train-on-file tmp/trainfile.dat;
-#X msg 122 314 create \$1 \$2 3 \$3 1 0.7;
-#X msg 363 612 set_activation_function_output FANN_LINEAR;
-#X msg 364 583 set_activation_function_hidden FANN_LINEAR;
-#X msg 372 669 randomize_weights -0.1 0.1;
-#X msg 365 643 desired_error 0.001;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 12 0;
-#X connect 7 0 15 2;
-#X connect 9 1 12 1;
-#X connect 9 1 15 3;
-#X connect 9 1 15 1;
-#X connect 9 1 26 0;
-#X connect 10 0 9 0;
-#X connect 11 0 5 0;
-#X connect 11 1 10 0;
-#X connect 12 0 28 0;
-#X connect 14 0 22 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 1;
-#X connect 17 0 0 0;
-#X connect 18 0 17 0;
-#X connect 18 1 15 0;
-#X connect 18 2 20 0;
-#X connect 20 0 0 2;
-#X connect 22 0 25 0;
-#X connect 22 1 18 0;
-#X connect 22 2 11 0;
-#X connect 24 0 21 0;
-#X connect 25 0 27 0;
-#X connect 25 1 31 0;
-#X connect 25 1 32 0;
-#X connect 25 1 24 0;
-#X connect 26 0 12 2;
-#X connect 27 0 21 0;
-#X connect 28 0 13 0;
-#X connect 31 0 21 0;
-#X connect 32 0 21 0;
-#X restore 80 222 pd train_net_on_datasets;
-#X text 37 178 generate new net and train it on the datasets:;
-#X text 35 263 the neural net:;
-#N canvas 0 564 450 300 nn_for_samples 0;
-#X obj 72 63 r \$0-to_net;
-#X obj 72 125 h_maxlist;
-#X obj 72 243 outlet;
-#X text 72 267 index;
-#X obj 177 198 h_vector sample_pool;
-#X msg 177 175 get \$1;
-#X obj 177 241 outlet;
-#X text 176 263 samplename;
-#X obj 177 219 unpack s;
-#X obj 91 175 print;
-#N canvas 265 255 690 335 training 0;
-#X obj 71 288 outlet;
-#X msg 82 195 FANN_TRAIN_INCREMENTAL;
-#X msg 82 216 FANN_TRAIN_BATCH;
-#X msg 81 238 FANN_TRAIN_RPROP;
-#X msg 81 258 FANN_TRAIN_QUICKPROP;
-#X text 40 28 you can set the training algorithm simply sending a message
-with the name of the algorithm chosen. possible values are: FANN_TRAIN_INCREMENTAL
-FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP the default
-is: FANN_TRAIN_RPROP see the FANN manual for details on each algorithm:
-http://fann.sourceforge.net/html/r1996.html;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 215 58 pd training algorithm;
-#N canvas 371 92 698 395 training 0;
-#X obj 52 230 outlet;
-#X msg 69 118 desired_error 0.01;
-#X msg 79 146 max_iterations 500000;
-#X msg 90 178 iterations_between_reports 1000;
-#X text 58 28 you can change training parameters. see FANN manual for
-details (http://fann.sourceforge.net);
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 216 84 pd training params;
-#N canvas 371 92 694 391 activation 0;
-#X obj 49 335 outlet;
-#X text 40 28 you can set ti output activation algorithm passing a
-message to nn. see the FANN manual for description of the algorithms
-;
-#X msg 69 118 set_activation_function_output FANN_THRESHOLD;
-#X msg 83 139 set_activation_function_output FANN_THRESHOLD_SYMMETRIC
-;
-#X msg 95 163 set_activation_function_output FANN_LINEAR;
-#X msg 98 184 set_activation_function_output FANN_SIGMOID;
-#X msg 106 206 set_activation_function_output FANN_SIGMOID_STEPWISE
-;
-#X msg 108 233 set_activation_function_output FANN_SIGMOID_SYMMETRIC
-;
-#X msg 115 256 set_activation_function_output FANN_SIGMOID_SYMMETRIC_STEPWISE
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X restore 215 108 pd activation algorithm;
-#X msg 109 33 print;
-#X msg 114 9 learnrate 1;
-#X obj 83 96 ann_mlp;
-#X msg 235 20 load tmp/testnet.ann;
-#X connect 0 0 15 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 4 0 8 0;
-#X connect 5 0 4 0;
-#X connect 8 0 6 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 0;
-#X connect 15 0 1 0;
-#X connect 15 0 9 0;
-#X connect 16 0 15 0;
-#X restore 90 293 pd nn_for_samples;
-#X floatatom 90 310 5 0 0 0 index - -;
-#X symbolatom 171 310 15 0 0 0 file - -;
-#X obj 80 202 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 396 300 s \$0-to_net;
-#N canvas 19 332 538 494 make_random_datasets_for_testing 0;
-#X text 26 17 make 200 8-dimensional random datasets \, for testing
-;
-#X obj 152 158 h_randfloat -1 1;
-#X obj 193 198 h_randfloat -1 1;
-#X obj 170 178 h_randfloat -1 1;
-#X obj 212 218 h_randfloat -1 1;
-#X obj 276 157 h_randfloat -1 1;
-#X obj 313 198 h_randfloat -1 1;
-#X obj 294 177 h_randfloat -1 1;
-#X obj 336 217 h_randfloat -1 1;
-#X obj 43 377 pack s f f f f f f f f;
-#X obj 43 126 t f b;
-#X obj 43 261 makefilename sample%d.wav;
-#X obj 43 438 outlet;
-#X obj 43 52 inlet;
-#X obj 108 52 inlet;
-#X obj 43 91 h_for 10;
-#X connect 1 0 9 1;
-#X connect 2 0 9 3;
-#X connect 3 0 9 2;
-#X connect 4 0 9 4;
-#X connect 5 0 9 5;
-#X connect 6 0 9 7;
-#X connect 7 0 9 6;
-#X connect 8 0 9 8;
-#X connect 9 0 12 0;
-#X connect 10 0 11 0;
-#X connect 10 1 1 0;
-#X connect 10 1 3 0;
-#X connect 10 1 2 0;
-#X connect 10 1 4 0;
-#X connect 10 1 5 0;
-#X connect 10 1 7 0;
-#X connect 10 1 6 0;
-#X connect 10 1 8 0;
-#X connect 11 0 9 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 1;
-#X connect 15 0 10 0;
-#X restore 158 387 pd make_random_datasets_for_testing;
-#X obj 158 365 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 989 300 8-dimen-dataset 0;
-#X obj 27 40 inlet;
-#X obj 73 40 inlet;
-#X obj 73 63 t b f;
-#X obj 118 40 inlet;
-#X obj 118 63 t b f;
-#X obj 163 40 inlet;
-#X obj 163 63 t b f;
-#X obj 208 40 inlet;
-#X obj 208 63 t b f;
-#X obj 252 40 inlet;
-#X obj 252 63 t b f;
-#X obj 297 40 inlet;
-#X obj 297 63 t b f;
-#X obj 342 40 inlet;
-#X obj 342 63 t b f;
-#X obj 127 201 pack 0 0 0 0 0 0 0 0;
-#X obj 337 257 outlet;
-#X obj 422 39 inlet;
-#X text 418 20 random;
-#X obj 422 104 h_randfloat -1 1;
-#X obj 477 145 h_randfloat -1 1;
-#X obj 454 125 h_randfloat -1 1;
-#X obj 496 165 h_randfloat -1 1;
-#X obj 560 104 h_randfloat -1 1;
-#X obj 597 145 h_randfloat -1 1;
-#X obj 578 124 h_randfloat -1 1;
-#X obj 620 164 h_randfloat -1 1;
-#X obj 422 63 t b b;
-#X obj 422 207 pack 0 0 0 0 0 0 0 0;
-#X connect 0 0 15 0;
-#X connect 1 0 2 0;
-#X connect 2 0 15 0;
-#X connect 2 1 15 1;
-#X connect 3 0 4 0;
-#X connect 4 0 15 0;
-#X connect 4 1 15 2;
-#X connect 5 0 6 0;
-#X connect 6 0 15 0;
-#X connect 6 1 15 3;
-#X connect 7 0 8 0;
-#X connect 8 0 15 0;
-#X connect 8 1 15 4;
-#X connect 9 0 10 0;
-#X connect 10 0 15 0;
-#X connect 10 1 15 5;
-#X connect 11 0 12 0;
-#X connect 12 0 15 0;
-#X connect 12 1 15 6;
-#X connect 13 0 14 0;
-#X connect 14 0 15 0;
-#X connect 14 1 15 7;
-#X connect 15 0 16 0;
-#X connect 17 0 27 0;
-#X connect 19 0 28 0;
-#X connect 20 0 28 2;
-#X connect 21 0 28 1;
-#X connect 22 0 28 3;
-#X connect 23 0 28 4;
-#X connect 24 0 28 6;
-#X connect 25 0 28 5;
-#X connect 26 0 28 7;
-#X connect 27 0 19 0;
-#X connect 27 1 23 0;
-#X connect 27 1 21 0;
-#X connect 27 1 25 0;
-#X connect 27 1 20 0;
-#X connect 27 1 24 0;
-#X connect 27 1 22 0;
-#X connect 27 1 26 0;
-#X connect 28 0 16 0;
-#X restore 467 441 pd 8-dimen-dataset;
-#X obj 467 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 484 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 501 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 518 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 536 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 553 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 570 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 587 382 vsl 15 50 -1 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X text 465 338 8 dimensional:;
-#X obj 467 463 s \$0-to_net;
-#X obj 600 442 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 511 353 0;
-#X msg 377 370 250;
-#X obj 420 92 cnv 15 1 1 empty empty 1 5 7 0 8 -241291 -241291 0;
-#X obj 412 195 cnv 15 1 1 empty empty 2 5 7 0 8 -241291 -241291 0;
-#X obj 415 215 cnv 15 1 1 empty empty 3 5 7 0 8 -241291 -241291 0;
-#X obj 434 200 cnv 15 1 1 empty empty 4 5 7 0 8 -241291 -241291 0;
-#X obj 476 160 cnv 15 1 1 empty empty 5 5 7 0 8 -241291 -241291 0;
-#X obj 485 230 cnv 15 1 1 empty empty 6 5 7 0 8 -241291 -241291 0;
-#X obj 501 177 cnv 15 1 1 empty empty 7 5 7 0 8 -241291 -241291 0;
-#X obj 508 198 cnv 15 1 1 empty empty 8 5 7 0 8 -241291 -241291 0;
-#X obj 526 125 cnv 15 1 1 empty empty 9 5 7 0 8 -241291 -241291 0;
-#X obj 537 223 cnv 15 1 1 empty empty 0 5 7 0 8 -241291 -241291 0;
-#X msg 50 64 sample9.wav 0.34 0.26;
-#X msg 223 64 readXML tmp/2d-data.xml;
-#X connect 0 0 1 0;
-#X connect 0 1 2 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 16 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 12 0 13 0;
-#X connect 12 1 14 0;
-#X connect 15 0 9 0;
-#X connect 18 0 17 0;
-#X connect 19 0 29 0;
-#X connect 20 0 19 0;
-#X connect 21 0 19 1;
-#X connect 22 0 19 2;
-#X connect 23 0 19 3;
-#X connect 24 0 19 4;
-#X connect 25 0 19 5;
-#X connect 26 0 19 6;
-#X connect 27 0 19 7;
-#X connect 30 0 19 8;
-#X connect 31 0 20 0;
-#X connect 31 0 21 0;
-#X connect 31 0 22 0;
-#X connect 31 0 23 0;
-#X connect 31 0 24 0;
-#X connect 31 0 25 0;
-#X connect 31 0 26 0;
-#X connect 31 0 27 0;
-#X connect 32 0 17 1;
-#X connect 43 0 6 0;
-#X connect 44 0 4 0;
diff --git a/externals/ann/examples/ann_mlp_example4/test.txt b/externals/ann/examples/ann_mlp_example4/test.txt
deleted file mode 100644
index c5cdf2b4f..000000000
--- a/externals/ann/examples/ann_mlp_example4/test.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-3 2 2
-4 9
-2 1
-5 3
-2 1
-2 4
-0 1
diff --git a/externals/ann/examples/ann_mlp_example4/trainfile.dat b/externals/ann/examples/ann_mlp_example4/trainfile.dat
deleted file mode 100644
index a053f7d5f..000000000
--- a/externals/ann/examples/ann_mlp_example4/trainfile.dat
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 4
--1 -1
-1 0 0 0
-1 -1
-0 1 0 0
--1 1
-0 0 1 0
-1 1
-0 0 0 1
diff --git a/externals/ann/examples/ann_mlp_example4/trainfile2.dat b/externals/ann/examples/ann_mlp_example4/trainfile2.dat
deleted file mode 100644
index 0d3eea73f..000000000
--- a/externals/ann/examples/ann_mlp_example4/trainfile2.dat
+++ /dev/null
@@ -1,9 +0,0 @@
-4 2 24
--0.5248 -0.4752
--0.690478 -0.328445 0.787627 0.457685 0.785165 -0.609361 2.73531 -0.871147 -0.654311 -0.979694 -0.782768 -0.476533 -0.880441 -0.970331 -0.694041 -0.926005 -0.116742 -0.992307 -0.907731 0.220775 -0.719765 -1 1 -0.103331
--0.6039 0.6138
--0.107354 -0.437122 0.571922 0.56767 -0.0480328 -0.0436363 0.015686 -0.937416 -0.623195 -0.99371 -0.854111 -0.385827 -0.714651 -0.989703 -0.90756 -0.996025 -0.992405 -1 -1 0.405901 -0.0118679 -1 1 -0.0133747
-0.5545 0.6039
--0.272313 -0.036396 0.248606 0.722645 -0.00976638 -0.905512 0.210309 -0.969341 -0.664621 -0.99696 -0.904754 -0.325938 -0.930082 -0.99386 -0.956322 -0.917093 0.0444865 -0.998078 -0.987068 0.468123 0.836558 -1 1 -0.024074
-0.5446 -0.5643
-0.480176 0.343487 0.0527416 0.789494 -0.45131 0.074421 0.647385 -0.942653 -0.760625 -0.993795 -0.840143 -0.820498 -0.926746 -0.992776 -0.938142 -0.830174 -0.155173 -1 -1 0.204588 -0.0142726 -1 1 -0.0610782
diff --git a/externals/ann/examples/ann_som/ann_som.pd b/externals/ann/examples/ann_som/ann_som.pd
deleted file mode 100644
index 3d471eded..000000000
--- a/externals/ann/examples/ann_som/ann_som.pd
+++ /dev/null
@@ -1,144 +0,0 @@
-#N canvas 258 163 640 725 10;
-#X msg 131 535 print;
-#X msg 132 568 new 5 8 8;
-#X msg 127 139 init;
-#X msg 128 314 train;
-#X msg 129 336 test;
-#X msg 128 427 write;
-#X obj 70 599 ann_som 4 9 10;
-#X msg 70 49 1 0 0 1;
-#X msg 70 68 0 1 0 1;
-#X msg 70 87 2 1 0 0;
-#X msg 128 158 init 0.5;
-#X msg 128 178 init 1 0.5 0 0.5;
-#X text 234 141 init all weights with "0";
-#X text 235 160 init all weights with "0.5";
-#X text 235 177 init weights for each sensor;
-#X msg 128 203 learn 1;
-#X msg 128 237 learn 1 0.9 0.1;
-#X text 226 203 set learning rate to 1;
-#X msg 128 220 learn 0.5 0.999;
-#X text 227 219 set learning rate to 0.5 and factor to 0.999;
-#X text 227 237 set learning rate to 1 \, factor to 0.9 and offset
-to 0.1;
-#X msg 128 254 neighbour 1;
-#X msg 128 271 neighbour 0.5 0.999;
-#X msg 128 288 neighbour 1 0.9 0.1;
-#X text 248 255 set neighbourhood to 1;
-#X text 249 271 set neighbourhoodto 0.5 and factor to 0.999;
-#X text 249 289 set neighbourhood to 1 \, factor to 0.9 and offset
-to 0.1;
-#X text 180 309 set som to "train" mode (learn from sensor-input and
-output winning neuron);
-#X text 179 331 set som to "test" mode (output winning neuron for sensor-input
-\, but do not learn !);
-#X msg 129 368 rule INSTAR;
-#X msg 129 385 rule OUTSTAR;
-#X msg 129 402 rule KOHONEN;
-#X text 218 367 learn with IN-STAR rule;
-#X text 219 385 learn with OUT-STAR rule;
-#X text 219 402 learn with KOHONENrule;
-#X msg 128 445 write mysom.som;
-#X msg 129 469 read;
-#X msg 129 487 read mysom.som;
-#X text 156 68 present various data to the SOM;
-#X text 203 535 for debugging;
-#X text 207 570 create a new SOM with 8x8 neurons \, each having 5
-sensors;
-#X text 204 601 create a new SOM with 9x10 neurons \, each having 4
-sensors;
-#X floatatom 70 654 4 0 0 0 - - -;
-#X text 113 658 winning neuron;
-#N canvas 13 0 889 630 SOMs 0;
-#X text 76 27 SOM :: Self-Organized Maps;
-#X text 55 53 SOMs are "Artificial Neural Networks" \, that are trying
-to learn something about the data presented to them without a supervisor/teacher.
-;
-#X text 59 118 in short:;
-#X text 120 119 the neuron \, whose weight-configuration matches the
-presented data best is the winner (its number (counting from the lower-left
-corner) is sent to the output);
-#X text 121 163 to match the data better the next time it is presented
-\, the weights of the winning neuron are adjusted.;
-#X text 121 188 the weights of the neurons neighbouring the winner
-are adjusted to match the data too \, but not so strong as the winner's.
-;
-#X text 121 276 lr(n+1)=lr(n)*factor;
-#X text 275 277 learning_rate=lr+offset;
-#X text 121 289 nb(n+1)=nb(n)*factor;
-#X text 275 290 neighbourhood=nb+offset;
-#X text 121 230 both neighbourhood and learning-rate (==amount of how
-much the weights of the winner (and \, proportional \, the weights
-of the neighbours) are adjusted) are decreasing recursively with time.
-;
-#X text 119 319 thus you will sooner or (most of the time) later get
-a "brain map" \, where similar inputs will activate neurons in specifique
-regions (like there are regions for seeing and regions for hearing
-in our brains);
-#X text 97 381 there are various rules \, how to re-adjust the weights
-of the neurons : in-star \, out-star and kohonen (maybe there are others
-\, but these i found in literature);
-#X obj 607 220 +;
-#X text 640 182 ...;
-#X obj 579 185 * \$1;
-#X obj 607 185 * \$2;
-#X obj 670 185 * \$0;
-#X obj 579 128 unpack 0 0 0 0 0;
-#X text 602 111 n sensors;
-#X text 705 186 weights 1 to n;
-#X obj 579 90 inlet;
-#X obj 607 288 outlet;
-#X text 594 62 a neuron;
-#X text 566 307 the neuron with the highest weighted sum;
-#X text 567 318 matches best and is therefore the winner;
-#X text 53 452 notes:;
-#X text 101 453 each neuron of the SOM has n sensors. you have to present
-a list of n floats to the SOM to make it work;
-#X text 102 482 you should init the weights for each sensor with the
-expected mean of the sensor values before you start training to get
-best and fastest results;
-#X text 55 87 they were first proposed by the Finnish scientist T.Kohonen
-in the 80ies (i think).;
-#X text 98 543 if you have no clue \, what's this all about \, maybe
-you do not need SOMs (which i doubt) or you should have a look at;
-#X text 118 577 http://www.eas.asu.edu/~eee511;
-#X text 118 591 http://www.cis.hut.fi/projects/ica;
-#X connect 13 0 22 0;
-#X connect 15 0 13 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 18 0 15 0;
-#X connect 18 1 16 0;
-#X connect 18 4 17 0;
-#X connect 21 0 18 0;
-#X restore 535 44 pd SOMs;
-#X text 81 13 ann_som :: train and test Self-Organized Maps;
-#X obj 73 700 ann_som test.som;
-#X text 211 704 load a SOM-file;
-#X msg 128 119 rinit 10;
-#X text 234 121 init all weights with time-seeded random values from
-0 to 10;
-#X connect 0 0 6 0;
-#X connect 1 0 6 0;
-#X connect 2 0 6 0;
-#X connect 3 0 6 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X connect 6 0 42 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 11 0 6 0;
-#X connect 15 0 6 0;
-#X connect 16 0 6 0;
-#X connect 18 0 6 0;
-#X connect 21 0 6 0;
-#X connect 22 0 6 0;
-#X connect 23 0 6 0;
-#X connect 29 0 6 0;
-#X connect 30 0 6 0;
-#X connect 31 0 6 0;
-#X connect 35 0 6 0;
-#X connect 36 0 6 0;
-#X connect 37 0 6 0;
-#X connect 48 0 6 0;
diff --git a/externals/ann/examples/ann_som/test.som b/externals/ann/examples/ann_som/test.som
deleted file mode 100644
index f1074dbff..000000000
--- a/externals/ann/examples/ann_som/test.som
+++ /dev/null
@@ -1,206 +0,0 @@
-SOM:
-10 10 10 INSTAR
-0.999999999999999 0.999999999000000 0.000000000000000
-0.999999500000777 0.999999999666666 1.000000000000000
-weights:
- -3.399999539504940 -1.000001787943173 -1.600001854036666 -3.600000136648053 -1.599999240440176 -4.599999658971642 2.200000908266854 -2.600003123982305 -3.800002398132818 3.999999663428766
- -3.664408811633732 -0.293151033136177 -0.987533543750226 -2.380008660046391 -1.570271300167646 -4.070760204272482 1.171876563866566 -2.077239071278385 -3.123878873088140 3.214371110932181
- -3.850183412803100 0.180009854785169 -1.042011297665122 -1.010214762676719 -1.261593950708803 -3.602933720042998 0.223488363849274 -1.757965969969787 -2.823378035872298 2.474907850267799
- -3.267525288182409 0.051764920257421 -0.861189147291411 0.346768964752324 -1.086401295987099 -3.010025855790309 0.216062192056090 -2.054030541621496 -1.665247654188838 1.772114086164674
- -2.531908811257504 -0.228362572156031 0.283020028903598 0.691545049584991 -1.317946071617238 -2.780427630196057 0.669072905841086 -2.095166482257043 -0.357067595055914 1.194836568762597
- -1.670410067094406 -0.850456374464438 1.177079303231737 0.975765076637809 -1.598632087371286 -2.628074788624443 1.200071995849616 -2.338536290646471 0.508359948325128 0.694655469059352
- -0.972839748009842 -1.432819542418945 1.713902285702235 0.848126099774984 -2.005987681503301 -2.656928282231532 1.910400404106563 -2.720742652779477 0.819178516157051 0.589653431079632
- -0.181959862063861 -2.296825850005490 2.030276137478258 0.600072266047657 -2.328238768604089 -2.471193059455867 2.614251703556634 -2.926274832306241 0.937736319882752 0.422230237292192
- 0.752475921921809 -3.242568234927249 2.234683205252513 0.075381526534909 -2.508993189104597 -2.190834422631923 2.869101479640665 -3.069685358187795 0.463639150130185 -0.033986007249940
- 1.277032296769330 -3.659437432736417 2.010782182321743 -0.609641757048304 -2.339016786301861 -1.892952692573185 2.235093837136930 -2.920928645403118 -0.457322232707949 -0.578395974587059
- -3.971512172049805 0.535219847945980 0.494113424082311 -2.582046278675071 -2.275648808854488 -3.787217325944574 0.753567475134825 -0.721689335652595 -2.056146292175192 3.505331826210551
- -4.054055616227821 0.932795291484099 0.631968910358146 -1.799211174553179 -2.022685392946360 -3.707165267473070 0.170647464385876 -0.435571670292075 -1.647185583588689 2.895748631363134
- -3.765892834013276 1.095177178532050 0.685794072420971 -0.865949940711560 -1.533237720537425 -3.325717046871432 -0.074461110943200 -0.540958941347474 -0.835723101096425 2.109037567803126
- -3.037394336772935 0.772399801058053 0.783553802543503 -0.058950070759195 -1.165140010270036 -2.981706324180395 0.301761694648107 -1.145806179670528 0.235066868471340 1.384374535507638
- -2.280475415697267 0.288903162781809 0.942579785873891 0.373043941841189 -0.973589743321277 -2.689381829286646 0.880714123064687 -1.773515781273200 1.081885235242567 0.905503502941021
- -1.638763016008856 -0.139510716533679 1.437726642778894 0.329242139981553 -1.214048517928209 -2.337604934232495 1.529414776710072 -2.023920697334945 1.823470865818372 0.912449978862522
- -0.945934490385355 -0.836910826889674 1.712152920482545 -0.043443967439232 -1.391531518537718 -1.996208920351949 2.320373555929382 -2.190744080167090 2.309937603321630 0.956359142316148
- -0.430544809301166 -1.606495407822214 1.927949686845192 -0.049422629796747 -1.715543639664755 -1.932688381640353 2.907578129583055 -2.358268980262620 2.352761416651015 0.890909090472789
- 0.266372476041017 -2.390096871515600 1.931600793742831 -0.418452141153263 -1.752463769962683 -1.711941696941028 3.074265804116516 -2.347539237000312 1.959481993185272 0.401646855108980
- 1.095070232478888 -3.194254596681922 1.847047929883143 -1.041482644766594 -1.770291204210838 -1.433477834329486 2.939212440990236 -2.356707426618038 1.185541942497902 -0.227465763847785
- -4.348457780362172 1.721596963861671 2.135183134445781 -2.111922371925352 -2.849150791380807 -3.246885574156561 -0.202235625571466 0.973985501026858 -0.706570778236533 3.339732955342597
- -4.368228087686579 1.891149920060809 2.036230106119791 -1.584919277263748 -2.542857897804340 -3.320834155076582 -0.516257946664443 0.988803066251542 -0.521998208876602 2.883873294268708
- -3.725549256069052 1.627180482527442 1.764676337041121 -0.869211830235964 -1.824200701893774 -3.028625730293222 -0.198174242141376 0.255468576666172 0.338992094886507 2.079356408167663
- -2.939301247469378 1.153901448846943 1.515154079925773 -0.221551633876666 -1.260643080102328 -2.803647915219608 0.357719170064413 -0.674190366362191 1.265120767907391 1.373221591802172
- -2.213210917665466 0.678905587923122 1.399888089179242 0.016031973635967 -0.916287941766233 -2.462123276319008 1.049231814138565 -1.424137218878687 2.077511955210475 1.053768497550434
- -1.404549258833299 0.020354228789675 1.600536790199509 -0.341838032506697 -0.935092415097975 -1.800099492021683 2.037377390563832 -1.826035730696359 2.844161435811415 1.223301776599643
- -0.959145511724675 -0.366120237851367 1.798835596447404 -0.688360304163465 -1.042189229628116 -1.395081958669074 2.643253309229007 -1.940494331186044 3.287658092882610 1.436852655212540
- -0.579664979821490 -0.932097345154356 1.811885038506246 -0.765785493000138 -1.132913929893135 -1.348690574070790 2.856968802005087 -1.945734626475421 3.134557629545438 1.185697939467433
- 0.066873477117855 -1.843407992257171 1.757844703442099 -0.998512222771418 -1.166507719716280 -1.234750848424435 3.074504603488980 -1.846014258289374 2.790959475244524 0.639495890830501
- 0.875857253425398 -2.844032956923656 1.650791940139746 -1.435710192921676 -1.138889813201329 -1.010730095187110 3.195197431772648 -1.715636473908582 2.275154266475604 -0.033123061421149
- -4.660625162011301 2.536800912741440 3.310215647546826 -1.983579949583983 -3.423705573642091 -2.970677708592821 -0.756803150219801 2.252324334361614 0.284627008985896 3.523223937670081
- -4.607867248041779 2.503561303070671 3.029252711516285 -1.654005941807064 -3.049345998530499 -3.053166574278017 -0.861813032578485 2.017974391763137 0.206458481746841 3.139965727251893
- -3.773609416123212 1.934895146436837 2.392483051717743 -0.993943430433647 -2.072519242014490 -2.814572222932298 -0.258321491195720 0.799625737773807 0.879593690694208 2.231466783603429
- -2.789602347490602 1.343801926635191 1.698599312341219 -0.559149669333931 -1.189828623687061 -2.505666965663313 0.438264892843017 -0.457625681891893 1.756734457438183 1.418342176391699
- -2.038759034050031 0.870152115398651 1.307059888851808 -0.427694889424221 -0.649211909264716 -2.170456657641060 1.185846061504038 -1.377242076488896 2.585846027652366 1.092907465451668
- -1.171850445387268 0.100149499849393 1.561545417456040 -0.816960421989819 -0.703721283275723 -1.378336808645001 2.339949780122510 -1.843014925682711 3.331994289954238 1.376806053959631
- -0.999999719955215 -0.000000585903002 1.999999098935982 -0.999999895520345 -0.999999462989936 -1.000000523078658 2.999999033998634 -1.999999681036223 3.999998544001918 1.999998416944344
- -0.632308039509177 -0.562919825459804 1.737301575691706 -1.076794263075418 -0.871062099117383 -1.079040498612489 2.865941514133621 -1.864309015004479 3.517763874620793 1.342403707361689
- 0.072590611318608 -1.709026564177329 1.665973803994893 -1.366041769133752 -0.871562894498242 -0.924348357378998 3.137089544753133 -1.567338836721053 3.214040260107593 0.725221564872169
- 0.829922257690500 -2.791581448806690 1.477798632898677 -1.869606992739973 -0.691062853043055 -0.643647750714432 3.372214900102174 -1.218219255031402 2.943578925893897 0.075298555997860
- -4.999999004353584 2.999999255273971 3.999998912072895 -1.999999916896756 -3.999998574535363 -2.999999472519682 -0.999999734527485 2.999998897952910 0.999998555483149 3.999998419257559
- -4.717780845547964 2.775399091467099 3.515321901184576 -1.749949407257044 -3.298073799157822 -2.893666329793864 -0.988638593622910 2.521571524995959 0.537560926712989 3.306252132316069
- -3.755572133400923 2.203112857752405 2.588134581424009 -1.332106785852384 -1.967832435433027 -2.499354290910485 -0.350383495379875 1.161924876277133 1.118184609133092 2.240016661417358
- -2.666049303802033 1.550296860180113 1.693341696663998 -1.045558905111629 -0.975893960345571 -2.116065839009405 0.380721435329468 -0.188824421003278 1.836404564135224 1.385425537121163
- -1.795415457314572 0.918241113126461 1.188838556813491 -0.940813596944324 -0.426024437595116 -1.760646815922883 1.209073456823901 -1.258638064983849 2.513483205516858 1.013762646429432
- -1.037470490324593 0.211258860853280 1.208890079664495 -1.093277407156780 -0.323824850816071 -1.250814015199257 2.133236509527560 -1.806522602674094 3.171683862480717 1.040573130488526
- -0.816325205714192 -0.106895812594265 1.477151645461617 -1.180810581642213 -0.555354411025112 -1.055266982509300 2.581958332355970 -1.855023621673544 3.483803556197770 1.299872752926741
- -0.479760079224889 -0.561914191543606 1.359972152054708 -1.371904515162111 -0.469189009488387 -0.933448824516167 2.692773206515344 -1.734660038032981 3.371131387438572 1.012107824401405
- 0.134474570602915 -1.554904283538802 1.245608616665024 -1.763351294435943 -0.343488968633248 -0.699151155618663 2.975961301908113 -1.377994287902666 3.215526724546621 0.515544464149479
- 0.897368163675452 -3.162279510658690 1.367543791932125 -2.264911550472457 -0.367544176957526 -0.367544359975328 3.632455355362551 -0.735088546376173 3.367542748906255 0.102631499765101
- -4.434684152637360 2.822722937159019 3.753296681033132 -1.932017924244420 -3.405786070903065 -2.539967076432358 -1.082934359810601 2.927733973174099 0.601717183345303 3.143965264537201
- -4.364716228159867 2.801488480535435 3.433822426223437 -1.778495984171522 -2.877245061571190 -2.535400708597968 -1.087090211423334 2.578941545180213 0.551720396658055 2.791716027932460
- -3.583510369081803 2.381662217070830 2.469063426475504 -1.618290495134485 -1.696964102791638 -2.238310462068634 -0.619139734267236 1.418541000549897 0.947026968179092 1.917870437038182
- -2.456675163251826 1.732611459083983 1.418190188110553 -1.551425276661983 -0.564950194587570 -1.804435464166054 0.186328643021739 -0.012555406317352 1.662033083876830 1.086636849245845
- -1.529104937517096 1.178077657015140 0.714495908349704 -1.583908396073388 0.202962066775853 -1.372147858864397 0.926176304801837 -1.094899971431338 2.303198368073808 0.560662287373262
- -0.785939038323318 0.488059056610979 0.411695603408276 -1.672791049733762 0.529916275580196 -0.996155724726522 1.680222615552275 -1.721811103321440 2.800716449029725 0.354838370044879
- -0.569029962760953 0.066431468474963 0.618079516577042 -1.692210147716420 0.299309261472352 -0.882271357282218 2.062281505229379 -1.722299694603762 2.996236089696472 0.511874475670676
- -0.250018522843921 -0.514832002632169 0.616278558718485 -1.840772015274815 0.272995435360592 -0.740535838501878 2.301520832755083 -1.552354419288309 2.940931230404983 0.354967057944476
- 0.251800148920061 -1.464207818135621 0.601343683463328 -2.148222841127547 0.317094840922319 -0.552594270425859 2.639268432510555 -1.197173773408314 2.762688059763771 0.017852103476386
- 0.932318870939532 -2.837790556746765 0.699115191478530 -2.469675844977578 0.219866286695009 -0.355885542350070 3.132995033730602 -0.705545256877810 2.571423101722232 -0.404238609478870
- -3.409130348455066 2.320342843023009 3.433021140904054 -1.986354357329427 -2.669872992752881 -1.903620196472319 -1.226643656478325 3.001494681715124 0.434874098975972 2.004508159421472
- -3.486936690660387 2.454343393773537 2.953049651556981 -1.897026330204475 -2.032262871073851 -2.040910161440657 -1.171924050724737 2.387876699287988 0.502049144039390 1.843557783465804
- -3.046450654987764 2.390179669699468 1.978015599632370 -1.998378427668385 -0.948564526771488 -1.888346267780865 -1.036094204014821 1.563892681764842 0.655088413749008 1.126246851333170
- -1.987885281145493 1.870394550257920 0.729204205356671 -2.108729201400681 0.279930327257761 -1.408247369279901 -0.149786767925481 0.030537924826345 1.431534134693400 0.387621996084839
- -0.990560474224238 1.349885104573934 -0.350057510301517 -2.356203724531257 1.347798812812471 -0.904408431627084 0.624831179540335 -1.189860976028219 2.056642405604107 -0.254008704439007
- -0.451723052804189 0.948538698853010 -0.762990738677392 -2.512724311355281 1.753236881552716 -0.600759948081675 1.149260944365514 -1.749117007355057 2.462390702425005 -0.453614225752723
- -0.342821714944710 0.456585526946645 -0.544845985800462 -2.437549938090235 1.498311526358241 -0.592380470240897 1.460378207963043 -1.627970879648795 2.453575186249362 -0.332371207431372
- -0.090990452026912 -0.326043205753642 -0.420398629284450 -2.490392167778460 1.379016037918900 -0.526974546179914 1.786136703527057 -1.290604598070746 2.215561566922310 -0.401045908423606
- 0.351500638550009 -1.459809654300966 -0.373727620750562 -2.732391989343216 1.376803667781824 -0.362308436365718 2.221269039120766 -0.767954404806289 1.820126757794739 -0.628560714447123
- 0.843261411436526 -2.801998786283713 -0.309734000604769 -2.917966469514248 1.277764799306769 -0.283448036136064 2.668380578732439 -0.191266064689723 1.336611020116643 -0.982474545585568
- -1.690961991805014 0.986821342687000 2.566488957752868 -1.693900834686384 -1.390621841174322 -1.376658418436758 -1.593116188592552 2.869825763341280 0.961185905131165 0.318844343230768
- -1.819226346519956 1.427372656904706 2.291452456605057 -1.960690512433880 -0.718701577617367 -1.374629923794903 -1.523478798811880 2.318501649523097 0.921861723272286 0.353075469279607
- -1.644122345022504 1.622108444420580 1.297562049314988 -2.204630777532875 0.340394567223048 -1.286572647222278 -1.243715476861932 1.355795042542949 1.014071291046899 -0.135483871679969
- -1.022123317714853 1.724408850245733 -0.334785848670425 -2.648334475672161 1.722298924484380 -0.899684746335653 -0.633190066026943 -0.052843534365775 1.304371688135208 -0.867017932134152
- -0.191012263608328 1.428540433034303 -1.866762691470496 -3.140759777809166 3.004461584173736 -0.354850744609877 0.274526644431307 -1.525118463713176 1.861795047810275 -1.459383030263442
- -0.175378396100470 1.649241876975675 -2.123107256089547 -3.473863921578540 3.123107227621487 -0.175378898457855 0.526135470365211 -1.999998989484299 2.350755463675390 -1.298486336870563
- -0.119128676805872 0.791424159624606 -1.728712745773501 -3.164164671298855 2.707755508375711 -0.330842108230214 0.897806012291794 -1.538229801138516 1.846525508519994 -1.148198013380010
- 0.076085774644685 -0.357381756904083 -1.537048935229785 -3.176752378539767 2.611733421835105 -0.321108182103196 1.357299105186912 -0.847638634570576 1.174366272176676 -1.113909923860420
- 0.316320681261502 -1.597273306928110 -1.396596931653985 -3.209403902412908 2.570346236568042 -0.349214486018947 1.776916438878030 -0.099276574925412 0.476605495492240 -1.189400523880245
- 0.663585781423105 -3.089606376458373 -1.397727254839511 -3.366808341347761 2.534144690485831 -0.300631312243230 2.240648481237960 0.683770788564218 -0.411030691352247 -1.501601595339585
- 0.985227351508375 -1.648803714247017 1.030378243219446 -1.108938371643821 1.085345508276510 -0.661127492947246 -1.960002854143423 2.350339312562235 2.198981169026821 -2.011751484405538
- 0.685012171036041 -0.797814233333862 1.015167572478179 -1.259081584039024 1.295653363745759 -1.020849845817081 -2.471105487510094 2.035534513596478 2.392763915072213 -1.881109820501258
- 0.686457158597548 -0.305478783587042 0.484491358383779 -1.895714641521794 2.298100526227314 -0.769266236685295 -2.290347736290570 1.356292058594735 2.221231655718122 -2.289248837821189
- 0.724873185324239 0.462154627339358 -1.112888983140423 -2.525930918118195 3.201684237966901 -0.398264710502263 -1.134521688861845 -0.147908293718716 2.053750911650593 -2.329125395622599
- 0.345904723062259 0.975228187711387 -2.249910548251781 -3.187360830514074 3.481724376298728 -0.208598715262249 -0.083968301693121 -1.162839431456146 1.639867915163044 -1.980969679664417
- 0.166565766418578 1.042210051033558 -2.786104501948422 -3.644236995374659 3.733641111367612 -0.114445549141647 0.271659185917542 -1.442800518024824 1.337210256303109 -1.971230068975365
- 0.081154971433170 0.445914374820914 -2.800724283783551 -3.703825990014068 3.788330455815418 -0.169816536600233 0.539189650157745 -0.975698322917413 0.627755733594187 -1.894174291660718
- 0.096276029706030 -0.689504547336024 -2.509213626516561 -3.608954696301073 3.699244676999937 -0.299082857107967 0.987925121293636 -0.131004590450965 -0.223525503701646 -1.696560706323150
- 0.221838062238937 -1.905655309050296 -2.034787033939481 -3.367544310695088 3.556323326413190 -0.521536534036940 1.486750292195419 0.829522256441825 -1.018302243127148 -1.367544467347987
- 0.193861872065075 -3.162451741077858 -1.913318550815563 -3.384863949688668 3.265633350050881 -0.452220856622311 1.986061058161487 1.391121234729484 -1.792309157385880 -1.432683132603716
- 3.302346844483270 -4.160997073396219 -0.896187169559894 -0.948094666116207 3.304105414456226 0.538416192423036 -1.601172658652421 1.246919137445041 2.962464031775002 -4.051907597661985
- 3.160315854649797 -3.183836405366974 -0.353765301736615 -0.535496516829068 2.944026593343659 -0.457486446186733 -2.801350799541214 1.708848651897812 3.315600017761889 -3.652050698664994
- 2.650784949843616 -2.122236237875686 -0.609271860316696 -1.041612168946182 3.064238261984309 -0.622968122839140 -2.741636393740091 1.234945741193289 3.228947729387398 -3.422383681086359
- 1.835756190161568 -1.190249405673504 -1.309181795192128 -1.443239858292167 2.989266338019758 -0.527164602464461 -2.136548177859753 0.257187752305526 2.950627989619554 -2.905503461688335
- 0.779244692625503 -0.250956684342640 -2.222842398961040 -2.114484245542347 3.193714996155647 -0.402353834151914 -0.716699056731043 -0.695075395385020 1.970940110428005 -2.073146884994938
- 0.205901638910206 -0.094144905079182 -2.702251300385419 -3.006804281874988 3.428965172985645 -0.244040996236974 0.271507532354853 -0.901460516171289 0.837319205042779 -1.900140980267979
- 0.006343044467507 -0.526316304925453 -2.784396850535765 -3.387317594535239 3.623756724446971 -0.255765726125193 0.728832393362191 -0.459522185849024 -0.083931182347604 -1.838646537891986
- -0.094247051197377 -1.357693159899331 -2.688131416688605 -3.507253089007949 3.801702829826901 -0.372428273016097 1.096283810567282 0.389297736866760 -1.170355250849716 -1.696809434483544
- -0.176495600665102 -2.383531123169409 -2.541866388586213 -3.474889464559508 3.916948947345628 -0.496084807779220 1.434741882579586 1.340104548436013 -2.312575966501984 -1.542754383394004
- -0.505965100388881 -3.619548563424876 -2.611537814792154 -3.611537547739726 3.999999654692064 -0.388462396222968 1.788855346423743 2.219155128512003 -3.619548301804086 -1.611537777358381
-dists:
- 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296 12.727922061357855
- 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296
- 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379
- 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969
- 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001
- 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104
- 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138
- 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887
- 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417
- 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 12.727922061357855 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000
- 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296
- 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761
- 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650
- 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000
- 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603
- 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159
- 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530
- 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321
- 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549
- 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000
- 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379
- 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650
- 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665
- 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887
- 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627
- 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549
- 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909
- 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518
- 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476
- 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000
- 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969
- 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000
- 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887
- 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570
- 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654
- 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978
- 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369
- 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759
- 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219
- 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000
- 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001
- 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603
- 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627
- 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654
- 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476
- 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849
- 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301
- 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504
- 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784
- 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000
- 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104
- 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159
- 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549
- 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978
- 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849
- 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381
- 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000
- 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580
- 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661
- 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000
- 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138
- 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530
- 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909
- 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369
- 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301
- 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000
- 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285
- 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989
- 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380
- 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000
- 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887
- 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321
- 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518
- 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759
- 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504
- 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580
- 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989
- 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190
- 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790
- 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000
- 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417
- 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549
- 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476
- 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219
- 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784
- 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661
- 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380
- 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790
- 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095
- 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000
- 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296 12.727922061357855 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 12.041594578792296 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 11.401754250991379 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 10.816653826391969 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 10.295630140987001 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 9.848857801796104 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 9.486832980505138 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 9.219544457292887 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 9.055385138137417 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000 9.000000000000000
- 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 12.041594578792296 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 11.313708498984761 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 10.630145812734650 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 10.000000000000000 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 9.433981132056603 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 8.944271909999159 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 8.544003745317530 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 8.246211251235321 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 8.062257748298549 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000 8.000000000000000
- 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 11.401754250991379 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 10.630145812734650 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 9.899494936611665 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 9.219544457292887 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 8.602325267042627 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 8.062257748298549 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 7.615773105863909 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 7.280109889280518 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 7.071067811865476 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000 7.000000000000000
- 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 10.816653826391969 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 10.000000000000000 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 9.219544457292887 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 8.485281374238570 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 7.810249675906654 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 7.211102550927978 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 6.708203932499369 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 6.324555320336759 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 6.082762530298219 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000 6.000000000000000
- 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 10.295630140987001 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 9.433981132056603 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 8.602325267042627 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.810249675906654 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 7.071067811865476 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 6.403124237432849 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.830951894845301 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.385164807134504 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.099019513592784 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000
- 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 9.848857801796104 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 8.944271909999159 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.062257748298549 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.211102550927978 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 6.403124237432849 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 5.656854249492381 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 5.000000000000000 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 4.472135954999580 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 4.123105625617661 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000
- 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 9.486832980505138 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 8.544003745317530 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 7.615773105863909 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 6.708203932499369 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 5.830951894845301 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 5.000000000000000 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 4.242640687119285 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 3.605551275463989 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 3.162277660168380 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000 3.000000000000000
- 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 9.219544457292887 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 8.246211251235321 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 7.280109889280518 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 6.324555320336759 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 5.385164807134504 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 4.472135954999580 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 3.605551275463989 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 2.828427124746190 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 2.236067977499790 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000 2.000000000000000
- 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 9.055385138137417 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 8.062257748298549 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 7.071067811865476 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 6.082762530298219 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 5.099019513592784 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 4.123105625617661 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 3.162277660168380 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 2.236067977499790 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 1.414213562373095 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000 1.000000000000000
- 12.727922061357855 12.041594578792296 11.401754250991379 10.816653826391969 10.295630140987001 9.848857801796104 9.486832980505138 9.219544457292887 9.055385138137417 9.000000000000000 12.041594578792296 11.313708498984761 10.630145812734650 10.000000000000000 9.433981132056603 8.944271909999159 8.544003745317530 8.246211251235321 8.062257748298549 8.000000000000000 11.401754250991379 10.630145812734650 9.899494936611665 9.219544457292887 8.602325267042627 8.062257748298549 7.615773105863909 7.280109889280518 7.071067811865476 7.000000000000000 10.816653826391969 10.000000000000000 9.219544457292887 8.485281374238570 7.810249675906654 7.211102550927978 6.708203932499369 6.324555320336759 6.082762530298219 6.000000000000000 10.295630140987001 9.433981132056603 8.602325267042627 7.810249675906654 7.071067811865476 6.403124237432849 5.830951894845301 5.385164807134504 5.099019513592784 5.000000000000000 9.848857801796104 8.944271909999159 8.062257748298549 7.211102550927978 6.403124237432849 5.656854249492381 5.000000000000000 4.472135954999580 4.123105625617661 4.000000000000000 9.486832980505138 8.544003745317530 7.615773105863909 6.708203932499369 5.830951894845301 5.000000000000000 4.242640687119285 3.605551275463989 3.162277660168380 3.000000000000000 9.219544457292887 8.246211251235321 7.280109889280518 6.324555320336759 5.385164807134504 4.472135954999580 3.605551275463989 2.828427124746190 2.236067977499790 2.000000000000000 9.055385138137417 8.062257748298549 7.071067811865476 6.082762530298219 5.099019513592784 4.123105625617661 3.162277660168380 2.236067977499790 1.414213562373095 1.000000000000000 9.000000000000000 8.000000000000000 7.000000000000000 6.000000000000000 5.000000000000000 4.000000000000000 3.000000000000000 2.000000000000000 1.000000000000000 0.000000000000000
diff --git a/externals/ann/examples/ann_td/example.pd b/externals/ann/examples/ann_td/example.pd
deleted file mode 100644
index 29b9b1651..000000000
--- a/externals/ann/examples/ann_td/example.pd
+++ /dev/null
@@ -1,316 +0,0 @@
-#N canvas 520 90 539 296 12;
-#N canvas 103 30 724 595 guts 0;
-#X msg 89 147 0 \, destroy;
-#X obj 111 177 gemwin;
-#X msg 94 124 reset \, create \, 1;
-#X obj 331 165 gemhead;
-#X obj 331 186 translateXYZ;
-#X obj 402 118 * -1;
-#X obj 331 206 color 0.5 0 0;
-#X obj 383 66 gemmouse 8 8;
-#X obj 363 109 - 4;
-#X obj 405 99 - 4;
-#X obj 331 226 sphere 0.6;
-#X msg 156 102 cursor 0;
-#X msg 126 66 bang;
-#X msg 166 150 lighting 1;
-#N canvas 463 128 573 394 lights 0;
-#X obj 242 277 world_light;
-#X obj 242 163 gemhead 1;
-#X obj 242 225 rotateXYZ;
-#X msg 109 193 debug 0;
-#X msg 110 224 debug 1;
-#X text 20 169 figure out where the light is;
-#X obj 311 47 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 354 133 pack f f;
-#X obj 334 159 line;
-#X msg 364 42 1;
-#X obj 364 23 loadbang;
-#X obj 344 298 world_light;
-#X obj 346 271 gemhead 1;
-#X obj 429 203 loadbang;
-#X obj 311 63 metro 20000;
-#X msg 400 104 10000;
-#X obj 119 57 delay 10000;
-#X msg 339 96 300;
-#X msg 292 96 50;
-#X msg 364 235 1 1 1;
-#X msg 422 266 0.6 0.3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 14 0;
-#X connect 7 0 8 0;
-#X connect 8 0 2 2;
-#X connect 9 0 6 0;
-#X connect 10 0 9 0;
-#X connect 10 0 15 0;
-#X connect 12 0 11 0;
-#X connect 13 0 19 0;
-#X connect 13 0 20 0;
-#X connect 14 0 17 0;
-#X connect 14 0 16 0;
-#X connect 15 0 7 1;
-#X connect 16 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 7 0;
-#X connect 19 0 0 1;
-#X connect 20 0 11 1;
-#X restore 543 135 pd lights;
-#X obj 269 139 s posx;
-#X obj 439 152 s posy;
-#X obj 225 25 inlet;
-#X obj 77 19 inlet;
-#X connect 0 0 1 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 2;
-#X connect 5 0 16 0;
-#X connect 6 0 10 0;
-#X connect 7 0 8 0;
-#X connect 7 1 9 0;
-#X connect 8 0 4 1;
-#X connect 8 0 15 0;
-#X connect 9 0 5 0;
-#X connect 11 0 1 0;
-#X connect 12 0 2 0;
-#X connect 12 0 13 0;
-#X connect 12 0 11 0;
-#X connect 13 0 1 0;
-#X connect 17 0 0 0;
-#X connect 18 0 12 0;
-#X restore 11 150 pd guts;
-#X obj 10 104 tgl 15 0 empty empty rendering 0 -6 0 8 -262144 -1 -1
-1 1;
-#X obj 47 128 bng 15 250 50 0 empty empty destroy_gemwin 0 -6 0 8 -262144
--1 -1;
-#N canvas 209 7 826 609 train 0;
-#X floatatom 45 391 5 0 0 0 - - -;
-#X floatatom 83 390 5 0 0 0 - - -;
-#X floatatom 120 392 5 0 0 0 - - -;
-#X floatatom 160 394 5 0 0 0 - - -;
-#X obj 190 206 metro 100;
-#X obj 190 187 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 42 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 2512 1;
-#X obj 80 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 115 430 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 154 434 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X text 174 15 1- create the ann;
-#N canvas 503 57 704 411 train 0;
-#X obj 66 319 outlet;
-#X obj 213 183 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 84 16 train;
-#N canvas 0 0 490 340 outputs 0;
-#X obj 89 60 key;
-#X obj 41 122 sel 97;
-#X text 84 101 "a" key;
-#X obj 218 120 sel 115;
-#N canvas 0 0 458 308 a 0;
-#X obj 130 150 s output1;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X connect 1 0 5 0;
-#X connect 3 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X restore 41 145 pd a pressed;
-#N canvas 0 0 458 308 s 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output2;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 217 142 pd s pressed;
-#X text 295 92 "s" key;
-#X obj 228 57 keyup;
-#X obj 132 123 sel 97;
-#X obj 308 120 sel 115;
-#X floatatom 19 80 5 0 0 0 - - -;
-#X obj 39 183 sel 100;
-#X obj 130 184 sel 100;
-#X obj 216 181 sel 102;
-#X obj 306 181 sel 102;
-#N canvas 0 0 466 316 d 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output3;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 39 206 pd d pressed;
-#N canvas 0 0 470 320 f 0;
-#X obj 86 76 inlet;
-#X text 88 56 bang;
-#X obj 241 80 inlet;
-#X text 243 60 reset;
-#X msg 86 101 1;
-#X msg 241 110 0;
-#X obj 130 150 s output4;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
-#X restore 215 203 pd f pressed;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 0 0 10 0;
-#X connect 0 0 11 0;
-#X connect 0 0 13 0;
-#X connect 1 0 4 0;
-#X connect 3 0 5 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 12 0;
-#X connect 7 0 14 0;
-#X connect 8 0 4 1;
-#X connect 9 0 5 1;
-#X connect 11 0 15 0;
-#X connect 12 0 15 1;
-#X connect 13 0 16 0;
-#X connect 14 0 16 1;
-#X restore 131 57 pd outputs;
-#X obj 130 87 r output1;
-#X obj 213 86 r output2;
-#X floatatom 130 108 5 0 0 0 - - -;
-#X floatatom 212 108 5 0 0 0 - - -;
-#X floatatom 297 106 5 0 0 0 - - -;
-#X floatatom 378 107 5 0 0 0 - - -;
-#X obj 297 85 r output3;
-#X obj 379 85 r output4;
-#X text 128 14 1- change to training mode;
-#X text 248 49 2- change keys if you want;
-#X text 264 61 defaults are "a" "s" "d" "f";
-#X text 239 182 3- toggle on to start training and off to stop;
-#X msg 170 282 run;
-#X text 200 283 4- switch to run mode when ready;
-#X obj 305 226 inlet;
-#X obj 344 256 nbx 8 14 -1e+037 1e+037 0 0 empty empty MSE 0 -6 0 10
--262144 -1 -1 0 256;
-#N canvas 111 7 818 550 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 55 300 outlet;
-#X obj 71 138 pack f f;
-#X connect 0 0 2 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 5 0 4 0;
-#X restore 213 226 pd inputs;
-#N canvas 84 111 802 315 merge 0;
-#X obj 56 34 inlet;
-#X obj 306 38 r output1;
-#X obj 382 38 r output2;
-#X obj 460 39 r output3;
-#X obj 537 39 r output4;
-#X obj 78 184 outlet;
-#X obj 56 73 unpack f f;
-#X obj 79 137 pack f f f f f f;
-#X connect 0 0 6 0;
-#X connect 1 0 7 2;
-#X connect 2 0 7 3;
-#X connect 3 0 7 4;
-#X connect 4 0 7 5;
-#X connect 6 0 7 0;
-#X connect 6 1 7 1;
-#X connect 7 0 5 0;
-#X restore 140 254 pd merge outputs;
-#X obj 213 202 metro 100;
-#X connect 1 0 22 0;
-#X connect 2 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 7 0;
-#X connect 10 0 8 0;
-#X connect 11 0 9 0;
-#X connect 16 0 0 0;
-#X connect 18 0 19 0;
-#X connect 20 0 21 0;
-#X connect 21 0 0 0;
-#X connect 22 0 20 0;
-#X restore 133 114 pd train on the fly;
-#X text 224 182 3- run the nn switching this metro ON;
-#X text 277 213 (note \, you must be in run mode);
-#X msg 281 231 run;
-#X text 364 275 4- when you are happy with you nn save it;
-#X obj 301 404 nbx 8 14 -1e+037 1e+037 0 0 empty empty mse 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 300 422 mse is usefull while training on-the-fly: tells you
-the global error in the net \, how much net's output differs from desired
-output.;
-#X text 325 115 2- train on the fly in realtime;
-#X obj 64 348 unpack f f f f;
-#X msg 249 279 save tdnn.net;
-#X msg 249 298 load tdnn.net;
-#X text 24 412 still;
-#X text 72 412 left;
-#X text 111 413 right;
-#X text 156 415 na;
-#X obj 66 325 ann_tdnn 2 5 tdnn.net;
-#N canvas 111 7 822 554 inputs 0;
-#X obj 107 65 r posx;
-#X obj 166 65 r posy;
-#X obj 68 103 f;
-#X obj 41 46 inlet;
-#X obj 55 300 outlet;
-#X obj 72 138 pack f f;
-#X connect 0 0 2 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 5 0 4 0;
-#X restore 156 245 pd inputs;
-#X msg 66 15 create 2 4 5;
-#X text 363 301 remember that you can load it also passing filename
-as the 3rd argument;
-#X connect 0 0 6 0;
-#X connect 1 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 9 0;
-#X connect 4 0 27 0;
-#X connect 5 0 4 0;
-#X connect 11 0 26 0;
-#X connect 14 0 26 0;
-#X connect 19 0 0 0;
-#X connect 19 1 1 0;
-#X connect 19 2 2 0;
-#X connect 19 3 3 0;
-#X connect 20 0 26 0;
-#X connect 21 0 26 0;
-#X connect 26 0 19 0;
-#X connect 26 1 16 0;
-#X connect 26 1 11 0;
-#X connect 27 0 26 0;
-#X connect 28 0 26 0;
-#X restore 9 224 pd train and run nn;
-#X text 94 94 1- start rendering;
-#X text 72 203 2- open the subpatch and follow instructions;
-#X text 15 5 TDNN implementation (Time Delay Neural Network) useful
-for gesture recognition;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
diff --git a/externals/ann/examples/ann_td/tdnn.net b/externals/ann/examples/ann_td/tdnn.net
deleted file mode 100644
index 6c9540db0..000000000
--- a/externals/ann/examples/ann_td/tdnn.net
+++ /dev/null
@@ -1,7 +0,0 @@
-FANN_FLO_1.1
-3 0.700000 1.000000 0 5 5 5.00000000000000000000e-001 5.00000000000000000000e-001
-11 4 5 
-0 0 0 0 0 0 0 0 0 0 0 
-11 11 11 0 
-4 4 4 4 0 
-(0 3.98359465599060060000e+000) (1 -3.46662133932113650000e-001) (2 1.66724932193756100000e+000) (3 -3.35077017545700070000e-001) (4 -5.66196799278259280000e-001) (5 -3.65077793598175050000e-001) (6 -2.26146197319030760000e+000) (7 1.53752446174621580000e-001) (8 -3.91640329360961910000e+000) (9 4.93833124637603760000e-001) (10 -4.37475204467773440000e+000) (0 2.48541951179504390000e+000) (1 2.93741494417190550000e-001) (2 1.34525704383850100000e+000) (3 3.87542009353637700000e-001) (4 2.62434352189302440000e-002) (5 4.33074653148651120000e-001) (6 -9.10757899284362790000e-001) (7 2.65246361494064330000e-001) (8 -2.17471313476562500000e+000) (9 3.53803992271423340000e-001) (10 -7.55431175231933590000e-001) (0 -4.49254703521728520000e+000) (1 -6.78778812289237980000e-002) (2 -2.04198622703552250000e+000) (3 -1.45705610513687130000e-001) (4 1.97579100728034970000e-001) (5 -4.57823067903518680000e-001) (6 2.62115192413330080000e+000) (7 -2.74485975503921510000e-001) (8 4.33024168014526370000e+000) (9 -2.26368784904479980000e-001) (10 -3.94826436042785640000e+000) (11 -1.19106411933898930000e+000) (12 -2.40987926721572880000e-001) (13 -1.45797419548034670000e+000) (14 2.45804578065872190000e-001) (11 6.82796686887741090000e-002) (12 -3.14634591341018680000e-002) (13 1.29793524742126460000e+000) (14 1.30129599571228030000e+000) (11 1.01107788085937500000e+000) (12 4.44010108709335330000e-001) (13 3.43794375658035280000e-001) (14 8.93330514430999760000e-001) (11 1.50074372683870950000e-016) (12 4.71110857886675280000e-017) (13 1.25351783824343270000e-016) (14 1.36875296494823600000e-017) 
diff --git a/externals/ann/examples/tutorial-ann_mlp.pd b/externals/ann/examples/tutorial-ann_mlp.pd
deleted file mode 100644
index dcf029231..000000000
--- a/externals/ann/examples/tutorial-ann_mlp.pd
+++ /dev/null
@@ -1,168 +0,0 @@
-#N canvas 297 73 597 521 12;
-#X obj 65 379 ann_mlp;
-#X text 39 59 input: mouse coord;
-#X text 37 76 output: 1 if mouse is in the upper left part of the screen
-;
-#N canvas 106 171 572 442 step1-creation 0;
-#X text 141 13 let's create the ANN;
-#X obj 130 354 outlet;
-#X msg 132 185 create 2 1;
-#X text 59 102 let's assume you have 2 inputs value X and Y and you
-want 1 output value that tells 1 when the mouse in in the upper left
-part of the screen;
-#X text 242 185 send this message;
-#X connect 2 0 1 0;
-#X restore 128 158 pd step1-creation;
-#N canvas 46 38 652 612 step2-train 0;
-#X obj 97 530 outlet;
-#X msg 44 130 train;
-#X text 102 129 first switch to train mode;
-#X obj 139 367 pack s f f f;
-#N canvas 0 0 466 316 normalized-inputs 0;
-#X obj 105 64 r X;
-#X obj 173 67 r Y;
-#X obj 173 92 / 240;
-#X obj 105 91 / 320;
-#X obj 104 116 - 1;
-#X obj 173 118 - 1;
-#X text 221 108 normalize inputs to [-1 \, 1];
-#X obj 104 211 outlet;
-#X obj 177 215 outlet;
-#X text 144 35 receive X and Y;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 7 0;
-#X connect 5 0 8 0;
-#X restore 127 271 pd normalized-inputs;
-#N canvas 0 0 675 324 desired-output 0;
-#X obj 383 63 key;
-#X obj 383 92 select 97;
-#X msg 382 118 1;
-#X obj 528 97 select 97;
-#X obj 528 68 keyup;
-#X msg 527 123 0;
-#X obj 183 195 outlet;
-#X text 90 269 i send 1 when "a" is pressed \, 0 when released;
-#X obj 180 108 r out;
-#X text 81 231 optionally \, you can use the "a" key instead of the
-mouse button;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 2 0 6 0;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 8 0 6 0;
-#X restore 239 332 pd desired-output;
-#X obj 91 192 tgl 15 0 empty empty train 0 -6 0 8 -258699 -1 -1 0 1
-;
-#X text 117 190 <-- toggle to train;
-#X text 119 404 everytime the metro bangs you send a training pattern
-to ann_mlp;
-#X floatatom 247 357 5 0 0 0 - - -;
-#X floatatom 287 295 5 0 0 0 - - -;
-#X floatatom 148 295 5 0 0 0 - - -;
-#X obj 110 328 metro 50;
-#X text 53 45 (for this to work you need to give focus to this window
-but the gem window must be visible);
-#X text 335 293 <-- check mouse position;
-#X text 112 213 then move the mouse and press left button when you
-are in the upper left part of the screen \, release button when you
-are not in the upper left part of the screen;
-#X text 293 357 <-- check button pressed/not pressed;
-#X obj 124 475 unpack s f f f;
-#X obj 145 501 pack f f f;
-#X floatatom 296 518 5 0 0 0 mse mse -;
-#X text 116 447 go on until mse is low enough (< 0.01);
-#X connect 1 0 0 0;
-#X connect 3 0 17 0;
-#X connect 4 0 3 1;
-#X connect 4 0 11 0;
-#X connect 4 1 3 2;
-#X connect 4 1 10 0;
-#X connect 5 0 3 3;
-#X connect 5 0 9 0;
-#X connect 6 0 12 0;
-#X connect 12 0 3 0;
-#X connect 17 1 18 0;
-#X connect 17 2 18 1;
-#X connect 17 3 18 2;
-#X connect 18 0 0 0;
-#X restore 134 218 pd step2-train;
-#N canvas 0 0 462 312 mouseInput 0;
-#X obj 41 139 gemwin;
-#X msg 44 69 create \, 1;
-#X msg 134 71 0 \, destroy;
-#X obj 143 120 gemmouse 640 480;
-#X obj 143 161 s X;
-#X obj 172 161 s Y;
-#X obj 54 25 inlet;
-#X obj 133 27 inlet;
-#X obj 206 162 s out;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 3 2 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 2 0;
-#X restore 287 443 pd mouseInput;
-#X obj 287 423 bng 15 250 50 0 empty empty start_GEM 0 -6 0 8 -262144
--1 -1;
-#X obj 385 424 bng 15 250 50 0 empty empty stop_GEM 0 -6 0 8 -262144
--1 -1;
-#X obj 281 389 loadbang;
-#X floatatom 116 414 5 0 0 0 mse - mse;
-#N canvas 618 0 682 470 step3-run 0;
-#X obj 64 377 outlet;
-#N canvas 0 0 466 316 normalized-inputs 0;
-#X obj 105 64 r X;
-#X obj 173 67 r Y;
-#X obj 173 92 / 240;
-#X obj 105 91 / 320;
-#X obj 104 116 - 1;
-#X obj 173 118 - 1;
-#X text 221 108 normalize inputs to [-1 \, 1];
-#X obj 104 211 outlet;
-#X obj 177 215 outlet;
-#X text 144 35 receive X and Y;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 7 0;
-#X connect 5 0 8 0;
-#X restore 178 167 pd normalized-inputs;
-#X obj 97 92 tgl 15 0 empty empty run 0 -6 0 8 -258699 -1 -1 0 1;
-#X obj 145 267 pack s f f;
-#X msg 50 30 run;
-#X text 108 29 first switch to run mode;
-#X text 123 90 <-- toggle to run;
-#X obj 116 228 metro 50;
-#X floatatom 332 196 5 0 0 0 - - -;
-#X floatatom 191 193 5 0 0 0 - - -;
-#X obj 145 293 unpack s f f;
-#X obj 176 321 pack f f;
-#X connect 1 0 3 1;
-#X connect 1 0 9 0;
-#X connect 1 1 3 2;
-#X connect 1 1 8 0;
-#X connect 2 0 7 0;
-#X connect 3 0 10 0;
-#X connect 4 0 0 0;
-#X connect 7 0 3 0;
-#X connect 10 1 11 0;
-#X connect 10 2 11 1;
-#X connect 11 0 0 0;
-#X restore 139 284 pd step3-run;
-#X floatatom 64 450 5 0 0 0 - - -;
-#X connect 0 0 11 0;
-#X connect 0 1 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 1;
-#X connect 8 0 6 0;
-#X connect 10 0 0 0;
diff --git a/externals/ann/helps/ann_mlp-help.pd b/externals/ann/helps/ann_mlp-help.pd
deleted file mode 100644
index 37213ed89..000000000
--- a/externals/ann/helps/ann_mlp-help.pd
+++ /dev/null
@@ -1,415 +0,0 @@
-#N canvas 1 53 717 456 12;
-#N canvas 160 189 627 328 creation 0;
-#X obj 52 235 outlet;
-#X msg 49 10 create;
-#X msg 72 68 create 2 1;
-#X msg 81 97 create 3 1;
-#X msg 93 128 create 3 2;
-#X msg 59 38 create 3 2 3 3 1 0.7;
-#X text 121 7 create with default values;
-#X text 236 38 specifying all;
-#X text 166 68 2 inputs 1 output;
-#X text 176 99 3 inputs 1 output;
-#X text 189 128 3 inputs 2 output;
-#X text 159 222 TIP:don't set the layers param too high;
-#X text 158 179 params: num_input \, num_output \, num_layers \, num_neurons_hidden
-\, connection_rate \, learning_rate;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X restore 52 68 pd creation examples;
-#N canvas 83 141 728 356 run 0;
-#X obj 90 219 outlet;
-#X msg 123 69 0 1;
-#X msg 124 92 1 0;
-#X msg 125 115 1 1;
-#X msg 126 140 0 0;
-#X text 40 17 now you can run your nn passing it a list with inputs
-;
-#X text 169 70 send a list of data and watch the console for output
-;
-#X text 39 35 the output is sent as a list of float;
-#X text 184 134 these inputs are good for a nn like the one in example1
-directory;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 86 180 pd run the net;
-#N canvas 1 53 619 610 other 0;
-#X obj 43 401 outlet;
-#X msg 102 37 train;
-#X msg 103 63 run;
-#X msg 152 37 setmode 0;
-#X msg 153 63 setmode 1;
-#X text 249 40 set training/running mode;
-#X text 247 63 training mode currently not implemented;
-#N canvas 113 201 690 335 training 0;
-#X obj 71 288 outlet;
-#X msg 82 195 FANN_TRAIN_INCREMENTAL;
-#X msg 82 216 FANN_TRAIN_BATCH;
-#X msg 81 238 FANN_TRAIN_RPROP;
-#X msg 81 258 FANN_TRAIN_QUICKPROP;
-#X text 40 28 you can set the training algorithm simply sending a message
-with the name of the algorithm chosen. possible values are: FANN_TRAIN_INCREMENTAL
-FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP the default
-is: FANN_TRAIN_RPROP see the FANN manual for details on each algorithm:
-http://fann.sourceforge.net/html/r1996.html;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 150 153 pd training algorithm;
-#X text 360 175 some advanced param;
-#N canvas 34 162 698 395 training 0;
-#X obj 52 230 outlet;
-#X msg 69 118 desired_error 0.01;
-#X msg 79 146 max_iterations 500000;
-#X msg 90 178 iterations_between_reports 1000;
-#X text 58 28 you can change training parameters. see FANN manual for
-details (http://fann.sourceforge.net);
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 151 179 pd training params;
-#N canvas 329 121 694 391 activation 0;
-#X obj 49 335 outlet;
-#X text 40 28 you can set ti output activation algorithm passing a
-message to nn. see the FANN manual for description of the algorithms
-;
-#X msg 69 118 set_activation_function_output FANN_THRESHOLD;
-#X msg 83 139 set_activation_function_output FANN_THRESHOLD_SYMMETRIC
-;
-#X msg 95 163 set_activation_function_output FANN_LINEAR;
-#X msg 98 184 set_activation_function_output FANN_SIGMOID;
-#X msg 106 206 set_activation_function_output FANN_SIGMOID_STEPWISE
-;
-#X msg 108 233 set_activation_function_output FANN_SIGMOID_SYMMETRIC
-;
-#X msg 115 256 set_activation_function_output FANN_SIGMOID_SYMMETRIC_STEPWISE
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X restore 150 203 pd activation algorithm;
-#X msg 151 287 details;
-#X text 229 285 details on the current nn;
-#X msg 145 333 help;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 13 0 0 0;
-#X restore 107 258 pd other commands;
-#N canvas 2 82 653 513 save 0;
-#X obj 39 264 outlet;
-#X msg 64 20 filename test.net;
-#X msg 66 46 save;
-#X msg 82 103 load;
-#X text 221 19 set the filename;
-#X text 214 42 save the net to the file;
-#X text 138 104 you can reload it too;
-#X text 144 182 nn can be loaded from a file at creation time simply
-passing the filename as argument;
-#X msg 68 71 save test.net;
-#X msg 93 130 load test.net;
-#X text 144 217 like [ann_mlp test.net];
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X restore 97 218 pd save the net;
-#X text 229 66 create a nn;
-#X text 223 179 run your net;
-#X text 237 215 save your net;
-#N canvas 2 82 712 542 tips 0;
-#X text 51 84 for better performances inputs value should be normalized
-\, all input should have the same range (if one input has a larger
-range it will be more "important"). the range of each input should
-be 0 centered. so [-1 \, 1] is good [-2 \, 2] is good \, [0 \, 1] not
-so good [1 \, 2] is bad. the range sould not be too small ([-0.1 \,
-0.1] is bad).;
-#X text 41 19 TIPS;
-#X text 41 56 inputs;
-#X text 39 211 outputs;
-#X text 50 235 each class of outputs should have its own output value:
-don't use the same output for 2 meanings \, use 2 outputs intead \,
-1 for each.;
-#X restore 156 303 pd tips;
-#X text 270 333 an interface to fann classes (http://fann.sourceforge.net)
-;
-#X text 272 351 by Davide Morelli - info@davidemorelli.it;
-#N canvas 146 200 580 411 train 0;
-#X obj 32 241 outlet;
-#N canvas 0 0 458 308 train 0;
-#N canvas 8 48 990 509 build 0;
-#X obj 65 417 textfile;
-#X msg 190 337 clear;
-#N canvas 0 0 462 312 alternate 0;
-#X obj 103 117 + 1;
-#X obj 70 119 f 0;
-#X obj 70 171 sel 0 1;
-#X obj 70 146 mod 2;
-#X msg 95 90 0;
-#X obj 68 31 inlet;
-#X obj 140 40 inlet;
-#X obj 140 63 bang;
-#X obj 68 55 bang;
-#X obj 65 205 outlet;
-#X obj 125 206 outlet;
-#X text 59 6 bang;
-#X text 139 18 reset to 0 without bang;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 1 0 3 0;
-#X connect 2 0 9 0;
-#X connect 2 1 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 1;
-#X connect 5 0 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X restore 58 227 pd alternate;
-#X obj 24 81 bng 15 250 50 0 empty empty write-once 0 -6 0 8 -262144
--1 -1;
-#X obj 341 183 bng 15 250 50 0 empty empty reset 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 466 316 inputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the inputs;
-#X obj 94 52 r input1;
-#X obj 163 52 r input2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 58 306 pd inputs;
-#N canvas 0 0 466 316 outputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the outputs;
-#X obj 91 51 r output1;
-#X obj 166 51 r output2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 149 284 pd outputs;
-#X obj 230 223 f 0;
-#X obj 260 223 + 1;
-#X obj 239 257 nbx 5 14 -1e+37 1e+37 0 0 empty empty how_many_patterns
-0 -6 0 10 -262144 -1 -1 0 256;
-#X text 156 406 todo: write header (a line at the beginning of file
-with 3 int: how many tests \, num_input \, num_output);
-#X obj 122 190 delay 50;
-#X obj 115 159 metro 100;
-#X floatatom 259 72 5 100 5000 2 msec_between_snapshots - -;
-#X obj 127 80 tgl 15 0 empty empty toggle_on-off 0 -6 0 8 -262144 -1
--1 0 1;
-#X obj 219 189 / 2;
-#X obj 260 16 loadbang;
-#X msg 260 36 100;
-#X msg 326 342 write test.txt cr;
-#X text 293 224 comment;
-#N canvas 262 68 647 603 README 0;
-#X text 67 432 please help me getting this patch more usable: - how
-to add a line at the very beginning of a text file after i have filled
-it? - how to manage inputs and outputs of different sized without forcing
-the user to edit the patch?;
-#X text 9 63 how to use: 1) modify [pd inputs] and [ps outputs] inserting
-[r] objects to receive input data \, and modify [pack]s to handle the
-right number of inputs 2) do the same with [pd outputs] 3) click on
-reset 4) toggle ON and start collecting data 5) when you are ready
-toggle OFF 6) edit [write filename cr( with the actual filename you
-want for your training data (always keep the cr after the filename)
-7) open the file with training data 8) add a line at the beginning
-and write 3 integers: the 1st is the number of training patterns written
-(see "how many patterns" number box) \, the 2nd is how many inputs
-your ann has \, the 3th is how many outputs e.g. i collected 100 training
-snapshots \, for a ann with 10 ins and 2 outs I write: 100 10 2 at
-the very beginning of the file now the training file is ready and can
-be read from nn via train-on-file command;
-#X text 9 7 this tricky sub-patch is usefull to write a file to train
-ann and is intended to be used with the nn external;
-#X restore 25 16 pd README;
-#X text 479 210 by davide morelli info@davidemorelli.it;
-#X text 106 14 <--readme!;
-#X text 242 283 <--edit here!;
-#X text 142 308 <--edit here!;
-#X text 429 86 usage: read [pd README] \, edit [pd inputs] and [pd
-outputs] \, toggle on and record inputs and outputs \, toggle off when
-ready \, write to a file \, edit the file adding a line at the beginning
-(see REAMDE);
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 2 1 6 0;
-#X connect 2 1 7 0;
-#X connect 3 0 11 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 4 0 1 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 12 0 2 0;
-#X connect 13 0 12 1;
-#X connect 13 0 15 0;
-#X connect 14 0 12 0;
-#X connect 15 0 11 1;
-#X connect 16 0 17 0;
-#X connect 17 0 13 0;
-#X connect 18 0 0 0;
-#X restore 86 42 pd build training file;
-#X msg 88 74 train-on-file test.txt;
-#X text 285 45 build a training file;
-#X text 287 74 train the nn with the training file;
-#X obj 56 139 outlet;
-#X connect 1 0 4 0;
-#X restore 79 103 pd train you net using a train file;
-#N canvas 120 72 892 558 train 0;
-#X obj 55 487 outlet;
-#X msg 60 31 train;
-#X text 126 33 1- set the train mode;
-#X text 192 120 be shure you provide the correct numbers of inputs
-and outputs;
-#X obj 168 202 pack s f f f;
-#X obj 197 248 pack f f f;
-#X obj 168 225 unpack s f f f;
-#X msg 190 464 run;
-#X obj 198 170 tgl 15 0 empty empty in1 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 228 170 tgl 15 0 empty empty in2 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 259 170 tgl 15 0 empty empty output 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 148 169 bng 15 250 50 0 empty empty train! 0 -6 0 8 -262144
--1 -1;
-#X text 312 160 set inputs and output value \, then send the list clicking
-on the "train!" bang;
-#X msg 316 261 create 2 1;
-#X text 227 464 3- when you are ready switch again to run mode before
-exiting;
-#X text 315 226 NOTE1: before training with this example you should
-have created a nn with 2 ins and 1 out with a command like:;
-#N canvas 255 158 517 436 autotrain 0;
-#X obj 89 286 outlet;
-#X obj 85 87 metro 10;
-#X obj 85 38 tgl 15 0 empty empty toggle_training 0 -6 0 8 -262144
--1 -1 0 1;
-#X msg 101 192 0 0 0;
-#X msg 126 215 0 1 1;
-#X msg 82 168 1 0 1;
-#X msg 150 244 1 1 1;
-#X obj 82 112 random 4;
-#X obj 83 138 sel 0 1 2 3;
-#X obj 226 125 f 0;
-#X obj 256 124 + 1;
-#X floatatom 226 149 8 0 0 0 - - -;
-#X text 113 36 <--train OR untile mse is low enough;
-#X text 143 51 (you must be in train mode);
-#X connect 1 0 7 0;
-#X connect 1 0 9 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 5 0;
-#X connect 8 1 3 0;
-#X connect 8 2 4 0;
-#X connect 8 3 6 0;
-#X connect 9 0 10 0;
-#X connect 9 0 11 0;
-#X connect 10 0 9 1;
-#X restore 224 363 pd autotrain OR;
-#X text 172 101 2a)- build a list with inputs and desired output;
-#X text 336 291 NOTE2: while training the right outlet gives you the
-mean square error after each training pattern. continue training until
-mse is low enough.;
-#X text 221 383 2b) use autotrain for the OR function;
-#X connect 1 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 0 0;
-#X connect 6 1 5 0;
-#X connect 6 2 5 1;
-#X connect 6 3 5 2;
-#X connect 7 0 0 0;
-#X connect 8 0 4 1;
-#X connect 9 0 4 2;
-#X connect 10 0 4 3;
-#X connect 11 0 4 0;
-#X connect 13 0 0 0;
-#X connect 16 0 0 0;
-#X restore 68 50 pd train it on the fly;
-#X text 62 5 there are 2 ways to train your net;
-#X text 253 47 on the fly is simpler;
-#X text 88 128 with a trainfile the net could be more accurate;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X restore 74 119 pd train;
-#X text 149 118 train a nn;
-#X obj 103 345 print mse;
-#X obj 52 373 print out;
-#X obj 52 313 ann_mlp;
-#X text 9 2 ann_mlp: multi layer perceptrons neural networks in PD
-;
-#N canvas 405 166 494 332 META 0;
-#X text 12 190 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 5 KEYWORDS control;
-#X text 12 45 DESCRIPTION multi layer perceptrons neural networks in
-PD;
-#X text 12 130 OUTLET_0;
-#X text 12 150 OUTLET_1;
-#X text 12 170 AUTHOR Davide Morelli - info@davidemorelli.it;
-#X text 12 65 INLET_0 list create train filename save load setmode
-FANN_TRAIN_INCREMENTAL FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP
-desired_error max_iterations iterations_between_reports set_activation_function_output
-;
-#X restore 646 402 pd META;
-#X connect 0 0 14 0;
-#X connect 1 0 14 0;
-#X connect 2 0 14 0;
-#X connect 3 0 14 0;
-#X connect 10 0 14 0;
-#X connect 14 0 13 0;
-#X connect 14 1 12 0;
diff --git a/externals/ann/helps/ann_mlp-manual.txt b/externals/ann/helps/ann_mlp-manual.txt
deleted file mode 100644
index f5b6db347..000000000
--- a/externals/ann/helps/ann_mlp-manual.txt
+++ /dev/null
@@ -1,137 +0,0 @@
------------------ann_mlp manual 
-
-by davide morelli - www.davidemorelli.it
-
-
------------What is a neural network?
-
-To be shure you fully understand what is and why to use a ANN, read
-http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/cs11/report.html
-
------------Why use a ANN?
-Because they are useful in Pattern recognition, gesure recognition (patterns
-over time), associative recall of data (images, sounds, etc), predictions
-(e.g. time-series forecasting), complex data handling, etc..
-
---ANNs can handle noisy inputs: 
-if you trained your ANN that [1,1] -> 1
-Then if you pass [1.1, 0.9] -> 1 probably..
-
---ANNs can be trained without writing code: 
-see ann/examples/ann_mlp_example2 (in CVS), you can teach the ANN to tell
-you when all these balls are close together or still.. How could you do this
-coding? You'd have to compute the distance of every ball from every other
-ball, then sum all the distances and ... Very complex and difficult! With
-ANN you simply teach when the balls are close and when they are not, you
-don't have to write code at all, you just have to use pd.
-
------------How to build a ANN?
-INPUTS:
-You must code your input data as a list of float. 
-E.g. If you want timbre recognition you must fft a signal then build a list
-with fft's partial and feed ann_mlp with it
-E.g. if you want midi chord recognition and you played A4 C5 E6 then use the
-midi values of the notes of the chord to build a list with 3 integers (57 60
-64) 
-
-Tip: inputs should be 0 centered
-the example of chord recognition should not work well (hard to train)
-because possible input values go from 30 to 90, you should remap them so
-they go from -30 to 30
-Notice how the inputs in ann/examples/ann_mlp_example2 go from -1 to 1
-If you can't make inputs 0 centered they should at least start from 0
-
-Tip: inputs should be normalized
-If you have one input that goes from -10 to 10 and another input that goes
-from -1 to 1 the first input will be more important than the second input
-
-OUTPUTS:
-Each "meaning" you want your ANN to detect should have its own output.
-Notice ann/examples/ann_mlp_example2:
-"Calm" and "chaos" have their outputs even if they are related.
-I could have set only 1 output 0 for calm and 1 for chaos.
-But having separated outputs I can see if my ANN has been trained well or
-not, but also could be that a situation is neither calm nor chaotic, or
-somehow calm AND chaotic..
-
------------TRAINING ON THE FLY:
-It is much easier to train the ANN on the fly rather than using a train
-file.
-To train on the fly you simply must pass a list with 
-[inputs + expected outputs(
-If you have 3 inputs and 2 outputs then you must pass a list with 5 floats
-E.g. You want to train a ANN for a simple logical function: OR
-You build a ann_mlp with 2 inputs and 1 output
-You set |train(
-You pass lists like 
-|0 0 0(  inputs are 0 0 output is 0
-|1 0 1(  inputs are 1 0 output is 1
-|0 1 1(  inputs are 0 1 output is 1
-And so on.. Repeating until MSE is low enough
-
-MSE tells you the general error the ANN currently has with the inputs and
-outputs you are giving
-
-When you are ready set |run(
-And start passing lists with only inputs values
-|0 0(
-|1 0(
-Etc..
-The left outlet of ann_mlp will start sending lists of float, in this case a
-list with only 1 float
-
------------PUTTING IT TOGETHER:
-
-1) Create a ANN passing ann_mlp a message with num_inputs and num_outputs
-E.g. (the simple ann for logical function OR)
-|create 2 1(
-|
-[ann_mlp]
-
-2) set train mode
-|train(
-|
-[ann_mlp]
-
-3) train the ANN passing lists num_inputs+num_outputs long
-|0 0 0(
-|
-[ann_mlp]
-(repeat at will using different inputs until mse is low, see right outlet)
-
-4) set run mode
-|run(
-|
-[ann_mlp]
-
-5) run the net passing lists num_inputs long, the left outlet will send a
-list with the results
-|0 0(
-|
-[ann_mlp]
-
-When everything is fine you can save it to a file
-|save filename(
-|
-[ann_mlp]
-
-Can be loaded in 2 ways
-|load filename(
-|
-[ann_mlp]
-
-Or as argument
-
-[ann_mlp filename]
-
------------
-
-For a more in-depth sight over technical issues:
-http://fann.sourceforge.net/report/report.html
-See fann manual for details on advanced params 
-(activation functions,training params, etc..)
-http://fann.sourceforge.net/
-
------------
-
-questions and suggestions to info(a)davidemorelli.it
diff --git a/externals/ann/helps/ann_mlp-write-trainfile.pd b/externals/ann/helps/ann_mlp-write-trainfile.pd
deleted file mode 100644
index ebb698fcd..000000000
--- a/externals/ann/helps/ann_mlp-write-trainfile.pd
+++ /dev/null
@@ -1,139 +0,0 @@
-#N canvas 161 76 790 548 12;
-#X obj 65 417 textfile;
-#X msg 190 337 clear;
-#N canvas 0 0 462 312 alternate 0;
-#X obj 103 117 + 1;
-#X obj 70 119 f 0;
-#X obj 70 171 sel 0 1;
-#X obj 70 146 mod 2;
-#X msg 95 90 0;
-#X obj 68 31 inlet;
-#X obj 140 40 inlet;
-#X obj 140 63 bang;
-#X obj 68 55 bang;
-#X obj 65 205 outlet;
-#X obj 125 206 outlet;
-#X text 59 6 bang;
-#X text 139 18 reset to 0 without bang;
-#X connect 0 0 1 1;
-#X connect 1 0 0 0;
-#X connect 1 0 3 0;
-#X connect 2 0 9 0;
-#X connect 2 1 10 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 1;
-#X connect 5 0 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 1 0;
-#X restore 58 227 pd alternate;
-#X obj 24 81 bng 15 250 50 0 empty empty write-once 0 -6 0 8 -262144
--1 -1;
-#X obj 506 106 bng 15 250 50 0 empty empty reset 0 -6 0 8 -262144 -1
--1;
-#N canvas 0 0 466 316 inputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the inputs;
-#X obj 94 52 r input1;
-#X obj 163 52 r input2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 58 306 pd inputs;
-#N canvas 0 0 466 316 outputs 0;
-#X obj 61 153 pack s f f;
-#X obj 63 200 pack f f;
-#X obj 61 176 unpack s f f;
-#X msg 66 223 add \$1 \$2;
-#X obj 66 257 outlet;
-#X text 120 258 to textfile;
-#X obj 24 42 inlet;
-#X text 23 22 bang;
-#X text 66 77 here go the outputs;
-#X obj 91 51 r output1;
-#X obj 166 51 r output2;
-#X connect 0 0 2 0;
-#X connect 1 0 3 0;
-#X connect 2 1 1 0;
-#X connect 2 2 1 1;
-#X connect 3 0 4 0;
-#X connect 6 0 0 0;
-#X connect 9 0 0 1;
-#X connect 10 0 0 2;
-#X restore 149 284 pd outputs;
-#X obj 230 223 f 0;
-#X obj 260 223 + 1;
-#X obj 239 257 nbx 5 14 -1e+037 1e+037 0 0 empty empty how_many_patterns
-0 -6 0 10 -262144 -1 -1 0 256;
-#X text 156 406 todo: write header (a line at the beginning of file
-with 3 int: how many tests \, num_input \, num_output);
-#X obj 122 190 delay 50;
-#X obj 115 159 metro 100;
-#X floatatom 346 70 5 100 5000 2 msec_between_snapshots - -;
-#X obj 127 80 tgl 15 0 empty empty toggle_on-off 0 -6 0 8 -262144 -1
--1 0 1;
-#X obj 219 189 / 2;
-#X obj 347 14 loadbang;
-#X msg 347 34 100;
-#X msg 385 314 write test.txt cr;
-#X text 293 224 comment;
-#N canvas 262 68 639 595 README 0;
-#X text 67 432 please help me getting this patch more usable: - how
-to add a line at the very beginning of a text file after i have filled
-it? - how to manage inputs and outputs of different sized without forcing
-the user to edit the patch?;
-#X text 9 7 this tricky patch is usefull to write a file to train ann
-and is intended to be used with the nn external;
-#X text 9 63 how to use: 1) modify [pd inputs] and [ps outputs] inserting
-[r] objects to receive input data \, and modify [pack]s to handle the
-right number of inputs 2) do the same with [pd outputs] 3) click on
-reset 4) toggle ON and start collecting data 5) when you are ready
-toggle OFF 6) edit [write filename cr( with the actual filename you
-want for your training data (always keep the cr after the filename)
-7) open the file with training data 8) add a line at the beginning
-and write 3 integers: the 1st is the number of training patterns written
-(see "how many patterns" number box) \, the 2nd is how many inputs
-your ann has \, the 3th is how many outputs e.g. i collected 100 training
-snapshots \, for a ann with 10 ins and 2 outs I write: 100 10 2 at
-the very beginning of the file now the training file is ready and can
-be read from nn via train-on-file command;
-#X restore 25 16 pd README;
-#X text 479 210 by davide morelli info@davidemorelli.it;
-#X text 106 14 <--readme!;
-#X text 242 283 <--edit here!;
-#X text 142 308 <--edit here!;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 2 1 6 0;
-#X connect 2 1 7 0;
-#X connect 3 0 11 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 4 0 1 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 12 0 2 0;
-#X connect 13 0 12 1;
-#X connect 13 0 15 0;
-#X connect 14 0 12 0;
-#X connect 15 0 11 1;
-#X connect 16 0 17 0;
-#X connect 17 0 13 0;
-#X connect 18 0 0 0;
diff --git a/externals/ann/helps/ann_td-help.pd b/externals/ann/helps/ann_td-help.pd
deleted file mode 100644
index 50d7b9a22..000000000
--- a/externals/ann/helps/ann_td-help.pd
+++ /dev/null
@@ -1,251 +0,0 @@
-#N canvas 1 53 858 468 12;
-#N canvas 376 163 647 348 creation 0;
-#X obj 52 235 outlet;
-#X text 246 38 specifying all;
-#X text 159 216 TIP:don't set the layers param too high;
-#X msg 49 10 create 2 1 5;
-#X text 175 6 create with 2 inputs \, 1 output and 5 frames;
-#X msg 59 38 create 2 1 5 3 3 1 0.7;
-#X text 159 179 params: num_input \, num_output \, frames \, num_layers
-\, num_neurons_hidden \, connection_rate \, learning_rate;
-#N canvas 219 181 650 413 what 0;
-#X text 37 134 you pass [0 0.1] to ann_tdnn;
-#X text 34 152 internally now there is this array: [0 0.1 0 0 0 0]
-;
-#X text 38 196 next input is [0.2 1];
-#X text 36 211 internally now there is this array: [0.2 1 0 0.1 0 0]
-;
-#X text 37 255 next input is [0.3 0.4];
-#X text 35 270 internally now there is this array: [0.3 0.4 0.2 1 0
-0.1];
-#X text 36 317 next input is [0.7 0];
-#X text 34 332 internally now there is this array: [0.7 0 0.3 0.4 0.2
-1];
-#X text 35 168 a normal ann_mlp is run with this inputs;
-#X text 38 225 a normal ann_mlp is run with this inputs;
-#X text 33 284 a normal ann_mlp is run with this inputs;
-#X text 33 347 a normal ann_mlp is run with this inputs;
-#X text 12 139 1);
-#X text 14 197 2);
-#X text 15 258 3);
-#X text 13 319 4);
-#X text 33 4 this implementation od tdnn is simply a normal ann_mlp
-with num_input*frame inputs and num_output outputs. ann_tdnn simply
-helps managing the delay \, frames and buffers.;
-#X text 65 385 ...and so on...;
-#X text 34 64 frames can be seen as the delay feedback: how many times
-an input is internally held in the input array;
-#X text 35 104 eg: 2 inputs 3 frames = internally 6 inputs;
-#X restore 155 109 pd what frames are?;
-#X connect 3 0 0 0;
-#X connect 5 0 0 0;
-#X restore 93 68 pd creation examples;
-#N canvas 137 89 728 356 run 0;
-#X obj 90 219 outlet;
-#X msg 123 69 0 1;
-#X msg 124 92 1 0;
-#X msg 125 115 1 1;
-#X msg 126 140 0 0;
-#X text 40 17 now you can run your nn passing it a list with inputs
-;
-#X text 169 70 send a list of data and watch the console for output
-;
-#X text 39 35 the output is sent as a list of float;
-#X text 184 134 these inputs are good for a nn like the one in example1
-directory;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 107 180 pd run the net;
-#N canvas 1 53 619 610 other 0;
-#X obj 43 401 outlet;
-#X msg 102 37 train;
-#X msg 103 63 run;
-#X msg 152 37 setmode 0;
-#X msg 153 63 setmode 1;
-#X text 249 40 set training/running mode;
-#X text 247 63 training mode currently not implemented;
-#N canvas 266 284 690 335 training 0;
-#X obj 71 288 outlet;
-#X msg 82 195 FANN_TRAIN_INCREMENTAL;
-#X msg 82 216 FANN_TRAIN_BATCH;
-#X msg 81 238 FANN_TRAIN_RPROP;
-#X msg 81 258 FANN_TRAIN_QUICKPROP;
-#X text 40 28 you can set the training algorithm simply sending a message
-with the name of the algorithm chosen. possible values are: FANN_TRAIN_INCREMENTAL
-FANN_TRAIN_BATCH FANN_TRAIN_RPROP FANN_TRAIN_QUICKPROP the default
-is: FANN_TRAIN_RPROP see the FANN manual for details on each algorithm:
-http://fann.sourceforge.net/html/r1996.html;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X restore 150 153 pd training algorithm;
-#X text 360 175 some advanced param;
-#N canvas 325 121 698 395 training 0;
-#X obj 52 230 outlet;
-#X msg 69 118 desired_error 0.01;
-#X msg 79 146 max_iterations 500000;
-#X msg 90 178 iterations_between_reports 1000;
-#X text 58 28 you can change training parameters. see FANN manual for
-details (http://fann.sourceforge.net);
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 151 179 pd training params;
-#N canvas 329 121 694 391 activation 0;
-#X obj 49 335 outlet;
-#X text 40 28 you can set ti output activation algorithm passing a
-message to nn. see the FANN manual for description of the algorithms
-;
-#X msg 69 118 set_activation_function_output FANN_THRESHOLD;
-#X msg 83 139 set_activation_function_output FANN_THRESHOLD_SYMMETRIC
-;
-#X msg 95 163 set_activation_function_output FANN_LINEAR;
-#X msg 98 184 set_activation_function_output FANN_SIGMOID;
-#X msg 106 206 set_activation_function_output FANN_SIGMOID_STEPWISE
-;
-#X msg 108 233 set_activation_function_output FANN_SIGMOID_SYMMETRIC
-;
-#X msg 115 256 set_activation_function_output FANN_SIGMOID_SYMMETRIC_STEPWISE
-;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X restore 150 203 pd activation algorithm;
-#X msg 151 287 details;
-#X text 229 285 details on the current nn;
-#X msg 145 333 help;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 13 0 0 0;
-#X restore 128 258 pd other commands;
-#N canvas 1 53 665 525 save 0;
-#X obj 39 264 outlet;
-#X msg 64 20 filename test.net;
-#X msg 66 46 save;
-#X msg 82 103 load;
-#X text 221 19 set the filename;
-#X text 214 42 save the net to the file;
-#X text 138 104 you can reload it too;
-#X text 144 182 nn can be loaded from a file at creation time simply
-passing the filename as argument;
-#X msg 68 71 save test.net;
-#X msg 93 130 load test.net;
-#X text 144 217 like [ann_td num_inputs frames filename];
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X restore 118 218 pd save the net;
-#X text 270 66 create a nn;
-#X text 244 179 run your net;
-#X text 258 215 save your net;
-#N canvas 0 0 712 542 tips 0;
-#X text 51 84 for better performances inputs value should be normalized
-\, all input should have the same range (if one input has a larger
-range it will be more "important"). the range of each input should
-be 0 centered. so [-1 \, 1] is good [-2 \, 2] is good \, [0 \, 1] not
-so good [1 \, 2] is bad. the range sould not be too small ([-0.1 \,
-0.1] is bad).;
-#X text 41 19 TIPS;
-#X text 41 56 inputs;
-#X text 39 211 outputs;
-#X text 50 235 each class of outputs should have its own output value:
-don't use the same output for 2 meanings \, use 2 outputs intead \,
-1 for each.;
-#X restore 167 285 pd tips;
-#X text 272 371 an interface to fann classes (http://fann.sourceforge.net)
-;
-#X text 274 389 by Davide Morelli - info@davidemorelli.it;
-#N canvas 228 212 580 411 train 0;
-#X obj 32 241 outlet;
-#N canvas 100 44 892 558 train 0;
-#X obj 57 397 outlet;
-#X msg 60 31 train;
-#X text 126 33 1- set the train mode;
-#X text 116 81 2- build a list with inputs and desired output;
-#X text 139 101 be shure you provide the correct numbers of inputs
-and outputs;
-#X obj 168 202 pack s f f f;
-#X obj 197 248 pack f f f;
-#X obj 168 225 unpack s f f f;
-#X msg 192 374 run;
-#X obj 198 170 tgl 15 0 empty empty in1 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 228 170 tgl 15 0 empty empty in2 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 259 170 tgl 15 0 empty empty output 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 148 169 bng 15 250 50 0 empty empty train! 0 -6 0 8 -262144
--1 -1;
-#X text 299 183 set inputs and output value \, then send the list clicking
-on the "train!" bang;
-#X text 229 374 3- when you are ready switch again to run mode before
-exiting;
-#X text 311 308 NOTE2: while training the right outlet gives you the
-mean square error after each training pattern.;
-#X msg 316 278 create 2 1 5;
-#X text 315 226 NOTE1: before training with this example you should
-have created a nn with 2 ins and 1 out and 5 frames with a command
-like:;
-#X connect 1 0 0 0;
-#X connect 5 0 7 0;
-#X connect 6 0 0 0;
-#X connect 7 1 6 0;
-#X connect 7 2 6 1;
-#X connect 7 3 6 2;
-#X connect 8 0 0 0;
-#X connect 9 0 5 1;
-#X connect 10 0 5 2;
-#X connect 11 0 5 3;
-#X connect 12 0 5 0;
-#X connect 16 0 0 0;
-#X restore 68 50 pd train it on the fly;
-#X text 62 5 there are 2 ways to train your net;
-#X text 253 47 on the fly is simpler;
-#X text 86 128 with a trainfile the net could be more accurate;
-#X msg 89 149 train-on-file test.txt;
-#X connect 1 0 0 0;
-#X connect 5 0 0 0;
-#X restore 115 119 pd train;
-#X text 190 118 train a nn;
-#X obj 113 360 print mse;
-#X obj 54 391 print out;
-#X text 150 315 2 args needed: num_inputs and frames;
-#X text 148 331 see [pd creation examples] for details;
-#X obj 33 319 ann_td 2 5;
-#X text 9 2 ann_td: time delay neural networks in pd;
-#N canvas 406 195 494 332 META 0;
-#X text 12 210 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan
-Wilkes for Pd version 0.42.;
-#X text 12 25 LICENSE GPL v2;
-#X text 12 5 KEYWORDS control;
-#X text 12 150 OUTLET_0;
-#X text 12 170 OUTLET_1;
-#X text 12 190 AUTHOR Davide Morelli - info@davidemorelli.it;
-#X text 12 45 DESCRIPTION time delay neural networks in pd;
-#X text 12 65 INLET_0 list create train train-on-file filename save
-load setmode run FANN_TRAIN_INCREMENTAL FANN_TRAIN_BATCH FANN_TRAIN_RPROP
-FANN_TRAIN_QUICKPROP desired_error max_iterations iterations_between_reports
-set_activation_function_output;
-#X restore 734 408 pd META;
-#X connect 0 0 16 0;
-#X connect 1 0 16 0;
-#X connect 2 0 16 0;
-#X connect 3 0 16 0;
-#X connect 10 0 16 0;
-#X connect 16 0 13 0;
-#X connect 16 1 12 0;
diff --git a/externals/ann/src/ann.c b/externals/ann/src/ann.c
deleted file mode 100644
index 3fab3766f..000000000
--- a/externals/ann/src/ann.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* ...this is an externals for comouting Aritficial Neural Networks...
-   thikn aboiut this
-	
-   0201:forum::für::umläute:2001
-*/
-
-#include "ann.h"
-
-//#include "ann_som.c"
-//#include "ann_mlp.c"
-//#include "ann_td.c"
-
-typedef struct ann 
-{
-  t_object t_ob;
-} t_ann;
-
-t_class *ann_class;
-
-/* do a little help thing */
-
-static void ann_help(void)
-{
-  post("\n\n...this is the ann external "VERSION"..\n");
-  post("self-organized maps"
-       "\n\tann_som"
-       "");
-  post("\n(l) forum::für::umläute 2001\n"
-       "this software is under the GnuGPL that is provided with these files");
-}
-
-void *ann_new(void)
-{
-  t_ann *x = (t_ann *)pd_new(ann_class);
-  return (void *)x;
-}
-
-void ann_som_setup(void);
-void ann_mlp_setup(void);
-void ann_td_setup(void);
-
-
-
-/*
-  waiting to be released in near future:
-  ANN_SOM : self organized maps
-  ANN_PERCEPTRON : perceptrons
-  ANN_MLP : multilayer perceptrons
-  
-  waiting to be realeased sometimes
-  ANN_RBF : radial basis functions
-*/
-
-
-
-void ann_setup(void) 
-{
-  ann_som_setup();
-  ann_mlp_setup();
-  ann_td_setup();
-
-  
-  /* ************************************** */
-  
-  post("\n\t................................");
-  post("\t...artificial neural networks...");
-  post("\t..........version "VERSION"..........");
-  post("\t....forum::für::umläute 2001....");
-  post("\t....send me a 'help' message....");
-  post("\t................................\n");
-  
-  ann_class = class_new(gensym("ann"), ann_new, 0, sizeof(t_ann), 0, 0);
-  class_addmethod(ann_class, ann_help, gensym("help"), 0);
-}
diff --git a/externals/ann/src/ann.h b/externals/ann/src/ann.h
deleted file mode 100644
index 48452d8b6..000000000
--- a/externals/ann/src/ann.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* ********************************************** */
-/* the ANN external                              */
-/* ********************************************** */
-/*                            forum::für::umläute */
-/* ********************************************** */
-
-#ifndef INCLUDE_ANN_H__
-#define INCLUDE_ANN_H__
-
-#include "m_pd.h"
-
-/* to beautify the logo make sure to make the VERSION-info 4 chars long */
-#define VERSION "0.1."
-
-#endif
diff --git a/externals/ann/src/ann_mlp.c b/externals/ann/src/ann_mlp.c
deleted file mode 100644
index 53f61daf0..000000000
--- a/externals/ann/src/ann_mlp.c
+++ /dev/null
@@ -1,752 +0,0 @@
-/*	ann_mlp : Neural Networks for PD
-	by Davide Morelli - info@davidemorelli.it - http://www.davidemorelli.it
-	this software is simply an interface for FANN classes
-	http://fann.sourceforge.net/
-	FANN is obviously needed for compilation
-	USE 1.2 VERSION ONLY
-	this software is licensed under the GNU General Public License
-*/
-
-/*
-  hacked by Georg Holzmann for some additional methods, bug fixes, ...
-  2005, grh@mur.at
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include "m_pd.h"
-#include "fann.h"
-
-#ifndef VERSION 
-#define VERSION "0.2"
-#endif
-
-#ifndef __DATE__ 
-#define __DATE__ ""
-#endif
-
-#define TRAIN 0
-#define RUN  1
-
-static t_class *ann_mlp_class;
-
-typedef struct _ann_mlp {
-	t_object  x_obj;
-	struct fann *ann;
-	int mode; // 0 = training, 1 = running
-	t_symbol *filename; // name of the file where this ann is saved
-	t_symbol *filenametrain; // name of the file with training data
-	float desired_error;
-	unsigned int max_iterations;
-	unsigned int iterations_between_reports;
-  fann_type *input;     // grh: storage for input
-  t_atom *output;       // grh: storage for output (t_atom)
-  fann_type *out_float; // grh: storage for output (fann_type)
-  t_canvas *x_canvas;
-	t_outlet *l_out, *f_out;
-} t_ann_mlp;
-
-// allocation
-static void ann_mlp_allocate_storage(t_ann_mlp *x)
-{
-  unsigned int i;
-
-  if(!x->ann)
-    return;
-  
-  x->input = (fann_type *)getbytes(x->ann->num_input*sizeof(fann_type));
-  x->output = (t_atom *)getbytes(x->ann->num_output*sizeof(t_atom));
-  x->out_float = (fann_type *)getbytes(x->ann->num_output*sizeof(fann_type));
-  
-  // init storage with zeros
-  for (i=0; i<x->ann->num_input; i++)
-    x->input[i]=0;
-  for (i=0; i<x->ann->num_output; i++)
-  {
-    SETFLOAT(x->output+i, 0);
-    x->out_float[i]=0;
-  }
-}
-
-// deallocation
-static void ann_mlp_free(t_ann_mlp *x)
-{
-  if(!x->ann)
-    return;
-  
-  freebytes(x->input, x->ann->num_input * sizeof(fann_type));
-  freebytes(x->output, x->ann->num_output * sizeof(t_atom));
-  freebytes(x->out_float, x->ann->num_output * sizeof(fann_type));
-  fann_destroy(x->ann);
-}
-
-static void ann_mlp_help(t_ann_mlp *x)
-{
-	post("");
-	post("ann_mlp: neural nets for PD");
-	post("ann_mlp:Davide Morelli - info@davidemorelli.it - (c)2005");
-	post("ann_mlp:create or load an ann, train it and run it passing a list with inputs to the inlet, nn will give a list of float as output");
-	post("ann_mlp:main commands: create, filename, load, save, train-on-file, run");
-	post("ann_mlp:see help-nn.pd for details on commands and usage");
-	post("ann_mlp:this is an interface to FANN");
-
-}
-
-static void ann_mlp_createFann(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int num_input = 2;
-	unsigned int num_output = 1;
-	unsigned int num_layers = 3;
-	unsigned int *neurons_per_layer = NULL;
-  int activated=0;
-  int i, count_args = 0;
-	float connection_rate = 1;
-	float learning_rate = (float)0.7;
-  
-  
-  // okay, start parsing init args ...
-  
-	if (argc > count_args++)
-		num_input = atom_getint(argv++);
-
-	if (argc > count_args++)
-		num_output = atom_getint(argv++);
-
-	if (argc > count_args++)
-  {
-    int hidden=0;
-    
-    num_layers = atom_getint(argv++);
-    hidden = num_layers-2;
-    
-    neurons_per_layer = (unsigned int *)getbytes(num_layers*sizeof(unsigned int));
-    
-    neurons_per_layer[0] = num_input;
-    
-    // make standard initialization (if there are too few init args)
-    for (i=1; i<hidden+1; i++)
-      neurons_per_layer[i] = 3;
-    
-    // now check init args
-    for (i=1; i<hidden+1; i++)
-    {
-      if (argc > count_args++)
-        neurons_per_layer[i] = atom_getint(argv++);
-    }
-    
-    neurons_per_layer[num_layers-1] = num_output;
-    
-    activated=1;
-  }
-	
-  if (argc > count_args++)
-		connection_rate = atom_getfloat(argv++);
-
-	if (argc > count_args++)
-		learning_rate = atom_getfloat(argv++);
-
-  // make one hidden layer as standard, if there were too few init args
-  if(!activated)
-  {
-    neurons_per_layer = (unsigned int *)getbytes(3*sizeof(unsigned int));
-    neurons_per_layer[0] = num_input;
-    neurons_per_layer[1] = 3;
-    neurons_per_layer[2] = num_output;
-  }
-
-  // ... end of parsing init args
-  
-  
-  if(x->ann)
-    ann_mlp_free(x);
-  
-  x->ann = fann_create_array(connection_rate, learning_rate, num_layers, neurons_per_layer);
-  
-  // deallocate helper array
-  freebytes(neurons_per_layer, num_layers * sizeof(unsigned int));
-  
-	if(!x->ann)
-  {
-    error("error creating the ann");
-    return;
-  }
-  
-  ann_mlp_allocate_storage(x);
-	fann_set_activation_function_hidden(x->ann, FANN_SIGMOID_SYMMETRIC);
-	fann_set_activation_function_output(x->ann, FANN_SIGMOID_SYMMETRIC);
-  
-  // set error log to stdout, so that you see it in the pd console
-  //fann_set_error_log((struct fann_error*)x->ann, stdout);
-  // unfortunately this doesn't work ... but it should do in a similar way !!
-  
-	post("created ann with:");
-	post("num_input = %i", num_input);
-	post("num_output = %i", num_output);
-	post("num_layers = %i", num_layers);
-	post("connection_rate = %f", connection_rate);
-	post("learning_rate = %f", learning_rate);
-}
-
-static void ann_mlp_print_status(t_ann_mlp *x)
-{
-		if (x->mode == TRAIN)
-			post("nn:training");
-		else
-			post("nn:running");
-}
-
-static void ann_mlp_train(t_ann_mlp *x)
-{
-	x->mode=TRAIN;
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-	fann_reset_MSE(x->ann);
-	ann_mlp_print_status(x);
-}
-
-static void ann_mlp_run(t_ann_mlp *x)
-{
-	x->mode=RUN;
-	ann_mlp_print_status(x);
-}
-
-static void ann_mlp_set_mode(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc<1)
-	{
-		error("usage: setmode 0/1: 0 for training, 1 for running");
-	}
-	else	
-	{	
-		x->mode = atom_getint(argv++);
-		ann_mlp_print_status(x);
-	}
-}
-
-static void ann_mlp_train_on_file(t_ann_mlp *x, t_symbol *s)
-{
-  // make correct path
-  char patcher_path[MAXPDSTRING];
-  char filename[MAXPDSTRING];
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-  // make correct path
-  canvas_makefilename(x->x_canvas, s->s_name, patcher_path, MAXPDSTRING);
-  sys_bashfilename(patcher_path, filename);
-  x->filenametrain = gensym(filename);
-
-  if(!x->filenametrain)
-    return;
-  
-	post("nn: starting training on file %s, please be patient and wait ... (it could take severeal minutes to complete training)", x->filenametrain->s_name);
-
-	fann_train_on_file(x->ann, x->filenametrain->s_name, x->max_iterations,
-		x->iterations_between_reports, x->desired_error);
-	
-	post("ann_mlp: finished training on file %s", x->filenametrain->s_name);
-}
-
-static void ann_mlp_set_desired_error(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	float desired_error = (float)0.001;
-	if (0<argc)
-	{
-		desired_error = atom_getfloat(argv);
-		x->desired_error = desired_error;
-		post("nn:desired_error set to %f", x->desired_error);
-	} else
-	{
-		error("you must pass me a float");
-	}
-}
-
-static void ann_mlp_set_max_iterations(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int max_iterations = 500000;
-	if (argc>0)
-	{
-		max_iterations = atom_getint(argv);
-		x->max_iterations = max_iterations;
-		post("nn:max_iterations set to %i", x->max_iterations);
-	} else
-	{
-		error("you must pass me an int");
-	}
-}
-
-static void ann_mlp_set_iterations_between_reports(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	
-	unsigned int iterations_between_reports = 1000;
-	if (argc>0)
-	{
-		iterations_between_reports = atom_getint(argv);
-		x->iterations_between_reports = iterations_between_reports;
-		post("nn:iterations_between_reports set to %i", x->iterations_between_reports);
-	} else
-	{
-		error("you must pass me an int");
-	}
-
-}
-
-// run the ann using floats in list passed to the inlet as input values
-// and send result to outlet as list of float
-static void ann_mlp_run_the_net(t_ann_mlp *x, t_symbol *sl, unsigned int argc, t_atom *argv)
-{
-	unsigned int i=0;	
-	fann_type *calc_out;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-  
-  if(argc < x->ann->num_input)
-  {
-    error("ann_mlp: too few input values!!");
-    return;
-  }
-
-	// fill input array with actual data sent to inlet
-	for (i=0;i<x->ann->num_input;i++)
-	{
-		x->input[i] = atom_getfloat(argv++);
-	}
-	
-	// run the ann
-	calc_out = fann_run(x->ann, x->input);
-
-	// fill the output array with result from ann
-	for (i=0;i<x->ann->num_output;i++)
-		SETFLOAT(x->output+i, calc_out[i]);
-
-	// send output array to outlet
-	outlet_anything(x->l_out, gensym("list"),
-                  x->ann->num_output, x->output);
-}
-
-static void ann_mlp_train_on_the_fly(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-  int quantiINs, quantiOUTs;
-	float mse;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	quantiINs = x->ann->num_input;
-	quantiOUTs = x->ann->num_output;
-
-	if ((quantiINs + quantiOUTs)>argc)
-	{
-		error("insufficient number of arguments passed, in training mode you must prive me a list with (num_input + num_output) floats");
-		return;
-	}
-
-	// fill input array with actual data sent to inlet
-	for (i=0;i<quantiINs;i++)
-		x->input[i] = atom_getfloat(argv++);
-
-	for (i=0;i<quantiOUTs;i++)
-		x->out_float[i] = atom_getfloat(argv++);
-	
-	//fann_reset_MSE(x->ann);
-
-	fann_train(x->ann, x->input, x->out_float);
-
-	mse = fann_get_MSE(x->ann);
-	
-	outlet_float(x->f_out, mse);
-}
-
-static void ann_mlp_manage_list(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->mode)
-		ann_mlp_run_the_net(x, sl, argc, argv);
-	else
-	{
-		ann_mlp_train_on_the_fly(x, sl, argc, argv);
-	}
-}
-
-static void ann_mlp_set_filename(t_ann_mlp *x, t_symbol *s)
-{
-  // make correct path
-  char patcher_path[MAXPDSTRING];
-  char filename[MAXPDSTRING];
-  
-  if(!s)
-    return;
-  
-  // make correct path
-  canvas_makefilename(x->x_canvas, s->s_name, patcher_path, MAXPDSTRING);
-  sys_bashfilename(patcher_path, filename);
-  x->filename = gensym(filename);
-}
-
-static void ann_mlp_load_ann_from_file(t_ann_mlp *x, t_symbol *s)
-{
-  ann_mlp_set_filename(x,s);
-  
-  if(!x->filename)
-  {
-    error("ann: no filename !!!");
-    return;
-  }
-  
-  // deallocate storage
-  if(x->ann)
-    ann_mlp_free(x);
-      
-  x->ann = fann_create_from_file(x->filename->s_name);
-  
-  if (x->ann == 0)
-    error("error opening %s", x->filename->s_name);
-  else
-    post("nn:ann loaded fom file %s", x->filename->s_name);
-  
-  // allocate storage
-  ann_mlp_allocate_storage(x);
-}
-
-static void ann_mlp_save_ann_to_file(t_ann_mlp *x, t_symbol *s)
-{
-  ann_mlp_set_filename(x,s);
-	
-  if(!x->filename)
-  {
-    error("ann: no filename !!!");
-    return;
-  }
-  
-  if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_save(x->ann, x->filename->s_name);
-		post("nn:ann saved in file %s", x->filename->s_name);
-	}
-}
-
-// functions for training algo:
-static void ann_mlp_set_FANN_TRAIN_INCREMENTAL(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_INCREMENTAL);
-		post("nn:training algorithm set to FANN_TRAIN_INCREMENTAL");
-	}
-}
-static void ann_mlp_set_FANN_TRAIN_BATCH(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_BATCH);
-		post("nn:training algorithm set to FANN_TRAIN_BATCH");
-	}
-}
-static void ann_mlp_set_FANN_TRAIN_RPROP(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_RPROP);
-		post("nn:training algorithm set to FANN_TRAIN_RPROP");
-	}
-}
-static void ann_mlp_set_FANN_TRAIN_QUICKPROP(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_QUICKPROP);
-		post("nn:training algorithm set to FANN_TRAIN_QUICKPROP");
-	}
-}
-
-static void ann_mlp_set_activation_function_output(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	t_symbol *parametro = 0;
-	int funzione = 0;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc>0) {
-		parametro = atom_gensym(argv);
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD")==0)
-			funzione = FANN_THRESHOLD;
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD_SYMMETRIC")==0)
-			funzione = FANN_THRESHOLD_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_LINEAR")==0)
-			funzione = FANN_LINEAR;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID")==0)
-			funzione = FANN_SIGMOID;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_STEPWISE")==0)
-			funzione = FANN_SIGMOID_STEPWISE;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC_STEPWISE")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN")==0)
-      funzione = FANN_GAUSSIAN;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN_STEPWISE")==0)
-      funzione = FANN_GAUSSIAN_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT")==0)
-      funzione = FANN_ELLIOT;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT_SYMMETRIC")==0)
-      funzione = FANN_ELLIOT_SYMMETRIC;
-    
-		fann_set_activation_function_output(x->ann, funzione);
-	} else
-	{
-		error("you must specify the activation function");
-	}
-	post("nn:activation function set to %s (%i)", parametro->s_name, funzione);
-
-}
-
-static void ann_mlp_set_activation_function_hidden(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	t_symbol *parametro = 0;
-	int funzione = 0;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc>0) {
-		parametro = atom_gensym(argv);
-    if (strcmp(parametro->s_name, "FANN_THRESHOLD")==0)
-      funzione = FANN_THRESHOLD;
-    if (strcmp(parametro->s_name, "FANN_THRESHOLD_SYMMETRIC")==0)
-      funzione = FANN_THRESHOLD_SYMMETRIC;
-    if (strcmp(parametro->s_name, "FANN_LINEAR")==0)
-      funzione = FANN_LINEAR;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID")==0)
-      funzione = FANN_SIGMOID;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID_STEPWISE")==0)
-      funzione = FANN_SIGMOID_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC")==0)
-      funzione = FANN_SIGMOID_SYMMETRIC;
-    if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC_STEPWISE")==0)
-      funzione = FANN_SIGMOID_SYMMETRIC_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN")==0)
-      funzione = FANN_GAUSSIAN;
-    if (strcmp(parametro->s_name, "FANN_GAUSSIAN_STEPWISE")==0)
-      funzione = FANN_GAUSSIAN_STEPWISE;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT")==0)
-      funzione = FANN_ELLIOT;
-    if (strcmp(parametro->s_name, "FANN_ELLIOT_SYMMETRIC")==0)
-      funzione = FANN_ELLIOT_SYMMETRIC;
-    
-		fann_set_activation_function_hidden(x->ann, funzione);
-	} else
-	{
-		error("you must specify the activation function");
-	}
-	post("nn:activation function set to %s (%i)", parametro->s_name, funzione);
-
-}
-
-static void ann_mlp_randomize_weights(t_ann_mlp *x, t_symbol *sl, int argc, t_atom *argv)
-{
-  t_float min = -1;
-  t_float max = 1;
-
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  if (argc>0)
-		min = atom_getfloat(argv++);
-
-	if (argc>1)
-		max = atom_getfloat(argv++);
-    
-  fann_randomize_weights(x->ann, min, max);
-}
-
-static void ann_mlp_learnrate(t_ann_mlp *x, t_float f)
-{
-  int learnrate = 0;
-  
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  learnrate = (f<0) ? 0 : f;
-  fann_set_learning_rate(x->ann, learnrate);
-}
-
-static void ann_mlp_set_activation_steepness_hidden(t_ann_mlp *x, t_float f)
-{
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  fann_set_activation_steepness_hidden(x->ann, f);
-}
-
-static void ann_mlp_set_activation_steepness_output(t_ann_mlp *x, t_float f)
-{
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-  
-  fann_set_activation_steepness_output(x->ann, f);
-}
-
-void fann_set_activation_steepness_hidden(struct fann * ann, fann_type steepness);
-
-static void ann_mlp_print_ann_details(t_ann_mlp *x)
-{
-	if (x->ann == 0)
-	{
-		post("ann_mlp:ann is not initialized");
-	} else
-	{
-		post("follows a description of the current ann:");
-		post("num_input=%i", x->ann->num_input);
-		post("num_output=%i", x->ann->num_output);
-		post("learning_rate=%f", x->ann->learning_rate);
-		post("connection_rate=%f", x->ann->connection_rate);
-		post("total_neurons=%i", x->ann->total_neurons);
-		post("total_connections=%i", x->ann->total_connections);
-		post("last error=%i", x->ann->errstr);
-		if (x->filename == 0)
-		{
-			post("ann_mlp:filename not set");
-		} else
-		{
-			post("filename=%s", x->filename->s_name);
-		}
-	}
-}
-
-static void ann_mlp_print_ann_print(t_ann_mlp *x)
-{
-  if(!x->ann)
-  {
-    post("ann_mlp: ann is not initialized");
-    return;
-  }
-    
-  fann_print_connections(x->ann);
-  fann_print_parameters(x->ann);
-}
-
-static void *ann_mlp_new(t_symbol *s, int argc, t_atom *argv)
-{
-	t_ann_mlp *x = (t_ann_mlp *)pd_new(ann_mlp_class);
-	x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->f_out = outlet_new(&x->x_obj, &s_float);
-
-	x->desired_error = (float)0.001;
-	x->max_iterations = 500000;
-	x->iterations_between_reports = 1000;
-	x->mode=RUN;
-  x->x_canvas = canvas_getcurrent();
-  x->filename = NULL;
-  x->filenametrain = NULL;
-  x->ann = NULL;
-  x->input = NULL;
-  x->output = NULL;
-  x->out_float = NULL;
-
-	if (argc>0) {
-		x->filename = atom_gensym(argv);
-		ann_mlp_load_ann_from_file(x, NULL);
-	}
-
-	return (void *)x;
-}
-
-void ann_mlp_setup(void) {
-	post("");
-	post("ann_mlp: multilayer perceptron for PD");
-	post("version: "VERSION"");
-	post("compiled: "__DATE__);
-	post("author: Davide Morelli");
-	post("contact: info@davidemorelli.it www.davidemorelli.it");
-
-	ann_mlp_class = class_new(gensym("ann_mlp"),
-		(t_newmethod)ann_mlp_new,
-		(t_method)ann_mlp_free, sizeof(t_ann_mlp),
-		CLASS_DEFAULT, A_GIMME, 0);
-
-	// general..
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_help, gensym("help"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_createFann, gensym("create"), A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_train, gensym("train"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_run, gensym("run"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_mode, gensym("setmode"), A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_train_on_file, gensym("train-on-file"), A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_manage_list, gensym("data"), A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_filename, gensym("filename"), A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_load_ann_from_file, gensym("load"),A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_save_ann_to_file, gensym("save"),A_DEFSYMBOL, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_print_ann_details, gensym("details"), 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_print_ann_print, gensym("print"), 0);
-	
-	// change training parameters
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_desired_error, gensym("desired_error"),A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_learnrate, gensym("learnrate"), A_FLOAT, 0);
-
-	// change training  and activation algorithms
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
-	class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_function_hidden, gensym("set_activation_function_hidden"),A_GIMME, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_steepness_hidden, gensym("set_activation_steepness_hidden"), A_FLOAT, 0);
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_set_activation_steepness_output, gensym("set_activation_steepness_output"), A_FLOAT, 0);
-	
-  // initialization:
-  class_addmethod(ann_mlp_class, (t_method)ann_mlp_randomize_weights, gensym("randomize_weights"),A_GIMME, 0);
-  
-	// the most important one: running the ann
-	class_addlist(ann_mlp_class, (t_method)ann_mlp_manage_list);
-
-
-}
diff --git a/externals/ann/src/ann_som.c b/externals/ann/src/ann_som.c
deleted file mode 100644
index 4f9fef4c2..000000000
--- a/externals/ann/src/ann_som.c
+++ /dev/null
@@ -1,806 +0,0 @@
-/* ann_som :
-   part of the ARTIFICIAL NEURAL NETWORK external for PURE DATA
-   SELF-ORGANIZED MAP : instar learning-rule
-
-   (l) 0201:forum::für::umläute:2001
-   this software is licensed under the GNU General Public License
-*/
-
-#include "ann.h"
-#include <math.h>
-#ifdef NT
-#define sqrtf sqrt
-#endif
-
-#if 1
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <sys/timeb.h>
-
-#ifdef linux
-#include <unistd.h>
-#endif
-#ifdef NT
-#include <io.h>
-#endif
-#endif
-
-/* ****************************************************************************** */
-/* som : save and load messages... */
-
-#define INSTAR  1
-#define OUTSTAR 2
-#define KOHONEN 0
-
-/* learning-rule
- INSTAR : instar learning-rule
-*/
-
-#define TRAIN 0
-#define TEST  1
-
-
-typedef struct _som {
-  t_object x_obj;
-  t_outlet *left, *right;
-
-  int rule;  /* INSTAR, OUTSTAR, KOHONEN */
-  int mode;  /* TRAIN, TEST */
-
-  t_symbol *filename;
-  int defaultfilename; /* TRUE if filename is still "default.som" */
-
-  int num_neurX, num_neurY; /* for 2dim-fields */
-  int num_neurons; /* num_neurX * num_neurY */
-  int num_sensors;
-
-  t_float **weights; /* the neural network (pointer to neuron (neuron is a pointer to an array of weights)) */
-  t_float **dist; /* squaredistances between neurons (for neighbourhood) (pointer to neuron (is a pointer to an array of distances))*/
-
-  t_float *workingspace; /* a for comparing data*/
-
-  double lr, lr_factor, lr_bias; /* learning rate: lr(n)=(lr(n-1)*lr_factor; LR=lr(n)+lr_bias */
-  double nb, nb_factor, nb_bias; /* neighbourhood */
-
-  /* something for reading/writing to files */
-  t_canvas *x_canvas;
-  t_symbol *x_dir;
-
-} t_som;
-
-static t_class *som_class;
-
-/* -----------------  private functions -------------------- */
-
-static void som_killsom(t_som *x)
-{
-  /* kill the weights-field */
-  int i=x->num_neurons;
-
-  while (i--) {
-    freebytes(x->weights[i], sizeof(x->weights[i]));
-    x->weights[i]=0;
-  }
-  freebytes(x->weights, sizeof(x->weights));
-  x->weights = 0;
-
-  /* kill the dist-field */
-  i=x->num_neurons;
-
-  while (i--) {
-    freebytes(x->dist[i], sizeof(x->dist[i]));
-    x->dist[i]=0;
-  }
-  freebytes(x->dist, sizeof(x->dist));
-  x->dist = 0;
-
-  /* kill the working-space */
-  freebytes(x->workingspace, sizeof(x->workingspace));
-  x->workingspace = 0;
-}
-
-static void som_makedist(t_som *x)
-{
-  int i, j;
-
-  x->dist = (t_float **)getbytes(x->num_neurons * sizeof(t_float *));
-
-  for (i=0; i<x->num_neurons; i++) {
-    int X1 = (i%x->num_neurX), Y1 = (i/x->num_neurX);
-    x->dist[i]=(t_float *)getbytes(x->num_neurons * sizeof(t_float));
-
-    for (j=0; j<x->num_neurons; j++) {
-      int X2 = (j%x->num_neurX), Y2 = (j/x->num_neurX);
-      x->dist[i][j] = sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
-    }
-  }
-}
-
-static int som_whosthewinner(t_som *x, t_float *senses)
-{
-  t_float min_dist = 0;
-  int min_n = x->num_neurons-1;
-  t_float *weight = x->weights[min_n];
-  int n = x->num_sensors;
-
-  while (n--) {
-    t_float f = senses[n] - weight[n];
-    min_dist += f*f;
-  }
-
-  n=x->num_neurons-1;
-  while (n--) {
-    int s = x->num_sensors;
-  
-    t_float dist = 0;
-    weight = x->weights[n];
-
-    while (s--) {
-      t_float f;
-      f = senses[s] - weight[s];
-      dist += f*f;
-    }
-    if (dist<min_dist) {
-      min_dist = dist;
-      min_n    = n;
-    }
-  }
-
-  return min_n;
-}
-
-static void som_createnewsom(t_som *x, int sens, int nx, int ny)
-{ /* create a new SOM */
-  int i, j;
-
-  /* clean up the old SOM */
-  som_killsom(x);
-
-
-  /* make new SOM */
-  x->num_neurons = nx * ny;
-  x->num_neurX = nx;
-  x->num_neurY = ny;
-  x->num_sensors = sens;
-
-  x->weights = (t_float **)getbytes(x->num_neurons * sizeof(t_float *));
-  for (i=0; i<x->num_neurons; i++) {
-    x->weights[i]=(t_float *)getbytes(x->num_sensors * sizeof(t_float));
-
-    for (j=0; j<x->num_sensors; j++) x->weights[i][j] = 0;
-  }
-
-  /* make new dist */
-  som_makedist(x);
-
-  /* make new workingspace */
-  x->workingspace = (t_float *)getbytes(x->num_sensors * sizeof(t_float));
-  for (i=0; i<x->num_sensors; i++) x->workingspace[i]=0.f;
-}
-
-/* ----------------- public functions ---------------------- */
-
-static void som_list(t_som *x, t_symbol *sl, int argc, t_atom *argv)
-{ /* present the data */
-  int i = x->num_sensors;
-  //  t_float *data = (t_float *)getbytes(sizeof(t_float) * i);
-  t_float *data = x->workingspace;
-  t_float *dummy = data;
-  int winner;
-
-  t_float learningrate = x->lr+x->lr_bias, neighbourhood = x->nb+x->nb_bias;
-
-  /* first: extract the data */
-  /* check if there is enough input data; fill up with zeros if not; if there's plenty, maybe forget about the rest */
-  if ((i = x->num_sensors - argc) > 0) {
-    dummy = data + argc;
-    while (i--) *dummy++ = 0;
-    i = x->num_sensors;
-  } else i = x->num_sensors;
-  dummy = data;
-  /* really get the data */
-  while (i--) *dummy++ = atom_getfloat(argv++);
-
-  /* second: get the winning neuron */
-  winner = som_whosthewinner(x, data);
-
-  if (x->mode == TRAIN) {
-    /* third: learn something */
-    /* update all the neurons that are within the neighbourhood */
-    i=x->num_neurons;
-    switch (x->rule) {
-    case OUTSTAR:
-      while (i--) {
-	t_float dist = x->dist[winner][i];
-	if (neighbourhood > dist) {
-	  t_float factor = 1 - dist/neighbourhood;
-	  t_float *weight=x->weights[i];
-	  int s = x->num_sensors;
-
-	  while (s--) weight[s] += learningrate*data[s]*(factor-weight[s]);
-	}
-      }
-      break;
-    case INSTAR:
-      while (i--) {
-	t_float dist = x->dist[winner][i];
-	if (neighbourhood > dist) {
-	  t_float factor = learningrate * (1 - dist/neighbourhood);
-	  t_float *weight=x->weights[i];
-	  int s = x->num_sensors;
-
-	  while (s--) weight[s] += (data[s]-weight[s])*factor;
-	}
-      }
-      break;
-    default:
-      /* KOHONEN rule */
-      while (i--) {
-	t_float dist = x->dist[winner][i];
-	if (neighbourhood > dist) {
-	  t_float *weight=x->weights[i];
-	  int s = x->num_sensors;
-
-	  while (s--) weight[s] += (data[s]-weight[s])*learningrate;
-	}
-      }
-    }
-
-    /* update learning-rate and neighbourhood */
-    x->lr *= x->lr_factor;
-    x->nb *= x->nb_factor;
-  }
-
-  /* finally: do the output thing */
-  /* do the output thing */
-  outlet_float(x->x_obj.ob_outlet, winner);
-
-  //  freebytes(data, sizeof(t_float)*x->num_sensors);
-}
-
-static void som_bang(t_som *x)
-{ /* re-trigger the last output */
-  error("som_bang: nothing to do");
-}
-
-static void som_init(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* initialize the neuron-weights */
-  int i, j;
-  t_float f;
-
-  switch (argc) {
-  case 0:
-  case 1:
-    f = (argc)?atom_getfloat(argv):0;
-    for (i=0; i<x->num_neurons; i++)
-      for (j=0; j<x->num_sensors; j++)
-	x->weights[i][j]=f;
-    break;
-  default:
-    if (argc == x->num_sensors) {
-      for (i=0; i<x->num_neurons; i++)
-	for (j=0; j<x->num_sensors; j++)
-	  x->weights[i][j]=atom_getfloat(&argv[j]);
-    } else 
-      error("som_init: you should pass a list of expected mean-values for each sensor to the SOM");
-  }
-}
-
-/* centered initialization: 
- * the "first" neuron will be set to all zeros
- * the "middle" neuron will be set to the given data
- * the "last" neuron will be set to teh double of the given data
- */
-static void som_cinit(t_som *x, t_symbol *s, int argc, t_atom *argv){
-  /* initialize the neuron-weights */
-  int i, j;
-  t_float f;
-  t_float v = 1.0f;
-  
-  switch (argc) {
-  case 0:
-  case 1:
-    f = (argc)?atom_getfloat(argv):0;
-    for (i=0; i<x->num_neurons; i++){
-      v=i*2.0/x->num_neurons;
-      for (j=0; j<x->num_sensors; j++)
-	x->weights[i][j]=f*v;
-    }
-    break;
-  default:
-    if (argc == x->num_sensors) {
-      for (i=0; i<x->num_neurons; i++){
-	v=i*2.0/x->num_neurons;
-	for (j=0; j<x->num_sensors; j++)
-	  x->weights[i][j]=v*atom_getfloat(&argv[j]);
-      }
-    } else 
-      error("som_init: you should pass a list of expected mean-values for each sensor to the SOM");
-  }
-}
-
-static void som_rinit(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* initialize the neuron-weights to time-seeded random values*/
-  int i, j;
-  float m,r;
-  struct timeb mytime;
-
-  ftime(&mytime); // get current time
-  srand(mytime.time*1000+mytime.millitm); // Seed with time (in millisecs)
-
-  switch (argc) {
-  case 0:
-    for (i=0; i<x->num_neurons; i++) {
-      for (j=0; j<x->num_sensors; j++) {
-	r = (float)rand()/RAND_MAX;
-	x->weights[i][j]=r;
-      }
-    }
-  case 1:
-    m = atom_getfloat(argv);
-    for (i=0; i<x->num_neurons; i++) {
-      for (j=0; j<x->num_sensors; j++) {
-	r = (float)rand()/RAND_MAX*m;
-	x->weights[i][j]=r;
-      }
-    }
-    break;
-  default:
-    if (argc > 1) {
-      error("som_rinit: Pass a single float (random value multiplier).");
-     }
-  }
-}
-
-/* dump the weights of the queried neuron to the output */
-static void som_dump(t_som *x, t_float nf){
-  int n=nf;
-  int i=x->num_sensors;
-  t_atom*ap=0;
-  if (n<0 || n>=x->num_neurons)return;
-  ap=(t_atom*)getbytes(sizeof(t_atom)*x->num_sensors);
-  while(i--)SETFLOAT(&ap[i], x->weights[n][i]);
-  outlet_list(x->x_obj.ob_outlet, &s_list, x->num_sensors, ap);
-
-  freebytes(ap, x->num_sensors*sizeof(t_atom));
-}
-
-static void som_makenewsom(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* create a new SOM */
-  int sens, nx, ny;
-
-
-  /* check whether there is sufficient data to create a new SOM */
-  if ((argc != 2) && (argc !=3)) {
-    error("som_new: wrong number of arguments (only 2 or 3 parameters are allowed)");
-    return;
-  }
-
-  /* 3 arguments : #sensors #neurX #neurY :: 2D-field of neurons with neurX * neurY  items
-     2 arguments : #sensors #neurXY       :: 2D-field of neurons with neurXY* neurXY items
-
-     to create more-dimensional fields, we now have to manually adjust the SOM-file (change the distances...)
-     LATER, we might do a function "ann_makedist"
-  */
-
-  sens = atom_getfloat(argv);
-  if (sens <= 0) {
-    error("some_new: number of sensors must be >= 1");
-    return;
-  }
-
-  if (argc==3) {
-    nx = atom_getint(argv+1);
-    ny = atom_getint(argv+2);
-    if ((nx<=0) || (ny<=0)) {
-      error("some_new: number of neurons must be >= 1");
-      return;
-    }
-  } else {
-    nx = atom_getint(argv+1);
-    if (nx<=0) {
-      error("some_new: number of neurons must be >= 1");
-      return;
-    }
-    ny = nx;
-  }
-
-  som_createnewsom(x, sens, nx, ny);
-}
-
-static void som_train(t_som *x)
-{ /* set the mode to TRAIN */
-  x->mode = TRAIN;
-}
-static void som_test(t_som *x)
-{ /* set the mode to TEST */
-  x->mode = TEST;
-}
-
-static void som_rule(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* set the learning rule */
-  int rule=-1;
-
-  if (argc>1) {
-    error("som_rule: only 1 argument may be specified");
-    return;
-  }
-  if (argc == 0) {
-    post("som_rule: you are currently training with the %s rule", (x->rule==INSTAR)?"INSTAR":(x->rule==OUTSTAR)?"OUTSTAR":"KOHONEN");
-    return;
-  }
-
-  if (argv->a_type==A_FLOAT) rule=atom_getint(argv);
-  else if (argv->a_type==A_SYMBOL) {
-    char name=*atom_getsymbol(argv)->s_name;
-    if (name=='I' || name=='i')  rule=INSTAR;
-    else if (name=='O' || name=='O')  rule=OUTSTAR;
-    else if (name=='K' || name=='k')  rule=KOHONEN;
-  }
-
-  switch (rule) {
-  case KOHONEN:
-  case INSTAR:
-  case OUTSTAR:
-    x->rule=rule;
-    break;
-  default:
-    error("som_rule: you specified an invalid rule !");
-  }
-}
-
-
-static void som_learn(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* set a new LEARNINGRATE */
-  switch (argc) {
-  case 3:
-    x->lr_bias = atom_getfloat(&argv[2]);
-  case 2:
-    x->lr_factor = atom_getfloat(&argv[1]);
-  case 1:
-    x->lr = atom_getfloat(&argv[0]);
-    break;
-  default:
-    error("som_learn: you should pass up to 4 learning-rate parameters");
-  }
-}
-static void som_neighbour(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* set a new NEIGHBOURHOOD */
-  switch (argc) {
-  case 3:
-    x->nb_bias = atom_getfloat(&argv[2]);
-  case 2:
-    x->nb_factor = atom_getfloat(&argv[1]);
-  case 1:
-    x->nb = atom_getfloat(&argv[0]);
-    break;
-  default:
-    error("som_neighbour: you should pass up to 4 neighbourhood parameters");
-  }
-} 
-
-static void som_read(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* read a som-file */
-
-  int fd;
-  char filnam[MAXPDSTRING];
-  char buf[MAXPDSTRING], *bufptr;
-
-  int neuronsX, neuronsY, sensors, rule=0;
-  double lr[3], nb[3];
-  t_float dummy;
-  char *text=0;
-  int i, j;
-  t_float *fp;
-
-  FILE *f=0;
-
-  text = (char *)getbytes(MAXPDSTRING*sizeof(char));
-
-  if (argc>0) {
-    x->filename = atom_gensym(argv);
-    x->defaultfilename = 0;
-  }
-  if (x->defaultfilename) error("som_read: reading from default file \"%s\"", x->filename->s_name);
-
-  if ((fd = open_via_path(canvas_getdir(x->x_canvas)->s_name,
-		  x->filename->s_name, "", buf, &bufptr, MAXPDSTRING, 0)) < 0) {
-    error("%s: can't open", x->filename->s_name);
-    return;
-  }
-  else
-    close (fd);
-
- /* open */
-  sys_bashfilename(x->filename->s_name, filnam);
-  dummy = 0;
-
-  while (f == 0) {
-    if (!(f = fopen(filnam, "r"))) {
-      error("msgfile_read: unable to open %s", filnam);
-      return;
-    }
-
-    /* read */
-
-    /* read header */
-    if ( (dummy=fscanf(f,"SOM:\n%d",&sensors)) != 1) {
-      error("som_read: error reading file\n");
-      break;
-    }
-    if ( (dummy=fscanf(f,"%d",&neuronsX)) != 1) {
-      error("som_read: error reading file\n");
-      break;
-    }
-    if ( (dummy=fscanf(f,"%d",&neuronsY)) != 1) {
-     error("som_read: error reading file\n");
-      break;
-    }
-    fscanf(f,"%s",text);
-    if (!strcmp("INSTAR", text)) rule = INSTAR;
-    else if (!strcmp("OUTSTAR", text)) rule = OUTSTAR;
-    else if (!strcmp("KOHONEN", text)) rule = KOHONEN;
-
-    for (i=0; i<3; i++)
-      if ( (fscanf(f,"%lf",&lr[i])) != 1) {
-	error("som_read: error reading file\n");
-	break;
-      }
-    for (i=0; i<3; i++)
-      if ( (fscanf(f,"%lf",&nb[i])) != 1) {
-	error("som_read: error reading file\n");
-	break;
-      }
-
-    /* we now have a valid SOM-definition
-       let's create a dummy SOM */
-
-    som_createnewsom(x, sensors, neuronsX, neuronsY);
- 
-    x->rule = rule;
-
-    x->lr=lr[0];
-    x->lr_factor=lr[1];
-    x->lr_bias=lr[2];
-
-    x->nb=nb[0];
-    x->nb_factor=nb[1];
-    x->nb_bias=nb[2];
-
-    /* read the weights */
-
-    if ((fscanf(f,"\nweights:\n %f",&dummy)) != 1) {
-      break;
-    }
-    
-    i=0;
-    while (i<x->num_neurons) {
-      j = x->num_sensors;
-      fp= x->weights[i];
-      while (j--) {
-	*fp++=dummy;
-	if ((fscanf(f,"%f",&dummy)) != 1) {
-	  break;
-	}
-      }
-      j = x->num_sensors;
-      i++;
-    }
-
-    /* finally read the distances */
-    if ((fscanf(f,"\ndists:\n %f",&dummy)) != 1) {
-      break;
-    }
-    
-    i=0;
-    while (i<x->num_neurons) {
-      j = x->num_neurons;
-      fp= x->dist[i];
-      while (j--) {
-	*fp++=dummy;
-	if ((fscanf(f,"%f",&dummy)) != 1) {
-	  break;
-	}
-      }
-      j = x->num_sensors;
-      i++;
-    }
-
-  }
-
-  /* close file */
-  if (f) fclose(f);
-
-
-}
-
-static void som_write(t_som *x, t_symbol *s, int argc, t_atom *argv)
-{ /* write a som-file */
-  char filnam[MAXPDSTRING];
-  char buf[MAXPDSTRING];
-  char *text=0;
-  int textlen;
-
-  FILE *f=0;
-
-  int i;
-
-  if (argc>0) {
-    x->filename = atom_gensym(argv);
-    x->defaultfilename = 0;
-  }
-  if (x->defaultfilename) error("som_write: writing to default file \"%s\"", x->filename->s_name);
-
-  canvas_makefilename(x->x_canvas, x->filename->s_name, buf, MAXPDSTRING);
-  sys_bashfilename(x->filename->s_name, filnam);
-
-  while (f==0) {
-    /* open file */
-    if (!(f = fopen(filnam, "w"))) {
-      error("msgfile : failed to open %s", filnam);
-    } else {
-
-      /* write header information */
-      text=(char *)getbytes(sizeof(char)*MAXPDSTRING);
-      sprintf(text, "SOM:\n%d %d %d %s\n%.15f %.15f %.15f\n%.15f %.15f %.15f\nweights:\n",
-	      x->num_sensors, x->num_neurX, x->num_neurY, (x->rule==INSTAR)?"INSTAR":(x->rule==OUTSTAR)?"OUTSTAR":"KOHONEN",
-	      x->lr, x->lr_factor, x->lr_bias,
-	      x->nb, x->nb_factor, x->nb_bias);
-      textlen = strlen(text);
-
-      if (fwrite(text, textlen*sizeof(char), 1, f) < 1) {
-	error("msgfile : failed to write %s", filnam); break;
-      }
-    
-      /* write weights */
-      for (i=0; i<x->num_neurons; i++) {
-	int j=x->num_sensors;
-	t_float *weight = x->weights[i];
-	while (j--) {
-	  sprintf(text, " %.15f", *weight++);
-	  textlen=strlen(text);
-	  if (fwrite(text, textlen*sizeof(char), 1, f) < 1) {
-	    error("msgfile : failed to write %s", filnam); break;
-	  }
-	}
-	if (fwrite("\n", sizeof(char), 1, f) < 1) {
-	  error("msgfile : failed to write %s", filnam); break;
-	}
-      }
-
-      /* write dists */
-      if (fwrite("dists:\n", 7*sizeof(char), 1, f) < 1) {
-	error("msgfile : failed to write %s", filnam); break;
-      }
-      for (i=0; i<x->num_neurons; i++) {
-	int j=x->num_neurons;
-	t_float *dist = x->dist[i];
-	while (j--) {
-	  sprintf(text, " %.15f", *dist++);
-	  textlen=strlen(text);
-	  if (fwrite(text, textlen*sizeof(char), 1, f) < 1) {
-	    error("msgfile : failed to write %s", filnam); break;
-	  }
-	}
-	if (fwrite("\n", sizeof(char), 1, f) < 1) {
-	  error("msgfile : failed to write %s", filnam); break;
-	}
-      }   
-    }
-  }
-  /* close file */
-  if (f) fclose(f);
-
-  freebytes(text, sizeof(text));
-}
-
-
-static void som_help(t_som *x)
-{
-  post("\nann_som\t:: self orgranized map");
-  post("<f1> <f2> <f3>... <fn>\t: train/test som with data"
-       "\nlearn\t\t:... "
-
-       "\nhelp\t\t: show this help");
-  post("creation: \"ann_som <som-file>\": <som-file> defines a file to be loeaded as a som");
-}
-
-
-static void som_print(t_som *x)
-{
-  char c = (x->defaultfilename)?'\0':'\"';
-  post("\nann_som\t:: self orgranized map");
-  post("rule=%s\tmode=%s", (x->rule==INSTAR)?"INSTAR":(x->rule==OUTSTAR)?"OUTSTAR":"KOHONEN", (x->mode==TEST)?"TEST":"TRAIN");
-  post("file = %c%s%c", c, x->filename->s_name,c );
-  post("neurons = %d*%d = %d\tsensors=%d", x->num_neurX, x->num_neurY, x->num_neurons, x->num_sensors);
-  post("learning-rate : lr=%.15f\tlr_x=%.15f\tlr_o=%.15f", x->lr, x->lr_factor, x->lr_bias);
-  post("neighbourhood : nb=%.15f\tnb_x=%.15f\tnb_o=%.15f\n", x->nb, x->nb_factor, x->nb_bias);
-
-}
-static void som_free(t_som *x)
-{
-  som_killsom(x);
-}
-
-static void *som_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_som *x = (t_som *)pd_new(som_class);
-
-    outlet_new(&x->x_obj, 0);
-
-    x->rule = INSTAR;
-    x->mode = TRAIN;
-
-    x->filename = gensym("default.som");
-    x->defaultfilename = 1;
-
-    x->num_neurX   = 0;
-    x->num_neurY   = 0;
-    x->num_neurons = 0;
-
-    x->num_sensors = 0;
-
-    x->weights     = 0;
-    x->dist        = 0;
-
-    x->lr          = 1;
-    x->lr_factor   = 0.999999999;
-    x->lr_bias     = 0;
-
-    x->nb          = 10;
-    x->nb_factor   = 0.999999999;
-    x->nb_bias     = 0.999999999;
-
-    x->x_canvas = canvas_getcurrent();
-
-
-    if ((argc==0) || (argv->a_type == A_SYMBOL)) {
-      /* load the som-file */
-      if (argc != 0) x->defaultfilename = 0;
-      som_read(x, s, argc, argv);
-    } else {
-      /* create a new som */
-      som_makenewsom(x, s, argc, argv);
-    }
-
-    return (x);
-}
-
-static void som_setup(void)
-{
-  som_class = class_new(gensym("ann_som"), (t_newmethod)som_new,
-			    (t_method)som_free, sizeof(t_som), 0, A_GIMME, 0);
-
-  class_addlist(som_class, som_list);
-  class_addbang(som_class, som_bang);
-
-  class_addmethod(som_class, (t_method)som_makenewsom, gensym("new"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_init, gensym("init"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_cinit, gensym("cinit"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_rinit, gensym("rinit"), A_GIMME, 0);
-
-  class_addmethod(som_class, (t_method)som_learn, gensym("learn"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_neighbour, gensym("neighbour"), A_GIMME, 0);
- 
-  class_addmethod(som_class, (t_method)som_train, gensym("train"), 0);
-  class_addmethod(som_class, (t_method)som_test, gensym("test"), 0);
-  class_addmethod(som_class, (t_method)som_rule, gensym("rule"), A_GIMME, 0);
-
-  class_addmethod(som_class, (t_method)som_read, gensym("read"), A_GIMME, 0);
-  class_addmethod(som_class, (t_method)som_write, gensym("write"), A_GIMME, 0);
-
-  class_addmethod(som_class, (t_method)som_dump, gensym("dump"), A_FLOAT, 0);
-
-  class_addmethod(som_class, (t_method)som_print, gensym("print"), 0);
-  class_addmethod(som_class, (t_method)som_help, gensym("help"), 0);
-
-}
-
-void ann_som_setup(void)
-{
-  som_setup();
-}
-
diff --git a/externals/ann/src/ann_td.c b/externals/ann/src/ann_td.c
deleted file mode 100644
index f135d0983..000000000
--- a/externals/ann/src/ann_td.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/*	ann_td : Time Delay Neural Networks for PD
-	by Davide Morelli - info@davidemorelli.it - http://www.davidemorelli.it
-	this software is simply an interface for FANN classes
-	http://fann.sourceforge.net/
-	FANN is obviously needed for compilation
-	use 1.2 version only
-	this software is licensed under the GNU General Public License
-*/
-#include <stdio.h>
-#include <string.h>
-#include "m_pd.h"
-#include "fann.h"
-
-#ifndef VERSION 
-#define VERSION "0.2"
-#endif
-
-#ifndef __DATE__ 
-#define __DATE__ ""
-#endif
-
-#define TRAIN 0
-#define RUN  1
-
-#define MAXINPUT 1024
-#define MAXOUTPUT 256
-
-static t_class *ann_td_class;
-
-typedef struct _ann_td {
-	t_object  x_obj;
-	struct fann *ann;
-	int mode; // 0 = training, 1 = running
-	t_symbol *filename; // name of the file where this ann is saved
-	t_symbol *filenametrain; // name of the file with training data
-	float desired_error;
-	unsigned int max_iterations;
-	unsigned int iterations_between_reports;
-	unsigned int frames;
-	unsigned int num_input;
-	t_float *inputs;
-	unsigned int ins_frames_set;
-	t_outlet *l_out, *f_out;
-} t_ann_td;
-
-static void ann_td_help(t_ann_td *x)
-{
-	post("");
-	post("ann_td:time delay neural networks for PD");
-	post("ann_td:Davide Morelli - info@davidemorelli.it - (c)2005");
-	post("ann_td:create or load an ann, train it and run it passing a list with inputs to the inlet, nn will give a list of float as output");
-	post("ann_td:main commands: create, filename, load, save, train-on-file, run");
-	post("ann_td:see help-nn.pd for details on commands and usage");
-	post("ann_td:this is an interface to FANN");
-
-}
-
-static void ann_td_deallocate_inputs(t_ann_td *x)
-{
-	if (x->inputs != 0)
-	{
-		freebytes(x->inputs, sizeof(x->inputs));
-		x->inputs = 0;
-	}
-}
-
-static void ann_td_allocate_inputs(t_ann_td *x)
-{
-	unsigned int i;
-	ann_td_deallocate_inputs(x);
-	// allocate space for inputs array
-	x->inputs = (t_float *)getbytes((x->frames) * (x->num_input) * sizeof(t_float));
-	for (i=0; i<(x->frames * x->num_input); i++) x->inputs[i]=0.f;
-}
-
-static void ann_td_createFann(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int num_input = 2;
-	unsigned int num_output = 1;
-	unsigned int num_layers = 3;
-	unsigned int num_neurons_hidden = 3;
-	float connection_rate = 1;
-	float learning_rate = (float)0.7;
-	
-	if (argc<3)
-	{
-		error("you must provide at least num_input, num_output amd frames number");
-		return;
-	}
-	if (argc>0)
-		num_input = atom_getint(argv++);
-
-	if (argc>1)
-		num_output = atom_getint(argv++);
-	
-	if (argc>2)
-	{
-		x->frames = atom_getint(argv++);
-		x->ins_frames_set=1;
-	}
-
-	if (argc>3)
-		num_layers = atom_getint(argv++);
-
-	if (argc>4)
-		num_neurons_hidden = atom_getint(argv++);
-
-	if (argc>5)
-		connection_rate = atom_getfloat(argv++);
-
-	if (argc>6)
-		learning_rate = atom_getfloat(argv++);
-
-	if ((num_input * x->frames)>MAXINPUT)
-	{
-		error("too many inputs, maximum allowed is %f", MAXINPUT/x->frames);
-		return;
-	}
-
-	if (num_output>MAXOUTPUT)
-	{
-		error("too many outputs, maximum allowed is MAXOUTPUT");
-		return;
-	}
-
-	x->ann	= fann_create(connection_rate, learning_rate, num_layers,
-		(num_input*x->frames), num_neurons_hidden, num_output);
-
-	fann_set_activation_function_hidden(x->ann, FANN_SIGMOID_SYMMETRIC);
-	fann_set_activation_function_output(x->ann, FANN_SIGMOID_SYMMETRIC);
-
-	ann_td_allocate_inputs(x);
-
-	if (x->ann == 0)
-	{
-		error("error creating the ann");
-	} else
-	{
-		post("ann_td:created ann with:");
-		post("num_input = %i", num_input);
-		post("num_output = %i", num_output);
-		post("frames = %i", x->frames);
-		post("num_layers = %i", num_layers);
-		post("num_neurons_hidden = %i", num_neurons_hidden);
-		post("connection_rate = %f", connection_rate);
-		post("learning_rate = %f", learning_rate);
-	}
-}
-
-static void ann_td_print_status(t_ann_td *x)
-{
-		if (x->mode == TRAIN)
-			post("ann_td:training");
-		else
-			post("ann_td:running");
-}
-
-static void ann_td_train(t_ann_td *x)
-{
-	x->mode=TRAIN;
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-	fann_reset_MSE(x->ann);
-	ann_td_print_status(x);
-}
-
-static void ann_td_run(t_ann_td *x)
-{
-	x->mode=RUN;
-	ann_td_print_status(x);
-}
-
-static void ann_td_set_mode(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc<1)
-	{
-		error("usage: setmode 0/1: 0 for training, 1 for running");
-	}
-	else	
-	{	
-		x->mode = atom_getint(argv++);
-		ann_td_print_status(x);
-	}
-}
-
-
-
-static void ann_td_train_on_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc<1)
-	{
-		error("you must specify the filename with training data");
-		return;
-	} else
-	{
-		x->filenametrain = atom_gensym(argv);
-	}
-
-	//post("nn: starting training on file %s, please be patient and wait for my next message (it could take severeal minutes to complete training)", x->filenametrain->s_name);
-
-	fann_train_on_file(x->ann, x->filenametrain->s_name, x->max_iterations,
-		x->iterations_between_reports, x->desired_error);
-	
-	post("ann_td: finished training on file %s", x->filenametrain->s_name);
-}
-
-static void ann_td_set_desired_error(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	float desired_error = (float)0.001;
-	if (0<argc)
-	{
-		desired_error = atom_getfloat(argv);
-		x->desired_error = desired_error;
-		post("ann_td:desired_error set to %f", x->desired_error);
-	} else
-	{
-		error("you must pass me a float");
-	}
-}
-
-static void ann_td_set_max_iterations(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	unsigned int max_iterations = 500000;
-	if (argc>0)
-	{
-		max_iterations = atom_getint(argv);
-		x->max_iterations = max_iterations;
-		post("ann_td:max_iterations set to %i", x->max_iterations);
-	} else
-	{
-		error("you must pass me an int");
-	}
-}
-
-static void ann_td_set_iterations_between_reports(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	
-	unsigned int iterations_between_reports = 1000;
-	if (argc>0)
-	{
-		iterations_between_reports = atom_getint(argv);
-		x->iterations_between_reports = iterations_between_reports;
-		post("ann_td:iterations_between_reports set to %i", x->iterations_between_reports);
-	} else
-	{
-		error("you must pass me an int");
-	}
-
-}
-
-
-static void ann_td_scale_inputs(t_ann_td *x)
-{
-	unsigned int j;
-	unsigned int k;
-
-	for(j = (x->frames - 1); j>0; j--)
-	{
-		// scorro la lista all'indietro
-		for (k=0; k < x->num_input; k++)
-		{
-			// scalo i valori dei frames
-			x->inputs[(x->num_input) * j + k]=x->inputs[(x->num_input) * (j-1) + k];
-		}
-	}
-}
-
-// run the ann using floats in list passed to the inlet as input values
-// and send result to outlet as list of float
-static void ann_td_run_the_net(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-	unsigned j=0;
-	//fann_type input[MAXINPUT];	
-	fann_type *calc_out;
-	t_atom lista[MAXOUTPUT];
-	int quanti;
-	float valoreTMP;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (x->ins_frames_set==0)
-	{
-		error("num_inputs and frames not set");
-		return;
-	}
-
-	if (argc < (int) x->num_input)
-	{
-		error("insufficient inputs");
-		return;
-	}
-	quanti = x->ann->num_output;
-
-	ann_td_scale_inputs(x);
-
-	// fill output array with zeros
-	for (i=0; i<MAXOUTPUT; i++)
-	{
-		SETFLOAT(lista + i,0);
-	}
-
-	// fill input array with actual data sent to inlet
-	for (j=0; j < x->num_input ;j++)
-	{
-		//input[j] = atom_getfloat(argv++);
-		x->inputs[j] = atom_getfloat(argv++);
-	}
-	
-	// run the ann
-	//calc_out = fann_run(x->ann, input);
-	calc_out = fann_run(x->ann, x->inputs);
-
-	// fill the output array with result from ann
-	for (i=0;i<quanti;i++)
-	{
-		valoreTMP = calc_out[i];
-		//post("calc_out[%i]=%f", i, calc_out[i]);
-		SETFLOAT(lista+i, valoreTMP);
-	}
-
-	// send output array to outlet
-	outlet_anything(x->l_out,
-                     gensym("list") ,
-					 quanti, 
-					 lista);
-	
-}
-
-static void ann_td_train_on_the_fly(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-	unsigned int j=0;
-	fann_type input_merged[MAXINPUT];	
-	fann_type output[MAXOUTPUT];
-	//fann_type *calcMSE;
-	//t_atom lista[MAXOUTPUT];
-	float mse;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if ((x->num_input + x->ann->num_output) > (unsigned int) argc)
-	{
-		error("insufficient number of arguments passed, in training mode you must prive me a list with (num_input + num_output) floats");
-		return;
-	}
-
-	// fill input array with zeros
-	for (i=0; i<MAXINPUT; i++)
-	{
-		input_merged[i]=0;
-	}
-	// fill input array with zeros
-	for (i=0; i<MAXOUTPUT; i++)
-	{
-		output[i]=0;
-	}
-
-	ann_td_scale_inputs(x);
-
-	// fill input array with actual data sent to inlet
-	for (j = 0; j < x->num_input; j++)
-	{
-		input_merged[j] = atom_getfloat(argv++);
-	}
-	for (j = x->num_input; j < (x->num_input * x->frames); j++)
-	{
-		input_merged[j] = x->inputs[j];
-	}
-
-	for (j = 0; j < (x->ann->num_output);j++)
-	{
-		output[j] = atom_getfloat(argv++);
-	}
-	
-	//fann_reset_MSE(x->ann);
-
-	fann_train(x->ann, input_merged, output);
-
-	mse = fann_get_MSE(x->ann);
-	
-	outlet_float(x->f_out, mse);
-
-
-}
-
-static void ann_td_manage_list(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->mode)
-		ann_td_run_the_net(x, sl, argc, argv);
-	else
-	{
-		ann_td_train_on_the_fly(x, sl, argc, argv);
-	}
-}
-
-static void ann_td_set_filename(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc>0) {
-    x->filename = atom_gensym(argv);
-	} else
-	{
-		error("you must specify the filename");
-	}
-	post("nn:filename set to %s", x->filename->s_name);
-}
-
-static void ann_td_load_ann_from_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (x->ins_frames_set==0)
-	{
-		error("set num_input and frames with [inputs_frames int int(");
-		error("I won't load without num_input and frames set");
-		return;
-	}
-	if (argc>0) {
-    x->filename = atom_gensym(argv);
-	}
-	x->ann = fann_create_from_file(x->filename->s_name);
-	if (x->ann == 0)
-		error("error opening %s", x->filename->s_name);
-	else
-		post("nn:ann loaded fom file %s", x->filename->s_name);
-	
-	ann_td_allocate_inputs(x);
-}
-
-static void ann_td_save_ann_to_file(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	if (argc>0) {
-    x->filename = atom_gensym(argv);
-	}
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_save(x->ann, x->filename->s_name);
-		post("nn:ann saved in file %s", x->filename->s_name);
-	}
-}
-
-// functions for training algo:
-static void ann_td_set_FANN_TRAIN_INCREMENTAL(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_INCREMENTAL);
-		post("nn:training algorithm set to FANN_TRAIN_INCREMENTAL");
-	}
-}
-static void ann_td_set_FANN_TRAIN_BATCH(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_BATCH);
-		post("nn:training algorithm set to FANN_TRAIN_BATCH");
-	}
-}
-static void ann_td_set_FANN_TRAIN_RPROP(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_RPROP);
-		post("nn:training algorithm set to FANN_TRAIN_RPROP");
-	}
-}
-static void ann_td_set_FANN_TRAIN_QUICKPROP(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		error("ann is not initialized");
-	} else
-	{
-		fann_set_training_algorithm(x->ann, FANN_TRAIN_QUICKPROP);
-		post("nn:training algorithm set to FANN_TRAIN_QUICKPROP");
-	}
-}
-
-static void ann_td_set_activation_function_output(t_ann_td *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	t_symbol *parametro = 0;
-	int funzione = 0;
-
-	if (x->ann == 0)
-	{
-		error("ann not initialized");
-		return;
-	}
-
-	if (argc>0) {
-		parametro = atom_gensym(argv);
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD")==0)
-			funzione = FANN_THRESHOLD;
-		if (strcmp(parametro->s_name, "FANN_THRESHOLD_SYMMETRIC")==0)
-			funzione = FANN_THRESHOLD_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_LINEAR")==0)
-			funzione = FANN_LINEAR;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID")==0)
-			funzione = FANN_SIGMOID;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_STEPWISE")==0)
-			funzione = FANN_SIGMOID_STEPWISE;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC;
-		if (strcmp(parametro->s_name, "FANN_SIGMOID_SYMMETRIC_STEPWISE")==0)
-			funzione = FANN_SIGMOID_SYMMETRIC_STEPWISE;
-		fann_set_activation_function_output(x->ann, funzione);
-	} else
-	{
-		error("you must specify the activation function");
-	}
-	post("nn:activation function set to %s (%i)", parametro->s_name, funzione);
-
-}
-
-static void ann_td_print_ann_details(t_ann_td *x)
-{
-	if (x->ann == 0)
-	{
-		post("ann_td:ann is not initialized");
-	} else
-	{
-		post("follows a description of the current ann:");
-		post("num_input=%i", x->ann->num_input);
-		post("num_output=%i", x->ann->num_output);
-		post("learning_rate=%f", x->ann->learning_rate);
-		post("connection_rate=%f", x->ann->connection_rate);
-		post("total_neurons=%i", x->ann->total_neurons);
-		post("total_connections=%i", x->ann->total_connections);
-		post("last error=%i", x->ann->errstr);
-		if (x->filename == 0)
-		{
-			post("filename not set");
-		} else
-		{
-			post("filename=%s", x->filename->s_name);
-		}
-	}
-}
-
-static void ann_td_set_num_input_frames(t_ann_td *x, t_floatarg ins, t_floatarg frames)
-{
-	x->num_input = ins;
-	x->frames = frames;
-	x->ins_frames_set=1;
-}
-
-static void *ann_td_new(t_symbol *s, int argc, t_atom *argv)
-{
-	t_ann_td *x = (t_ann_td *)pd_new(ann_td_class);
-	x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->f_out = outlet_new(&x->x_obj, &s_float);
-
-	x->desired_error = (float)0.001;
-	x->max_iterations = 500000;
-	x->iterations_between_reports = 1000;
-	x->mode=RUN;
-	x->ins_frames_set=0;
-
-	if (argc<2)
-	{
-		error("2 arguments needed: num_input and frames. filename optional");
-		return (void *)x;
-	}
-
-	if (argc>0) {
-		x->num_input = atom_getint(argv++);
-	}
-
-	if (argc>1) {
-		x->frames = atom_getint(argv++);
-		x->ins_frames_set=1;
-		ann_td_allocate_inputs(x);
-	}
-
-	if (argc>2) {
-		x->filename = atom_gensym(argv);
-		ann_td_load_ann_from_file(x, NULL , 0, NULL);
-	}
-
-	return (void *)x;
-}
-
-// free resources
-static void ann_td_free(t_ann_td *x)
-{
-  struct fann *ann = x->ann;
-  fann_destroy(ann);
-  ann_td_deallocate_inputs(x);
-  // TODO: free other resources!
-}
-
-void ann_td_setup(void) {
-	post("");
-	post("ann_td: time delay neural nets for PD");
-	post("version: "VERSION"");
-	post("compiled: "__DATE__);
-	post("author: Davide Morelli");
-	post("contact: info@davidemorelli.it www.davidemorelli.it");
-
-	ann_td_class = class_new(gensym("ann_td"),
-		(t_newmethod)ann_td_new,
-		(t_method)ann_td_free, sizeof(t_ann_td),
-		CLASS_DEFAULT, A_GIMME, 0);
-
-	// general..
-	class_addmethod(ann_td_class, (t_method)ann_td_help, gensym("help"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_createFann, gensym("create"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_train, gensym("train"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_run, gensym("run"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_mode, gensym("setmode"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_train_on_file, gensym("train-on-file"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_manage_list, gensym("data"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_filename, gensym("filename"), A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_load_ann_from_file, gensym("load"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_save_ann_to_file, gensym("save"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_print_ann_details, gensym("details"), 0);
-	
-	// change training parameters
-	class_addmethod(ann_td_class, (t_method)ann_td_set_desired_error, gensym("desired_error"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_max_iterations, gensym("max_iterations"),A_GIMME, 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_iterations_between_reports, gensym("iterations_between_reports"),A_GIMME, 0);
-
-	// change training  and activation algorithms
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_INCREMENTAL, gensym("FANN_TRAIN_INCREMENTAL"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_BATCH, gensym("FANN_TRAIN_BATCH"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_RPROP, gensym("FANN_TRAIN_RPROP"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_FANN_TRAIN_QUICKPROP, gensym("FANN_TRAIN_QUICKPROP"), 0);
-	class_addmethod(ann_td_class, (t_method)ann_td_set_activation_function_output, gensym("set_activation_function_output"),A_GIMME, 0);
-	
-	class_addmethod(ann_td_class, (t_method)ann_td_set_num_input_frames, gensym("inputs_frames"),A_DEFFLOAT, A_DEFFLOAT, 0);
-	
-	// the most important one: running the ann
-	class_addlist(ann_td_class, (t_method)ann_td_manage_list);
-
-
-}
diff --git a/externals/ann/src/makefile.darwin b/externals/ann/src/makefile.darwin
deleted file mode 100644
index 0c3fbc1be..000000000
--- a/externals/ann/src/makefile.darwin
+++ /dev/null
@@ -1,48 +0,0 @@
-current: pd_darwin
-
-clean: ; rm -f *.pd_linux *.o *.pd_darwin
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: ann_mlp.pd_darwin ann_td.pd_darwin ann_som.pd_darwin ann.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-
-# where are the PD header files?
-# leave it blank if it is a system directory (like /usr/local/include), 
-# 	since gcc 3.2 complains about it
-PDPATH=../../../pd/src
-#PDPATH=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-
-# where is the PD executable?
-#PD=/usr/local/bin/pd
-PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/bin/pd
-#PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-#PD=/Applications/Pd-extended.app/Contents/Resources/bin/pd
-
-# where do the fann libraries reside? Download and build them:
-# http://downloads.sourceforge.net/sourceforge/fann/fann-1.2.0.tar.gz
-#FANNLIB=/Users/davidemorelli/Desktop/robaDavide/fann-1.2.0/src/fann.o
-FANNBASE=/Users/davidemorelli/Desktop/robaDavide/fann-1.2.0
-FANNLIB=$(FANNBASE)/src/fann.o \
-		$(FANNBASE)/src/fann_train.o \
-		$(FANNBASE)/src/fann_train_data.o \
-		$(FANNBASE)/src/fann_io.o \
-		$(FANNBASE)/src/fann_error.o \
-		$(FANNBASE)/src/fann_options.o 
-#FANNLIB=/usr/local/lib/libfann.a
-
-DARWININCLUDE =  -I../../src -I$(PDPATH) -I$(PDPATH)/src/include
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
-#	cc -bundle  -bundle_loader $(PD) -flat_namespace -o $*.pd_darwin $(FANNLIB) *.o
-	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin $(FANNLIB) *.o
-#	rm -f $*.o
-
-# $(FANNLIB)
diff --git a/externals/ann/src/makefile.irix b/externals/ann/src/makefile.irix
deleted file mode 100644
index 12272d1bb..000000000
--- a/externals/ann/src/makefile.irix
+++ /dev/null
@@ -1,20 +0,0 @@
-current: irix5
-
-TARGETS = linux \
-	ann_som
-
-SGI5OBJECTS = $(TARGETS:%=%.pd_irix5)
-
-# ----------------------- IRIX ----------------------------
-.SUFFIXES: .pd_irix5
-SGIINCLUDE = -I../../src
-
-irix5: $(SGIOBJECTS)
-
-.c.pd_irix5:
-	cc -g -w2 -fullwarn -mips2 -DFTS $(SGIINCLUDE) -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-clean::
-	rm *.o obj/* *.pd_irix5 so_locations rm *.pd_linux *~
diff --git a/externals/ann/src/makefile.linux b/externals/ann/src/makefile.linux
deleted file mode 100644
index bfef6e9b2..000000000
--- a/externals/ann/src/makefile.linux
+++ /dev/null
@@ -1,98 +0,0 @@
-# the ANN-EXTERNAL-makefile
-# everything is GnuGPL that should come with the ann.tgz
-# NO WARRANTIES FOR ANYTHING
-# et cetera
-# (l) forum::für::umläute 2001
-
-# make sure that the "m_pd.h" is somehow available either by putting it into this
-# directory, by adding it's path to the INCLUDE-path or by putting it into an
-# already included path, e.g. "/usr/local/include/"
-# download fann libraries from http://fann.sourceforge.net
-# and install from source
-# make sure that fann.h is available
-
-#these are the user adjustables : adjust them to fit into your system
-# PD will install to $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR), which is /usr/local/lib/pd
-# by default
-DESTDIR =
-INSTALL_PREFIX = /usr/local
-PDLIBDIR = /lib/pd
-
-# the *.dll-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(LIBRARY_DIR)
-LIBRARY_DIR=/extra
-# the reference-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(REFERENCE_DIR)
-#REFERENCE_DIR=/doc/5.reference/ann
-REFERENCE_DIR=/extra/help-ann
-
-#these were the user adjustables
-#---------------------------------
-
-
-TARGETS = ann_som.c \
-	ann_mlp.c   \
-	ann_td.c    \
-
-# ----------------------- LINUX ----------------------------
-.SUFFIXES: .pd_linux
-
-
-LINUXOBJECTS = $(TARGETS:%=%.o)
-ARCH = $(shell uname --machine)
-
-PD_DIR = $(DESTDIR)$(INSTALL_PREFIX)$(PDLIBDIR)
-PD_INSTALLDIR_LIB = $(PD_DIR)$(LIBRARY_DIR)
-PD_INSTALLDIR_REF = $(PD_DIR)$(REFERENCE_DIR)
-
-ifeq (${ARCH},alpha)
-AFLAGS = -mieee	 -mcpu=ev56
-endif
-
-
-STRIP=strip
-STRIPFLAGS=--strip-unneeded
-
-
-LINCLUDE =
-
-OPTIMIZE_FLAGS = -O2 -O6 -funroll-loops -march=pentium3
-DEFS = -DPD
-
-#CFLAGS = -O2 -g -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS)
-CFLAGS = $(OPTIMIZE_FLAGS) -fomit-frame-pointer -fPIC -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS) $(DEFS)
-
-LDFLAGS = -Wl,--export-dynamic -shared
-LIBS = -lc -lm -lfann
-
-# here come the targets
-
-all: $(TARGETS:%.c=%.pd_linux)
-
-%.pd_linux: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -o "$*.pd_linux" "$*.c" $(LIBS)
-	$(STRIP) $(STRIPFLAGS) "$*.pd_linux"
-
-
-ann: $(TARGETS:%.c=%.o)
-	$(CC) $(CFLAGS) $(INCLUDE) -o ann.o -c ann.c
-	$(CC) $(LDFLAGS) -o ann.pd_linux *.o $(LIBS)
-	$(STRIP) $(STRIPFLAGS) ann.pd_linux
-
-%.o: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -o "$*.o" -c "$*.c"
-
-
-
-everything: clean all install distclean
-
-distclean:
-	-rm *.o *.pd_linux *~
-
-clean:
-	-rm *.o *.pd_linux
-
-install: installdocs
-	install -m 644 ann*.pd_linux $(PD_INSTALLDIR_LIB)
-
-installdocs:
-	install -d $(PD_INSTALLDIR_REF)
-	install -m644 ../examples/* $(PD_INSTALLDIR_REF)
diff --git a/externals/ann/src/makefile.msvc b/externals/ann/src/makefile.msvc
deleted file mode 100644
index 0e60fcff4..000000000
--- a/externals/ann/src/makefile.msvc
+++ /dev/null
@@ -1,55 +0,0 @@
-# to compile ann fann libs are needed
-# go to http://fann.sourceforge.net/
-# current is http://prdownloads.sourceforge.net/fann/fann-1.2.0.zip?download
-# go to MSVC++ folder and open all.dsw
-# compile everything
-
-# customize here !
-VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7" 
-PDPATH="H:\PureData\pd-0.38-3.msw\pd"
-FANNSRC="H:\PureData\FANN\fann-1.2.0\fann-1.2.0\src\include"
-FANNLIB="H:\PureData\FANN\fann-1.2.0\fann-1.2.0\MSVC++\Release"
-
-
-current: clean pd_nt distclean
-
-pd_nt: ann_som.dll ann_mlp.dll ann_td.dll ann.dll
-#pd_nt: ann.dll
-
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-
-
-PDNTINCLUDE = /I. /I$(PDPATH)\tcl\include /I$(PDPATH)\src /I$(VC)\include /I$(FANNSRC) /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDPATH)\bin\pd.lib \
-	$(FANNLIB)\libfann.lib 
-#	ann_mlp.lib ann_som.lib ann_td.lib
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$*_setup $*.obj $(PDNTLIB) *.obj
-#	-del *.obj
-#	-del *.lib
-#	-del *.exp
-
-#install:
-#	copy help-*.pd $(PDPATH)/doc/5.reference/
-
-clean:
-	-del link.stamp
-	-del *.obj
-	-del *.lib
-	-del *.exp
-	-del *.dll
-
-distclean:
-	-del *.obj
-	-del *.lib
-	-del *.exp
diff --git a/externals/august/readanysf~/Makefile b/externals/august/readanysf~/Makefile
deleted file mode 100644
index 080b55e06..000000000
--- a/externals/august/readanysf~/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-# Edit these two variables to suit your system.
-# You need both gavl and gmerlin_avdec libs to compile
-#
-GAVLPATH=/usr/local/include
-PDPATH=/usr/local/include
-
-
-VERSION=0.42
-UNAME := $(shell uname)
-
-ifeq ($(UNAME), Linux)
-TARGET=pd_linux
-else
-# assume darwin here
-GAVLPATH=/sw/include
-PDPATH=/Applications/Pd-extended.app/Contents/Resources/include/
-TARGET=pd_darwin
-endif
-
-##############################################
-LBITS := $(shell getconf LONG_BIT)
-ifeq ($(LBITS),64)
-   # do 64 bit stuff here, like set some CFLAGS
-CFLAGS =  -fPIC -I./  -I$(GAVLPATH) -I$(GAVLPATH)/gavl -I$(GAVLPATH)/gmerlin -I$(PDPATH) -Wall
-else
-   # do 32 bit stuff here
-CFLAGS =  -I./  -I$(GAVLPATH)  -I$(GAVLPATH)/gavl -I$(GAVLPATH)/gmerlin -I$(PDPATH) -Wall
-endif
-
-
-ifeq ($(UNAME), Linux)
-STRIP=strip --strip-unneeded
-# optimizations?
-#CFLAGS += -O1 -funroll-loops -fomit-frame-pointer \
-#    -Wall -W -Wshadow \
-#    -Wno-unused -Wno-parentheses -Wno-switch
-LDFLAGS =  -L/usr/local/lib -lpthread  -lgavl -lgmerlin_avdec 
-else
-# assume darwin here
-STRIP=strip -x
-CFLAGS += -I/sw/include -fast -fPIC
-LDFLAGS = -bundle -undefined dynamic_lookup -L/sw/lib -lgavl -lgmerlin_avdec
-#LDFLAGS += -bundle -bundle_loader $(pd_src)/bin/pd -undefined dynamic_lookup \
-#		-L/sw/lib -weak_framework Carbon -lc -L/sw/lib -lgavl -lgmerlin_avdec  
-# os 10.4
-#CFLAGS += -mmacosx-version-min=10.4  -arch i386  -isysroot /Developer/SDKs/MacOSX10.4u.sdk 
-#LDFLAGS =  -L/sw/lib -lgavl -lgmerlin_avdec \
-#        -dynamiclib -undefined dynamic_lookup  -lsupc++ -mmacosx-version-min=10.4 \
-#        -lSystem.B -arch i386  -isysroot /Developer/SDKs/MacOSX10.4u.sdk 
-endif
-
-
-
-
-all: $(TARGET) 
-
-pd_linux: src/readanysf~.cpp  objs/FifoVideoFrames.o objs/FifoAudioFrames.o objs/ReadMedia.o
-	g++  -shared  -o  readanysf~.pd_linux  $(CFLAGS) $(LDFLAGS) \
-	src/readanysf~.cpp \
-	objs/FifoAudioFrames.o \
-	objs/FifoVideoFrames.o \
-	objs/ReadMedia.o 
-	$(STRIP) readanysf~.pd_linux
-
-pd_darwin: src/readanysf~.cpp  objs/FifoVideoFrames.o objs/FifoAudioFrames.o objs/ReadMedia.o
-	g++  $(LDFLAGS)  -o  readanysf~.pd_darwin  $(CFLAGS)  \
-	src/readanysf~.cpp \
-	objs/FifoAudioFrames.o \
-	objs/FifoVideoFrames.o \
-	objs/ReadMedia.o 
-	$(STRIP) readanysf~.pd_darwin
-	mkdir -p readanysf~$(VERSION)_MacOSX-Intel
-	mkdir -p readanysf~$(VERSION)_MacOSX-Intel/readanysf~
-	cp readanysf~.pd_darwin readanysf~-help.pd readanysf~$(VERSION)_MacOSX-Intel/readanysf~
-	cp READMEmacpkg.txt anysndfiler.pd readanysf~$(VERSION)_MacOSX-Intel/
-	mv readanysf~$(VERSION)_MacOSX-Intel/READMEmacpkg.txt readanysf~$(VERSION)_MacOSX-Intel/README.txt
-	./embed-MacOSX-dependencies.sh readanysf~$(VERSION)_MacOSX-Intel/readanysf~
-	tar -cvf readanysf~$(VERSION)_MacOSX-Intel.tar readanysf~$(VERSION)_MacOSX-Intel/
-	gzip readanysf~$(VERSION)_MacOSX-Intel.tar
-
-objs/ReadMedia.o: src/ReadMedia.cpp src/ReadMedia.h objs/FifoAudioFrames.o objs/FifoVideoFrames.o
-	g++  -c -o objs/ReadMedia.o src/ReadMedia.cpp $(CFLAGS)
-
-objs/FifoAudioFrames.o: src/FifoAudioFrames.cpp src/FifoAudioFrames.h 
-	g++  -c -o objs/FifoAudioFrames.o src/FifoAudioFrames.cpp $(CFLAGS)
-
-objs/FifoVideoFrames.o: src/FifoVideoFrames.cpp src/FifoVideoFrames.h 
-	g++  -c -o objs/FifoVideoFrames.o src/FifoVideoFrames.cpp $(CFLAGS)
-
-clean:
-	if [ -d readanysf~$(VERSION)_MacOSX-Intel ]; then rm -rf readanysf~$(VERSION)_MacOSX-Intel; fi; 
-	if [ -f readanysf~$(VERSION)_MacOSX-Intel.tar.gz ]; then rm -rf readanysf~$(VERSION)_MacOSX-Intel.tar.gz; fi; 
-	rm -f objs/*.o readanysf~.pd_*
diff --git a/externals/august/readanysf~/README b/externals/august/readanysf~/README
deleted file mode 100644
index 3d7118bf4..000000000
--- a/externals/august/readanysf~/README
+++ /dev/null
@@ -1,47 +0,0 @@
-readanysf~, a puredata external for reading multiple file formats.
------------------------------------------------------------------
-© august black 2003 - 2010
-licensed under the GNU GPL v2
-
-
-see: http://aug.ment.org/readanysf/
-
-you will need:
-
-          o Gavl : by Burkhard Plaum
-            Low level multimedia API.
-            http://gmerlin.sf.net/
-            cvs -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin login
-            cvs -z3 -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin co -P gavl
-            cd gavl/
-            ./autogen.sh
-            ./configure --without-doxygen
-            make
-            sudo make install
-
-          o Gmerlin_avdecode : by Burkhard Plaum
-            Gmerlin_avdecoder is a general purpose media decoding library.
-            http://gmerlin.sourceforge.net
-            cvs -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin login
-            cvs -z3 -d:pserver:anonymous@gmerlin.cvs.sourceforge.net:/cvsroot/gmerlin co -P gmerlin_avdecoder
-            cd gmerlin_avdecoder
-            ./autogen.sh
-            ./configure --without-doxygen
-            make
-            sudo make install
-
-
-After installing gavl and gmerlin_avdecode, you should just be able to type make.
-
-----------------------------------------------------------------------------------------
-
-Mac users: 
-
-	you can install gavl/gmerlin-avdecoder either by source as above with linux or through fink.
-	
-	then, do "make" and let me know if it doesn't work 
-
-	
-
-
-
diff --git a/externals/august/readanysf~/READMEmacpkg.txt b/externals/august/readanysf~/READMEmacpkg.txt
deleted file mode 100644
index 2e43e2a30..000000000
--- a/externals/august/readanysf~/READMEmacpkg.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-
-http://aug.ment.org/readanysf/   
-
-by August Black
-
---
-To install, drag the readanysf~ folder and anysndfiler.pd to /Library/Pd.  Then you can create [readanysf~] anywhere you need it.
-
-If /Library/Pd does not exist, just create it.
-
-This build put together by Hans-Christoph Steiner, post to the pd-list with questions.
diff --git a/externals/august/readanysf~/anysndfiler.pd b/externals/august/readanysf~/anysndfiler.pd
deleted file mode 100644
index 86a0edf15..000000000
--- a/externals/august/readanysf~/anysndfiler.pd
+++ /dev/null
@@ -1,136 +0,0 @@
-#N canvas 403 78 800 378 10;
-#N canvas 314 180 836 579 loadfast 0;
-#X obj 398 364 switch~;
-#X obj 68 55 inlet;
-#X obj 304 95 loadbang;
-#X text 63 34 filename;
-#X obj 396 179 inlet;
-#X text 421 132 <--- upsampled by factor of 128 \, then switched off
-;
-#X obj 50 401 tabwrite~ \$0-samp-1;
-#X obj 209 399 tabwrite~ \$0-samp-2;
-#X msg 396 202 set 64 1 \$1 \, 0;
-#X msg 304 129 set 64 1 128 \, 0;
-#X msg 68 110 open \$1;
-#X msg 511 346 0;
-#X msg 309 332 1;
-#X obj 414 403 print starting;
-#X obj 549 360 print stoping;
-#X obj 277 281 select 1;
-#X obj 534 320 t b b;
-#X floatatom 480 294 5 0 0 0 - - -;
-#X obj 562 293 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X msg 111 183 play;
-#X obj 480 264 route ready bang samplerate length;
-#X floatatom 597 299 5 0 0 0 - - -;
-#X floatatom 656 300 5 0 0 0 - - -;
-#X msg 701 416 resize \$1;
-#X obj 701 467 s \$0-samp-2;
-#X obj 701 443 s \$0-samp-1;
-#X obj 68 247 readanysf~ 2 12 1024;
-#X obj 699 181 inlet;
-#X obj 698 337 f;
-#X obj 671 369 *;
-#X floatatom 671 392 14 0 0 0 - - -;
-#X obj 602 427 print size;
-#X floatatom 716 371 5 0 0 0 - - -;
-#X obj 277 303 t b b b b;
-#X obj 655 334 f;
-#X obj 602 325 t b b;
-#X obj 580 514 outlet;
-#X connect 1 0 10 0;
-#X connect 2 0 9 0;
-#X connect 4 0 8 0;
-#X connect 8 0 0 0;
-#X connect 10 0 26 0;
-#X connect 11 0 0 0;
-#X connect 11 0 36 0;
-#X connect 12 0 0 0;
-#X connect 12 0 13 0;
-#X connect 15 0 33 0;
-#X connect 16 0 11 0;
-#X connect 16 1 14 0;
-#X connect 19 0 26 0;
-#X connect 20 0 15 0;
-#X connect 20 0 17 0;
-#X connect 20 1 16 0;
-#X connect 20 1 18 0;
-#X connect 20 2 21 0;
-#X connect 20 3 22 0;
-#X connect 22 0 34 1;
-#X connect 23 0 24 0;
-#X connect 23 0 25 0;
-#X connect 26 0 6 0;
-#X connect 26 1 7 0;
-#X connect 26 2 20 0;
-#X connect 27 0 28 1;
-#X connect 28 0 29 1;
-#X connect 28 0 32 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 0;
-#X connect 30 0 23 0;
-#X connect 33 0 6 0;
-#X connect 33 0 7 0;
-#X connect 33 1 19 0;
-#X connect 33 2 12 0;
-#X connect 33 3 35 0;
-#X connect 34 0 29 0;
-#X connect 35 0 34 0;
-#X connect 35 1 28 0;
-#X restore 118 186 pd loadfast;
-#X obj 151 221 bng 15 250 50 0 empty empty done 17 7 1 10 -262144 -1
--1;
-#X obj 79 71 openpanel;
-#X msg 79 49 bang;
-#X obj 413 206 * 44100;
-#X floatatom 413 145 5 0 0 1 buffer_length_in_seconds - -;
-#X msg 413 235 resize \$1;
-#X msg 459 183 22050;
-#X msg 508 183 44100;
-#X text 569 185 choose file samplerate;
-#X obj 79 244 timer;
-#X obj 79 129 t b a;
-#X floatatom 79 275 10 0 0 0 - - -;
-#X obj 413 60 loadbang;
-#X msg 449 93 \; pd dsp 1;
-#X msg 413 124 8;
-#X obj 79 107 symbol;
-#X msg 152 71 bang;
-#X floatatom 185 138 5 0 0 0 - - -;
-#X msg 152 93 64;
-#X msg 185 94 128;
-#X msg 218 93 512;
-#X msg 253 93 1024;
-#X msg 339 222 const 0;
-#X obj 507 261 table \$0-samp-1;
-#X obj 507 287 table \$0-samp-2;
-#X obj 413 286 s \$0-samp-2;
-#X obj 413 262 s \$0-samp-1;
-#X obj 262 140 samplerate~;
-#X connect 0 0 1 0;
-#X connect 2 0 16 0;
-#X connect 3 0 2 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 26 0;
-#X connect 6 0 27 0;
-#X connect 7 0 4 1;
-#X connect 8 0 4 1;
-#X connect 10 0 12 0;
-#X connect 11 0 10 0;
-#X connect 11 1 0 0;
-#X connect 13 0 15 0;
-#X connect 13 0 14 0;
-#X connect 13 0 28 0;
-#X connect 15 0 5 0;
-#X connect 16 0 11 0;
-#X connect 17 0 16 0;
-#X connect 18 0 0 1;
-#X connect 19 0 18 0;
-#X connect 20 0 18 0;
-#X connect 21 0 18 0;
-#X connect 22 0 18 0;
-#X connect 23 0 26 0;
-#X connect 23 0 27 0;
-#X connect 28 0 0 2;
diff --git a/externals/august/readanysf~/embed-MacOSX-dependencies.sh b/externals/august/readanysf~/embed-MacOSX-dependencies.sh
deleted file mode 100755
index 0612b0c58..000000000
--- a/externals/august/readanysf~/embed-MacOSX-dependencies.sh
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/sh
-#
-# This script finds all of the dependecies from Fink and included them into
-# current folder so that it becomes a libdir to be installed into /Library/Pd.
-# <hans@at.or.at>
-
-LIB_DIR=/Library/Pd/readanysf~
-PD_APP_LIB=$1
-
-echo " "
-
-for pd_darwin in `find . -name '*.pd_darwin'`; do
-    LIBS=`otool -L $pd_darwin | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $pd_darwin | sed 's|.*/\(.*\.pd_darwin$\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    install -vp /sw/lib/$lib $PD_APP_LIB
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $pd_darwin
-	done
-	echo " "
-    fi
-done
-
-for dylib in $PD_APP_LIB/*.dylib; do
-    LIBS=`otool -L $dylib | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $dylib | sed 's|.*/\(.*\.dylib\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    if [ -e  $PD_APP_LIB/$new_lib ]; then
-		echo "$PD_APP_LIB/$new_lib already exists, skipping copy."
-	    else
-		install -vp /sw/lib/$lib $PD_APP_LIB
-	    fi
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $dylib
-	done
-	echo " "
-    fi
-done
-
-# run it one more time to catch dylibs that depend on dylibs
-for dylib in $PD_APP_LIB/*.dylib; do
-    LIBS=`otool -L $dylib | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $dylib | sed 's|.*/\(.*\.dylib\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    if [ -e  $PD_APP_LIB/$new_lib ]; then
-		echo "$PD_APP_LIB/$new_lib already exists, skipping copy."
-	    else
-		install -vp /sw/lib/$lib $PD_APP_LIB
-	    fi
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $dylib
-	done
-	echo " "
-    fi
-done
-
-# seems like we need it one last time! phew...
-for dylib in $PD_APP_LIB/*.dylib; do
-    LIBS=`otool -L $dylib | sed -n 's|.*/sw/lib/\(.*\.dylib\).*|\1|p'`
-    if [ "x$LIBS" != "x" ]; then
-	echo "`echo $dylib | sed 's|.*/\(.*\.dylib\)|\1|'` is using:"
-	for lib in $LIBS; do
-	    echo "    $lib"
-	    new_lib=`echo $lib | sed 's|.*/\(.*\.dylib\)|\1|'`
-	    if [ -e  $PD_APP_LIB/$new_lib ]; then
-		echo "$PD_APP_LIB/$new_lib already exists, skipping copy."
-	    else
-		install -vp /sw/lib/$lib $PD_APP_LIB
-	    fi
-	    install_name_tool -id $LIB_DIR/$new_lib $PD_APP_LIB/$new_lib
-	    install_name_tool -change /sw/lib/$lib $LIB_DIR/$new_lib $dylib
-	done
-	echo " "
-    fi
-done
diff --git a/externals/august/readanysf~/jamesdunn_buzz_stresstest.pd b/externals/august/readanysf~/jamesdunn_buzz_stresstest.pd
deleted file mode 100644
index 77d0ca17f..000000000
--- a/externals/august/readanysf~/jamesdunn_buzz_stresstest.pd
+++ /dev/null
@@ -1,53 +0,0 @@
-#N canvas 560 185 516 458 10;
-#X obj 100 192 readanysf~ 2;
-#X msg 40 106 open Gunfire.wav;
-#X obj 100 411 dac~;
-#X obj 101 373 *~;
-#X obj 134 374 *~;
-#X msg 104 162 play;
-#X msg 145 162 stop;
-#X obj 199 281 vsl 15 50 0 1 0 0 empty empty empty 0 -9 0 10 -257985
--1 -1 1470 1;
-#X msg 199 339 \$1 50;
-#X obj 198 358 line~;
-#X obj 396 247 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 169 216 route ready samplerate length cache float bang;
-#X obj 40 23 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
-;
-#X obj 178 245 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 40 60 metro 300;
-#X obj 386 42 loadbang;
-#X msg 349 98 \; pd dsp 1;
-#X msg 421 102 0.3;
-#X msg 259 42 1;
-#X floatatom 318 301 0 0 0 0 - - -;
-#X obj 318 276 + 1;
-#X obj 261 277 float;
-#X connect 0 0 3 0;
-#X connect 0 1 4 0;
-#X connect 0 2 11 0;
-#X connect 1 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 1;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 9 0;
-#X connect 9 0 4 1;
-#X connect 9 0 3 1;
-#X connect 11 0 13 0;
-#X connect 11 5 10 0;
-#X connect 12 0 14 0;
-#X connect 13 0 5 0;
-#X connect 13 0 21 0;
-#X connect 14 0 1 0;
-#X connect 15 0 16 0;
-#X connect 15 0 17 0;
-#X connect 15 0 18 0;
-#X connect 17 0 7 0;
-#X connect 18 0 12 0;
-#X connect 20 0 19 0;
-#X connect 20 0 21 1;
-#X connect 21 0 20 0;
diff --git a/externals/august/readanysf~/readanysf~-help.pd b/externals/august/readanysf~/readanysf~-help.pd
deleted file mode 100644
index a5eff59ca..000000000
--- a/externals/august/readanysf~/readanysf~-help.pd
+++ /dev/null
@@ -1,117 +0,0 @@
-#N canvas 13 56 842 642 10;
-#X obj 28 367 dac~;
-#X obj 28 332 *~ 0;
-#X obj 69 332 *~ 0;
-#X obj 651 106 vsl 15 50 0.01 1.3 1 0 empty empty empty 0 -8 0 8 -241291
--1 -1 4411 0;
-#X msg 112 140 play;
-#X msg 193 139 pause;
-#X msg 348 121 speed \$1;
-#X floatatom 348 98 5 0 0 0 - - -;
-#X obj 588 15 loadbang;
-#X msg 390 75 1;
-#X msg 601 51 \; pd dsp 1 \;;
-#X floatatom 662 160 5 0 0 0 - - -;
-#X msg 12 126 open \$1;
-#X obj 12 98 openpanel;
-#X obj 12 66 bng 25 250 50 0 empty empty empty 17 7 0 10 -4032 -1 -1
-;
-#X msg 152 139 stop;
-#X floatatom 345 173 16 0 0 0 - - -;
-#X msg 345 193 pcm_seek \$1;
-#X obj 348 150 hsl 128 15 0 7.368e+06 0 0 empty empty empty -2 -8 0
-10 -260818 -1 -1 0 1;
-#X msg 348 74 0.21;
-#X msg 78 73 open http://www.fro.at:8008/fro-64.ogg.m3u;
-#X floatatom 262 552 5 0 0 0 - - -;
-#X floatatom 308 504 5 0 0 0 - - -;
-#X floatatom 217 582 5 0 0 0 - - -;
-#X msg 722 253 loop \$1;
-#X obj 722 233 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X floatatom 353 467 5 0 0 0 - - -;
-#X obj 444 404 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 217 378 route ready samplerate length cache float bang;
-#X floatatom 399 435 5 0 0 0 - - -;
-#X text 262 581 ready: status for when a file is loaded and ready;
-#X text 306 594 to play. If you load a file from disk or;
-#X text 306 608 from the net \, it may take a while to load;
-#X text 305 621 depending on disk activity and net bandwidth.;
-#X text 394 466 cache: percentage (0.0->1.0) of;
-#X text 435 479 cache being used.;
-#X text 469 405 bang: end of file.;
-#X msg 588 87 0.8;
-#X obj 29 269 readanysf~ 4 32 256;
-#X obj 651 179 s v;
-#X obj 38 294 r v;
-#X obj 108 332 *~ 0;
-#X obj 149 332 *~ 0;
-#X text 671 130 Volume;
-#X text 217 300 <- readanysf~ has 3 possible creation args 1) number
-of channels (all channels will be up or down mixed accordingly) default
-is 2 channels. 2) number of "frames" in the internal buffer. Default=24
-3) number of samples per frame in internal buffer. Default is your
-blocksize.;
-#X msg 98 96 open http://wnycam.streamguys.com;
-#X floatatom 494 176 16 0 0 0 - - -;
-#X obj 497 153 hsl 128 15 0 500 0 0 empty empty empty -2 -8 0 10 -260818
--1 -1 0 1;
-#X msg 494 196 time_seek \$1;
-#X msg 329 242 tick 100;
-#X text 404 231 send cache \, length output every X ticks;
-#X text 402 244 "tick 1" sends out every single dsp cycle;
-#X text 720 214 loop on/off;
-#X text 441 434 float: position of file in seconds;
-#X text 482 447 relative to the file's samplerate;
-#X text 347 503 length: total duration of file in seconds;
-#X text 394 529 (will be empty for network streams);
-#X text 396 516 relative to file's internal samplerate;
-#X text 320 553 The samplerate of the file being played.;
-#X text 168 5 readanysf~ by August Black;
-#X text 170 40 august@alien.mur.at;
-#X text 172 26 please send comments \, suggest \, bugs \, donations
-->;
-#X connect 1 0 0 0;
-#X connect 2 0 0 1;
-#X connect 3 0 11 0;
-#X connect 3 0 39 0;
-#X connect 4 0 38 0;
-#X connect 5 0 38 0;
-#X connect 6 0 38 0;
-#X connect 7 0 6 0;
-#X connect 8 0 37 0;
-#X connect 8 0 10 0;
-#X connect 9 0 7 0;
-#X connect 12 0 38 0;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 38 0;
-#X connect 16 0 17 0;
-#X connect 17 0 38 0;
-#X connect 18 0 16 0;
-#X connect 19 0 7 0;
-#X connect 20 0 38 0;
-#X connect 24 0 38 0;
-#X connect 25 0 24 0;
-#X connect 28 0 23 0;
-#X connect 28 1 21 0;
-#X connect 28 2 22 0;
-#X connect 28 3 26 0;
-#X connect 28 4 29 0;
-#X connect 28 5 27 0;
-#X connect 37 0 3 0;
-#X connect 38 0 1 0;
-#X connect 38 1 2 0;
-#X connect 38 2 41 0;
-#X connect 38 3 42 0;
-#X connect 38 4 28 0;
-#X connect 40 0 1 1;
-#X connect 40 0 2 1;
-#X connect 40 0 41 1;
-#X connect 40 0 42 1;
-#X connect 45 0 38 0;
-#X connect 46 0 48 0;
-#X connect 47 0 46 0;
-#X connect 48 0 38 0;
-#X connect 49 0 38 0;
diff --git a/externals/august/readanysf~/readanysf~-meta.pd b/externals/august/readanysf~/readanysf~-meta.pd
deleted file mode 100644
index 1c8845957..000000000
--- a/externals/august/readanysf~/readanysf~-meta.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 15 49 420 300 META 0;
-#X text 10 10 VERSION 0.4;
-#X text 10 24 AUTHOR August Black <august@alien.mur.at>;
-#X text 11 39 NAME readanysf~;
-#X restore 10 10 pd META;
diff --git a/externals/august/readanysf~/screengrab0.40.png b/externals/august/readanysf~/screengrab0.40.png
deleted file mode 100644
index a83017b4886cf6b3263fbd5d5542407d30020d90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 31276
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
FzW~NWZ1MmA

diff --git a/externals/august/readanysf~/src/FifoAudioFrames.cpp b/externals/august/readanysf~/src/FifoAudioFrames.cpp
deleted file mode 100644
index a27029a0a..000000000
--- a/externals/august/readanysf~/src/FifoAudioFrames.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "FifoAudioFrames.h"
-
-/*
-#define RESET		0
-#define BRIGHT 		1
-#define DIM		2
-#define UNDERLINE 	3
-#define BLINK		4
-#define REVERSE		7
-#define HIDDEN		8
-
-#define BLACK 		0
-#define RED		1
-#define GREEN		2
-#define YELLOW		3
-#define BLUE		4
-#define MAGENTA		5
-#define CYAN		6
-#define	WHITE		7
-void textcolor(int attr, int fg, int bg) {	
-	char command[13];
-	// Command is the control command to the terminal 
-	sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40);
-	printf("%s", command);
-}
-*/
-
-
-FifoAudioFrames::FifoAudioFrames(int s, gavl_audio_format_t * f) {
-	size = s  ;  
-	start = 0 ;
-	end = 0 ; 
-	count = 0;
-	format = new gavl_audio_format_t;
-	gavl_audio_format_copy(format, f);
-	fifoPtr = new gavl_audio_frame_t * [size] ;
-	for(int i=0; i < size; i++) {
-		fifoPtr[i] = gavl_audio_frame_create( format );
-	}
-	pthread_mutex_init (&mut, 0);
-	//printf("FifoAudioFrames::size=%d\n", size);
-}
-
-FifoAudioFrames::~FifoAudioFrames() {
-	//printf("deleting fifo \n");
-	for(int i=0; i < size; i++) {
-		 gavl_audio_frame_destroy( fifoPtr[i] );
-	}
-	delete format;
-	delete[] fifoPtr;
-
-	pthread_mutex_destroy (&mut);
-	//printf("deleted fifo \n");
-}
-
-// empty the fifo of any content
-void FifoAudioFrames::Flush() {
-	pthread_mutex_lock (&mut);
-	start = 0 ; 
-	end = 0 ; 
-	count = 0;
-	//printf("FifoAudioFrames::flushed size=%d\n", count);
-	pthread_mutex_unlock (&mut);
-}
-
-// push an element onto the FifoAudioFrames 
-bool FifoAudioFrames::Append(  gavl_audio_frame_t * source) {
-	bool ret = false;
-	//Dump("Appending a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count < size  ) {  // if there is room for one more
-		int vs = gavl_audio_frame_copy(format, fifoPtr[end],  source, 0,0, format->samples_per_frame, format->samples_per_frame) ;
-		fifoPtr[end]->timestamp = source->timestamp;
-		fifoPtr[end]->valid_samples =vs;
-		if (++end >= size)
-			end = 0;
-		count++;
-		ret = true;
-	} // no room in fifo, return false
-	pthread_mutex_unlock (&mut);
-	//Dump("Appended a frame ");
-	return ret;
-}
-
-// get an element off the FifoAudioFrames
-bool FifoAudioFrames::Get( gavl_audio_frame_t * dest) {
-	bool ret = false;
-	//Dump("Getting a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count > 0 ) {  // if there any items in the fifo
-		int vs = gavl_audio_frame_copy(format, dest, fifoPtr[start], 0, 0, format->samples_per_frame, format->samples_per_frame) ;
-		dest->timestamp = fifoPtr[start]->timestamp;
-		dest->valid_samples = vs;
-		if ( ++start >= size )
-			start = 0;
-		count--;
-		ret = true;
-	}
-	pthread_mutex_unlock (&mut);
-	//Dump("Got a frame ");
-	return ret;
-}
-/*
-void FifoAudioFrames::Dump( char * c) {
-	int i,j = 0;
-	pthread_mutex_lock (&mut);
-	printf("%s -----------------------\n", c);
-	for( i=0;i<size;i++) {
-		//j=start+i;
-		//if (j >= size)
-		//	j = j -size;
-		j=i;
-		if ( j == start)
-			textcolor(BRIGHT, GREEN, BLACK);
-		if (j == end)
-			textcolor(BRIGHT, RED, BLACK);
-		if (j == end && j == start)
-			textcolor(BRIGHT, YELLOW, BLACK);
-		printf("[%d]=%ld ", j, fifoPtr[j]->timestamp);
-		textcolor(RESET, BLACK, WHITE);
-	}
-	printf("\n");
-	printf("start=%02d, end=%02d, count=%02d\n", start,end,count);
-	printf("-----------------------\n");
-	pthread_mutex_unlock (&mut);
-}
-*/
-bool FifoAudioFrames::FreeSpace() { 
-	bool ret = false; 
-	//printf("asking for free space on audio fifo\n");
-	pthread_mutex_lock(&mut); 
-	ret = (count < size);
-	pthread_mutex_unlock (&mut);  
-	return ret;
-}
-bool FifoAudioFrames::isEmpty() { bool c; pthread_mutex_lock(&mut); c = (count == 0) ; pthread_mutex_unlock (&mut); return c; }
-bool FifoAudioFrames::isFull()  { bool c; pthread_mutex_lock(&mut); c = (count == size ); pthread_mutex_unlock (&mut); return c; } 
-gavl_audio_format_t * FifoAudioFrames::getFormat() { return format; };
-float FifoAudioFrames::getSizePercentage() { float ret; pthread_mutex_lock(&mut);ret = count / (float) size; pthread_mutex_unlock (&mut); return ret;};
-
diff --git a/externals/august/readanysf~/src/FifoAudioFrames.h b/externals/august/readanysf~/src/FifoAudioFrames.h
deleted file mode 100644
index d3be3404d..000000000
--- a/externals/august/readanysf~/src/FifoAudioFrames.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * 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
- *
- */
-
-#ifndef _FIFOAUDIOFRAMES_H_
-#define _FIFOAUDIOFRAMES_H_
-
-#include <string.h> // memcpy
-#include <stdio.h>
-#include <pthread.h>
-
-#ifndef _AVDEC_H_
-#define _AVDEC_H_
-extern "C" {
-#include <gmerlin/avdec.h>
-}
-#endif
-
-class FifoAudioFrames {
-	public:
-		FifoAudioFrames(int s, gavl_audio_format_t * format) ; 
-		~FifoAudioFrames();// { delete [] fifoPtr; }
-		bool Append( gavl_audio_frame_t * af);
-		bool Get( gavl_audio_frame_t * af) ;  // pop an element off the fifo
-		void Flush();
-		//void Dump(char *c);
-		bool FreeSpace();
-		bool isEmpty();
-		bool isFull();
-		void setDebug( bool b); 
-		gavl_audio_format_t * getFormat();
-		float getSizePercentage();
-	private:
-		int size ;  // Number of elements on FifoAudioFrames
-		int start ;
-		int end ;
-		int count;
-		gavl_audio_frame_t ** fifoPtr ;  
-		gavl_audio_format_t * format;  
-		pthread_mutex_t mut;
-} ;
-
-
-#endif
-
diff --git a/externals/august/readanysf~/src/FifoVideoFrames.cpp b/externals/august/readanysf~/src/FifoVideoFrames.cpp
deleted file mode 100644
index 054332c77..000000000
--- a/externals/august/readanysf~/src/FifoVideoFrames.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "FifoVideoFrames.h"
-
-FifoVideoFrames::FifoVideoFrames(int s, gavl_video_format_t * f) {
-	size = s  ;  
-	start = 0 ;
-	end = 0 ; 
-	count = 0;
-	format = new gavl_video_format_t;
-	gavl_video_format_copy(format, f);
-	fifoPtr = new gavl_video_frame_t * [size] ;
-	for(int i=0; i < size; i++) {
-		fifoPtr[i] = gavl_video_frame_create( format );
-	}
-	pthread_mutex_init (&mut, 0);
-}
-
-FifoVideoFrames::~FifoVideoFrames() {
-	//printf("deleting fifo \n");
-	for(int i=0; i < size; i++) {
-		 gavl_video_frame_destroy( fifoPtr[i] );
-	}
-	delete format;
-	delete[] fifoPtr;
-	pthread_mutex_destroy (&mut);
-	//printf("deleted fifo \n");
-}
-
-// empty the fifo of any content
-void FifoVideoFrames::Flush() {
-	pthread_mutex_lock (&mut);
-	start = 0 ; 
-	end = 0 ; 
-	count = 0;
-	//printf("FifoVideoFrames::flushed size=%d\n", count);
-	pthread_mutex_unlock (&mut);
-}
-
-// push an element onto the FifoVideoFrames 
-bool FifoVideoFrames::Append(  gavl_video_frame_t * source) {
-	bool ret = false;
-	//Dump("Appending a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count < size  ) {  // if there is room for one more
-		gavl_video_frame_copy(format, fifoPtr[end],  source) ;
-		fifoPtr[end]->timestamp = source->timestamp;
-		fifoPtr[end]->duration = source->duration;
-		if (++end >= size)
-			end = 0;
-		count++;
-		ret = true;
-	} // no room in fifo, return false
-	pthread_mutex_unlock (&mut);
-	//Dump("Appended a frame ");
-	return ret;
-}
-// remove an element off the front FifoVideoFrames
-bool FifoVideoFrames::Get( ) {
-	bool ret = false;
-	pthread_mutex_lock (&mut);
-	if ( count > 0 ) {  // if there any items in the fifo
-		if ( ++start >= size )
-			start = 0;
-		count--;
-		ret = true;
-	}
-	pthread_mutex_unlock (&mut);
-	//Dump("Got a frame ");
-	return ret;
-}
-
-// get an element off the FifoVideoFrames
-bool FifoVideoFrames::Get( gavl_video_frame_t * dest) {
-	bool ret = false;
-	//Dump("Getting a frame ");
-	pthread_mutex_lock (&mut);
-	if ( count > 0 ) {  // if there any items in the fifo
-		gavl_video_frame_copy(format, dest, fifoPtr[start]) ;
-		dest->timestamp = fifoPtr[start]->timestamp;
-		dest->duration = fifoPtr[start]->duration;
-		if ( ++start >= size )
-			start = 0;
-		count--;
-		ret = true;
-	}
-	pthread_mutex_unlock (&mut);
-	//Dump("Got a frame ");
-	return ret;
-}
-/*
-void FifoVideoFrames::Dump( char * c) {
-	int i,j = 0;
-	pthread_mutex_lock (&mut);
-	printf("%s -----------------------\n", c);
-	for( i=0;i<size;i++) {
-		//j=start+i;
-		//if (j >= size)
-		//	j = j -size;
-		j=i;
-		if ( j == start)
-			textcolor(BRIGHT, GREEN, BLACK);
-		if (j == end)
-			textcolor(BRIGHT, RED, BLACK);
-		if (j == end && j == start)
-			textcolor(BRIGHT, YELLOW, BLACK);
-		printf("[%d]=%ld ", j, fifoPtr[j]->timestamp);
-		textcolor(RESET, BLACK, WHITE);
-	}
-	printf("\n");
-	printf("start=%02d, end=%02d, count=%02d\n", start,end,count);
-	printf("-----------------------\n");
-	pthread_mutex_unlock (&mut);
-}
-*/
-bool FifoVideoFrames::FreeSpace() { bool ret; pthread_mutex_lock(&mut); ret = (count < size);pthread_mutex_unlock (&mut);  return ret;}
-bool FifoVideoFrames::isEmpty() { bool c; pthread_mutex_lock(&mut); c = (count == 0) ; pthread_mutex_unlock (&mut); return c; }
-bool FifoVideoFrames::isFull()  { bool c; pthread_mutex_lock(&mut); c = (count == size ); pthread_mutex_unlock (&mut); return c; } 
-gavl_video_format_t * FifoVideoFrames::getFormat() { return format; };
-float FifoVideoFrames::getSizePercentage() { float ret; pthread_mutex_lock(&mut);ret = count / (float) size; pthread_mutex_unlock (&mut); return ret;};
-int FifoVideoFrames::getSize() { int ret; pthread_mutex_lock(&mut);ret = count; pthread_mutex_unlock (&mut); return ret;};
-
diff --git a/externals/august/readanysf~/src/FifoVideoFrames.h b/externals/august/readanysf~/src/FifoVideoFrames.h
deleted file mode 100644
index 25e24bc9e..000000000
--- a/externals/august/readanysf~/src/FifoVideoFrames.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * 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
- *
- */
-
-#ifndef _FIFOVIDEOFRAMES_H_
-#define _FIFOVIDEOFRAMES_H_
-
-#include <string.h> // memcpy
-#include <stdio.h>
-#include <pthread.h>
-
-#ifndef _AVDEC_H_
-#define _AVDEC_H_
-extern "C" {
-#include <gmerlin/avdec.h>
-}
-#endif
-
-class FifoVideoFrames {
-	public:
-		FifoVideoFrames(int s, gavl_video_format_t * format) ; 
-		~FifoVideoFrames();// { delete [] fifoPtr; }
-		bool Append( gavl_video_frame_t * af);
-		bool Get( gavl_video_frame_t * af) ;  // pop an element off the fifo
-		bool Get( ) ;  // discard an element off the fifo
-		void Flush();
-		//void Dump(char *c);
-		bool FreeSpace();
-		bool isEmpty();
-		bool isFull();
-		void setDebug( bool b); 
-		gavl_video_format_t * getFormat();
-		int getSize();
-		float getSizePercentage();
-	private:
-		int size ;  // Number of elements on FifoVideoFrames
-		int start ;
-		int end ;
-		int count;
-		gavl_video_frame_t ** fifoPtr ;  
-		gavl_video_format_t * format;  
-		pthread_mutex_t mut;
-} ;
-
-
-#endif
-
diff --git a/externals/august/readanysf~/src/ReadMedia.cpp b/externals/august/readanysf~/src/ReadMedia.cpp
deleted file mode 100644
index 1d1b40be5..000000000
--- a/externals/august/readanysf~/src/ReadMedia.cpp
+++ /dev/null
@@ -1,1198 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "ReadMedia.h"
-#include <pthread.h>
-#include <unistd.h> //usleep
-
-
-static void *the_thread_dispatcher(void * xp);
-static void *the_thread_opener(void * xp);
-static void *the_audiofifo_filler(void * xp);
-static void *the_videofifo_filler(void * xp);
-
- 
-ReadMedia::ReadMedia(  ) {
-
-	m_state = STATE_EMPTY;
-
-	m_audio_frame = NULL;
-	m_video_frame = NULL;
-	m_aeof = true;
-	m_veof = true;
-	//m_atime = 0.0;
-	//m_vtime = 0.0;
-	m_video_stream_count =0;
-	m_audio_stream_count =0;
-	
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-	m_length_in_seconds=0.0;
-	m_length_in_gavltime = 0;
-	m_num_frames=0;
-	m_num_samples=0;
-
-	m_video_format.frame_width=0;
-	m_video_format.frame_height=0;
-	m_video_format.image_width=0;
-	m_video_format.image_height=0;
-	m_video_format.pixel_width=0;
-	m_video_format.pixel_height=0;
-	m_video_format.pixelformat = GAVL_PIXELFORMAT_NONE ;
-	m_video_format.frame_duration=0;
-	m_video_format.timescale=0;
-	m_video_format.framerate_mode=GAVL_FRAMERATE_CONSTANT;
-	m_video_format.chroma_placement=GAVL_CHROMA_PLACEMENT_DEFAULT;
-	m_video_format.interlace_mode=GAVL_INTERLACE_NONE;
-	m_video_format.timecode_format.int_framerate =0;
-	m_video_format.timecode_format.flags =0;
-
-	m_audio_format.samples_per_frame = 0;
-	m_audio_format.samplerate = 0;
-	m_audio_format.num_channels = 0;
-	m_audio_format.sample_format = GAVL_SAMPLE_NONE ;
-	m_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-	m_audio_format.center_level = 1.0;
-	m_audio_format.rear_level = 1.0;
-	m_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-	
-
-	m_fifoaudio= NULL; // new FifoAudioFrames( frames_in_fifo ,  &tmp_audio_lormat); 
-	m_fifovideo= NULL; // new FifoVideoFrames( 12 ,  &output_video_format); 
-	m_audio_thread_ret = -1;
-	m_video_thread_ret = -1;
-	
-	m_open_callback = NULL;
-	m_open_callback_data = NULL;
-	m_buffer_callback = NULL;
-	m_buffer_callback_data = NULL;
-
-	quit_av_threads = false;
-	m_loop = false;
-	
-	sprintf(m_filename, "seinettbitte!");
-
-	//bgav stuff
-	m_file = NULL;
-	m_opt = bgav_options_create();
-
-	bgav_options_set_connect_timeout(m_opt,  5000);
-	bgav_options_set_read_timeout(m_opt,     5000);
-	bgav_options_set_network_bandwidth(m_opt, 524300);
-	bgav_options_set_network_buffer_size(m_opt, 1024*12);
-	bgav_options_set_http_shoutcast_metadata (m_opt, 1);
-	// set up the reading so that we can seek sample accurately
-	bgav_options_set_sample_accurate (m_opt, 1 );
-
-
-	pthread_cond_init(&m_cond_dispatch, 0);
-	pthread_mutex_init(&m_condmut_dispatch, 0);
-
-	pthread_cond_init(&m_cond_a, 0);
-	pthread_cond_init(&m_cond_v, 0);
-	pthread_mutex_init(&m_condmut_a, 0);
-	pthread_mutex_init(&m_condmut_v, 0);
-
-	pthread_mutex_init(&m_av_mut, 0);
-	pthread_mutex_init(&m_state_mut, 0);
-
-	// start the dispatcher thread
-	m_cmd = CMD_START;
-	m_dispatcher_thread_ret = pthread_create(&m_thread_dispatch, NULL, the_thread_dispatcher, (void *)this) ;
-	if (m_dispatcher_thread_ret != 0 )
-		printf("error starting the readmedia dispatcher thread.\n");
-
-	while( getCommand() != CMD_NULL)	
-		signalDispatcher();
-	//printf("dispatcher ready ...\n");
-}
-
-ReadMedia::~ReadMedia() {
-	printf("killing the media..\n");
-	setCommand( CMD_QUIT );		
-	signalDispatcher();
-		
-
-	// signal dispatcher joins the opener and AV threads	
-	pthread_join( m_thread_dispatch, NULL);
-
-	//printf("joined dispatcher\n");	
-	if (m_audio_frame != NULL) {
-		gavl_audio_frame_destroy(m_audio_frame);
-	}
-	if (m_video_frame != NULL) {
-		gavl_video_frame_destroy(m_video_frame);
-	}
-	if (m_file != NULL) {
-		bgav_close(m_file);
-	}
-
-	//printf("now, on to deleting fifo...\n");
-	if( m_fifoaudio != NULL) delete m_fifoaudio;
-	if( m_fifovideo != NULL) delete m_fifovideo;
-
-	// these are created only once	
-	bgav_options_destroy(m_opt);
-
-	pthread_cond_destroy(&m_cond_dispatch);
-	pthread_mutex_destroy(&m_condmut_dispatch);
-
-	pthread_cond_destroy(&m_cond_a);
-	pthread_cond_destroy(&m_cond_v);
-	pthread_mutex_destroy(&m_condmut_a);
-	pthread_mutex_destroy(&m_condmut_v);
-
-	pthread_mutex_destroy(&m_av_mut);
-	pthread_mutex_destroy(&m_state_mut);
-
-	printf("killed the media..\n");
-}
-
-int ReadMedia::decodeVideo( gavl_video_frame_t * vf ) {
-
-	// check state first, if state is ready, we can check the other vars without locking
-	lockState();
-	if (m_state != STATE_READY || m_video_stream_count < 1 || m_fifovideo == NULL ) {
-		unlockState();
-		return -1;
-	}
-
-	if (!m_fifovideo->Get( vf )  ) {
-		if ( m_veof ) {
-			m_frame_seek = SEEK_NOTHING;
-			unlockState();
-			signalV();
-			return 0;
-		} else {
-			//printf("Couldn't get a video frame, videofifo is %f full\n", m_fifovideo->getSizePercentage()); // this can only happen if the fifo is empty
-			unlockState();
-			signalV();
-			return -1; // return with error
-		}
-	}
-
-	//m_vtime = 	vf->timestamp / (double)m_video_format.timescale;
-	unlockState();
-	signalV();
-	return 1 ;
-}
-
-int ReadMedia::decodeAudio( gavl_audio_frame_t * af ) {
-	lockState();
-	if (m_state != STATE_READY || m_audio_stream_count < 1 || m_fifoaudio == NULL ) {
-		unlockState();
-		return -1;
-	}
-
-	if ( !m_fifoaudio->Get( af )  ) {
-		if ( m_aeof ) {
-			m_pcm_seek = SEEK_NOTHING;
-			unlockState();
-			signalA();
-			return 0;
-		} else {
-			//printf("Couldn't get an audio frame, audiofifo is %f full.\n", m_fifoaudio->getSizePercentage()); // this can only happen if the fifo is empty
-			unlockState();
-			signalA();
-			return -1;
-		}
-	}
-
-	//m_atime = af->timestamp / (double)m_audio_format.samplerate;
-	unlockState();
-	signalA();
-	return 1 ;
-}
-
-bool ReadMedia::rewind() {
-	// NOTE!! Always check for stream count before setting aeof or veof
-	lockState();
-	if ( m_state == STATE_READY && m_file != NULL) {
-		//printf("ReadMedia::rewind(), valid_samples=%d\n", m_audio_frame->valid_samples);
-		m_pcm_seek = SEEK_REWIND;	
-		if(m_audio_stream_count) m_aeof = false;
-		//m_atime = 0;
-		m_frame_seek=SEEK_REWIND;
-		if (m_video_stream_count) m_veof = false;
-		//m_vtime=0;
-
-		unlockState();
-		if (m_audio_stream_count) {
-			signalA();  // only signal one or the other here
-			//printf("ReadMedia::rewind(), signaled audio\n");
-			// we are gong to flush here even though it is flushed
-			// during the audio or video thread.  This will ensure our fifo 
-			// is clean and empty.  Otherwise, the audio thread may be waiting
-			// at the bottom of its loop and not make it to the flush part even 
-			// though we signalled it.
-			if (m_fifoaudio)
-				m_fifoaudio->Flush();
-		}
-		else if (m_video_stream_count) {
-			signalV();
-			if (m_fifovideo)
-				m_fifovideo->Flush();
-		}
-
-		return true;
-	}
-	unlockState();
-	return false;
-}
-
-gavl_time_t ReadMedia::getLengthInGavlTime() {
-	gavl_time_t time = 0;
-	lockState();
-	time = m_length_in_gavltime;
-	unlockState();
-	return time;
-}
-
-double ReadMedia::getLengthInSeconds() {
-	double secs = 0.0;
-	lockState();
-	secs = m_length_in_seconds;
-	unlockState();
-	return secs;
-}
-
-int64_t ReadMedia::getLengthInAudioSamples() {
-	int64_t samples = 0;
-	lockState();
-	samples = m_num_samples;
-	unlockState();
-	return samples;
-}
-
-int64_t ReadMedia::getLengthInVideoFrames() {
-	int64_t frames = 0;
-	lockState();
-	frames = m_num_frames;
-	unlockState();
-	return frames;
-}
-
-bool ReadMedia::frameSeek( int64_t frames ) {
-	lockState();
-	if (m_state == STATE_READY && m_file && bgav_can_seek( m_file ) && frames >= 0 && frames < m_num_frames ) {
-		m_frame_seek = frames;	
-		unlockState();
-		signalAV();
-		return true;
-	} else {
-		m_frame_seek = SEEK_NOTHING;
-		unlockState();
-		return false;
-	}
-}
-
-// NOT PUBLIC
-int64_t ReadMedia::frameSeek() {
-	int64_t tmp=SEEK_NOTHING;
-	lockState();
-	tmp = m_frame_seek;	
-	m_frame_seek = SEEK_NOTHING;
-	unlockState();
-	return tmp;
-}
-
-bool ReadMedia::pcmSeek( int64_t samples ) {
-	lockState();
-	if (m_state == STATE_READY && m_file && bgav_can_seek( m_file) && samples >= 0 && samples < m_num_samples ) {
-		m_pcm_seek = samples;	
-		unlockState();
-		signalAV();
-		return true;
-	} else {
-		m_pcm_seek = SEEK_NOTHING;
-		unlockState();
-		return false;
-	}
-}
-
-// NOT PUBLIC
-int64_t ReadMedia::pcmSeek() {
-	int64_t tmp=SEEK_NOTHING;
-	lockState();
-	tmp = m_pcm_seek;	
-	m_pcm_seek = SEEK_NOTHING;
-	unlockState();
-	return tmp;
-}
-
-bool ReadMedia::timeSeek(double seconds) {
-	gavl_time_t gt = gavl_seconds_to_time(  seconds ) ;        
-
-	lockState();
-	if (m_state == STATE_READY && m_file && bgav_can_seek( m_file) && seconds >= 0.0 && seconds < m_length_in_seconds ) {
-		if (m_audio_stream_count) {
-			m_pcm_seek = gavl_time_to_samples(m_audio_format.samplerate, gt );
-			if (m_pcm_seek >= m_num_samples || m_pcm_seek < 0) 
-				m_pcm_seek = SEEK_NOTHING;
-			unlockState();
-			signalAV();
-			return true;	
-		} else if ( m_video_stream_count  && m_video_format.framerate_mode == GAVL_FRAMERATE_CONSTANT ) {
-			m_frame_seek =	gavl_time_to_frames( m_video_format.timescale, m_video_format.frame_duration,  gt );
-			if (m_frame_seek >= m_num_frames || m_frame_seek < 0 )
-				m_frame_seek = SEEK_NOTHING;
-			unlockState();
-			signalAV();
-			return true;
-		}
-	}
-	unlockState();
-	return false;
-}
-
-bool ReadMedia::quitAVThreads() {
-	bool b =false;
-	lockState();
-	b = quit_av_threads;
-	unlockState();
-	return b;
-}
-
-void ReadMedia::openFile( char * fn, int vsize, int asize, int spf) {
-	lockState();
-	/*
-	if (  strcmp(m_filename, fn) == 0  && m_state == STATE_READY) {
-		printf("%s is already open for action. \n", m_filename);
-		unlockState();
-		callOpenCallback();
-		return;
-	}
-	*/
-	// signal the dispatcher that we want an new file
-	m_audio_format.samples_per_frame = spf ;
-	m_afifosize = asize;
-	m_vfifosize = vsize;
-	sprintf(m_filename, "%s", fn);
-
-	m_cmd = CMD_OPEN ;
-
-	unlockState();
-	signalDispatcher();
-}
-
-void ReadMedia::copyAudioFormat(gavl_audio_format_t * dst ){ 
-	lockState();
-	//if (m_state == STATE_READY)
-	gavl_audio_format_copy(dst, &m_audio_format);
-	unlockState();
-}
-
-void ReadMedia::copyVideoFormat(gavl_video_format_t * dst ){ 
-	lockState();
-	//if (m_state == STATE_READY)
-	gavl_video_format_copy(	dst, &m_video_format);
-	unlockState();
-}
-
-int ReadMedia::getAudioSamplerate() { 
-	int sr=0;  
-	lockState();
-	//if (m_state == STATE_READY )
-		sr = m_audio_format.samplerate;
-	unlockState();
-	return sr;
-}
-
-int ReadMedia::getAudioChannelCount() { 
-	int ch=0;
-	lockState();	
-	//if (m_state == STATE_READY )
-		ch = m_audio_format.num_channels;
-	unlockState();
-	return ch;
-}
-
-int ReadMedia::getVideoTimescale() { 
-	int t=0;
-	lockState();	
-	t = m_video_format.timescale;
-	unlockState();
-	return t;
-}
-
-
-char * ReadMedia::getFilename() {
-	return  m_filename;
-}
-
-bgav_t * ReadMedia::getFile() {return  m_file;}
-FifoAudioFrames * ReadMedia::getAudioFifo() { return m_fifoaudio; } 
-FifoVideoFrames * ReadMedia::getVideoFifo() { return m_fifovideo; } 
-gavl_audio_frame_t * ReadMedia::getAudioFrame() { return m_audio_frame;}
-gavl_video_frame_t * ReadMedia::getVideoFrame() { return m_video_frame;}
-
-
-void ReadMedia::setState(int b) { 
-	lockState(); 
-	m_state = b; 
-	unlockState();
-}
-
-int ReadMedia::getState() { 
-	int s=STATE_EMPTY;
-	lockState();
-	s = m_state;
-	unlockState();
-	return s;
-}
-
-bool ReadMedia::isReady() { if ( getState() == STATE_READY) return true; else return false;}
-// no need to lock on these
-//double ReadMedia::getATimeInSeconds() { return m_atime;};
-//double ReadMedia::getVTimeInSeconds() { return m_vtime;};
-/*
-float ReadMedia::getTimeInSeconds() { 
-	lockState();
-	if (m_audio_stream_count > 0 ) {
-		unlockState();
-		return m_atime;
-	} else {
-		// FIXME :  see if the following is really true
-		unlockState();
-		return m_vtime;
-	}
-};
-*/
-
-float ReadMedia::getAudioFifoSizePercentage() { 
-	float f=0.0;
-	lockState();
-	if (m_fifoaudio)	
-		f = m_fifoaudio->getSizePercentage();
-	unlockState();
-	return f;
-}
-
-void ReadMedia::pealOffVideoFrames( int howmany) { 
-	lockAV();
-	if (m_fifovideo == NULL) {
-		unlockAV();
-		return;
-	}
-	int max = howmany > m_fifovideo->getSize() ? m_fifovideo->getSize() : howmany;
-	for (int i=0;i< max; i++) {
-		m_fifovideo->Get();
-		//printf("pealing of a video frame size = %d\n", m_fifovideo->getSize());
-	}
-	unlockAV();
-} 
-
-void ReadMedia::setAEOF(bool b) { 
-	lockState();
-	m_aeof = b;
-	m_pcm_seek = SEEK_NOTHING;
-	unlockState();
-}
-void ReadMedia::setVEOF(bool b) { 
-	lockState();
-	m_veof = b;
-	m_frame_seek = SEEK_NOTHING;
-	unlockState();
-}
-
-
-bool ReadMedia::getEOF() { 
-	bool tmp = true;
-	lockState();
-	if (m_state == STATE_READY)
-		tmp = (m_aeof && m_veof);
-	unlockState();
-	//printf("ReadMedia:getEOF=%d, aeof=%d, veof=%d\n", tmp, m_aeof, m_veof);
-	return tmp;
-}
-
-void ReadMedia::setLoop( bool b) {
-	lockState();
-	m_loop = b;	
-	unlockState();
-}
-bool ReadMedia::getLoop() {
-	bool tmp = true;
-	lockState();
-	if (m_file && bgav_can_seek( m_file) ) {
-		tmp = m_loop;	
-	} else {
-		tmp = false; // we can't loop on file, return false 
-		// but leave the loop var untouched
-	}
-	unlockState();
-	return tmp;
-}
-
-// NOT PUBILC
-// only used in fifo filler
-bool ReadMedia::getAEOF() {
-	bool tmp = false;
-	lockState();
-	tmp = m_aeof;
-	unlockState();
-	return tmp;
-}
-
-// NOT PUBLIC
-bool ReadMedia::getVEOF() { 
-	bool tmp = false;
-	lockState();
-	tmp =  m_veof;
-	unlockState();
-	return tmp;
-}
-
-int ReadMedia::getSamplesPerFrame() { 
-	int spf=0;
-	lockState();
-	spf = m_audio_format.samples_per_frame;
-	unlockState();
-	return spf;
-}
-
-int ReadMedia::lockAV() { 
-	//printf("locking AV\n"); 
-  return pthread_mutex_lock(&m_av_mut);
-}
-int ReadMedia::unlockAV() { 
-	//printf("unlocking AV\n");
-	return pthread_mutex_unlock(&m_av_mut);
-}
-
-int ReadMedia::lockState() { 
-	//	printf("locking state.\n"); 
-	return pthread_mutex_lock(&m_state_mut);
-}
-int ReadMedia::unlockState() { 
-	//printf("unlocking state.\n"); 
-	return pthread_mutex_unlock(&m_state_mut);
-}
-
-
-void ReadMedia::waitA() { pthread_cond_wait( &m_cond_a, &m_condmut_a); }
-void ReadMedia::waitV() { pthread_cond_wait( &m_cond_v, &m_condmut_v); }
-void ReadMedia::signalAV() { signalA(); signalV(); }
-void ReadMedia::signalA() { pthread_cond_signal( &m_cond_a); }
-void ReadMedia::signalV() { pthread_cond_signal( &m_cond_v); }
-
-void ReadMedia::signalDispatcher() { pthread_cond_signal( &m_cond_dispatch); }
-void ReadMedia::waitDispatch() { pthread_cond_wait( &m_cond_dispatch, &m_condmut_dispatch); }
-
-void ReadMedia::setOpenCallback(void (*oc)(void *), void *v ) {
-	lockState();// do we need this?
-	m_open_callback = oc; 
-	m_open_callback_data = v;  
-	unlockState();
-}	
-void ReadMedia::callOpenCallback() {	
-	// do NOT lock on the callback, user must do call public functions
-	// that also lock
-	if(m_open_callback != NULL) 
-		m_open_callback( m_open_callback_data);
- };
-
-void ReadMedia::setBufferCallback(bgav_buffer_callback bc, void *v ) { 
-	lockState();
-	m_buffer_callback = bc; 
-	m_buffer_callback_data = v;  
-	// set up callbacks.
-	if (m_buffer_callback) {
-		bgav_options_set_buffer_callback( m_opt, m_buffer_callback, m_buffer_callback_data);
-	}
-	unlockState();
-};
-
-
-
-
-int ReadMedia::getAudioStreamCount() {
-	int asc=0;
-	lockState();
-	asc = m_audio_stream_count;
-	unlockState();
-	return asc;
-} 
-int ReadMedia::getVideoStreamCount() {
-	int vsc=0;
-	lockState();
-	vsc = m_video_stream_count;
-	unlockState();
-	return vsc;
-}
-
-
-// NOT PUBLIC
-void ReadMedia::setAudioStreamCount(int s){
-	lockState();
-	m_audio_stream_count=s;
-	if (s == 0) // no audio streams, we are already at audio eof
-		m_aeof = true;
-	else m_aeof = false;
-	unlockState();
-}
-// NOT PUBLIC
-void ReadMedia::setVideoStreamCount(int s){
-	lockState();
-	m_video_stream_count=s; 
-	if (s==0) // if there are no video streams, video is at eof
-		m_veof = true; 
-	else m_veof =false;
-	unlockState();
-}
-
-// NOT PUBLIC
-void ReadMedia::setCommand(int s){
-	lockState();
-	m_cmd = s;
-	unlockState();
-}
-
-// NOT PUBLIC
-int ReadMedia::getCommand() {
-	int cmd= CMD_NULL;
-	lockState();
-	cmd = m_cmd;
-	unlockState();	
-	return cmd;
-}
-
-
-// NOT PUBLIC
-// Clears the bgav_t struct, destroying and then creating it
-// NO NEED TO DO AV LOCK, only called in the opener thread
-void ReadMedia::clearFile() {
-	if (m_file != NULL)
-		bgav_close( m_file );
-
-	m_file = bgav_create();
-	bgav_options_copy( bgav_get_options( m_file ) , m_opt);
-	m_aeof = true;
-	m_veof = true;
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-}
-
-// NOT PUBLIC
-// Closes the bgav_t struct, destroying it and setting to NULL
-// NO NEED TO DO AV LOCK, only called in the opener thread
-void ReadMedia::closeFile() {
-	if (m_file != NULL)
-		bgav_close( m_file );
-	m_file = NULL;
-	m_aeof = true;
-	m_veof = true;
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-
-	sprintf(m_filename, "seinettbitte!");
-}
-
-
-// NOT PUBLIC
-// killAVThreads is only called from the opener thread
-// and from the destructor
-// THIS IS NOT REALLY A PUBLIC function
-void ReadMedia::killAVThreads() {
-
-	lockState();
-	m_state = STATE_EMPTY;
-	quit_av_threads = true;
-	unlockState();
-
-	signalAV();
-	signalAV();
-
-	// FIRST need to join the threads that exist and are running
-	if (m_audio_thread_ret == 0) {
-		pthread_join( m_thread_fillaudiofifo, NULL);
-		//pthread_detach( m_thread_fillaudiofifo);
-	}
-	if (m_video_thread_ret == 0){
-		pthread_join( m_thread_fillvideofifo, NULL);
-		//pthread_detach( m_thread_fillvideofifo);
-	}
-	m_audio_thread_ret = -1;
-	m_video_thread_ret = -1;
-
-	// no need to lock here 	
-	quit_av_threads = false;
-
-}
-
-// NOT PUBLIC
-// Only called from the opener thread
-bool ReadMedia::startAVThreads() {
-
-	if (m_audio_thread_ret == 0 || m_video_thread_ret == 0 ) {
-		// ouch!, we have running AV threads, this is not good	
-		return false;
-	}
-
-	if (m_audio_stream_count > 0) {
-		m_audio_thread_ret = pthread_create(&m_thread_fillaudiofifo, NULL, the_audiofifo_filler, (void *)this);
-		if (m_audio_thread_ret != 0 ) {
-			printf("ReadMedia:: problem starting the audio thread\n");
-			return false;
-		}
-	}
-
-	if (m_video_stream_count > 0) {
-		m_video_thread_ret =	pthread_create(&m_thread_fillvideofifo, NULL, the_videofifo_filler, (void *)this);
-	 if (m_video_thread_ret != 0 ) {
-		 printf("ReadMedia::  problem starting the video thread\n");
-		 return false;	
-		}
-	}
-	return true;
-}
-	
-bool ReadMedia::initFormat() {
-
-	const gavl_audio_format_t * open_audio_format;
-	const gavl_video_format_t * open_video_format;
-
-	// we use the m_vfifosize to see if the user app wants video or not
-	// then, we set m_video_stream_count to 0 if he doesn't want video
-	if (m_video_stream_count > 0 && m_vfifosize > 0) {
-		open_video_format = bgav_get_video_format(m_file, 0);
-
-		if (open_video_format->pixelformat == GAVL_PIXELFORMAT_NONE) {
-			printf("!!!sorry, pixelformat is not recognized.\n");
-			return false;
-		}
-
-		// let's check to see if the formats are the same, if they are the same
-		// there is no reason to recreate the fifo or frames
-		if ( gavl_video_formats_equal( &m_video_format, open_video_format) == 0 ) { 	
-			// the formats are different
-			gavl_video_format_copy (&m_video_format, open_video_format);
-			if (m_video_frame != NULL)
-				gavl_video_frame_destroy(m_video_frame);
-			m_video_frame = gavl_video_frame_create(&m_video_format);
-			gavl_video_frame_clear( m_video_frame, &m_video_format);
-			if (m_fifovideo != NULL)
-				delete m_fifovideo;
-			m_fifovideo=  new FifoVideoFrames( m_vfifosize ,  &m_video_format); 
-		}
-	} else {
-		m_video_stream_count = 0;
-		m_veof = true;
-	}
-
-	// we use the m_afifosize to see if the user app wants audio or not
-	// then, we set m_audio_stream_count to 0 if he doesn't want audio
-	if (m_audio_stream_count > 0 && m_afifosize > 0) {  
-		open_audio_format = bgav_get_audio_format(m_file, 0);    
-	
-		// we can get audio formats that are unkown
-		if ( open_audio_format->sample_format == GAVL_SAMPLE_NONE) {
-			printf("sorry, this file has unsupported audio.\n"); 
-			return false;	
-		}
-
-		if ( gavl_audio_formats_equal(&m_audio_format, open_audio_format) == 0 ) { 	
-			// audio formats are different
-			// save the old spf
-			int spf = m_audio_format.samples_per_frame; 
-			gavl_audio_format_copy(&m_audio_format, open_audio_format);
-
-			if (m_audio_frame != NULL) {
-				gavl_audio_frame_destroy(m_audio_frame);
-			}
-
-			// set it back to original
-			m_audio_format.samples_per_frame = spf ;
-
-			m_audio_frame = gavl_audio_frame_create(&m_audio_format);
-	
-			gavl_audio_frame_mute( m_audio_frame, &m_audio_format);
-			if( m_fifoaudio != NULL )
-				delete m_fifoaudio;
-			m_fifoaudio = new FifoAudioFrames( m_afifosize , &m_audio_format); 
-		}
-	} else {
-		// user doesn't want audio
-		m_audio_stream_count = 0;
-		m_aeof=true;
-	}
-
-
-	m_length_in_gavltime = bgav_get_duration ( m_file, 0);;
-	m_length_in_seconds = gavl_time_to_seconds(  m_length_in_gavltime );
-	m_num_samples = 0;
-	m_num_frames = 0;
-
-	if (m_audio_stream_count) {
-		if ( bgav_can_seek_sample(m_file) == 1 ) {
-			m_num_samples=	bgav_audio_duration ( m_file, 0) ;
-	 } else { 
-			m_num_samples=	gavl_time_to_samples( m_audio_format.samplerate ,  bgav_get_duration ( m_file, 0) );
-		}
-	}
-
-	// set frames   WE NEED TO take care here for non-constant frame-rates
-	if(m_video_stream_count) {
-		if ( bgav_can_seek_sample(m_file) == 1  && m_video_format.framerate_mode == GAVL_FRAMERATE_CONSTANT) { 
-			m_num_frames =	bgav_video_duration ( m_file, 0)/ m_video_format.frame_duration;
-		} else if ( bgav_can_seek_sample(m_file) == 1  && m_video_format.framerate_mode == GAVL_FRAMERATE_VARIABLE ) {
-			// FIXME what to do with non constant frame rates?
-			m_num_frames=0;
-		} else { 
-			m_num_frames =	gavl_time_to_frames( m_video_format.timescale, m_video_format.frame_duration ,  bgav_get_duration ( m_file, 0) );
-		}
-	}
-
-  //	printf("m_num_frames =%lld, duration = %lld , vid_duration=%lld\n", 
-	//		m_num_frames, bgav_get_duration ( m_file, 0),  bgav_video_duration ( m_file, 0) );
-	// set seconds
-	if ( bgav_can_seek_sample(m_file) == 1) {
-		gavl_time_t atime=0,vtime=0;
-		if ( m_audio_stream_count ) 
-			atime =  gavl_samples_to_time( m_audio_format.samplerate, m_num_samples );
-		if (m_video_stream_count &&  m_video_format.frame_duration > 0) {
-			vtime =  gavl_frames_to_time( m_video_format.timescale, m_video_format.frame_duration, m_num_frames );
-		} else if ( m_video_stream_count  ) { // non constant framerate			
-			vtime = bgav_video_duration( m_file, 0);
-		}
-		// else rely on audio time
-		m_length_in_gavltime = atime > vtime ? atime :vtime;
-		m_length_in_seconds = gavl_time_to_seconds( m_length_in_gavltime );
-		//printf("atime=%ld,  vtime=%ld, l_in_sec=%f\n", atime, vtime, m_length_in_seconds);
-	} 
-
-	m_pcm_seek = SEEK_NOTHING;
-	m_frame_seek = SEEK_NOTHING;
-
-	return true;
-}
-
-
-void *the_thread_dispatcher(void *xp) {
-
-	ReadMedia *rm = (ReadMedia *)xp;
-	int cmd = CMD_NULL;
-	pthread_t thread_open;
-	int start_thread_ret = -1;
-	cmd = rm->getCommand();
-
-	while ( cmd != CMD_QUIT ) {
-		if (cmd == CMD_OPEN) {
-			// We already check in the openFile function if the user is trying to open
-			// a file that is already open.
-
-			// join the opener thread, this will protect again any other calls to open
-			if (start_thread_ret == 0 )
-				pthread_join( thread_open, NULL ); 
-			
-			// we join the AV threads
-			// the opener thread will start the AV threads anew upon success
-			rm->killAVThreads();
-
-			start_thread_ret = pthread_create(&thread_open, NULL, the_thread_opener, (void *)rm) ;
-			if (start_thread_ret != 0 )
-				printf( "Failed to create m_thread_open thread.\n");
-
-		}	
-		if (rm->getCommand() == CMD_QUIT)
-			break;
-		rm->setCommand( CMD_NULL);
-		rm->waitDispatch();
-		cmd = rm->getCommand();
-	}
-	
-	//printf("dispatcher: joining thread open\n");
-	if( start_thread_ret == 0 )
-		pthread_join( thread_open , NULL); 
-	//printf("dispatcher: joined thread open, joining AV's\n");
-	rm->killAVThreads();
-	//printf("dispatcher: joined  AV's\n");
-	pthread_exit(NULL);	
-};
-
-void *the_thread_opener(void *xp) {
-	ReadMedia *rm = NULL;
-	int num_urls=0, num_tracks=0, audio_stream_count=0, video_stream_count =0;
-
-	rm = (ReadMedia *)xp;
-	rm->setState(STATE_OPENING);
-
-	//  AFTER WE KILL THE THREADS, THERE IS NO NEED TO LOCK AV mutex
-	//  ALL functions that want to get info on the file, seek, 
-	//  or decode a frame, MUST first check the state.  If the
-	//  state is STATE_READY, then it can perform it's function, 
-	//  locking on the necessary variables that might conflict with
-	//  the AV.   
-
-	// clearFile  deletes old file and creates new File
-	rm->clearFile();
-	if(!bgav_open(rm->getFile(), rm->getFilename())) {
-		printf( "Could not open file %s\n", rm->getFilename());
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL);
-		//return NULL;
-	} else {
-		printf("opened %s\n", rm->getFilename());
-	}
-
-	// check to see if it is a redirector
-	if(bgav_is_redirector( rm->getFile() )) {
-		num_urls = bgav_redirector_get_num_urls( rm->getFile() );
-		printf( "Found redirector with %d urls inside, we will try to use the first one.\n", num_urls);
-		printf( "Name %d: %s\n", 1, bgav_redirector_get_name(rm->getFile() , 0));
-		printf("URL %d: %s\n",  1, bgav_redirector_get_url(rm->getFile(), 0));
-		sprintf(rm->getFilename(), "%s", bgav_redirector_get_url(rm->getFile(), 0) );
-		rm->clearFile();
-		if (!bgav_open( rm->getFile(),  rm->getFilename() )) {
-			printf("Could not open redirector\n");
-			rm->setState( STATE_EMPTY );
-			rm->closeFile();
-			rm->callOpenCallback();
-			pthread_exit(NULL);
-			//return NULL;
-		} else {
-			printf("opened redirector %s\n", rm->getFilename());
-		}
-	}
-	
-	num_tracks = bgav_num_tracks(rm->getFile());
-	if ( num_tracks ) {
-		bgav_select_track(rm->getFile(), 0);
-	} else {
-		printf("No tracks associated with file:%s\n", rm->getFilename() );
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL);
-	}
-
-	audio_stream_count = bgav_num_audio_streams(rm->getFile(), 0);
-	if( audio_stream_count )
-		bgav_set_audio_stream(rm->getFile(), 0, BGAV_STREAM_DECODE);
-
-	video_stream_count = bgav_num_video_streams(rm->getFile(), 0);
-	if( video_stream_count )
-		bgav_set_video_stream(rm->getFile(), 0, BGAV_STREAM_DECODE);
-	
-	rm->setVideoStreamCount(video_stream_count);
-	rm->setAudioStreamCount(audio_stream_count);
-	
-	//printf("astream_count = %d, vstream_count=%d\n", audio_stream_count, video_stream_count);
-	if(!bgav_start(rm->getFile())) {
-		printf( "failed to start file\n");
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL) ;
-		//return NULL;
-	}
-
-	if( !rm->initFormat() ){
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL) ;
-	}
-
-	if( !rm->startAVThreads() ){
-		rm->setState( STATE_EMPTY );
-		rm->closeFile();
-		rm->callOpenCallback();
-		pthread_exit(NULL) ;
-	}
-
-	// AV threads are now running, blocking will be necessary
-	// STATE_READY and callOpenCallback is set/called in the 
-	// fifo fill callbacks
-	rm->signalAV();
-	rm->signalAV(); //extra signal for second thread
-	pthread_exit(NULL);
-	//return NULL;
-}
-
-void *the_audiofifo_filler( void * xp) {
-	int samples_returned=0;
-	ReadMedia *rm = (ReadMedia *)xp;
-	int first = true;
-	int dovideo = rm->getVideoStreamCount();	
-	int spf = rm->getSamplesPerFrame();
-	int samplerate = rm->getAudioSamplerate();
-	int64_t seekto = SEEK_NOTHING;
-	int can_seek = bgav_can_seek ( rm->getFile() );
-	int can_seek_sample = bgav_can_seek_sample ( rm->getFile() );
-	
-	while ( !rm->quitAVThreads() ) {
-		//while ( rm->getAudioFifo() != NULL && rm->getAudioFifo()->FreeSpace() && !rm->getAEOF() ) {
-		while ( rm->getAudioFifo()->FreeSpace() && !rm->getAEOF() ) {
-
-			if (rm->quitAVThreads() ) pthread_exit(NULL) ; //return NULL;
-			
-			rm->lockAV();
-			// check to see if we need to seek
-			// if this is set, we already know we can seek on this file 
-			// and don't need to check with bgav_can_seek
-			if ( can_seek ) {
-				seekto = rm->pcmSeek();
-				if (  seekto != SEEK_NOTHING ) {
-					if ( seekto == SEEK_REWIND)  {
-						// bgav_seek_audio ONLY seeks on the audio stream
-						seekto = 0;
-					//	bgav_seek_scaled(rm->getFile(), &seekto, samplerate);
-					} //else {
-					bgav_seek_scaled(rm->getFile(), &seekto, samplerate);
-					//}
-					rm->getAudioFifo()->Flush();
-					if (dovideo && rm->getVideoFifo() ) {
-						 rm->getVideoFifo()->Flush();
-						 rm->signalV();
-					}
-				}
-			}
-
-			samples_returned = bgav_read_audio(rm->getFile(), rm->getAudioFrame(), 0,  spf );
-			//rm->unlockAV();
-
-			if (samples_returned == 0 ) {
-				if( rm->getLoop() ) {
-					if ( can_seek ) {
-						// Now, rewind the file, don't flush the fifo's
-						if (can_seek_sample) { // only seek on audio stream
-							bgav_seek_audio(rm->getFile(), 0, 0);
-						} else { 
-							seekto =0;
-							bgav_seek_scaled(rm->getFile(), &seekto, samplerate);
-							if (dovideo && rm->getVideoFifo() ) {
-								rm->setVEOF(false);
-								rm->signalV();
-							}
-						}	
-						// SAVE THIS FOR ANOTHER TIME, OVERLAPPED SMOOTH LOOPING 
-						//if ( rm->getLoop() > 1 && bgav_read_audio(rm->getFile(), rm->getAudioFrame(), 0,  spf ) ) {
-						// add to the fifo, overlapping
-						//		rm->getAudioFifo()->AppendOverlap( rm->getAudioFrame(), 5 );
-						//	}	
-						
-					} else { // this file is not seekable, what do we do?
-						printf("cannot seek on file, but we want to loop. setting end of file.\n");
-						rm->setAEOF(true);
-					}
-				} else {
-					rm->setAEOF(true);
-				}
-				rm->unlockAV();
-				break;
-			}
-			rm->unlockAV();
-			if( !rm->getAudioFifo()->Append( rm->getAudioFrame() ))
-				printf("problem with appending Audio Frame\n");
-		}
-		if (first && !dovideo) {
-			rm->setState( STATE_READY );
-			rm->callOpenCallback();
-			first = false;
-		}
-		if (rm->quitAVThreads() ) pthread_exit(NULL); //return NULL;
-		rm->waitA();
-	}
-	pthread_exit(NULL);//return NULL;
-}
-
-void *the_videofifo_filler( void * xp) {
-	ReadMedia *rm = (ReadMedia *)xp;
-	int ret = 0;
-	int first = true;
-	int doaudio = rm->getAudioStreamCount();	
-	int64_t seekto =SEEK_NOTHING;
-	int can_seek = bgav_can_seek ( rm->getFile() );
-	int can_seek_sample = bgav_can_seek_sample ( rm->getFile() );
-	int timescale = rm->getVideoTimescale();
-	
-	while (!rm->quitAVThreads() ) {
-	
-		while ( rm->getVideoFifo() !=NULL && rm->getVideoFifo()->FreeSpace() && !rm->getVEOF() ) {
-
-			if (rm->quitAVThreads() ) pthread_exit(NULL);//return NULL;
-
-			rm->lockAV();
-			// check to see if we need to seek
-			// if this is set, we already know we can seek on this file 
-			// and don't need to check with bgav_can_seek
-			if (can_seek) {
-				seekto = rm->frameSeek();
-				if ( seekto  >= 0 ) {  
-					if (doaudio && rm->getAudioFifo() ) rm->getAudioFifo()->Flush();
-					rm->getVideoFifo()->Flush();
-					bgav_seek_scaled(rm->getFile(), &seekto, timescale);
-				} else if (seekto == SEEK_REWIND && !doaudio) {
-					// rewind is a special case  for Video.
-					rm->getVideoFifo()->Flush();
-					seekto =0;
-					bgav_seek_scaled(rm->getFile(), &seekto, timescale);
-				}
-			}
-				
-			ret = bgav_read_video(rm->getFile(), rm->getVideoFrame(), 0 );
-
-			if ( !ret ) {
-				// only loop from video if there is no audio
-				// audio controls loop timing
-				if ( rm->getLoop() ){
-					if ( can_seek ) {
-						if (doaudio && can_seek_sample) {
-							// seek on video stream only if we have audio
-							// audio and video seeking are separate in sample accurate 
-							// seeking.  If no sample accurate seeking, then let audio
-							// handle seeking
-							bgav_seek_video(rm->getFile(), 0,0);
-						} else if (!doaudio) {	
-							// if we don't have audio...just seek to 0
-							seekto=0;
-							bgav_seek_scaled(rm->getFile(), &seekto, timescale);
-						}
-					} else { // if (can_seek)
-						printf ("We want to loop video, but we cannot seek on this video stream,setting VEOF\n");
-						rm->setVEOF(true);
-					}
-				} else {
-					rm->setVEOF(true);
-				}
-				rm->unlockAV();
-				break;
-			} 
-			rm->unlockAV();
-			if( !rm->getVideoFifo()->Append( rm->getVideoFrame() ))
-				printf("problem with appending VideoFrame\n");
-		}
-		// on the first time 'round we will call the open callback
-		// if there is no video in the file, the audio will handle it.
-		if (first) {
-			rm->setState( STATE_READY );
-			rm->callOpenCallback();
-			first = false;
-		}
-
-		if (rm->quitAVThreads() ) pthread_exit(NULL); //return NULL;
-		rm->waitV();
-	}
-	pthread_exit(NULL); //return NULL;
-}
-
-
diff --git a/externals/august/readanysf~/src/ReadMedia.h b/externals/august/readanysf~/src/ReadMedia.h
deleted file mode 100644
index 6499f7344..000000000
--- a/externals/august/readanysf~/src/ReadMedia.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2003-2010 August Black
- *
- * 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
- *
- */
-
-#ifndef _READMEDIA_H_
-#define _READMEDIA_H_
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-#include "FifoAudioFrames.h"
-#include "FifoVideoFrames.h"
-
-
-#ifndef _AVDEC_H_
-#define _AVDEC_H_
-extern "C" {
-#include <avdec.h>
-}
-#endif
-
-
-#define STATE_EMPTY              0
-#define STATE_OPENING           1
-#define STATE_READY            2
-
-#define SRC_MAX                 256.0
-#define SRC_MIN                 1/256.0
-
-#define CMD_START	3
-#define CMD_NULL	0
-#define CMD_OPEN 1
-#define CMD_QUIT 2
-
-#define SEEK_NOTHING -1
-#define SEEK_REWIND -2
-
-class ReadMedia  {
-
-	public:
-		ReadMedia();
-		~ReadMedia();
-
-		void openFile( char * filename, int vfifosize, int afifosize, int samples_per_frame);
-
-		int decodeAudio( gavl_audio_frame_t *af);
-		int decodeVideo( gavl_video_frame_t *vf);
-	
-		bool isReady(); // see if file is loaded or not
-		bool getEOF();
-
-		bool rewind();
-		bool rewindNoFlush();
-		bool frameSeek(int64_t frames);
-		bool pcmSeek(int64_t samples);
-		bool timeSeek(double seconds);
-
-		int getAudioSamplerate();
-		int getAudioChannelCount();
-		int getVideoTimescale();
-
-		double getLengthInSeconds(); 
-		gavl_time_t getLengthInGavlTime(); 
-		int64_t getLengthInAudioSamples();
-		int64_t getLengthInVideoFrames();
-
-		int getAudioStreamCount();
-		int getVideoStreamCount();
-
-		// this is used to sync AV frames
-		void pealOffVideoFrames(int howmany);
-
-		void dump() { lockState(); if (m_file != NULL) bgav_dump(m_file); unlockState(); }; 
-	
-		double getATimeInSeconds();
-		double getVTimeInSeconds();
-		//float getTimeInSeconds();
-		float getAudioFifoSizePercentage();
-
-		void copyAudioFormat(gavl_audio_format_t * dst ); 
-		void copyVideoFormat(gavl_video_format_t * dst ); 
-		void setLoop( bool b); 
-		bool getLoop(); 
-
-
-		//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-		// NON-PUBLIC public functions
-		//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-
-		int64_t pcmSeek();
-		int64_t frameSeek();
-		//bool seek(gavl_time_t gt);
-
-		void killAVThreads();
-		bool startAVThreads();
-		void setAudioStreamCount(int s);
-		void setVideoStreamCount(int s);
-
-		FifoAudioFrames * getAudioFifo(); 
-		FifoVideoFrames * getVideoFifo(); 
-
-		bgav_t * getFile();
-		char * getFilename();
-
-		gavl_audio_frame_t * getAudioFrame();
-		gavl_video_frame_t * getVideoFrame();
-		
-		void closeFile();
-		void clearFile();
-
-		void setState(int b);
-		int getState();
-		gavl_audio_format_t * getAudioFormat() { return &m_audio_format;}; 
-		gavl_video_format_t * getVideoFormat() { return &m_video_format;}; 
-
-		void setCommand( int c);
-		int getCommand();
-
-		void setAEOF(bool b);
-		void setVEOF(bool b);
-		bool getAEOF();
-		bool getVEOF();
-
-		int getSamplesPerFrame();
-
-		int lockAV();
-		int unlockAV();
-		//int lockAV(const char *s);
-		//int unlockAV(const char *s);
-		int lockState();
-		int unlockState();
-		//int lockState(const char *s);
-		//int unlockState(const char *s);
-
-
-		void waitA();
-		void waitV();
-		void signalAV();
-		void signalA();
-		void signalV();
-		void waitDispatch();
-		void signalDispatcher();
-	
-		bool initFormat();
-
-		void setOpenCallback(void (*oc)(void *), void *v );
-		void callOpenCallback();
-
-		void setBufferCallback( bgav_buffer_callback bc, void *v );
-		
-		bool quitAVThreads();
-
-	private:
-		bool quit_av_threads;
-		// callbacks for open, input buffer etc.	
-		void * m_open_callback_data;	
-		void (* m_open_callback)(void * v);
-		bgav_buffer_callback m_buffer_callback;
-		void * m_buffer_callback_data;			
-
-		// end of file for audio and video
-		bool m_aeof;
-		bool m_veof;
-	
-		// seek vars
-		int64_t m_pcm_seek;
-		int64_t m_frame_seek;
-		
-		double m_length_in_seconds;
-		gavl_time_t m_length_in_gavltime;
-		int64_t m_num_samples;
-		int64_t m_num_frames;
-
-		// command for dispatcher thread
-		int m_cmd;
-
-		// internal state of media reader and 
-		// current filename
-		int m_state;
-		char m_filename[1024];
-		bool m_loop;
-
-	
-		// current time of audio in seconds
-		//double m_atime;
-		//double m_vtime;
-
-		int m_afifosize;
-		int m_vfifosize;
-		int m_audio_stream_count;
-		int m_video_stream_count;
-		
-		bgav_t * m_file;
-		bgav_options_t * m_opt;
-
-		// audio stuff
-		gavl_audio_frame_t * m_audio_frame;
-		gavl_audio_format_t m_audio_format;
-	
-		//video stuff 
-		gavl_video_frame_t * m_video_frame;
-		gavl_video_format_t m_video_format;
-
-		FifoAudioFrames  *m_fifoaudio;
-		FifoVideoFrames  *m_fifovideo;
-
-		int m_audio_thread_ret;
-		int m_video_thread_ret;
-		int m_dispatcher_thread_ret;
-
-		pthread_t m_thread_fillaudiofifo;
-		pthread_t m_thread_fillvideofifo;
-		pthread_t m_thread_dispatch;
-
-		pthread_mutex_t m_condmut_a;
-		pthread_mutex_t m_condmut_v;
-		pthread_mutex_t m_condmut_dispatch;
-
-		pthread_mutex_t m_state_mut;
-		pthread_mutex_t m_av_mut;
-
-		pthread_cond_t m_cond_a;
-		pthread_cond_t m_cond_v;
-		pthread_cond_t m_cond_dispatch;
-		
-};
-
-#endif
diff --git a/externals/august/readanysf~/src/readanysf~.cpp b/externals/august/readanysf~/src/readanysf~.cpp
deleted file mode 100644
index e07c7b633..000000000
--- a/externals/august/readanysf~/src/readanysf~.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Readanysf  PD object for reading and playing multiple soundfile types
- * from disk and from the web using gmerlin_avdecode
- *
- * Copyright (C) 2003-2010 August Black
- *
- * 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
- *
- * readanysf.cpp
- */
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <stdbool.h>  //IMPORTANT bool
-#include <stdlib.h>   // for malloc
-#include <stdio.h>	//sprintf
-#include <string.h>  //strcmp
-#include <math.h>   // ceil
-
-#include "m_pd.h"
-#include "ReadMedia.h"
-
-#define MAXSFCHANS 64	// got this from d_soundfile.c in pd/src
-
-
-static t_class *readanysf_class;
-
-typedef struct readanysf {
-	t_object x_obj;
-	t_sample *(x_outvec[MAXSFCHANS]);
-	t_outlet *outinfo;
-
-	int blocksize; // size of the pd block for this object
-	int num_channels;
-	int num_frames_in_fifo;
-	int num_samples_per_frame;
-	unsigned int tick;  // how often to send outlet info
-	bool play;
-	bool is_opening;
-	unsigned int count;
-	float src_factor;
-
-	bool do_t2o_audio_convert;
-	bool do_i2t_audio_convert;
-
-	int samplesleft;  // how many audio samples left in our curren read buf
-
-
-	ReadMedia *rm;
-	gavl_audio_frame_t * out_audio_frame;
-	gavl_audio_frame_t * tmp_audio_frame;
-	gavl_audio_frame_t * in_audio_frame;
-
-	gavl_audio_format_t out_audio_format;
-	gavl_audio_format_t tmp_audio_format;
-	gavl_audio_format_t in_audio_format;
-
-	gavl_audio_converter_t *  i2t_audio_converter;
-	gavl_audio_converter_t *  t2o_audio_converter;
-	
-	pthread_mutex_t mut;	
-
-} t_readanysf;
-
-
-void m_play(t_readanysf *x) {
-
-	pthread_mutex_lock(&x->mut);
-	if (x->rm->isReady() && !x->is_opening ) {	
-		// is_opening protects the play variable, which in turn protects 
-		// the memory accessed in m_decode_block inside of the perform function
-		// as long as play is false, no memory is accessed
-		// as long as is_opening is true, play is false and no memory is accessed
-		// to be safe, we will protect the is_opening var so that when the open callback
-		// is called, and the memory is de-allocated and re-allocated, that memory is not
-		// access by the perform function 
-		x->play = true;  // this is the only place where play is true
-	} else {
-		if (x->is_opening ) {
-			post("Current file is still starting.");
-			post("This probably means that it is a stream and it needs to buffer in from the network.");
-		} else {
-			post("Current file is either invalid or an unsupported codec.");
-		}
-	}
-	pthread_mutex_unlock(&x->mut);
-}
-
-void readanysf_bang(t_readanysf *x) {
-	m_play(x);
-}
-
-
-void m_pause(t_readanysf *x) {
-	x->play = false;
-}
-
-void m_pcm_seek(t_readanysf *x, float f) {
-	if (! x->rm->pcmSeek( (long)f) )		
-		post("can't seek on this file.");
-}	
-
-void m_time_seek(t_readanysf *x, float f) {
-	if (! x->rm->timeSeek( (double)f) )		
-		post("can't seek on this file.");
-}	
-
-void m_tick(t_readanysf *x, float f) {
-	if (f >= 0.0) {
-		x->tick = (unsigned int) f ;
-	}
-}	
-
-void m_stop(t_readanysf *x) {
-	x->play = false;
-	x->samplesleft=0;
-	x->count=0;
-/*
-	if( x->out_audio_frame != NULL)
-		gavl_audio_frame_mute_samples(x->out_audio_frame, &x->out_audio_format, x->out_audio_format.samples_per_frame);
-	if( x->in_audio_frame != NULL)
-		gavl_audio_frame_mute_samples(x->in_audio_frame, &x->in_audio_format, x->in_audio_format.samples_per_frame);
-	if( x->tmp_audio_frame != NULL)
-		gavl_audio_frame_mute_samples(x->tmp_audio_frame, &x->tmp_audio_format, x->tmp_audio_format.samples_per_frame);
-*/
-
-	x->rm->rewind();
-}
-
-void m_init_audio( t_readanysf *x) {
-	// Now,. do Audio stuff
-	x->rm->copyAudioFormat( &x->in_audio_format); 
-	x->in_audio_format.samples_per_frame = x->num_samples_per_frame;
-
-	x->tmp_audio_format.samplerate = x->in_audio_format.samplerate;
-	x->tmp_audio_format.samples_per_frame = x->in_audio_format.samples_per_frame;
-	x->tmp_audio_format.num_channels = x->out_audio_format.num_channels;
-	x->tmp_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-	gavl_set_channel_setup (&x->tmp_audio_format); // Set channel locations
-
-	if (x->in_audio_frame != NULL)
-		gavl_audio_frame_destroy(x->in_audio_frame);
-	x->in_audio_frame = gavl_audio_frame_create(&x->in_audio_format);
-
-	if (x->tmp_audio_frame != NULL)
-		gavl_audio_frame_destroy(x->tmp_audio_frame);
-	x->tmp_audio_frame = gavl_audio_frame_create(&x->tmp_audio_format);
-
-	/* m_out_audio_format.samples_per_frame = (m_out_audio_format.samplerate / (double)m_get_audio_format.samplerate) * 
-		 m_get_audio_format.samples_per_frame + 10;
-	 */
-
-	if (x->i2t_audio_converter == NULL)
-		x->i2t_audio_converter = gavl_audio_converter_create( );
-	x->do_i2t_audio_convert = gavl_audio_converter_init( x->i2t_audio_converter, &x->in_audio_format, &x->tmp_audio_format); 
-
-	if (x->t2o_audio_converter == NULL)
-		x->t2o_audio_converter = gavl_audio_converter_create( );
-	x->do_t2o_audio_convert = gavl_audio_converter_init_resample( x->t2o_audio_converter, &x->out_audio_format); 
-
-	// FIXME: this should be protected
-	x->src_factor = x->out_audio_format.samplerate / (float) x->in_audio_format.samplerate;
-	/*
-		 printf("in audio format: \n");
-		 gavl_audio_format_dump( &x->in_audio_format);
-		 printf("tmp audio format,  converting from input=%d \n", x->do_i2t_audio_convert);
-		 gavl_audio_format_dump( &x->tmp_audio_format);
-		 printf("output audio format,  converting from tmp=%d \n", x->do_t2o_audio_convert);
-		 gavl_audio_format_dump( &x->out_audio_format);
-	*/
-};
-
-
-void m_open_callback( void * data) {
-	t_atom lst;
-	t_readanysf * x = (t_readanysf *)data;
-
-	pthread_mutex_lock(&x->mut);
-	x->is_opening = true; // set it here again just to be safe
-	
-	if (x->rm->isReady() && x->rm->getAudioStreamCount() ) {	
-
-		m_init_audio(x);
-
-		// FIXME:  is it safe to call these here?
-		SETFLOAT(&lst, (float)x->rm->getAudioSamplerate() );
-		outlet_anything(x->outinfo, gensym("samplerate"), 1, &lst);
-		
-		SETFLOAT(&lst, x->rm->getLengthInSeconds() );
-		outlet_anything(x->outinfo, gensym("length"), 1, &lst);
-
-		outlet_float(x->outinfo, 0.0);
-
-		// ready should be last	
-		SETFLOAT(&lst, 1.0 );
-		outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-		// set time to 0 again here just to be sure
-	} else {
-		SETFLOAT(&lst, 0.0 );
-		outlet_anything(x->outinfo, gensym("samplerate"), 1, &lst);
-		SETFLOAT(&lst, 0.0 );
-		outlet_anything(x->outinfo, gensym("length"), 1, &lst);
-		SETFLOAT(&lst, 0.0 );
-		outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-		outlet_float(x->outinfo, 0.0);
-		post("Invalid file or unsupported codec.");
-	}
-	x->is_opening=false;
-	pthread_mutex_unlock(&x->mut);
-}
-
-void m_open(t_readanysf *x, t_symbol *s) {
-
-	t_atom lst;
-	SETFLOAT(&lst, 0.0 );
-	outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-
-	SETFLOAT(&lst, 0.0 );
-	outlet_anything(x->outinfo, gensym("length"), 1, &lst);
-	
-	outlet_float(x->outinfo, 0.0);
-
-	x->play = false;
-	pthread_mutex_lock(&x->mut);
-	x->is_opening = true;
-	pthread_mutex_unlock(&x->mut);
-	x->rm->openFile( s->s_name, 0, x->num_frames_in_fifo, x->num_samples_per_frame );
-}
-
-void m_speed(t_readanysf *x, float f) {
-	//	x->rm->setSpeed( f );
-	if (f > SRC_MAX) 
-		return;
-	if (f < SRC_MIN)
-		return;
-	// lock on src_factor because it is set called during open callback
-	// we can be sure then it won't conflict
-	pthread_mutex_lock(&x->mut);
-	x->src_factor = 1.0/f;
-	pthread_mutex_unlock(&x->mut);
-}
-
-void m_loop(t_readanysf *x, float f) {
-	if ( f == 0)
-		x->rm->setLoop( false );
-	else 
-		x->rm->setLoop( true );
-	post("looping = %d", x->rm->getLoop());
-}
-
-
-static void *readanysf_new(t_float f, t_float f2, t_float f3 ) {
-  
-  int nchannels = (int)f;
-  int nframes = (int)f2;
-  int nsamples = (int)f3;
-  int i;
-  t_atom lst;
-
-  // if the external is created without any options
-  if (nchannels <=0)
-	  nchannels = 2;
-
-  if (nframes <=0)
-	  nframes = 24;
-
-  if (nsamples <=0)
-	  nsamples = sys_getblksize();
-
-  t_readanysf *x = (t_readanysf *)pd_new(readanysf_class);
-	x->blocksize=0;
-  x->num_channels = nchannels;
-  x->num_frames_in_fifo = nframes;
-  x->num_samples_per_frame = nsamples;
-  x->tick = 1000;
-  x->play =false; 
-	x->is_opening=false;
-  x->count = 0;
-	x->src_factor = 1.0;
-	x->do_t2o_audio_convert = false;
-	x->do_i2t_audio_convert = false;
-	x->samplesleft = 0;
-
-  x->rm = NULL; 
-
-	x->out_audio_frame=NULL;	
-	x->tmp_audio_frame=NULL;	
-	x->in_audio_frame=NULL;	
-
-	// set up the audio formats.  Need to also set them in dsp call
-	x->tmp_audio_format.samplerate = sys_getsr();
-	x->tmp_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-	x->tmp_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-	x->tmp_audio_format.num_channels = x->num_channels;
-	x->tmp_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-	x->tmp_audio_format.samples_per_frame = x->num_samples_per_frame;
-
-	x->out_audio_format.samplerate = sys_getsr();
-	x->out_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-	x->out_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-	x->out_audio_format.num_channels = x->num_channels;
-	x->out_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-
-
-	x->i2t_audio_converter=NULL;
-	x->t2o_audio_converter=NULL;
-
-	pthread_mutex_init(&x->mut, 0);
-
-	for (i=0; i < nchannels; i++) {
-  	outlet_new(&x->x_obj,  gensym("signal"));
-  }
-  x->outinfo = outlet_new(&x->x_obj, &s_anything);
-  SETFLOAT(&lst, 0.0 );
-  outlet_anything(x->outinfo, gensym("ready"), 1, &lst);
-  
-  // set time to 0.0
-  outlet_float(x->outinfo, 0.0);
-	if (x->rm == NULL) {
-		x->rm = new ReadMedia ( ); // (int)sys_getsr(), x->num_channels, x->num_frames_in_fifo, x->num_samples_per_frame);
-		post("Created new readanysf~ with %d channels and internal buffer of %d * %d = %d", x->num_channels,
-				x->num_frames_in_fifo, x->num_samples_per_frame, x->num_frames_in_fifo *  x->num_samples_per_frame);
-	}
-	x->rm->setOpenCallback( m_open_callback, (void *)x); 
-
-  return (void *)x;
-}
-
-int m_get_frame( t_readanysf *x ) {
-	int ret =0;	
-	ret = x->rm->decodeAudio(x->in_audio_frame);
-	if (ret != 1) // EOF
-		return ret;
-
-	if (x->do_i2t_audio_convert) {
-		gavl_audio_convert( x->i2t_audio_converter, x->in_audio_frame, x->tmp_audio_frame) ;
-		x->tmp_audio_frame->valid_samples = x->in_audio_frame->valid_samples;
-	} else {
-		gavl_audio_frame_copy(&x->in_audio_format, x->tmp_audio_frame,  x->in_audio_frame, 
-				0,0, x->in_audio_frame->valid_samples, x->in_audio_frame->valid_samples) ;
-		x->tmp_audio_frame->valid_samples = x->in_audio_frame->valid_samples;
-	}
-
-	if ( x->do_t2o_audio_convert  ) { // should be true all of the time
-		gavl_audio_converter_resample( x->t2o_audio_converter, x->tmp_audio_frame, x->out_audio_frame, x->src_factor );
-		//  Don't know why, but on the first conversion, I get one extra sample
-		//  THIS SHOULD NOT HAPPEN...this is a fix for now..check it out later.
-		//if (x->src_factor == 1.0 && x->out_audio_frame->valid_samples > x->num_samples_per_frame) { 
-		//	printf("Got wierd return value for audio frames,  taf->vs %d, oaf->vs %d, src_factor=%f\n",
-		//			x->tmp_audio_frame->valid_samples, x->out_audio_frame->valid_samples, x->src_factor);
-			//x->samplesleft = x->out_audio_frame->valid_samples = x->num_samples_per_frame;
-		//} else {
-		x->samplesleft = x->out_audio_frame->valid_samples;
-		//}
-	} else {
-		// copy the samples to the output
-		gavl_audio_frame_copy(&x->tmp_audio_format, x->out_audio_frame, x->tmp_audio_frame, 
-				0,0, x->tmp_audio_frame->valid_samples, x->tmp_audio_frame->valid_samples) ;
-		//printf("copying taf to oaf,  taf->vs %d, oaf->vs %d\n", taf->valid_samples, oaf->valid_samples);
-		x->samplesleft = x->out_audio_frame->valid_samples = x->tmp_audio_frame->valid_samples;
-	}
-	return ret;
-}
-
-int m_decode_block( t_readanysf * x ) {
-	int i=0,j=0, samps_done=0;
-	int samps_to_do = x->blocksize;
-
-	while( samps_to_do > 0) {
-		if ( samps_to_do <= x->samplesleft) {
-			//if (x->out_audio_frame->valid_samples < x->samplesleft) 	
-			//	printf("error\n");
-			// copy our samples out to the pd audio buffer
-			for (i = 0; i < x->num_channels; i++) {
-				for (j = 0; j <  samps_to_do ;  j++) {
-					x->x_outvec[i][samps_done + j] = x->out_audio_frame->channels.f[i][ x->out_audio_frame->valid_samples - x->samplesleft +j ];
-				}
-			}
-			x->samplesleft -= samps_to_do;
-			samps_done += samps_to_do;
-			samps_to_do = 0;
-			break;
-		} else if ( x->samplesleft > 0 ) {
-			//if( x->out_audio_frame->valid_samples  < x->samplesleft)
-			//	printf("valid_samples < samplesleft, shouldn't happen\n");
-			for (i = 0; i < x->num_channels; i++) {
-				for (j = 0; j <  x->samplesleft;  j++) {
-					x->x_outvec[i][samps_done + j] = x->out_audio_frame->channels.f[i][ x->out_audio_frame->valid_samples - x->samplesleft +j ];
-				}
-			}
-			samps_to_do = samps_to_do - x->samplesleft;	
-			samps_done += x->samplesleft;
-			x->samplesleft = 0;
-		} else { // samplesleft is zero
-			int ret = m_get_frame(x);
-			if (ret == 0) {
-				return samps_done;
-			} else if (ret == -1) {
-				//printf("error getting frame...must be seeking\n");
-				return ret;
-			} 
-		}
-	} 
-	return samps_done;
-}
-
-static t_int *readanysf_perform(t_int *w) {
-	t_readanysf *x = (t_readanysf *) (w[1]);
-	int i=0,j=0;
-	int samples_returned = 0;
-	t_atom lst;
-
-
-	if (x->play ) { // play protects the memory accessed in m_decode_block
-		samples_returned = m_decode_block( x );	
-		if (samples_returned == 0 ) { // EOF
-			m_stop(x);
-			outlet_bang(x->outinfo);
-		} else if (samples_returned == -1) {
-			// error in getting audio, normally from seeking
-			samples_returned=0;
-		}
-	} 
-	
-	for (i = 0; i < x->num_channels; i++) {
-		for (j = samples_returned; j < x->blocksize;  j++) {
-			x->x_outvec[i][j] = 0.0;
-		}
-	}
-
-
-	// just set some variables
-	if ( ++x->count > x->tick ) {
-		SETFLOAT (&lst, x->rm->getAudioFifoSizePercentage() );
-		outlet_anything(x->outinfo, gensym("cache"), 1, &lst);
-		if (x->play) {
-			outlet_float( x->outinfo,
-					gavl_time_to_seconds(gavl_time_unscale(x->in_audio_format.samplerate, x->in_audio_frame->timestamp))
-			);
-		}
-		x->count = 0;
-	}
-	
-	return (w+2);	
-}
-
-void readanysf_dsp(t_readanysf *x, t_signal **sp) {
-	int i=0;
-	if (x->blocksize != sp[0]->s_n) {
-		x->blocksize = sp[0]->s_n;
-
-		x->tmp_audio_format.samplerate = sys_getsr();
-		x->tmp_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-		x->tmp_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-		x->tmp_audio_format.num_channels = x->num_channels;
-		x->tmp_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-		x->tmp_audio_format.samples_per_frame = x->num_samples_per_frame;
-
-		x->out_audio_format.samplerate = sys_getsr();
-		x->out_audio_format.sample_format = GAVL_SAMPLE_FLOAT ;
-		x->out_audio_format.interleave_mode = GAVL_INTERLEAVE_NONE;
-		x->out_audio_format.num_channels = x->num_channels;
-		x->out_audio_format.channel_locations[0] = GAVL_CHID_NONE; // Reset
-
-		// leave enough room in our out format and frame for resampling
-		x->out_audio_format.samples_per_frame = x->num_samples_per_frame * SRC_MAX +10;
-		gavl_set_channel_setup (&x->out_audio_format); // Set channel locations
-		
-		if(x->out_audio_frame != NULL)
-			gavl_audio_frame_destroy( x->out_audio_frame);
-		x->out_audio_frame = gavl_audio_frame_create(&x->out_audio_format);
-		//printf("created new out frame in readanysf_dsp\n");
-  	post("pd blocksize=%d, spf=%d", x->blocksize, x->num_samples_per_frame);
-	}
-
-  for (i = 0; i < x->num_channels; i++)
-	  x->x_outvec[i] = sp[i]->s_vec;
-		    
-  dsp_add(readanysf_perform, 1, x);
-	
-}
-
-static void readanysf_free(t_readanysf *x) {
-	// delete the readany objs
-
-	if (x->in_audio_frame != NULL) gavl_audio_frame_destroy(x->in_audio_frame);
-	if (x->tmp_audio_frame != NULL) gavl_audio_frame_destroy(x->tmp_audio_frame);
-	if (x->out_audio_frame != NULL) gavl_audio_frame_destroy(x->out_audio_frame);
-	
-	if (x->i2t_audio_converter != NULL)
-		gavl_audio_converter_destroy(x->i2t_audio_converter);
-	
-	if (x->t2o_audio_converter != NULL)
-		gavl_audio_converter_destroy(x->t2o_audio_converter);
-
-	pthread_mutex_destroy(&x->mut);
-
-	delete x->rm;
-	x->rm = NULL;
-}
-
-extern "C" void readanysf_tilde_setup(void) {
-
-  readanysf_class = class_new(gensym("readanysf~"), (t_newmethod)readanysf_new,
-  	(t_method)readanysf_free, sizeof(t_readanysf), 0, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_NULL);
-
-  class_addmethod(readanysf_class, (t_method)readanysf_dsp, gensym("dsp"), A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_open, gensym("open"), A_SYMBOL, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_play, gensym("play"),  A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_pause, gensym("pause"),  A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_stop, gensym("stop"),  A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_tick, gensym("tick"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_speed, gensym("speed"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_loop, gensym("loop"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_pcm_seek, gensym("pcm_seek"), A_FLOAT, A_NULL);
-  class_addmethod(readanysf_class, (t_method)m_time_seek, gensym("time_seek"), A_FLOAT, A_NULL);
-  class_addbang(readanysf_class, readanysf_bang);
-
-}
diff --git a/externals/clr/Counter/AssemblyInfo.cs b/externals/clr/Counter/AssemblyInfo.cs
deleted file mode 100644
index f34156801..000000000
--- a/externals/clr/Counter/AssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// Le informazioni generali relative a un assembly sono controllate dal seguente 
-// insieme di attributi. Per modificare le informazioni associate a un assembly 
-// occorre quindi modificare i valori di questi attributi.
-//
-[assembly: AssemblyTitle("")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori:
-//
-//      Numero di versione principale
-//      Numero di versione secondario 
-//      Numero revisione
-//      Numero build
-//
-// È possibile specificare tutti i valori o impostare come predefiniti i valori Numero revisione e Numero build 
-// utilizzando l'asterisco (*) come illustrato di seguito:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// Per firmare l'assembly è necessario specificare una chiave da utilizzare.
-// Fare riferimento alla documentazione di Microsoft .NET Framework per ulteriori informazioni sulla firma degli assembly.
-//
-// Utilizzare gli attributi elencati di seguito per verificare la chiave utilizzata per la firma. 
-//
-// Note: 
-//   (*) Se non è specificata alcuna chiave, non sarà possibile firmare l'assembly.
-//   (*) KeyName fa riferimento a una chiave installata nel provider di servizi di
-//       crittografia (CSP) sul computer in uso. KeyFile fa riferimento a un file che contiene
-//       una chiave.
-//   (*) Se entrambi i valori KeyFile e KeyName sono specificati, si 
-//       verificherà il seguente processo:
-//       (1) Se KeyName è presente in CSP, verrà utilizzata tale chiave.
-//       (2) Se KeyName non esiste e KeyFile esiste, la chiave 
-//           di KeyFile verrà installata nel CSP e utilizzata.
-//   (*) Per creare un KeyFile, è possibile utilizzare l'utilità sn.exe (Strong Name).
-//       Quando si specifica il KeyFile, il percorso dovrà essere
-//       relativo alla directory di output del progetto, ovvero
-//       %Project Directory%\obj\<configuration>. Se ad esempio il KeyFile si
-//       trova nella directory del progetto, occorre specificare l'attributo AssemblyKeyFile 
-//       come [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) La firma ritardata è un'opzione avanzata. Vedere la documentazione di Microsoft
-//       .NET Framework per ulteriori informazioni.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
diff --git a/externals/clr/Counter/Counter.cs b/externals/clr/Counter/Counter.cs
deleted file mode 100644
index 7b370d91a..000000000
--- a/externals/clr/Counter/Counter.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using PureData;
-
-/// <summary>
-/// Descrizione di riepilogo per Counter.
-/// </summary>
-public class Counter:
-	External
-{
-    int i_count,i_down,i_up;
-    float step;
-
-    public Counter() { }
-
-    public Counter(Atom[] args)
-	{
-	    this.step = args.Length >= 3?(float)args[2]:1;
-        
-        float f2 = args.Length >= 2?(float)args[1]:0;
-        float f1 = args.Length >= 1?(float)args[0]:0;
-
-        if(args.Length < 2) f2 = f1;
-        
-        this.i_down = (int)((f1<f2)?f1:f2);
-        this.i_up = (int)((f1>f2)?f1:f2);
-        
-	    this.i_count = this.i_down;
-
-        AddInlet(_list,new Symbol("bound"));
-        AddInlet(ref step);
-
-        AddOutlet(_float);
-        AddOutlet(_bang);
-    }
-
-	// this function MUST exist
-	private static void Setup(Counter obj)
-	{
-	    AddMethod(obj.Bang);
-        AddMethod(0,"reset",obj.Reset);
-        AddMethod(0,"set",obj.Set);
-        AddMethod(0,"bound",obj.Bound);
-	}
-
-    protected void Bang() 
-    {
-    
-        float f = this.i_count;
-        int step = (int)this.step;
-        this.i_count += step;
-        
-        if(this.i_down-this.i_up != 0) {
-            if(step > 0 && this.i_count > this.i_up) {
-                this.i_count = this.i_down;
-                Outlet(1);
-            }
-            else if(this.i_count < this.i_down) {
-                this.i_count = this.i_up;
-                Outlet(1);
-            }
-        }
-        
-        Outlet(0,f);   
-    }
-
-    protected void Reset() 
-    { 
-        this.i_count = this.i_down;
-    }
-
-    protected void Set(float f) 
-    { 
-        this.i_count = (int)f;
-    }
-
-    protected void Bound(Atom[] args) 
-    { 
-        float f1 = (float)args[0];
-        float f2 = (float)args[1];
-        
-        this.i_down = (int)((f1<f2)?f1:f2);
-        this.i_up = (int)((f1>f2)?f1:f2);
-    }
-}
diff --git a/externals/clr/Counter/Counter.csproj b/externals/clr/Counter/Counter.csproj
deleted file mode 100644
index ab8a5eb4b..000000000
--- a/externals/clr/Counter/Counter.csproj
+++ /dev/null
@@ -1,107 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{8CFEFB15-2A72-45B5-BC99-3BAFFB2B27C3}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>Counter</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Counter</RootNamespace>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>true</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-    <Reference Include="System.XML">
-      <Name>System.XML</Name>
-    </Reference>
-    <ProjectReference Include="..\PureData\PureData.csproj">
-      <Name>PureData</Name>
-      <Project>{0015D5E7-B0FB-4F06-B334-225447D1F992}</Project>
-      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Counter.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/externals/clr/Counter/README.txt b/externals/clr/Counter/README.txt
deleted file mode 100644
index abd1e5977..000000000
--- a/externals/clr/Counter/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-to compile External.dll put  PureData.dll in this folder then execute this command:
-
-Using the Mono C#: 
-mcs -out:Counter.dll -target:library -r:PureData.dll -optimize+ *.cs
-
-For the Microsoft C# compiler, use csc instead of mcs
diff --git a/externals/clr/Counter/counter-help.pd b/externals/clr/Counter/counter-help.pd
deleted file mode 100644
index 7648acc5d..000000000
--- a/externals/clr/Counter/counter-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 0 0 458 308 12;
-#X obj 233 204 Counter;
-#X msg 306 91 2 7;
-#X floatatom 372 91 5 0 0 0 - - -;
-#X obj 284 241 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 226 240 5 0 0 0 - - -;
-#X floatatom 90 55 5 0 0 0 - - -;
-#X msg 17 113 reset;
-#X obj 19 68 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X text 296 70 bounds;
-#X msg 164 80 bound 0 4;
-#X text 376 72 step;
-#X msg 90 79 set \$1;
-#X connect 0 0 4 0;
-#X connect 0 1 3 0;
-#X connect 1 0 0 1;
-#X connect 2 0 0 2;
-#X connect 5 0 11 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
-#X connect 11 0 0 0;
diff --git a/externals/clr/PureData/AssemblyInfo.cs b/externals/clr/PureData/AssemblyInfo.cs
deleted file mode 100644
index 93484d81c..000000000
--- a/externals/clr/PureData/AssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// Le informazioni generali relative a un assembly sono controllate dal seguente 
-// insieme di attributi. Per modificare le informazioni associate a un assembly 
-// occorre quindi modificare i valori di questi attributi.
-//
-[assembly: AssemblyTitle("PureData")]
-[assembly: AssemblyDescription("bridge between C sharp externals and pd")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("Davide Morelli, Thomas Grill")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori:
-//
-//      Numero di versione principale
-//      Numero di versione secondario 
-//      Numero revisione
-//      Numero build
-//
-// È possibile specificare tutti i valori o impostare come predefiniti i valori Numero revisione e Numero build 
-// utilizzando l'asterisco (*) come illustrato di seguito:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// Per firmare l'assembly è necessario specificare una chiave da utilizzare.
-// Fare riferimento alla documentazione di Microsoft .NET Framework per ulteriori informazioni sulla firma degli assembly.
-//
-// Utilizzare gli attributi elencati di seguito per verificare la chiave utilizzata per la firma. 
-//
-// Note: 
-//   (*) Se non è specificata alcuna chiave, non sarà possibile firmare l'assembly.
-//   (*) KeyName fa riferimento a una chiave installata nel provider di servizi di
-//       crittografia (CSP) sul computer in uso. KeyFile fa riferimento a un file che contiene
-//       una chiave.
-//   (*) Se entrambi i valori KeyFile e KeyName sono specificati, si 
-//       verificherà il seguente processo:
-//       (1) Se KeyName è presente in CSP, verrà utilizzata tale chiave.
-//       (2) Se KeyName non esiste e KeyFile esiste, la chiave 
-//           di KeyFile verrà installata nel CSP e utilizzata.
-//   (*) Per creare un KeyFile, è possibile utilizzare l'utilità sn.exe (Strong Name).
-//       Quando si specifica il KeyFile, il percorso dovrà essere
-//       relativo alla directory di output del progetto, ovvero
-//       %Project Directory%\obj\<configuration>. Se ad esempio il KeyFile si
-//       trova nella directory del progetto, occorre specificare l'attributo AssemblyKeyFile 
-//       come [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) La firma ritardata è un'opzione avanzata. Vedere la documentazione di Microsoft
-//       .NET Framework per ulteriori informazioni.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
diff --git a/externals/clr/PureData/Atom.cs b/externals/clr/PureData/Atom.cs
deleted file mode 100644
index 4e78eef0d..000000000
--- a/externals/clr/PureData/Atom.cs
+++ /dev/null
@@ -1,289 +0,0 @@
-using System;
-using System.Runtime.InteropServices; // for structures
-using System.Collections;
-#if NET_2_0
-using System.Collections.Generic;
-#endif
-
-namespace PureData
-{
-    [StructLayout (LayoutKind.Sequential)]
-    public struct Symbol
-    {
-        // this should NOT be public (or at least read only)
-        private readonly IntPtr sym;
-
-        public Symbol(string s)
-        {
-            this = Internal.SymGen(s);
-        }
-
-        public override string ToString()
-        {
-            return Internal.SymEval(this);
-        }
-
-        public static bool operator ==(Symbol s1,Symbol s2)
-        {
-            return s1.sym == s2.sym;
-        }
-
-        public static bool operator !=(Symbol s1, Symbol s2)
-        {
-            return s1.sym != s2.sym;
-        }
-
-        public override bool Equals(object o)
-        {
-            try { return this == (Symbol)o; }
-            catch {}
-            return false;
-        }
-
-        public override int GetHashCode()
-        {
-            return (int)sym;
-        }
-    }
-
-    [StructLayout (LayoutKind.Sequential)]
-    public struct Pointer
-    {
-        private readonly IntPtr ptr;
-
-        public override string ToString()
-        {
-            return ptr.ToString();
-        }
-    }
-
-	[StructLayout (LayoutKind.Sequential)]
-	public struct Atom 
-	{
-        private enum AtomType {Null = 0, Float = 1, Symbol = 2, Pointer = 3};
-        
-        [StructLayout (LayoutKind.Explicit)]
-        private struct Word
-        {
-            [FieldOffset(0)] public float w_float;
-            [FieldOffset(0)] public Symbol w_sym;
-            [FieldOffset(0)] public Pointer w_ptr;
-        }
-
-		private AtomType type;
-		private Word word;
-		
-		public Atom(float f)
-		{
-			type = AtomType.Float;
-			word = new Word();
-			word.w_float = f;
-		}
-
-		public Atom(int i)
-		{
-            type = AtomType.Float;
-            word = new Word();
-            word.w_float = (float)i;
-        }
-
-        public Atom(Symbol s)
-        {
-            type = AtomType.Symbol;
-            word = new Word();
-            word.w_sym = s;
-        }
-        
-		public Atom(string s)
-		{
-            type = AtomType.Symbol;
-            word = new Word();
-            word.w_sym = new Symbol(s);
-		}
-
-        public Atom(Pointer p)
-        {
-            type = AtomType.Pointer;
-            word = new Word();
-            word.w_ptr = p;
-        }
-
-        public bool IsFloat { get { return type == AtomType.Float; } }
-        public bool IsSymbol { get { return type == AtomType.Symbol; } }
-        public bool IsPointer { get { return type == AtomType.Pointer; } }
-
-        public float ToFloat()
-        {
-            if(IsFloat)
-                return word.w_float;
-            else
-                throw new System.InvalidCastException("Can't be cast to float.");
-        }
-        
-        public Symbol ToSymbol()
-        {
-            if(IsSymbol)
-                return word.w_sym;
-            else
-                throw new System.InvalidCastException("Can't be cast to Symbol.");
-        }
-        
-        public Pointer ToPointer()
-        {
-            if(IsPointer)
-                return word.w_ptr;
-            else
-                throw new System.InvalidCastException("Can't be cast to Pointer.");
-        }
-        
-        override public string ToString()
-        {
-            if(IsFloat)
-                return word.w_float.ToString();
-            else if(IsSymbol)
-                return word.w_sym.ToString();
-            else if(IsPointer)
-                return word.w_ptr.ToString();
-            else
-                // should never happen
-                throw new System.InvalidProgramException("Internal error.");
-        }
-
-        public static explicit operator float(Atom a)
-        {
-            return a.ToFloat();
-        }
-
-        public static explicit operator Symbol(Atom a)
-        {
-            return a.ToSymbol();
-        }
-
-        public static explicit operator Pointer(Atom a)
-        {
-            return a.ToPointer();
-        }
-    }
-	
-    internal class AtomListEnum
-        : IEnumerator
-    {
-        public AtomList list;
-
-        // Enumerators are positioned before the first element
-        // until the first MoveNext() call.
-        int position = -1;
-
-        public AtomListEnum(AtomList l)
-        {
-            list = l;
-        }
-
-        public bool MoveNext()
-        {
-            return ++position < list.Count;
-        }
-
-        public void Reset()
-        {
-            position = -1;
-        }
-
-        public object Current
-        {
-            get
-            {
-                try
-                {
-                    return list[position];
-                }
-                catch (IndexOutOfRangeException)
-                {
-                    throw new InvalidOperationException();
-                }
-            }
-        }
-    }
-
-
-    // attention: this is dangerous, because we could do the following
-    // AtomList l2 = l;  
-    // with l also being an AtomList... the two private members of the struct will get copied, although atoms is only a temporary reference
-
-    [StructLayout (LayoutKind.Sequential)]
-    internal unsafe struct AtomList
-#if xNET_2_0
-		: ICollection<Atom>
-#else
-        : ICollection
-#endif
-    {
-        private readonly int len;
-        private readonly Atom *atoms;
-        
-        public int Count { get { return len; } }
-#if xNET_2_0
-        public bool IsReadOnly { get { return false; } } // member of generic.ICollection<Atom> (C# 2.0)
-#endif        
-        public bool IsSynchronized { get { return false; } }
-        public Object SyncRoot { get { return null; } }
-
-        // protect this from being used
-        private AtomList(AtomList a) { len = 0; atoms = null; }
-
-#if xNET_2_0
-        public void CopyTo(Atom[] array,int start)
-#else        
-        public void CopyTo(Array array,int start)
-#endif        
-        {
-            if(len > array.GetUpperBound(0)+1-start)
-                throw new System.ArgumentException("Destination array is not long enough.");
-            int i;                
-            for(i = 0; i < len-start; ++i)
-                array.SetValue(atoms[start+i],i);
-        }
-
-        public IEnumerator GetEnumerator()
-        {
-            return new AtomListEnum(this);
-        }
-        
-        public Atom this[int i]
-        {
-            get
-            {
-                if(i < 0 || i >= len)
-                    throw new System.IndexOutOfRangeException("Index outside array bounds.");
-                return atoms[i];
-            }
-            set
-            {
-                if(i < 0 || i >= len)
-                    throw new System.IndexOutOfRangeException("Index outside array bounds.");
-                atoms[i] = value;
-            }
-        }
-
-//#if 1 // !NET_2_0
-        public static explicit operator Atom[](AtomList l)
-        {
-            Atom[] ret = new Atom[l.Count];
-            int i;
-            for(i = 0; i < l.Count; ++i) ret[i] = l.atoms[i];
-            return ret;
-        }
-//#endif        
-
-        override public string ToString()
-        {
-            string n = "{";
-            if(len > 0) {
-                int i;
-                for(i = 0; i < len-1; ++i) n += atoms[i].ToString()+",";
-                n += atoms[i].ToString();
-            }
-            return n+"}";
-        }
-    }	
-}
diff --git a/externals/clr/PureData/DynamicMethod.cs b/externals/clr/PureData/DynamicMethod.cs
deleted file mode 100644
index 749bb1a82..000000000
--- a/externals/clr/PureData/DynamicMethod.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-using System.Reflection;
-using System.Reflection.Emit;
-
-namespace PureData
-{
-    public delegate void DynamicMethodBang(External target);
-    public delegate void DynamicMethodFloat(External target,float f);
-    public delegate void DynamicMethodSymbol(External target,Symbol s);
-    public delegate void DynamicMethodPointer(External target,Pointer p);
-    public delegate void DynamicMethodList(External target,Atom[] l);
-    public delegate void DynamicMethodAnything(External target,int i,Symbol s,Atom[] l);
-    public delegate void DynamicMethodObject(External target,int i,object o);
-
-    class DynamicMethods
-    {
-        private static Delegate CreateIntern(Delegate del, Type dyntype)
-        {
-            MethodInfo dynmethod = dyntype.GetMethod("Invoke");
-            ParameterInfo[] dynparms = dynmethod.GetParameters();
-            MethodInfo method = del.Method;
-
-#if DEBUG
-            if (dynmethod.ReturnType != typeof(void)) throw new ArgumentException("Return type must be void");
-
-            ParameterInfo[] parms = method.GetParameters();
-            int numparms = parms.Length;
-
-            if (dynparms.Length != numparms + 1) throw new ArgumentException("Number of parameters don't match");
-
-            for (int i = 0; i < numparms; ++i)
-                if (dynparms[i + 1].ParameterType != parms[i].ParameterType) throw new ArgumentException("Parameter types don't match");
-#endif
-
-            Type[] argtypes = new Type[dynparms.Length];
-            for (int i = 0; i < dynparms.Length; ++i)
-                argtypes[i] = dynparms[i].ParameterType;
-
-            // Create dynamic method and obtain its IL generator to inject code.
-            DynamicMethod dynam = new DynamicMethod("dummy", typeof(void), argtypes, typeof(DynamicMethods));
-            ILGenerator il = dynam.GetILGenerator();
-
-            #region IL Code generation
-            // If method isn't static push target instance on top of stack.
-            if (!method.IsStatic)
-                // Argument 0 of dynamic method is target instance.
-                il.Emit(OpCodes.Ldarg_0);
-
-            // Push parameters onto the stack
-            for (int i = 0; i < dynparms.Length - 1; ++i)
-                il.Emit(OpCodes.Ldarg, i + 1);
-
-            // Perform actual call.
-            // If method is not final a callvirt is required otherwise a normal call will be emitted.
-            il.Emit(method.IsFinal ? OpCodes.Call : OpCodes.Callvirt, method);
-
-            // Emit return opcode.
-            il.Emit(OpCodes.Ret);
-            #endregion
-
-            return dynam.CreateDelegate(dyntype);
-        }
-
-        #region Specialized DynamicMethod makers
-        public static DynamicMethodBang Create(Public.MethodBang method)
-        {
-            return (DynamicMethodBang)CreateIntern(method, typeof(DynamicMethodBang));
-        }
-
-        public static DynamicMethodFloat Create(Public.MethodFloat method)
-        {
-            return (DynamicMethodFloat)CreateIntern(method,typeof(DynamicMethodFloat));
-        }
-
-        public static DynamicMethodSymbol Create(Public.MethodSymbol method)
-        {
-            return (DynamicMethodSymbol)CreateIntern(method,typeof(DynamicMethodSymbol));
-        }
-
-        public static DynamicMethodPointer Create(Public.MethodPointer method)
-        {
-            return (DynamicMethodPointer)CreateIntern(method,typeof(DynamicMethodPointer));
-        }
-
-        public static DynamicMethodList Create(Public.MethodList method)
-        {
-            return (DynamicMethodList)CreateIntern(method,typeof(DynamicMethodList));
-        }
-
-        public static DynamicMethodAnything Create(Public.MethodAnything method)
-        {
-            return (DynamicMethodAnything)CreateIntern(method,typeof(DynamicMethodAnything));
-        }
-
-        public static DynamicMethodObject Create(Public.MethodObject method)
-        {
-            return (DynamicMethodObject)CreateIntern(method, typeof(DynamicMethodObject));
-        }
-        #endregion
-    }
-}
diff --git a/externals/clr/PureData/PureData.cs b/externals/clr/PureData/PureData.cs
deleted file mode 100644
index 017431791..000000000
--- a/externals/clr/PureData/PureData.cs
+++ /dev/null
@@ -1,670 +0,0 @@
-using System;
-using System.Runtime.CompilerServices; // for extern import
-using System.Runtime.InteropServices; // for structures
-using System.Reflection;
-using System.Collections;
-
-namespace PureData
-{
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ClassPtr
-    {
-        private IntPtr ptr;
-
-        public void Clear() { ptr = IntPtr.Zero; }
-        public bool Valid() { return ptr != IntPtr.Zero; }
-
-        public override string ToString() { return ptr.ToString(); }
-    }
-
-    [StructLayout(LayoutKind.Sequential)]
-    internal struct ExternalPtr
-    {
-        private IntPtr ptr;
-
-        public void Clear() { ptr = IntPtr.Zero; }
-        public bool Valid() { return ptr != IntPtr.Zero; }
-
-        public override string ToString() { return ptr.ToString(); }
-    }
-
-    // data passed from/to native side
-    [StructLayout(LayoutKind.Sequential)]
-    internal class PassedData
-    {
-        public Class klass;
-        public External ext;
-        public object obj;
-    }
-
-    // PD core functions
-    public class Internal 
-    {
-        // the ExternalPtr when initializing an External instance
-        internal static ExternalPtr extptr;
-
-        internal static PassedData pass;
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static Symbol SymGen(string sym);        
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static string SymEval(Symbol sym);        
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, Symbol sel, Symbol to_sel);
-
-        // map to data member
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, ref float f); 
-
-        // map to data member
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, ref Symbol s);
-
-        // map to data member
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj,ref Pointer f);
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj, Symbol type); // create proxy inlet (typed)
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddInlet(ExternalPtr obj); // create proxy inlet (anything)
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void AddOutlet(ExternalPtr obj, Symbol type);
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, float f);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Symbol s);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Pointer p);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Atom a);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Outlet(ExternalPtr obj, int n, Symbol s, Atom[] l);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void OutletEx(ExternalPtr obj, int n, object o);
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Bind(ExternalPtr obj, Symbol dst);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        internal extern static void Unbind(ExternalPtr obj, Symbol dst);
-    }
-
-
-    public abstract class Public
-        : Internal
-    {
-        // to be returned by Setup function
-        protected enum ClassType { Default = 0, PD = 1, GObj = 2, Patchable = 3, NoInlet = 8 }
-
-        // --------------------------------------------------------------------------
-
-        public delegate void MethodBang();
-        public delegate void MethodFloat(float f);
-        public delegate void MethodSymbol(Symbol s);
-        public delegate void MethodPointer(Pointer p);
-        public delegate void MethodList(Atom[] lst);
-        public delegate void MethodAnything(int inlet, Symbol tag, Atom[] lst);
-        public delegate void MethodObject(int inlet, object o);
-
-        // --------------------------------------------------------------------------
-
-        public readonly static Symbol _ = new Symbol("");
-        public readonly static Symbol _bang = new Symbol("bang");
-        public readonly static Symbol _float = new Symbol("float");
-        public readonly static Symbol _symbol = new Symbol("symbol");
-        public readonly static Symbol _pointer = new Symbol("pointer");
-        public readonly static Symbol _list = new Symbol("list");
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        public extern static void Post(string message);
-
-        public static void Post(string format, object arg0) { Post(String.Format(format, arg0)); }
-        public static void Post(string format, object arg0, object arg1) { Post(String.Format(format, arg0, arg1)); }
-        public static void Post(string format, object arg0, object arg1, object arg2) { Post(String.Format(format, arg0, arg1, arg2)); }
-        public static void Post(string format, params object[] args) { Post(String.Format(format, args)); }
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        public extern static void PostError(string message);
-
-        public static void PostError(string format, object arg0) { PostError(String.Format(format, arg0)); }
-        public static void PostError(string format, object arg0, object arg1) { PostError(String.Format(format, arg0, arg1)); }
-        public static void PostError(string format, object arg0, object arg1, object arg2) { PostError(String.Format(format, arg0, arg1, arg2)); }
-        public static void PostError(string format, params object[] args) { PostError(String.Format(format, args)); }
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        public extern static void PostVerbose(int lvl, string message);
-
-        public static void PostVerbose(int lvl, string format, object arg0) { PostVerbose(lvl, String.Format(format, arg0)); }
-        public static void PostVerbose(int lvl, string format, object arg0, object arg1) { PostVerbose(lvl, String.Format(format, arg0, arg1)); }
-        public static void PostVerbose(int lvl, string format, object arg0, object arg1, object arg2) { PostVerbose(lvl, String.Format(format, arg0, arg1, arg2)); }
-        public static void PostVerbose(int lvl, string format, params object[] args) { PostVerbose(lvl, String.Format(format, args)); }
-
-        // --------------------------------------------------------------------------
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        public extern static string SearchPath(string file);
-    }
-
-
-    public sealed class Class
-        : Public
-    {
-        // PD class pointer
-        private readonly ClassPtr ptr;
-
-        // class type
-        private Type extclass;
-
-        // --------------------------------------------------------------------------        
-
-        // simple methods for inlet 0
-        private DynamicMethodBang m_bang = null;
-        private DynamicMethodFloat m_float = null;
-        private DynamicMethodSymbol m_symbol = null;
-        private DynamicMethodPointer m_pointer = null;
-        private DynamicMethodList m_list = null;
-        private DynamicMethodAnything m_anything = null;
-        private DynamicMethodObject m_object = null;
-
-        // --------------------------------------------------------------------------        
-
-        private static void ResizeArray(ref Hashtable[] oldArray, int newSize)
-        {
-            int oldSize = oldArray.Length;
-            System.Type elementType = oldArray.GetType().GetElementType();
-            Hashtable[] newArray = (Hashtable[])System.Array.CreateInstance(elementType, newSize);
-            int preserveLength = System.Math.Min(oldSize, newSize);
-            if (preserveLength > 0)
-                System.Array.Copy(oldArray, newArray, preserveLength);
-            oldArray = newArray;
-        }
-
-        private struct MapValue
-        {
-            public MapValue(Kind k,Delegate d) { this.k = k; this.d = d; }
-
-            public Kind k;
-            public Delegate d;
-        }
-
-        private Hashtable[] m_map = new Hashtable[0];
-
-        // --------------------------------------------------------------------------        
-
-        public override string ToString()
-        {
-            return extclass.Name;
-        }
-
-        // --------------------------------------------------------------------------        
-
-        private enum Kind { k_bang, k_float, k_symbol, k_pointer, k_list, k_anything, k_object }
-
-        private enum MethodFlags { f_none = 0,f_bang = 0x01, f_float = 0x02, f_symbol = 0x04, f_pointer = 0x08, f_list = 0x10, f_anything = 0x20 }
-
-        private static MethodFlags methodflags;
-
-
-        // --------------------------------------------------------------------------        
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        private extern static bool RegisterClass(ClassPtr ptr, Symbol sym, ClassType cflags, MethodFlags mflags);
-
-        private void AddMethodIntern(int inlet, Symbol sel, Kind k, Delegate d)
-        {
-            // add to map
-            if (m_map.Length <= inlet) ResizeArray(ref m_map, inlet + 1);
-            Hashtable h = m_map[inlet];
-            if(h == null) m_map[inlet] = h = new Hashtable(); 
-            h[sel] = new MapValue(k, d);
-
-            methodflags |= MethodFlags.f_anything;
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodBang d)
-        {
-            DynamicMethodBang dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _bang)
-            {
-                m_bang = dyn;
-                methodflags |= MethodFlags.f_bang;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_bang, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodFloat d)
-        {
-            DynamicMethodFloat dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _float)
-            {
-                m_float = dyn;
-                methodflags |= MethodFlags.f_float;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_float, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodSymbol d)
-        {
-            DynamicMethodSymbol dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _symbol)
-            {
-                m_symbol = dyn;
-                methodflags |= MethodFlags.f_symbol;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_symbol, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodPointer d)
-        {
-            DynamicMethodPointer dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _pointer)
-            {
-                m_pointer = dyn;
-                methodflags |= MethodFlags.f_pointer;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_pointer, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodList d)
-        {
-            DynamicMethodList dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _list)
-            {
-                m_list = dyn;
-                methodflags |= MethodFlags.f_list;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_list, dyn);
-        }
-
-        public void AddMethod(int inlet, Symbol sel, MethodAnything d)
-        {
-            DynamicMethodAnything dyn = DynamicMethods.Create(d);
-            if (inlet == 0 && sel == _)
-            {
-                m_anything = dyn;
-                methodflags |= MethodFlags.f_anything;
-            }
-            else
-                AddMethodIntern(inlet, sel, Kind.k_anything, dyn);
-        }
-
-        public void AddMethod(int inlet, MethodObject d)
-        {
-            DynamicMethodObject dyn = DynamicMethods.Create(d);
-            m_object = dyn;
-            methodflags |= MethodFlags.f_anything;
-        }
-
-        // --------------------------------------------------------------------------        
-
-        private Class(ClassPtr p,Type c)
-        {
-            ptr = p;
-            extclass = c;
-        }
-
-        private delegate void DelegateClass(ClassPtr ptr, Symbol sym);
-        private static void NewClass(ClassPtr ptr, Symbol sym)
-        {
-            Internal.pass.klass = null;
-
-            try 
-            {
-                string name = sym.ToString();
-
-                // load assembly according to name
-                string file = SearchPath(name + ".dll");
-                if (file.Length == 0) return; // throw new ArgumentException("Assembly file " + name + " not found");
-                Assembly assembly = Assembly.LoadFile(file);
-                if (assembly == null) return; // throw new ArgumentException("Assembly " + name + " could not be loaded");
-                Type exttp = assembly.GetType(name);
-                if (exttp == null) throw new ArgumentException("Class " + name + " could not be found");
-
-                Class klass = new Class(ptr, exttp);
-
-                // create dummy external
-                ConstructorInfo ctor = exttp.GetConstructor(System.Type.EmptyTypes);
-                if (ctor == null) throw new MissingMethodException("External class must have a default constructor");
-
-                Internal.pass.klass = klass;
-                Internal.extptr.Clear();
-
-                External dummy = (External)ctor.Invoke(null);
-
-                // reset flags
-                methodflags = MethodFlags.f_none;
-
-                // call Setup method
-                MethodInfo setup = exttp.GetMethod("Setup",BindingFlags.NonPublic|BindingFlags.Static,null, new Type[1] { exttp },null);
-                if (setup == null) throw new MissingMethodException("External class must have a Setup function");
-
-                object ret = setup.Invoke(exttp, new object[1] { dummy });
-                ClassType classflags;
-                try { classflags = (ClassType)ret; }
-                catch { classflags = ClassType.Default; }
-
-                // set callbacks
-                RegisterClass(ptr, sym, classflags, methodflags);
-            }
-            catch (Exception exc) 
-            {
-                Internal.pass.klass = null;
-                PostError(exc.ToString());
-            }
-        }
-
-        private delegate void DelegateNew(ExternalPtr ptr,AtomList args);
-        private static void NewInstance(ExternalPtr ptr,AtomList args)
-        {
-            External instance;
-            
-            Class cl = Internal.pass.klass; // set by native side
-            Internal.extptr = ptr;
-
-//            Post("CLASS-NEW {0}",cl);
-            try 
-            {
-                // TODO: create dynamic delegate for that....
-                System.Reflection.ConstructorInfo m = cl.extclass.GetConstructor(new Type[1] { typeof(Atom[]) });
-                if (m != null)
-                    instance = (External)m.Invoke(new object[1] { (Atom[])args });
-                else
-                {
-                    // search for the argument-less constructor... it must exist, we searched before
-                    m = cl.extclass.GetConstructor(System.Type.EmptyTypes);
-                    instance = (External)m.Invoke(null);
-                }
-            }
-            catch (Exception exc) 
-            {
-                instance = null;
-                PostError(exc.ToString()); 
-            }
-
-#if DEBUG
-            Internal.extptr.Clear();
-#endif
-
-            Internal.pass.ext = instance; // back to native
-         }
-
-        private delegate void DelegateBang();
-        private static void CallBang()
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_bang(e); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateFloat(float f);
-        private static void CallFloat(float f)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_float(e, f); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateSymbol(Symbol s);
-        private static void CallSymbol(Symbol s)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_symbol(e, s); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegatePointer(Pointer p);
-        private static void CallPointer(Pointer p)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_pointer(e, p); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateList(AtomList l);
-        private static void CallList(AtomList l)
-        {
-            External e = Internal.pass.ext;
-            try { e.klass.m_list(e, (Atom[])l); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateAnything(int inlet, Symbol s, AtomList l);
-        private static void CallAnything(int inlet, Symbol s, AtomList l)
-        {
-//            Post("CLASS-ANYTHING {0}->{1}:{2}", inlet,s,l);
-
-            try {
-                External e = Internal.pass.ext;
-                Class c = e.klass;
-
-                Hashtable h;
-                try { h = (Hashtable)c.m_map[inlet]; }
-                catch (IndexOutOfRangeException) { h = null; }
-
-                if(h != null)
-                {
-                    object fnd = h[s];
-                    if (fnd != null)
-                    {
-                        MapValue mv = (MapValue)fnd;
-                        switch(mv.k)
-                        {
-                            case Kind.k_bang:
-                                {
-                                    ((DynamicMethodBang)mv.d)(e);
-                                    return;
-                                }
-                            case Kind.k_float:
-                                {
-                                    float f = l.Count > 0 ? (float)l[0] : 0;
-                                    ((DynamicMethodFloat)mv.d)(e, f);
-                                    return;
-                                }
-                            case Kind.k_symbol:
-                                {
-                                    Symbol sym = l.Count > 0 ? (Symbol)l[0] : _;
-                                    ((DynamicMethodSymbol)mv.d)(e, sym);
-                                    return;
-                                }
-                            case Kind.k_pointer:
-                                {
-                                    Pointer p = l.Count > 0 ? (Pointer)l[0] : new Pointer();
-                                    ((DynamicMethodPointer)mv.d)(e, p);
-                                    return;
-                                }
-                            case Kind.k_list:
-                                ((DynamicMethodList)mv.d)(e,(Atom[])l);
-                                return;
-                            case Kind.k_anything:
-                                ((DynamicMethodAnything)mv.d)(e,inlet,s,(Atom[])l);
-                                return;
-                            default:
-                                throw new NotImplementedException("Selector " + s.ToString() + " not handled");
-                        }
-                    }
-                }
-
-                // no explicit method found...
-                c.m_anything(e, inlet, s, (Atom[])l); 
-            }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        private delegate void DelegateObject(int inlet);
-        private static void CallObject(int inlet)
-        {
-//            Post("CLASS-OBJECT {0}", inlet);
-
-            External e = Internal.pass.ext;
-            try { e.klass.m_object(e, inlet, Internal.pass.obj); }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-
-        // --------------------------------------------------------------------------        
-
-        [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        private extern static void Register(DelegateClass d_class, DelegateNew d_new, DelegateBang d_bang, DelegateFloat d_float, DelegateSymbol d_symbol, DelegatePointer d_pointer, DelegateList d_list, DelegateAnything d_anything, DelegateObject d_object);
-
-        private static void Setup()
-        {
-            try
-            {
-                Internal.pass = new PassedData();
-
-                Register(
-                    new DelegateClass(NewClass),
-                    new DelegateNew(NewInstance),
-                    new DelegateBang(CallBang),
-                    new DelegateFloat(CallFloat),
-                    new DelegateSymbol(CallSymbol),
-                    new DelegatePointer(CallPointer),
-                    new DelegateList(CallList),
-                    new DelegateAnything(CallAnything),
-                    new DelegateObject(CallObject)
-                );
-            }
-            catch (Exception exc) { PostError(exc.ToString()); }
-        }
-    }
-
-   
-    // This is the base class for a PD/CLR external
-    public abstract class External
-        : Public
-    {
-        // PD object pointer
-        internal readonly ExternalPtr ptr;
-        // Class
-        internal readonly Class klass;
-
-        // --------------------------------------------------------------------------
-
-        protected External()
-        {
-            ptr = Internal.extptr;
-            klass = Internal.pass.klass;
-        }
-
-        public override string ToString()
-        {
-            return ptr.Valid()?klass.ToString():"???";
-        }
-
-        // --------------------------------------------------------------------------
-
-        protected static void AddMethod(int inlet, Symbol sel, MethodBang m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodFloat m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodSymbol m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodPointer m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodList m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, Symbol sel, MethodAnything m) { ((External)m.Target).klass.AddMethod(inlet, sel, m); }
-        protected static void AddMethod(int inlet, MethodObject m) { ((External)m.Target).klass.AddMethod(inlet, m); }
-
-        protected static void AddMethod(int inlet, MethodBang m) { AddMethod(inlet, _bang, m); }
-        protected static void AddMethod(int inlet, MethodFloat m) { AddMethod(inlet, _float, m); }
-        protected static void AddMethod(int inlet, MethodSymbol m) { AddMethod(inlet, _symbol, m); }
-        protected static void AddMethod(int inlet, MethodPointer m) { AddMethod(inlet, _pointer, m); }
-        protected static void AddMethod(int inlet, MethodList m) { AddMethod(inlet, _list, m); }
-        protected static void AddMethod(int inlet, MethodAnything m) { AddMethod(inlet, _, m); }
-
-        protected static void AddMethod(MethodBang m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodFloat m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodSymbol m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodPointer m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodList m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodAnything m) { AddMethod(0, m); }
-        protected static void AddMethod(MethodObject m) { AddMethod(0, m); }
-
-        protected static void AddMethod(int inlet, string sel, MethodBang m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodFloat m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodSymbol m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodPointer m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodList m) { AddMethod(inlet, new Symbol(sel), m); }
-        protected static void AddMethod(int inlet, string sel, MethodAnything m) { AddMethod(inlet, new Symbol(sel), m); }
-
-        // --------------------------------------------------------------------------
-
-        protected void AddInlet(ref float f) { Internal.AddInlet(ptr, ref f); } // map to data member
-        protected void AddInlet(ref Symbol s) { Internal.AddInlet(ptr, ref s); } // map to data member
-        protected void AddInlet(ref Pointer p) { Internal.AddInlet(ptr,ref p); } // map to data member
-//        protected void AddInlet(Symbol type) { Internal.AddInlet(ptr,type); } // create typed inlet
-        protected void AddInlet() { Internal.AddInlet(ptr); } // create inlet responding to any message
-        protected void AddInlet(Symbol sel, Symbol to_sel) { Internal.AddInlet(ptr, sel, to_sel); } // redirect messages to defined selector
-
-        // --------------------------------------------------------------------------
-
-        protected void AddOutlet(Symbol type) { Internal.AddOutlet(ptr, type); }
-
-        protected void AddOutletBang() { AddOutlet(_bang); }
-        protected void AddOutletFloat() { AddOutlet(_float); }
-        protected void AddOutletSymbol() { AddOutlet(_symbol); }
-        protected void AddOutletPointer() { AddOutlet(_pointer); }
-        protected void AddOutletList() { AddOutlet(_list); }
-        protected void AddOutletAnything() { AddOutlet(_); }
-
-        // --------------------------------------------------------------------------
-
-        protected void Outlet(int n) { Internal.Outlet(ptr,n); }
-        protected void Outlet(int n,float f) { Internal.Outlet(ptr,n,f); }
-        protected void Outlet(int n,Symbol s) { Internal.Outlet(ptr,n,s); }
-        protected void Outlet(int n,Pointer p) { Internal.Outlet(ptr,n,p); }
-        protected void Outlet(int n,Atom a) { Internal.Outlet(ptr,n,a); }
-        protected void Outlet(int n,Atom[] l) { Internal.Outlet(ptr,n,_list,l); }
-        protected void Outlet(int n,Symbol s,Atom[] l) { Internal.Outlet(ptr,n,s,l); }
-
-        protected void OutletEx(int n,object o) { Internal.OutletEx(ptr,n,o); }
-
-        // --------------------------------------------------------------------------
-
-        // bind to symbol
-        protected void Bind(Symbol sym) { Internal.Bind(ptr,sym); }
-        protected void Unbind(Symbol sym) { Internal.Unbind(ptr,sym); }
-
-        // send to receiver symbol
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        protected extern static void Send(Symbol sym,Atom a);
-
-        protected static void Send(Symbol sym) { Send(sym,_bang,new Atom[0]); }
-        protected static void Send(Symbol sym,float f) { Send(sym,new Atom(f)); }
-        protected static void Send(Symbol sym,Symbol s) { Send(sym,new Atom(s)); }
-        protected static void Send(Symbol sym,Pointer p) { Send(sym,new Atom(p)); }
-        protected static void Send(Symbol sym,Atom[] l) { Send(sym,_list,l); }
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        protected extern static void Send(Symbol sym,Symbol s,Atom[] l);
-
-        [MethodImplAttribute (MethodImplOptions.InternalCall)]
-        protected extern static void SendEx(Symbol sym,object o);
-    }
-}
diff --git a/externals/clr/PureData/PureData.csproj b/externals/clr/PureData/PureData.csproj
deleted file mode 100644
index 2d65f14df..000000000
--- a/externals/clr/PureData/PureData.csproj
+++ /dev/null
@@ -1,108 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{0015D5E7-B0FB-4F06-B334-225447D1F992}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>PureData</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Library</OutputType>
-    <RootNamespace>PureData</RootNamespace>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>TRACE;DEBUG;NET_2_0</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>TRACE;DEBUG;NET_2_0</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-    <Reference Include="System.Xml">
-      <Name>System.XML</Name>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Atom.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="DynamicMethod.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="PureData.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/externals/clr/PureData/README.txt b/externals/clr/PureData/README.txt
deleted file mode 100644
index effae7556..000000000
--- a/externals/clr/PureData/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-to compile PureData.dll execute this command:
-
-Using the Mono C#: 
-mcs -unsafe+ -out:PureData.dll -target:library -optimize+ *.cs 
-
-For the Microsoft C# compiler, use csc instead of mcs
-
-
-put the PureData.dll anywhere in the PD search path (like e.g. the extra folder)
-
diff --git a/externals/clr/clr.cpp b/externals/clr/clr.cpp
deleted file mode 100644
index cef43ff83..000000000
--- a/externals/clr/clr.cpp
+++ /dev/null
@@ -1,703 +0,0 @@
-// mono
-extern "C" {
-#include <mono/jit/jit.h>
-#include <mono/metadata/object.h>
-#include <mono/metadata/environment.h>
-#include <mono/metadata/assembly.h>
-#include <mono/metadata/debug-helpers.h>
-#include <mono/metadata/class.h>
-#include <mono/metadata/metadata.h>
-
-// we need this one - it's in mono-devel
-gpointer mono_delegate_to_ftnptr (MonoDelegate *delegate);
-}
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4091)
-#endif
-#include <m_pd.h>
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _WIN32
-#include <io.h> // for _close
-#define close _close
-#else
-#include <unistd.h>
-#endif
-
-#include <map>
-#include <vector>
-#include <list>
-
-
-#define CALL __stdcall
-
-// main class library
-#define CORELIB "PureData"
-#define DLLEXT "dll"
-
-// symbol for inter-object messages
-#define SYM_OBJECT "clr-object"
-
-static t_symbol *sym_object;
-
-
-struct PassedData
-{
-	MonoObject object;
-
-	MonoObject *klass;	
-	MonoObject *ext;
-	MonoObject *obj;
-};
-
-struct AtomList
-{
-	AtomList(int c,t_atom *v): argc(c),argv(v) {}
-	
-	int argc;
-    t_atom *argv;
-};
-
-
-// cached mono data
-static MonoDomain *monodomain;
-static PassedData *clr_pass;
-
-// transforms a pointer (like MonoObject *) into a atom list
-template <class T>
-struct ObjectAtom
-{
-    // 64-bit safe...
-    enum { bitshift = 22,size = sizeof(T)*8/bitshift+1 };
-
-    t_atom msg[size];
-
-    ObjectAtom() {}
-
-    ObjectAtom(T o)
-    {
-        long ptr = (long)o;
-        for(int i = 0; i < size; ++i) {
-            SETFLOAT(msg+i,(int)(ptr&((1<<bitshift)-1)));
-            ptr >>= bitshift;
-        }
-    }
-
-    static bool check(int argc,const t_atom *argv)
-    {
-        if(argc != size) return false;
-        for(int i = 0; i < size; ++i)
-            if(argv[i].a_type != A_FLOAT) return false;
-        return true;
-    }
-
-    static T ptr(const t_atom *argv)
-    {
-        long ret = 0;
-        for(int i = size-1; i >= 0; --i)
-            ret = (ret<<bitshift)+(int)argv[i].a_w.w_float;
-        return (T)ret;
-    }
-
-    operator t_atom *() { return msg; }
-};
-
-
-enum Kind { k_bang, k_float, k_symbol, k_pointer, k_list, k_anything, k_object };
-
-
-// this is the class structure
-// holding the pd and mono class
-struct t_clr_class
-{
-    t_class *pd_class;
-    MonoObject *mono_class;
-};
-
-static t_class *proxy_class;
-
-struct t_instance;
-
-struct t_proxy
-{
-    t_object pd_obj; // myself
-    t_instance *parent; // parent object
-    int inlet;
-};
-
-typedef std::map<t_symbol *,t_clr_class *> ClrMap;
-// this holds the class name to class structure association
-static ClrMap clr_map;
-
-typedef std::vector<t_outlet *> OutletArr;
-typedef std::list<t_proxy *> ProxyList;
-
-// this is the class to be setup (while we are in the CLR static Main method)
-static t_clr_class *clr_setup_class = NULL;
-
-// inlet index... must start with 0 every time a new object is made
-static int clr_inlet;
-
-
-// this is the class instance object structure
-struct t_instance
-{
-    t_object pd_obj; // myself
-	t_clr_class *pd_class;
-    MonoObject *mono_obj;  // the mono class instance
-    guint32 mono_handle;  // the mono class instance
-
-	OutletArr *outlets;
-    ProxyList *proxies;
-};
-
-
-typedef void (__stdcall NewClass)(t_clr_class *c,const t_symbol *sym);
-typedef void (__stdcall NewInstance)(t_instance *p,AtomList l);
-typedef void (__stdcall CallBang)();
-typedef void (__stdcall CallFloat)(float f);
-typedef void (__stdcall CallSymbol)(const t_symbol *sym);
-typedef void (__stdcall CallPointer)(const t_gpointer *ptr);
-typedef void (__stdcall CallList)(AtomList l);
-typedef void (__stdcall CallAnything)(int inlet,const t_symbol *sym,AtomList l);
-typedef void (__stdcall CallObject)(int inlet);
-
-static NewClass *newclass = NULL;
-static NewInstance *newinstance = NULL;
-static CallBang *callbang = NULL;
-static CallFloat *callfloat = NULL;
-static CallSymbol *callsymbol = NULL;
-static CallPointer *callpointer = NULL;
-static CallList *calllist = NULL;
-static CallAnything *callanything = NULL;
-static CallObject *callobject = NULL;
-
-#if 0
-// Print error message given by exception
-static void error_exc(char* txt,char* cname,MonoObject* exc)
-{
-    MonoMethod* m = mono_method_desc_search_in_class(clr_desc_tostring,mono_get_exception_class());
-    assert(m);
-    m = mono_object_get_virtual_method(exc,m);
-    assert(m);
-    MonoString* str = (MonoString*)mono_runtime_invoke(m,exc,NULL,NULL);
-    assert(str);
-    error("CLR class %s: %s",txt,cname);
-    error(mono_string_to_utf8(str));
-}
-#endif
-
-
-static void clr_method_bang(t_instance *x) 
-{
-    assert(x);
-	assert(callbang);
-	clr_pass->ext = x->mono_obj;
-	callbang();
-}
-
-static void clr_method_float(t_instance *x,t_float f) 
-{
-    assert(x);
-	assert(callfloat);
-	clr_pass->ext = x->mono_obj;
-	callfloat(f);
-}
-
-static void clr_method_symbol(t_instance *x,t_symbol *s) 
-{
-    assert(x);
-	assert(callsymbol);
-	clr_pass->ext = x->mono_obj;
-	callsymbol(s);
-}
-
-static void clr_method_pointer(t_instance *x,t_gpointer *p)
-{
-    assert(x);
-	assert(callpointer);
-	clr_pass->ext = x->mono_obj;
-	callpointer(p);
-}
-
-static void clr_method_list(t_instance *x,t_symbol *,int argc,t_atom *argv)
-{
-    assert(x);
-	assert(calllist);
-	clr_pass->ext = x->mono_obj;
-	calllist(AtomList(argc,argv));
-}
-
-static void call_anything(t_instance *x,int inlet,t_symbol *s,int argc,t_atom *argv)
-{
-    assert(x);
-	clr_pass->ext = x->mono_obj;
-	if(s == sym_object && ObjectAtom<guint32>::check(argc,argv)) {
-		assert(callobject);
-		guint32 hnd = ObjectAtom<guint32>::ptr(argv);
-		clr_pass->obj = mono_gchandle_get_target(hnd);
-		callobject(inlet);
-	}
-	else {
-		assert(callanything);
-		callanything(inlet,s,AtomList(argc,argv));
-	}
-}
-
-static void clr_method_anything(t_instance *x,t_symbol *s,int argc,t_atom *argv) { call_anything(x,0,s,argc,argv); }
-static void clr_method_proxy(t_proxy *x,t_symbol *s,int argc,t_atom *argv) { call_anything(x->parent,x->inlet,s,argc,argv); }
-
-static void CALL PD_Post(MonoString *str)
-{
-	post("%s",mono_string_to_utf8(str));	
-}
-
-static void CALL PD_PostError(MonoString *str)
-{
-	error("%s",mono_string_to_utf8(str));	
-}
-
-static void CALL PD_PostVerbose(int lvl,MonoString *str)
-{
-	verbose(lvl,"%s",mono_string_to_utf8(str));	
-}
-
-static void *CALL PD_SymGen(MonoString *str)
-{
-    assert(str);
-	return gensym(mono_string_to_utf8(str));	
-}
-
-static MonoString *CALL PD_SymEval(t_symbol *sym)
-{
-    assert(sym);
-    return mono_string_new(monodomain,sym->s_name);
-}
-
-
-static void CALL PD_AddInletAlias(t_instance *obj,t_symbol *sel,t_symbol *to_sel)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = inlet_new(&obj->pd_obj,&obj->pd_obj.ob_pd,sel,to_sel);
-    assert(in);
-}
-
-static void CALL PD_AddInletFloat(t_instance *obj,float *f)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = floatinlet_new(&obj->pd_obj,f);
-    assert(in);
-}
-
-static void CALL PD_AddInletSymbol(t_instance *obj,t_symbol **s)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = symbolinlet_new(&obj->pd_obj,s);
-    assert(in);
-}
-
-/*
-static void CALL PD_AddInletPointer(t_clr *obj,t_gpointer *p)
-{
-    ++clr_inlet;
-    assert(obj);
-    t_inlet *in = pointerinlet_new(&obj->pd_obj,p);
-    assert(in);
-}
-*/
-
-static void CALL PD_AddInletProxyTyped(t_instance *obj,t_symbol *type)
-{
-    assert(obj);
-    t_proxy *p = (t_proxy *)pd_new(proxy_class);
-    p->parent = obj;
-    p->inlet = ++clr_inlet;
-    if(!obj->proxies) obj->proxies = new ProxyList;
-    obj->proxies->push_back(p);
-    t_inlet *in = inlet_new(&obj->pd_obj,&p->pd_obj.ob_pd,type,type);
-    assert(in);
-}
-
-static void CALL PD_AddInletProxy(t_instance *obj) { PD_AddInletProxyTyped(obj,NULL); }
-
-
-static void CALL PD_AddOutlet(t_instance *obj,t_symbol *type)
-{
-    assert(obj);
-    t_outlet *out = outlet_new(&obj->pd_obj,type);
-    assert(out);
-    if(!obj->outlets) obj->outlets = new OutletArr;
-    obj->outlets->push_back(out);
-}
-
-static void CALL PD_OutletBang(t_instance *obj,int n)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_bang((*obj->outlets)[n]);
-}
-
-static void CALL PD_OutletFloat(t_instance *obj,int n,float f)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_float((*obj->outlets)[n],f);
-}
-
-static void CALL PD_OutletSymbol(t_instance *obj,int n,t_symbol *s)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_symbol((*obj->outlets)[n],s);
-}
-
-static void CALL PD_OutletPointer(t_instance *obj,int n,t_gpointer *p)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    outlet_pointer((*obj->outlets)[n],p);
-}
-
-static void CALL PD_OutletAtom(t_instance *obj,int n,t_atom l)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-    t_outlet* out = (*obj->outlets)[n];
-    switch(l.a_type) {
-        case A_FLOAT: outlet_float(out,l.a_w.w_float); break;
-        case A_SYMBOL: outlet_symbol(out,l.a_w.w_symbol); break;
-        case A_POINTER: outlet_pointer(out,l.a_w.w_gpointer); break;
-        default: assert(false);
-    }
-}
-
-static void CALL PD_OutletAnything(t_instance *obj,int n,t_symbol *s,MonoArray *l)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-//    assert(mono_object_get_class(&l->obj) == clr_atom);
-    outlet_anything((*obj->outlets)[n],s,mono_array_length(l),mono_array_addr(l,t_atom,0));
-}
-
-
-static void CALL PD_OutletObject(t_instance *obj,int n,MonoObject *o)
-{
-    assert(obj);
-    assert(obj->outlets);
-    assert(n >= 0 && n < (int)obj->outlets->size());
-	guint32 hnd = mono_gchandle_new(o,TRUE);
-    ObjectAtom<guint32> oa(hnd);
-    outlet_anything((*obj->outlets)[n],sym_object,oa.size,oa);
-	mono_gchandle_free(hnd);
-}
-
-
-static void CALL PD_SendAtom(t_symbol *dst,t_atom a)
-{
-    void *cl = dst->s_thing;
-    if(cl) pd_forwardmess((t_class **)cl,1,&a);
-}
-
-static void CALL PD_SendAnything(t_symbol *dst,t_symbol *s,MonoArray *l)
-{
-    void *cl = dst->s_thing;
-//    assert(mono_object_get_class(&l->obj) == clr_atom);
-    if(cl) pd_typedmess((t_class **)cl,s,mono_array_length(l),mono_array_addr(l,t_atom,0));
-}
-
-static void CALL PD_SendObject(t_symbol *dst,MonoObject *o)
-{
-    void *cl = dst->s_thing;
-//    assert(mono_object_get_class(&l->obj) == clr_atom);
-    if(cl) {
-		guint32 hnd = mono_gchandle_new(o,TRUE);
-        ObjectAtom<guint32> oa(hnd);
-        pd_typedmess((t_class **)cl,sym_object,oa.size,oa);
-		mono_gchandle_free(hnd);
-    }
-}
-
-static MonoString *CALL PD_SearchPath(MonoString *file)
-{
-	char *filestr = mono_string_to_utf8(file);
-    char dirbuf[MAXPDSTRING],*nameptr;
-    // search for classname.dll in the PD path
-    int fd;
-	if ((fd = open_via_path("",filestr,"",dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0) {
-    // found
-		if(dirbuf != nameptr) { 
-			// fix for the fact that open_via_path doesn't return a path, when it's found in .
-            strcat(dirbuf,"/");
-			strcat(dirbuf,filestr);
-
-//            close(fd);  // strange - we get an assertion failure here...
-		}
-		return mono_string_new(monodomain,dirbuf);
-	}
-	else
-		return mono_string_new(monodomain,"");
-}
-
-
-void *clr_new(t_symbol *classname, int argc, t_atom *argv)
-{
-	// find class name in map
-    ClrMap::iterator it = clr_map.find(classname);
-    if(it == clr_map.end()) {
-        error("CLR - class %s not found",classname->s_name);
-        return NULL;
-    }
-
-    t_clr_class *clss = it->second;
-
-    // make instance
-    t_instance *x = (t_instance *)pd_new(clss->pd_class);
-	x->pd_class = clss;
-    x->outlets = NULL;
-    x->proxies = NULL;
-
-    clr_inlet = 0;
-
-	assert(newinstance);
-
-	clr_pass->klass = clss->mono_class;
-	newinstance(x,AtomList(argc,argv));
-	x->mono_obj = clr_pass->ext;
-#ifdef _DEBUG
-	clr_pass->klass = NULL;
-#endif
-
-	if(x->mono_obj) {
-		x->mono_handle = mono_gchandle_new(x->mono_obj,TRUE);
-		return x;
-	}
-	else {
-        pd_free((t_pd *)x);
-        error("CLR - class %s could not be instantiated",classname->s_name);
-        return NULL;
-	}
-}
-
-void clr_free(t_instance *obj)
-{
-	mono_gchandle_free(obj->mono_handle);
-
-    if(obj->outlets) delete obj->outlets;
-
-    if(obj->proxies) {
-        for(ProxyList::iterator it = obj->proxies->begin(); it != obj->proxies->end(); ++it) pd_free((t_pd *)*it);
-        delete obj->proxies;
-    }
-}
-
-static void CALL PD_Register(MonoDelegate *d_class,MonoDelegate *d_new,MonoDelegate *d_bang,MonoDelegate *d_float,MonoDelegate *d_symbol,MonoDelegate *d_pointer,MonoDelegate *d_list,MonoDelegate *d_anything,MonoDelegate *d_object)
-{
-	newclass = (NewClass *)mono_delegate_to_ftnptr(d_class);
-	newinstance = (NewInstance *)mono_delegate_to_ftnptr(d_new);
-	callbang = (CallBang *)mono_delegate_to_ftnptr(d_bang);
-	callfloat = (CallFloat *)mono_delegate_to_ftnptr(d_float);
-	callsymbol = (CallSymbol *)mono_delegate_to_ftnptr(d_symbol);
-	callpointer = (CallPointer *)mono_delegate_to_ftnptr(d_pointer);
-	calllist = (CallList *)mono_delegate_to_ftnptr(d_list);
-	callanything = (CallAnything *)mono_delegate_to_ftnptr(d_anything);
-	callobject = (CallObject *)mono_delegate_to_ftnptr(d_object);
-}
-
-static bool CALL PD_RegisterClass(t_clr_class *c,t_symbol *classsym,int classflags,int methodflags)
-{
-	assert(c && !c->pd_class);
-    c->pd_class = class_new(classsym,(t_newmethod)clr_new,(t_method)clr_free, sizeof(t_instance), classflags, A_GIMME, A_NULL);
-	if(c->pd_class) {
-		if(methodflags&0x01) class_addbang(c->pd_class,clr_method_bang);
-		if(methodflags&0x02) class_addfloat(c->pd_class,clr_method_float);
-		if(methodflags&0x04) class_addsymbol(c->pd_class,clr_method_symbol);
-		if(methodflags&0x08) class_addpointer(c->pd_class,clr_method_pointer);
-		if(methodflags&0x10) class_addlist(c->pd_class,clr_method_list);
-		if(methodflags&0x20) class_addanything(c->pd_class,clr_method_anything);
-		return true;
-	}
-	else
-		return false;
-}
-
-
-static int classloader(char *dirname, char *classname, char *altname)
-{
-	if(!newclass) {
-		post("CLR - Entry point not set");
-		return 0;
-	}
-
-	t_symbol *classsym = gensym(classname);
-
-    t_clr_class *classdef = (t_clr_class *)getbytes(sizeof(t_clr_class));
-    // set all struct members to 0
-    memset(classdef,0,sizeof(t_clr_class));
-
-	newclass(classdef,classsym);
-	classdef->mono_class = clr_pass->klass;
-
-	if(!classdef->mono_class)
-	{
-		freebytes(classdef,sizeof(t_clr_class));
-		return 0;
-	}
-
-	mono_gchandle_new(classdef->mono_class,TRUE); // we don't remember the handle... won't be freed later
-
-    // put into map
-    clr_map[classsym] = classdef;
-
-    verbose(1,"CLR - Loaded class %s OK",classname);
-
-    return 1;
-}
-
-extern "C"
-#ifdef _MSC_VER
-__declspec(dllexport) 
-#endif
-void clr_setup(void)
-{
-#ifdef _WIN32
-    // set mono paths
-    const char *monopath = getenv("MONO_PATH");
-    if(!monopath) {
-        error("CLR - Please set the MONO_PATH environment variable to the folder of your MONO installation - CLR not loaded!");
-        return;
-    }
-    
-    char tlib[256],tconf[256];
-    strcpy(tlib,monopath);
-    strcat(tlib,"/lib");
-    strcpy(tconf,monopath);
-    strcat(tconf,"/etc");
-    mono_set_dirs(tlib,tconf);
-#endif
-
-    // try to find PureData.dll in the PD path
-    char dirbuf[MAXPDSTRING],*nameptr;
-    // search in the PD path
-    int fd;
-    if ((fd = open_via_path("",CORELIB,"." DLLEXT,dirbuf,&nameptr,MAXPDSTRING,1)) >= 0) {
-        if(dirbuf != nameptr) // fix for the fact that open_via_path doesn't return a path, when it's found in .
-            strcat(dirbuf,"/" CORELIB "." DLLEXT);
-//            close(fd);  // strange - we get an assertion failure here...
-    }
-	else {
-        error("CLR - " CORELIB "." DLLEXT " not found in path");
-		return;
-	}
-
-    try { 
-        monodomain = mono_jit_init(dirbuf); 
-    }
-    catch(...) {
-        monodomain = NULL;
-    }
-
-
-	if(monodomain) {
-        // look for PureData.dll
-        MonoAssembly *assembly = mono_domain_assembly_open (monodomain,dirbuf);
-	    if(!assembly) {
-		    error("CLR - assembly %s not found!",dirbuf);
-		    return;
-	    }
-
-	    MonoImage *image = mono_assembly_get_image(assembly);
-        assert(image);
-
-	    // add mono to C hooks
-
-        mono_add_internal_call("PureData.Internal::SymGen(string)", (const void *)PD_SymGen);
-        mono_add_internal_call("PureData.Internal::SymEval(PureData.Symbol)", (const void *)PD_SymEval);
-
-        mono_add_internal_call("PureData.Public::Post(string)",(const void *)PD_Post);
-        mono_add_internal_call("PureData.Public::PostError(string)",(const void *)PD_PostError);
-        mono_add_internal_call("PureData.Public::PostVerbose(int,string)",(const void *)PD_PostVerbose);
-        mono_add_internal_call("PureData.Public::SearchPath(string)",(const void *)PD_SearchPath);
-
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Symbol,PureData.Symbol)", (const void *)PD_AddInletAlias);
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,single&)", (const void *)PD_AddInletFloat);
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Symbol&)", (const void *)PD_AddInletSymbol);
-//        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Pointer&)", (const void *)PD_AddInletPointer);
-//        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_AddInletTyped);
-        mono_add_internal_call("PureData.Internal::AddInlet(PureData.ExternalPtr)", (const void *)PD_AddInletProxy);
-
-        mono_add_internal_call("PureData.Internal::AddOutlet(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_AddOutlet);
-
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int)", (const void *)PD_OutletBang);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,single)", (const void *)PD_OutletFloat);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Symbol)", (const void *)PD_OutletSymbol);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Pointer)", (const void *)PD_OutletPointer);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Atom)", (const void *)PD_OutletAtom);
-        mono_add_internal_call("PureData.Internal::Outlet(PureData.ExternalPtr,int,PureData.Symbol,PureData.Atom[])", (const void *)PD_OutletAnything);
-        mono_add_internal_call("PureData.Internal::OutletEx(PureData.ExternalPtr,int,object)", (const void *)PD_OutletObject);
-
-//        mono_add_internal_call("PureData.Internal::Bind(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_Bind);
-//        mono_add_internal_call("PureData.Internal::Unbind(PureData.ExternalPtr,PureData.Symbol)", (const void *)PD_Unbind);
-
-        mono_add_internal_call("PureData.Class::Register(PureData.Class/DelegateClass,PureData.Class/DelegateNew,PureData.Class/DelegateBang,PureData.Class/DelegateFloat,PureData.Class/DelegateSymbol,PureData.Class/DelegatePointer,PureData.Class/DelegateList,PureData.Class/DelegateAnything,PureData.Class/DelegateObject)", (const void *)PD_Register);
-        mono_add_internal_call("PureData.Class::RegisterClass(PureData.ClassPtr,PureData.Symbol,PureData.Public/ClassType,PureData.Class/MethodFlags)", (const void *)PD_RegisterClass);
-//        mono_add_internal_call("PureData.Class::AddMethodIntern(PureData.ClassPtr,int,PureData.Symbol,PureData.Class/Kind,System.Delegate)", (const void *)PD_AddMethodIntern);
-
-        mono_add_internal_call("PureData.External::Send(PureData.Symbol,PureData.Atom)", (const void *)PD_SendAtom);
-        mono_add_internal_call("PureData.External::Send(PureData.Symbol,PureData.Symbol,PureData.Atom[])", (const void *)PD_SendAnything);
-        mono_add_internal_call("PureData.External::SendEx(PureData.Symbol,object)", (const void *)PD_SendObject);
-
-
-		///////////////////////////////////////////////////////////
-
-        // make proxy class
-        proxy_class = class_new(gensym("clr proxy"),NULL,NULL,sizeof(t_proxy),CLASS_PD|CLASS_NOINLET,A_NULL);
-        class_addanything(proxy_class,clr_method_proxy);
-
-        // symbol for Mono object handling
-        sym_object = gensym(SYM_OBJECT);
-
-        // install loader hook
-        sys_register_loader(classloader);
-
-		///////////////////////////////////////////////////////////
-
-		// call static Class::Setup function
-        MonoClass *clr_class = mono_class_from_name(image,"PureData","Class");
-        assert(clr_class);
-        MonoMethodDesc *desc = mono_method_desc_new("::Setup()",FALSE);
-        MonoMethod *setup = mono_method_desc_search_in_class(desc,clr_class);
-
-        MonoObject *exc;
-        mono_runtime_invoke(setup,NULL,NULL,&exc);
-        if(exc)
-            post("CLR - setup function failed");
-        else {
-            // ready!
-	        post("CLR extension - (c)2006 Davide Morelli, Thomas Grill");
-        }
-
-		// necessary data should have been set by Setup
-		MonoClass *clr_internal = mono_class_from_name(image,"PureData","Internal");
-        assert(clr_internal);
-		MonoVTable *clr_internal_vt = mono_class_vtable(monodomain,clr_internal);
-		MonoClassField *fld = mono_class_get_field_from_name (clr_internal,"pass");
-		assert(fld);
-		mono_field_static_get_value(clr_internal_vt,fld,&clr_pass);
-		assert(clr_pass);
-    }
-    else
-        error("clr: mono domain couldn't be initialized!");
-}
diff --git a/externals/clr/makefile b/externals/clr/makefile
deleted file mode 100644
index 751bb0911..000000000
--- a/externals/clr/makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-current: cygwin
-
-clean: ; rm -f *.dll *.o
-
-cygwin: clr.dll	
-
-.SUFFIXES: .dll
-
-# where are the PD header files?
-# leave it blank if it is a system directory (like /usr/local/include), 
-# 	since gcc 3.2 complains about it
-
-PDPATH=/cygdrive/c/data/pd/pd-cvs
-MONOPATH=/cygdrive/c/programme/prog/mono
-
-CFLAGS = -DPD -mno-cygwin
-CFLAGS += -O2
-#CFLAGS += -g
-
-PDINC= -I$(PDPATH)/src
-PDLIB= $(PDPATH)/bin/pd.dll
-
-MONOINC = -I$(MONOPATH)/include -I$(MONOPATH)/include/glib-2.0 -I$(MONOPATH)/lib/glib-2.0/include
-MONOLIB = -L$(MONOPATH)/lib -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv -lmono
-
-.cpp.dll:
-	g++ $(CFLAGS) $(PDINC) $(MONOINC) -o $*.o -c $*.cpp
-	g++ --export-dynamic -shared -mno-cygwin $(PDLIB) -o $*.dll $*.o $(MONOLIB) -lm
diff --git a/externals/clr/makefile.darwin b/externals/clr/makefile.darwin
deleted file mode 100644
index ca33718f9..000000000
--- a/externals/clr/makefile.darwin
+++ /dev/null
@@ -1,35 +0,0 @@
-current: pd_darwin
-
-clean: ; rm -f *.o *.pd_darwin
-
-
-# ----------------------- Mac OSX -----------------------
-# You'll have to set the environment variable
-# MACOSX_DEPLOYMENT_TARGET=10.3
-
-pd_darwin: clr.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-
-PDPATH=/Users/thomas/Develop/pd/devel_0_39
-MONO=/Library/Frameworks/Mono.Framework
-
-CFLAGS += -DPD -O2 
-
-# where is the PD executable?
-PD=$(PDPATH)/bin/pd
-
-LDFLAGS=-framework Mono
-
-INCLUDE = -I$(MONO)/Headers -I$(MONO)/Headers/glib-2.0 -I$(MONO)/Libraries/glib-2.0/include -I$(PDPATH)/src
-
-# new version
-OPTIONS = -dynamiclib -undefined dynamic_lookup
-
-# old version
-#OPTIONS = -bundle -bundle_loader $(PD) 
-
-
-.cpp.pd_darwin:
-	g++ $(OPTIONS) $(INCLUDE) $(CFLAGS) $(LDFLAGS) -o $*.pd_darwin $*.cpp
diff --git a/externals/clr/test/AssemblyInfo.cs b/externals/clr/test/AssemblyInfo.cs
deleted file mode 100644
index 8783853a2..000000000
--- a/externals/clr/test/AssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-//
-// Allgemeine Informationen über eine Assembly werden über folgende Attribute 
-// gesteuert. Ändern Sie diese Attributswerte, um die Informationen zu modifizieren,
-// die mit einer Assembly verknüpft sind.
-//
-[assembly: AssemblyTitle("")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]		
-
-//
-// Versionsinformationen für eine Assembly bestehen aus folgenden vier Werten:
-//
-//      Hauptversion
-//      Nebenversion 
-//      Buildnummer
-//      Revision
-//
-// Sie können alle Werte oder die standardmäßige Revision und Buildnummer 
-// mit '*' angeben:
-
-[assembly: AssemblyVersion("1.0.*")]
-
-//
-// Um die Assembly zu signieren, müssen Sie einen Schlüssel angeben. Weitere Informationen 
-// über die Assemblysignierung finden Sie in der Microsoft .NET Framework-Dokumentation.
-//
-// Mit den folgenden Attributen können Sie festlegen, welcher Schlüssel für die Signierung verwendet wird. 
-//
-// Hinweise: 
-//   (*) Wenn kein Schlüssel angegeben ist, wird die Assembly nicht signiert.
-//   (*) KeyName verweist auf einen Schlüssel, der im CSP (Crypto Service
-//       Provider) auf Ihrem Computer installiert wurde. KeyFile verweist auf eine Datei, die einen
-//       Schlüssel enthält.
-//   (*) Wenn die Werte für KeyFile und KeyName angegeben werden, 
-//       werden folgende Vorgänge ausgeführt:
-//       (1) Wenn KeyName im CSP gefunden wird, wird dieser Schlüssel verwendet.
-//       (2) Wenn KeyName nicht vorhanden ist und KeyFile vorhanden ist, 
-//           wird der Schlüssel in KeyFile im CSP installiert und verwendet.
-//   (*) Um eine KeyFile zu erstellen, können Sie das Programm sn.exe (Strong Name) verwenden.
-//       Wenn KeyFile angegeben wird, muss der Pfad von KeyFile
-//       relativ zum Projektausgabeverzeichnis sein:
-//       %Project Directory%\obj\<configuration>. Wenn sich KeyFile z.B.
-//       im Projektverzeichnis befindet, geben Sie das AssemblyKeyFile-Attribut 
-//       wie folgt an: [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-//   (*) Das verzögern der Signierung ist eine erweiterte Option. Weitere Informationen finden Sie in der
-//       Microsoft .NET Framework-Dokumentation.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
-[assembly: AssemblyKeyName("")]
diff --git a/externals/clr/test/test-help.pd b/externals/clr/test/test-help.pd
deleted file mode 100644
index a9313427d..000000000
--- a/externals/clr/test/test-help.pd
+++ /dev/null
@@ -1,68 +0,0 @@
-#N canvas 617 153 866 845 12;
-#X floatatom 125 51 5 0 0 0 - - -;
-#X symbolatom 320 81 10 0 0 0 - - -;
-#X msg 536 45 msg one 2 three;
-#X obj 22 24 loadbang;
-#X floatatom 213 26 5 0 0 0 - - -;
-#X msg 213 52 1 \$1 3;
-#X msg 318 14 symbol abc;
-#X msg 328 42 symbol d3f;
-#X obj 21 54 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 535 82 set 1 7 8;
-#X msg 533 135 list;
-#X msg 532 164 list 1;
-#X msg 533 193 list abc;
-#X msg 528 251 list s e c o n d;
-#X obj 152 495 print OUT;
-#X floatatom 530 321 5 0 0 0 - - -;
-#X floatatom 290 173 5 0 0 0 - - -;
-#X msg 289 197 send \$1 b c;
-#X obj 407 497 print RECV1;
-#X obj 406 463 r receiver;
-#X floatatom 526 362 5 0 0 0 - - -;
-#X symbolatom 578 364 10 0 0 0 - - -;
-#X text 585 318 passive - bang to see;
-#X text 676 366 active;
-#X msg 526 386 1 2 3;
-#X floatatom 528 275 5 0 0 0 - - -;
-#X msg 589 386 turalu;
-#X msg 578 274 heyho;
-#X obj 151 443 test a b 5;
-#X obj 655 388 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 124 621 test;
-#X obj 124 696 test;
-#X obj 141 650 print A;
-#X obj 138 725 print B;
-#X msg 120 580 trigger;
-#X connect 0 0 28 0;
-#X connect 1 0 28 0;
-#X connect 2 0 28 0;
-#X connect 3 0 8 0;
-#X connect 4 0 5 0;
-#X connect 5 0 28 0;
-#X connect 6 0 1 0;
-#X connect 7 0 1 0;
-#X connect 8 0 28 0;
-#X connect 9 0 28 0;
-#X connect 10 0 28 0;
-#X connect 11 0 28 0;
-#X connect 12 0 28 0;
-#X connect 13 0 28 1;
-#X connect 15 0 28 2;
-#X connect 16 0 17 0;
-#X connect 17 0 28 0;
-#X connect 19 0 18 0;
-#X connect 20 0 28 3;
-#X connect 21 0 28 3;
-#X connect 24 0 28 3;
-#X connect 25 0 28 1;
-#X connect 26 0 28 3;
-#X connect 27 0 28 1;
-#X connect 28 0 14 0;
-#X connect 29 0 28 3;
-#X connect 30 0 31 0;
-#X connect 30 0 32 0;
-#X connect 31 0 33 0;
-#X connect 34 0 30 0;
diff --git a/externals/clr/test/test.cs b/externals/clr/test/test.cs
deleted file mode 100644
index cdb7ba742..000000000
--- a/externals/clr/test/test.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-using Timing;
-using PureData;
-
-public class test:
-    External
-{
-    Atom[] args;
-    float farg;
-
-    // necessary (for now...)
-    public test() {}  
-
-    public test(Atom[] args)
-    {
-        Post("Test.ctor "+args.ToString());
-
-        // save args
-        this.args = args;
-
-        //        AddInlet(s_list,new PureData.Symbol("list2"));
-        AddInlet();
-        AddInlet(ref farg);
-        AddInlet();
-        AddOutletAnything();
-    }
-
-    // this function MUST exist
-    // returns void or ClassType
-    private static ClassType Setup(test obj)
-    {
-//        Post("Test.Setup");
-
-        AddMethod(obj.bang);
-        AddMethod(obj.MyFloat);
-        AddMethod(obj.symbol);
-        AddMethod(obj.list);
-        AddMethod(0,"set",obj.set);
-        AddMethod(0,"send",obj.send);
-        AddMethod(0,"trigger",obj.trigger);
-        AddMethod(0,obj.MyObject);
-        AddMethod(0,obj.MyAnything);
-        AddMethod(1,obj.MyFloat1);
-        AddMethod(1,obj.MyAny1);
-        return ClassType.Default;
-    }
-
-    protected void bang() 
-    { 
-        Post("Test-BANG "+farg.ToString()); 
-        Outlet(0);
-    }
-
-    protected virtual void MyFloat(float f) 
-    { 
-        Post("Test-FLOAT "+f.ToString()); 
-        Outlet(0,f);
-    }
-
-    protected virtual void MyFloat1(float f) 
-    { 
-        Post("Test-FLOAT1 "+f.ToString()); 
-    }
-
-    protected virtual void MyAny1(int ix,Symbol s,Atom[] l) 
-    { 
-        Post(ix.ToString()+": Test-ANY1 "+l.ToString()); 
-    }
-
-    protected virtual void symbol(Symbol s) 
-    { 
-        Post("Test-SYMBOL "+s.ToString()); 
-        Outlet(0,s);
-    }
-
-    protected virtual void list(Atom[] l) 
-    { 
-        Post("Test-LIST "+l.ToString()); 
-        Outlet(0,l);
-    }
-
-    protected virtual void set(int ix,Symbol s,Atom[] l) 
-    { 
-        Post("Test-SET "+l.ToString()); 
-        Outlet(0,new Symbol("set"),l);
-    }
-
-    protected virtual void send(int ix,Symbol s,Atom[] l) 
-    { 
-        Send(new Symbol("receiver"),l);
-    }
-
-    protected virtual void trigger() 
-    { 
-        OutletEx(0,"hey");
-    }
-
-    protected virtual void MyObject(int ix,object obj) 
-    { 
-        Post("OBJECT "+obj.ToString());
-        OutletEx(0,obj);
-    }
-
-    protected virtual void MyAnything(int ix,Symbol s,Atom[] l) 
-    { 
-        Post(ix.ToString()+": Test-("+s.ToString()+") "+l.ToString()); 
-        Outlet(0,s,l);
-    }
-}
diff --git a/externals/clr/test/test.csproj b/externals/clr/test/test.csproj
deleted file mode 100644
index 1b2d88890..000000000
--- a/externals/clr/test/test.csproj
+++ /dev/null
@@ -1,112 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <ProjectType>Local</ProjectType>
-    <ProductVersion>8.0.50727</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{6CED2448-6407-4AF7-95B6-932D8118AF3D}</ProjectGuid>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ApplicationIcon>
-    </ApplicationIcon>
-    <AssemblyKeyContainerName>
-    </AssemblyKeyContainerName>
-    <AssemblyName>Test</AssemblyName>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
-    <DefaultClientScript>JScript</DefaultClientScript>
-    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
-    <DefaultTargetSchema>IE50</DefaultTargetSchema>
-    <DelaySign>false</DelaySign>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Test</RootNamespace>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <OutputPath>bin\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>true</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>full</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-    <UseVSHostingProcess>true</UseVSHostingProcess>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <OutputPath>bin\debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <BaseAddress>285212672</BaseAddress>
-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
-    <ConfigurationOverrideFile>
-    </ConfigurationOverrideFile>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DocumentationFile>
-    </DocumentationFile>
-    <DebugSymbols>false</DebugSymbols>
-    <FileAlignment>4096</FileAlignment>
-    <NoStdLib>false</NoStdLib>
-    <NoWarn>
-    </NoWarn>
-    <Optimize>false</Optimize>
-    <RegisterForComInterop>false</RegisterForComInterop>
-    <RemoveIntegerChecks>false</RemoveIntegerChecks>
-    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <DebugType>none</DebugType>
-    <ErrorReport>prompt</ErrorReport>
-    <UseVSHostingProcess>true</UseVSHostingProcess>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System">
-      <Name>System</Name>
-    </Reference>
-    <Reference Include="System.Data">
-      <Name>System.Data</Name>
-    </Reference>
-    <Reference Include="System.Xml">
-      <Name>System.XML</Name>
-    </Reference>
-    <ProjectReference Include="..\PureData\PureData.csproj">
-      <Name>PureData</Name>
-      <Project>{0015D5E7-B0FB-4F06-B334-225447D1F992}</Project>
-      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="test.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="timing.cs">
-      <SubType>Code</SubType>
-    </Compile>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>
-    </PreBuildEvent>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/externals/ffext/atox/Makefile b/externals/ffext/atox/Makefile
deleted file mode 100644
index fc76385ca..000000000
--- a/externals/ffext/atox/Makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/make
-
-DEBUG?=0
-OS := $(shell uname -s)
-
-ifeq ($(DEBUG),1)
-	CFLAGS += -O0 -g -ggdb -DDEBUG
-endif
-ifeq ($(OS),Linux)
-  PDSUF = .pd_linux
-  PDBUNDLEFLAGS = -shared -rdynamic
-  LDSOFLAGS = -lm
-endif
-ifeq ($(OS),Darwin)
-  PDSUF = .pd_darwin
-  INCLUDES = -I/Library/Frameworks/Tcl.framework/Headers
-  PDBUNDLEFLAGS = -bundle -flat_namespace -undefined dynamic_lookup
-  LDSOFLAGS = -lm
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  PDSUF = .dll
-  PDBUNDLEFLAGS = -shared
-  LDSOFLAGS = -lm
-endif
-
-INCLUDES =  -I../../pd/src -I/usr/include
-CFLAGS += -Wall -fPIC
-CFLAGS += -DPDSUF=\"$(PDSUF)\"
-ifeq ($(DEBUG),0)
-	CFLAGS += -O2
-endif
-
-all: atoi.pd_linux atof.pd_linux
-
-clean:
-	rm -f *.pd_linux *.o *~ atoi.c atof.c
-
-atoi.c: atox.c
-	sed -e s/ATOX/$*/g $< > $@
-
-atof.c: atox.c
-	sed -e s/ATOX/$*/g $< > $@
-
-.SUFFIXES: .c .o $(PDSUF)
-
-.o$(PDSUF):
-	$(CC) $(PDBUNDLEFLAGS) $(CFLAGS) $(INCLUDES) -o $*$(PDSUF) $< $(LDSOFLAGS)
diff --git a/externals/ffext/atox/atox.c b/externals/ffext/atox/atox.c
deleted file mode 100644
index 6097eb99a..000000000
--- a/externals/ffext/atox/atox.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (c) 2005 Federico Ferri.
- * Release under the terms of GPL license.
- * Based on PureData by Miller Puckette and others. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "m_pd.h"
-
-#define buf_sz MAXPDSTRING
-
-typedef struct
-{
-    t_object       x_obj;
-    t_outlet      *x_out2;
-} t_ATOX;
-
-static t_class *ATOX_class;
-
-static void ATOX_out(t_ATOX *x, t_float f)
-{
-    outlet_float(x->x_obj.ob_outlet, f);
-}
-
-static void ATOX_float(t_ATOX *x, t_float f)
-{
-    ATOX_out(x, f);
-}
-
-static void ATOX_symbol(t_ATOX *x, t_symbol *s)
-{
-    char buf[buf_sz];
-    t_atom a;
-    SETSYMBOL(&a, s);
-    atom_string(&a, buf, buf_sz);
-    ATOX_out(x, ATOX(buf));
-}
-
-static void *ATOX_new(t_floatarg f)
-{
-    t_ATOX *x = (t_ATOX *)pd_new(ATOX_class);
-    outlet_new((t_object *)x, &s_float);
-    return (x);
-}
-
-void ATOX_setup(void)
-{
-    ATOX_class = class_new(gensym("ATOX"),
-			      (t_newmethod)ATOX_new, 0,
-			      sizeof(t_ATOX), CLASS_DEFAULT,
-			      A_DEFSYMBOL, 0);
-    class_addfloat(ATOX_class, ATOX_float);
-    class_addsymbol(ATOX_class, ATOX_symbol);
-}
diff --git a/externals/ffext/composer/AUTHORS b/externals/ffext/composer/AUTHORS
deleted file mode 100644
index cecde9a2d..000000000
--- a/externals/ffext/composer/AUTHORS
+++ /dev/null
@@ -1,4 +0,0 @@
-Authors of composer.
-
-Federico Ferri <mescalinum@gmail.com>
-
diff --git a/externals/ffext/composer/COPYING b/externals/ffext/composer/COPYING
deleted file mode 100644
index f47bd6d7a..000000000
--- a/externals/ffext/composer/COPYING
+++ /dev/null
@@ -1,280 +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
diff --git a/externals/ffext/composer/Common.hpp b/externals/ffext/composer/Common.hpp
deleted file mode 100644
index f5d1e3071..000000000
--- a/externals/ffext/composer/Common.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef COMPOSER_COMMON_H_INCLUDED
-#define COMPOSER_COMMON_H_INCLUDED
-
-#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
-#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
-
-//get rid of the "deprecated conversion from string constant to char*'" warning
-#define sys_gui(x) sys_gui(const_cast<char*>(x))
-#define sys_vgui(format, args...) sys_vgui(const_cast<char*>(format), ## args)
-#define gensym(x) gensym(const_cast<char*>(x))
-#define binbuf_addv(b, format, args...) binbuf_addv(b, const_cast<char*>(format), ## args)
-#define WRAP(v,w) (((v)<0)?(((w)-1)-((-(v)-1)%(w))):((v)%(w)))
-
-#endif // COMPOSER_COMMON_H_INCLUDED
diff --git a/externals/ffext/composer/Editor.cpp b/externals/ffext/composer/Editor.cpp
deleted file mode 100644
index a5db283d8..000000000
--- a/externals/ffext/composer/Editor.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-#include "Editor.hpp"
-#include "Track.hpp"
-#include "Song.hpp"
-
-#include <iostream>
-#include <string>
-
-#include <m_pd.h>
-
-#include "Common.hpp"
-
-#include "editor_tk.cpp"
-static const unsigned int editor_tk_len = sizeof(editor_tk) / sizeof(editor_tk[0]);
-
-using std::cerr;
-using std::endl;
-using std::string;
-
-static char hexnibble(unsigned int i)
-{
-    i &= 0xf;
-    return (i < 0xa) ? ('0' + i) : ('a' + i - 0xa);
-}
-
-static const char* urlencode(char c)
-{
-    static char buf[4];
-    buf[0] = '%';
-    buf[1] = hexnibble((c & 0xf0) >> 4);
-    buf[2] = hexnibble(c & 0xf);
-    buf[3] = '\0';
-    return &buf[0];
-}
-
-void Editor::uploadCode()
-{
-    sys_gui("proc Xeval {c {d {}}} {switch $c {begin {set ::Xeval_map {}; for {set i 0} {$i < 256} {incr i} {lappend ::Xeval_map \%[format \%02x $i] [format \%c $i]}; set ::Xeval_data {}} data {append ::Xeval_data [string map $::Xeval_map $d]\\n} end {uplevel #0 $::Xeval_data; unset ::Xeval_map; unset ::Xeval_data}}}\n"); 
-    sys_gui("Xeval begin\n");
-    for(unsigned int i = 0; i < editor_tk_len; i++)
-    {
-        string s = "Xeval data {";
-        string l = editor_tk[i];
-        for(unsigned int j = 0; j < l.length(); j++)
-        {
-            if(isalnum(l[j])) s.append(1, l[j]);
-            else s += string(urlencode(l[j]));
-        }
-        s += "}\n";
-        sys_gui(const_cast<char*>(s.c_str()));
-    }
-    sys_gui("Xeval end\n");
-}
-
-void Editor::init(t_track_proxy *x)
-{
-    uploadCode();
-    sys_vgui("pd::composer::init %s %s %s %s %d\n",
-        x->editor_recv->s_name,
-        x->track->getSong()->getName().c_str(),
-        x->track->getName().c_str(),
-        "NULL",
-#ifdef DEBUG
-        1
-#else
-        0
-#endif
-    );
-}
-
-void Editor::dispatch(t_track_proxy *x, int argc, t_atom* argv)
-{
-    string s = "";
-    for(int i = 0; i < argc; i++)
-    {
-        s += " ";
-        char buf[MAXPDSTRING];
-        atom_string(&argv[i], buf, MAXPDSTRING);
-        s += buf;
-    }
-    sys_vgui("pd::composer::dispatch %s%s\n",
-        x->editor_recv->s_name,
-        s.c_str()
-        );
-}
-
-void Editor::openWindow(t_track_proxy *x)
-{
-    x->editor_open = 1;
-    sys_vgui("pd::composer::openWindow %s\n", x->editor_recv->s_name);
-}
-
-void Editor::closeWindow(t_track_proxy *x)
-{
-    x->editor_open = 0;
-    sys_vgui("pd::composer::closeWindow %s\n", x->editor_recv->s_name);
-}
diff --git a/externals/ffext/composer/Editor.hpp b/externals/ffext/composer/Editor.hpp
deleted file mode 100644
index 620aab598..000000000
--- a/externals/ffext/composer/Editor.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef COMPOSER_EDITOR_H_INCLUDED
-#define COMPOSER_EDITOR_H_INCLUDED
-
-#include "PdClasses.hpp"
-#include <m_pd.h>
-
-class Editor
-{
-public:
-    static void uploadCode();
-    static void init(t_track_proxy *x);
-    static void dispatch(t_track_proxy *x, int argc, t_atom* argv);
-    static void openWindow(t_track_proxy *x);
-    static void closeWindow(t_track_proxy *x);
-};
-
-#endif // COMPOSER_EDITOR_H_INCLUDED
diff --git a/externals/ffext/composer/HasMeta.cpp b/externals/ffext/composer/HasMeta.cpp
deleted file mode 100644
index b80c94167..000000000
--- a/externals/ffext/composer/HasMeta.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "HasMeta.hpp"
-
-bool HasMeta::hasMeta(const string &key)
-{
-    return meta.find(key) != meta.end();
-}
-
-const string HasMeta::getMeta(const string &key)
-{
-    return hasMeta(key) ? meta[key] : "";
-}
-
-void HasMeta::setMeta(const string &key, const string &value)
-{
-    meta[key] = value;
-}
diff --git a/externals/ffext/composer/HasMeta.hpp b/externals/ffext/composer/HasMeta.hpp
deleted file mode 100644
index 5bd74bb72..000000000
--- a/externals/ffext/composer/HasMeta.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef COMPOSER_HASMETA_H_INCLUDED
-#define COMPOSER_HASMETA_H_INCLUDED
-
-#include <map>
-#include <string>
-
-using std::map;
-using std::string;
-
-class HasMeta
-{
-private:
-	map<string,string> meta;
-public:
-	bool hasMeta(const string &key);
-    const string getMeta(const string &key);
-    void setMeta(const string &key, const string &value);
-
-    typedef map<string,string>::const_iterator meta_iterator;
-    inline meta_iterator meta_begin() const {return meta.begin();}
-    inline meta_iterator meta_end() const {return meta.end();}
-};
-
-#endif // COMPOSER_HASMETA_H_INCLUDED
diff --git a/externals/ffext/composer/Makefile b/externals/ffext/composer/Makefile
deleted file mode 100644
index 473a7ca06..000000000
--- a/externals/ffext/composer/Makefile
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/make
-
-DEBUG?=0
-OS := $(shell uname -s)
-TCL_VERSION := $(shell echo 'puts $$tcl_version' | tclsh)
-
-ifeq ($(DEBUG),0)
-	CFLAGS += -O2
-else
-	CFLAGS += -O0 -g -ggdb -DDEBUG
-endif
-ifeq ($(OS),Linux)
-  PDSUF = pd_linux
-  PDBUNDLEFLAGS = -shared -rdynamic
-  LDSOFLAGS = -lm
-endif
-ifeq ($(OS),Darwin)
-  PDSUF = pd_darwin
-  INCLUDES = -I/Library/Frameworks/Tcl.framework/Headers
-  PDBUNDLEFLAGS = -bundle -flat_namespace -undefined dynamic_lookup
-  LDSOFLAGS = -lm
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  PDSUF = dll
-  PDBUNDLEFLAGS = -shared
-  LDSOFLAGS = -lm
-endif
-
-LIBNAME = composer
-INCLUDES =  -I../../pd/src -I/usr/include #-I/usr/include/tcl$(TCL_VERSION)
-CFLAGS += -funroll-loops -fno-operator-names -fno-omit-frame-pointer -falign-functions=16
-CFLAGS += -Wall -Wno-unused
-CFLAGS += -fPIC
-CFLAGS += -DPDSUF=\"$(PDSUF)\"
-LDSHARED = $(CXX) $(PDBUNDLEFLAGS)
-
-all: autogen_sources $(LIBNAME).$(PDSUF)
-	@echo '-----------------------------------------------------------------------------'
-	@echo ' $(LIBNAME).$(PDSUF) ('`test $(DEBUG) -eq 1 && echo debug || echo release`' build) '\
-		'[size: '`ls -gGh $(LIBNAME).$(PDSUF) | cut -d " " -f 3`']'
-
-$(PDSUF): all
-
-clean:
-	rm -f $(LIBNAME).$(PDSUF)
-	rm -f *.o *~
-	rm -f $(AUTOGENERATED_SOURCES)
-	rm -f editor_tk.cpp
-
-.SUFFIXES: .cpp .o
-
-SRCS = HasMeta.cpp Song.cpp Pattern.cpp Track.cpp Editor.o PdClasses.cpp
-OBJS = ${SRCS:.cpp=.o}
-AUTOGENERATED_SOURCES = methods.hpp methods_pd.hpp methods_ed.hpp classsetup.cpp callwrappers_pd.cpp callwrappers_ed.cpp
-HasMeta.o: HasMeta.cpp HasMeta.hpp
-Song.o: Song.cpp Song.hpp
-Pattern.o: Pattern.cpp Pattern.hpp
-Track.o: Track.cpp Track.hpp
-Editor.o: Editor.cpp Editor.hpp editor_tk.cpp
-PdClasses.o: PdClasses.cpp PdClasses.hpp
-
-.cpp.o: Makefile
-	$(CXX) $(CFLAGS) $(INCLUDES) -xc++ -c $<
-
-$(LIBNAME).$(PDSUF): Makefile $(OBJS)
-	$(LDSHARED) $(LDSOFLAGS) $(CFLAGS) -xnone $(OBJS) -o $(LIBNAME).$(PDSUF)
-
-editor_tk.cpp: editor.tk
-	@echo "Generating $@..."
-	@( echo 'static const char* editor_tk[] = {'; sed -e 's/\(["\\]\)/\\\1/g' -e 's/^/"/' -e 's/$$/",/' editor.tk; echo '"" };' ) > editor_tk.cpp
-
-autogen_sources: $(AUTOGENERATED_SOURCES)
-
-methods.hpp: PdClasses.hpp
-	@echo "Generating $@..."
-	@awk ' \
-		/^\/\*#end methods\*\/$$/{M=0} \
-		{if(M==1) print $$0} \
-		/^\/\*#begin methods\*\/$$/{M=1}' \
-		PdClasses.hpp \
-	| sed \
-		-e 's/\> *\(\**\) *\w\+\(,\|)\)/\1\2/g' \
-		-e 's/(/( /' -e 's/)/ )/' \
-	| awk '{ \
-		for(x=1; x<NF; x++) { \
-			if(x<=2||x==NF) \
-				printf($$x" "); \
-			else \
-				printf($$x" arg"(x-3)", "); \
-		} \
-		printf("\n"); \
-		}' \
-	| sed \
-		-e 's/,\( arg[0-9]\+\)/\1/g' \
-		-e 's/, $$/);/' \
-		-e 's/( /(/' \
-	> methods.hpp
-
-methods_pd.hpp: methods.hpp
-	@echo "Generating $@..."
-	@sed -e 's/\<track_proxy_\w\+\>/\0P/' methods.hpp > methods_pd.hpp
-
-methods_ed.hpp: methods.hpp
-	@echo "Generating $@..."
-	@sed -e 's/\<track_proxy_\w\+\>/\0E/' methods.hpp > methods_ed.hpp
-
-classsetup.cpp: methods.hpp
-	@echo "Generating $@..."
-	@sed \
-		-e 's/\<track_proxy_\(\w\+\)\>/\0 \1/' \
-		-e 's/);$$/, /' \
-		-e 's/(t_track_proxy\* arg0,\?//' \
-		-e 's/ arg[0-9]\+, / /g' \
-		-e 's/\<t_symbol\* int t_atom\>\*/A_GIMME, /g' \
-		-e 's/\<t_symbol\>\*/A_SYMBOL, /g' \
-		-e 's/\<t_floatarg\>/A_FLOAT, /g' \
-		methods.hpp \
-	| awk '{ \
-		printf("class_addmethod(track_proxy_class, (t_method)%sP, gensym(\"%s\"), ", $$2, $$3); \
-		for(i=4; i<=NF; i++) printf("%s ", $$i); \
-		printf("A_NULL);\n"); \
-		\
-		printf("class_addmethod(track_proxy_class, (t_method)%sE, gensym(\"%sE\"), ", $$2, $$3); \
-		for(i=4; i<=NF; i++) printf("%s ", $$i); \
-		printf("A_NULL);\n"); \
-	}' \
-	> classsetup.cpp
-
-callwrappers_pd.cpp: methods.hpp
-	@echo "Generating $@..."
-	@sed \
-		-e 's/;$$//' \
-		-e 's/^\(.*\)\(\<track_proxy_\w\+\>\)\((.*)\)$$/\1\2P\3 {\n    \2\3;\/\/real call\n    track_proxy_send_result(arg0, 1, 0);\n    return 0;\n}/' \
-		methods.hpp \
-	| sed \
-		-e '/\/\/real call/s/(t_track_proxy\* arg0/(arg0/' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-	> callwrappers_pd.cpp
-
-callwrappers_ed.cpp: methods.hpp
-	@echo "Generating $@..."
-	@sed \
-		-e 's/;$$//' \
-		-e 's/^\(.*\)\(\<track_proxy_\w\+\>\)\((.*)\)$$/\1\2E\3 {\n    \2\3;\/\/real call\n    track_proxy_send_result(arg0, 0, 1);\n    return 0;\n}/' \
-		methods.hpp \
-	| sed \
-		-e '/\/\/real call/s/(t_track_proxy\* arg0/(arg0/' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-		-e '/\/\/real call/s/\(arg[0-9]\+, \)[A-Za-z_*]\+ \(arg[0-9]\+\)/\1\2/g' \
-	> callwrappers_ed.cpp
diff --git a/externals/ffext/composer/Pattern.cpp b/externals/ffext/composer/Pattern.cpp
deleted file mode 100644
index 070838a85..000000000
--- a/externals/ffext/composer/Pattern.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "Pattern.hpp"
-
-#include <iostream>
-
-#include "Common.hpp"
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-Pattern::Pattern(int numRows, int numCols, string patternName)
-: name(patternName)
-{
-	Cell empty_cell;
-	Row empty_row;
-
-	SETSYMBOL(&empty_cell, gensym("empty"));
-
-	while(numCols-- > 0)
-	{
-		empty_row.push_back(empty_cell);
-	}
-
-	columns = empty_row.size();
-
-	while(numRows-- > 0)
-	{
-		Row row(empty_row);
-		rows.push_back(row);
-	}
-}
-
-void Pattern::print()
-{
-	cerr << "---- Pattern: " << name << " ----" << endl;
-
-	char buf[MAXPDSTRING];
-
-	for(unsigned int i = 0; i < rows.size(); i++)
-	{
-		cerr << "  Row[" << i << "]: ";
-		for(unsigned int j = 0; j < rows[i].size(); j++)
-		{
-			if(j > 0) cerr << ", ";
-			atom_string(&rows[i][j], buf, MAXPDSTRING);
-			cerr << buf << endl;
-		}
-	}
-
-	cerr << "---- End pattern (" << name << ") ----" << endl;
-}
-
-void Pattern::resize(int numRows, int numCols)
-{
-	Cell empty_cell;
-	Row empty_row;
-
-	SETSYMBOL(&empty_cell, gensym("empty"));
-
-	while(numCols-- > 0)
-	{
-		empty_row.push_back(empty_cell);
-	}
-
-	rows.resize(numRows, empty_row);
-
-	for(unsigned int i = 0; i < rows.size(); i++)
-	{
-		rows[i].resize(empty_row.size(), empty_cell);
-	}
-
-	columns = empty_row.size();
-}
-
-void Pattern::setCell(int row, int col, Cell cell)
-{
-    row = WRAP(row, rows.size());
-    col = WRAP(col, columns);
-	rows[row][col] = cell;
-}
-
-Cell Pattern::getCell(int row, int col)
-{
-    row = WRAP(row, rows.size());
-    col = WRAP(col, columns);
-	return rows[row][col];
-}
diff --git a/externals/ffext/composer/Pattern.hpp b/externals/ffext/composer/Pattern.hpp
deleted file mode 100644
index fbafcecca..000000000
--- a/externals/ffext/composer/Pattern.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef COMPOSER_PATTERN_H_INCLUDED
-#define COMPOSER_PATTERN_H_INCLUDED
-
-#include <string>
-#include <vector>
-
-#include <m_pd.h>
-
-using std::string;
-using std::vector;
-
-typedef t_atom Cell;
-
-typedef vector<Cell> Row;
-
-class Pattern
-{
-private:
-	string name;
-	vector<Row> rows;
-	int columns;
-public:
-	Pattern(int numRows, int numCols, string patternName);
-	void print();
-	void resize(int numRows, int numCols);
-	void setCell(int row, int col, Cell cell);
-	Cell getCell(int row, int col);
-	inline const string &getName() {return name;}
-    inline void setName(const string &newName) {name = newName;}
-	inline unsigned int getRows() {return rows.size();}
-	inline unsigned int getColumns() {return columns;}
-};
-
-#endif // COMPOSER_PATTERN_H_INCLUDED
diff --git a/externals/ffext/composer/PdClasses.cpp b/externals/ffext/composer/PdClasses.cpp
deleted file mode 100644
index 162945d2e..000000000
--- a/externals/ffext/composer/PdClasses.cpp
+++ /dev/null
@@ -1,527 +0,0 @@
-#include "PdClasses.hpp"
-#include "Song.hpp"
-#include "Track.hpp"
-#include "Pattern.hpp"
-#include "Editor.hpp"
-
-#include "callwrappers_pd.cpp"
-#include "callwrappers_ed.cpp"
-
-#include <iostream>
-
-#include "Common.hpp"
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-t_atom result_argv[MAX_RESULT_SIZE];
-int result_argc;
-
-t_class *track_proxy_class;
-t_class *song_proxy_class;
-
-void track_proxy_setup(void)
-{
-    track_proxy_class = class_new(
-        gensym("track"),
-        (t_newmethod)track_proxy_new,
-        (t_method)track_proxy_free,
-        sizeof(t_track_proxy),
-        CLASS_DEFAULT,
-        A_SYMBOL, A_SYMBOL, A_NULL
-    );
-#include "classsetup.cpp" 
-    class_addmethod(track_proxy_class, (t_method)track_proxy_data, \
-            gensym("data"), A_GIMME, A_NULL);
-#if PD_MINOR_VERSION >= 37
-    class_setpropertiesfn(track_proxy_class, track_proxy_properties);
-    class_setsavefn(track_proxy_class, track_proxy_save);
-#endif
-    class_sethelpsymbol(track_proxy_class, gensym("track.pd"));
-}
-
-t_track_proxy *track_proxy_new(t_symbol *song_name, t_symbol *track_name)
-{
-    t_track_proxy *x = (t_track_proxy*)pd_new(track_proxy_class);
-    x->outlet = outlet_new(&x->x_obj, &s_list);
-    x->editor_open = 0;
-
-    // get or create Track object:
-    x->track = Track::byName(song_name->s_name, track_name->s_name);
-
-    // set send/recv for communication with editor    
-    Song *song = x->track->getSong();
-    string base_name = "track_proxy-" + song->getName() + "-" + x->track->getName();
-    string recv_name = base_name + "-r";
-    string send_name = base_name + "-s";
-    x->editor_recv = gensym(recv_name.c_str());
-    x->editor_send = gensym(send_name.c_str());
-    pd_bind(&x->x_obj.ob_pd, x->editor_recv);
-
-    // bind to TRACK_SELECTOR for loading in-patch data
-    pd_bind(&x->x_obj.ob_pd, gensym(TRACK_SELECTOR));
-
-    Editor::init(x);
-
-    return x;
-}
-
-void track_proxy_free(t_track_proxy *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, gensym(TRACK_SELECTOR));
-    /* LATER find a way to get TRACK_SELECTOR unbound earlier (at end of load?) */
-    /*t_pd* x2;
-    while((x2 = pd_findbyclass(gensym(TRACK_SELECTOR), track_proxy_class)))
-        pd_unbind(x2, gensym(TRACK_SELECTOR));*/
-
-    pd_unbind(&x->x_obj.ob_pd, x->editor_recv);
-}
-
-void track_proxy_save(t_gobj *z, t_binbuf *b)
-{
-    t_track_proxy *x = (t_track_proxy*)z;
-    Track *t = x->track;
-    Song *s = t->getSong();
-
-    binbuf_addv(b, "ssiisss;", gensym("#X"), gensym("obj"),
-        (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,
-        gensym("track"), gensym(s->getName().c_str()),
-	gensym(t->getName().c_str()));
-
-    // save paterns
-    for(Track::pattern_iterator i = t->pattern_begin(); i != t->pattern_end(); i++)
-    {
-        Pattern *pattern = i->second;
-        binbuf_addv(b, "ss", gensym(TRACK_SELECTOR), gensym("data"));
-        t_int r = pattern->getRows();
-        t_int c = pattern->getColumns();
-        binbuf_addv(b, "sii", gensym(pattern->getName().c_str()), r, c);
-        t_atom tmp;
-        for(unsigned int j = 0; j < r; j++)
-        {
-            for(unsigned int k = 0; k < c; k++)
-            {
-                tmp = pattern->getCell(j, k);
-                switch(tmp.a_type)
-                {
-                case A_SYMBOL:
-                    binbuf_addv(b, "s", tmp.a_w.w_symbol);
-                    break;
-                case A_FLOAT:
-                    binbuf_addv(b, "f", tmp.a_w.w_float);
-                    break;
-                default:
-                    binbuf_addv(b, "s", gensym("?"));
-                    break;
-                }
-            }
-        }
-        binbuf_addv(b, ";");
-    }
-
-    // save metadata
-    for(Track::meta_iterator i = t->meta_begin(); i != t->meta_end(); i++)
-    {
-        binbuf_addv(b, "ssssss;", gensym(TRACK_SELECTOR),
-                gensym("meta"), gensym("track"), gensym("set"),
-                gensym(i->first.c_str()), gensym(i->second.c_str()));
-    }
-
-    binbuf_addv(b, "sss;", gensym(TRACK_SELECTOR), gensym("data"), gensym("end"));
-}
-
-void track_proxy_data(t_track_proxy *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(argc == 1 && IS_A_SYMBOL(argv,0) && argv[0].a_w.w_symbol == gensym("end"))
-    {
-        pd_unbind(&x->x_obj.ob_pd, gensym(TRACK_SELECTOR));
-        return;
-    }
-    if(argc < 3 || !IS_A_SYMBOL(argv,0) || !IS_A_FLOAT(argv,1) || !IS_A_FLOAT(argv,2))
-    {
-        pd_error(x, "unrecognized format for in-patch data");
-        return;
-    }
-    t_symbol *pat = argv[0].a_w.w_symbol;
-    t_int rows = (t_int) argv[1].a_w.w_float;
-    t_int cols = (t_int) argv[2].a_w.w_float;
-    if(argc != (3 + rows * cols))
-    {
-        pd_error(x, "unrecognized format for in-patch data (malformed data?)");
-        return;
-    }
-    Track *t = x->track;
-    t->addPattern(rows, cols, pat->s_name);
-    Pattern *p = t->getPattern(pat->s_name);
-    if(!p)
-    {
-        pd_error(x, "fatal error: cannot create patern");
-        return;
-    }
-    int a = 3;
-    for(int r = 0; r < rows; r++)
-    {
-        for(int c = 0; c < cols; c++)
-        {
-            p->setCell(r, c, argv[a]);
-            a++;
-        }
-    }
-}
-
-void track_proxy_properties(t_gobj *z, t_glist *owner)
-{
-    t_track_proxy *x = (t_track_proxy *) z;
-    if(!x->editor_open) Editor::openWindow(x);
-    else Editor::closeWindow(x);
-}
-
-void track_proxy_send_result(t_track_proxy *x, int outlet, int editor)
-{
-    if(result_argc <= 0) return;
-    if(outlet)
-    {
-        outlet_list(x->outlet, &s_list, result_argc, &result_argv[0]);
-    }
-    if(editor)
-    {
-        Editor::dispatch(x, result_argc, &result_argv[0]);
-    }
-}
-
-int track_proxy_meta(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    t_symbol *action = 0, *target = 0, *key = 0;
-    int w = -1;
-
-    if(argc < 3 || !IS_A_SYMBOL(argv,0) || !IS_A_SYMBOL(argv,1) || !IS_A_SYMBOL(argv,2))
-    {
-        pd_error(x, "meta: bad arguments");
-        goto usage;
-    }
-    target = argv[0].a_w.w_symbol;
-    action = argv[1].a_w.w_symbol;
-    key = argv[2].a_w.w_symbol;
-
-    if(action == gensym("get")) w = 0;
-    if(action == gensym("set")) w = 1;
-    if(w < 0) goto badargs;
-
-    if(target == gensym("song"))
-    {
-        pd_error(x, "meta: %s target not implemented yet", target->s_name);
-        return -1;
-    }
-    else if(target == gensym("track"))
-    {
-        string arg = "";
-        string atomStr = "";
-        for(int i = 3; i < argc; i++)
-        {
-            if(arg.length()) arg += " ";
-            char buf[MAXPDSTRING];
-            atom_string(&argv[i], buf, MAXPDSTRING);
-            atomStr = buf;
-            if(atomStr.find(" ", 0) != string::npos)
-                arg += "{" + atomStr + "}";
-            else
-                arg += atomStr;
-        }
-
-        if(w)
-        {
-            if(argc < 4) goto badargs;
-            x->track->setMeta(key->s_name, arg);
-        }
-        else
-        {
-            if(argc < 3) goto badargs;
-            string value = "";
-            if(argc == 3 && !x->track->hasMeta(key->s_name))
-            {
-                pd_error(x, "meta: key '%s' does not exist into %s", key->s_name, target->s_name);
-                return -5;
-            }
-            if(x->track->hasMeta(key->s_name))
-                value = x->track->getMeta(key->s_name);
-            else
-                value = arg;
-            SETSYMBOL(&result_argv[0], gensym("meta"));
-            SETSYMBOL(&result_argv[1], target);
-            SETSYMBOL(&result_argv[2], key);
-            SETSYMBOL(&result_argv[3], gensym(value.c_str()));
-            result_argc = 4;
-        }
-        return 0;
-    }
-
-badargs:
-    pd_error(x, "meta: bad arguments");
-usage:
-    post("usage: meta song|track set <key> <value>");
-    post("       meta song|track get <key>");
-    return 1;
-}
-
-int track_proxy_editor(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    t_symbol *arg1 = 0, *arg2 = 0, *arg3 = 0;
-    if(argc < 1 || !IS_A_SYMBOL(argv,0))
-    {
-        pd_error(x, "editor: missing subcommand");
-        goto usage;
-    }
-
-    arg1 = argv[0].a_w.w_symbol;
-    if(arg1 == gensym("show"))
-    {
-        Editor::openWindow(x);
-    }
-    else if(arg1 == gensym("hide"))
-    {
-        Editor::closeWindow(x);
-    }
-    else if(arg1 == gensym("toggle"))
-    {
-        if(!x->editor_open) Editor::openWindow(x);
-        else Editor::closeWindow(x);
-    }
-    else
-    {
-        pd_error(x, "editor: unknown subcommand: %s", arg1->s_name);
-        goto usage;
-    }
-    return 0;
-
-usage:
-    post("track: editor: available subcommands:");
-    post("    editor show");
-    post("    editor hide");
-    post("    editor toggle");
-    return 1;
-}
-
-int track_proxy_getpatterns(t_track_proxy *x)
-{
-    SETSYMBOL(&result_argv[0], gensym("patternnames"));
-    result_argc = 1;
-    Track *t = x->track;
-    for(Track::pattern_iterator i = t->pattern_begin(); i != t->pattern_end(); i++)
-    {
-        if(result_argc >= MAX_RESULT_SIZE)
-        {
-            pd_error(x, "getpatternnames: result too long");
-            return -2;
-        }
-        Pattern *pattern = i->second;
-        SETSYMBOL(&result_argv[result_argc], gensym(pattern->getName().c_str()));
-        result_argc++;
-    }
-    return 0;
-}
-
-int track_proxy_getpatternsize(t_track_proxy *x, t_symbol *pat)
-{
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "getpatternsize: no such pattern: %s", pat->s_name);
-        return -1;
-    }
-    SETSYMBOL(&result_argv[0], gensym("patternsize"));
-    SETSYMBOL(&result_argv[1], pat);
-    SETFLOAT(&result_argv[2], pattern->getRows());
-    SETFLOAT(&result_argv[3], pattern->getColumns());
-    result_argc = 4;
-    return 0;
-}
-
-int track_proxy_setrow(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    if(argc < 2 || !IS_A_SYMBOL(argv,0) || !IS_A_FLOAT(argv,1))
-    {
-        pd_error(x, "setrow: usage: setrow <pattern> <row#> <atom0> <atom1> ...");
-        return -1;
-    }
-    t_symbol *pat = argv[0].a_w.w_symbol;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    t_int r = (t_int) argv[1].a_w.w_float;
-    if(!pattern)
-    {
-        pd_error(x, "setrow: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    unsigned int argc2 = argc - 2;
-    if(argc2 != pattern->getColumns())
-    {
-        pd_error(x, "setrow: input error: must provide exactly %d elements for a row", pattern->getColumns());
-        return -3;
-    }
-    for(unsigned int i = 0; i < argc2; i++)
-    {
-        pattern->setCell(r, i, argv[i + 2]);
-    }
-    return 0;
-}
-
-int track_proxy_getrow(t_track_proxy *x, t_symbol *pat, t_floatarg rownum)
-{
-    t_int r = (t_int) rownum;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "getrow: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    SETSYMBOL(&result_argv[0], gensym("patternrow"));
-    SETSYMBOL(&result_argv[1], pat);
-    SETFLOAT(&result_argv[2], (t_float) r);
-    result_argc = 3;
-    for(unsigned int i = 0; i < pattern->getColumns(); i++)
-    {
-        if(result_argc >= MAX_RESULT_SIZE)
-        {
-            pd_error(x, "getrow: result too long");
-            return -2;
-        }
-        result_argv[result_argc] = pattern->getCell(r, i);
-        result_argc++;
-    }
-    return 0;
-}
-
-int track_proxy_setcell(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv)
-{
-    result_argc = 0;
-    if(argc != 4 || !IS_A_SYMBOL(argv,0) || !IS_A_FLOAT(argv,1) || !IS_A_FLOAT(argv,2))
-    {
-        pd_error(x, "setrow: usage: setcell <pattern> <row#> <col#> <atom>");
-        return -1;
-    }
-    t_symbol *pat = argv[0].a_w.w_symbol;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    t_int r = (t_int) argv[1].a_w.w_float;
-    t_int c = (t_int) argv[2].a_w.w_float;
-    if(!pattern)
-    {
-        pd_error(x, "setcell: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    pattern->setCell(r, c, argv[3]);
-    return 0;
-}
-
-int track_proxy_getcell(t_track_proxy *x, t_symbol *pat, t_floatarg rownum, t_floatarg colnum)
-{
-    t_int r = (t_int) rownum;
-    t_int c = (t_int) colnum;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "getcell: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    SETSYMBOL(&result_argv[0], gensym("patterncell"));
-    SETSYMBOL(&result_argv[1], pat);
-    SETFLOAT(&result_argv[2], (t_float) r);
-    SETFLOAT(&result_argv[3], (t_float) c);
-    result_argv[4] = pattern->getCell(r, c);
-    result_argc = 5;
-    return 0;
-}
-
-
-int track_proxy_addpattern(t_track_proxy *x, t_symbol *name, t_floatarg rows, t_floatarg cols)
-{
-    result_argc = 0;
-    t_int r = (t_int) rows;
-    t_int c = (t_int) cols;
-    Pattern *pattern = x->track->getPattern(name->s_name);
-    if(pattern)
-    {
-        pd_error(x, "addpattern: pattern already exist: %s", name->s_name);
-        return -3;
-    }
-    x->track->addPattern(r, c, string(name->s_name));
-    return 0;
-}
-
-int track_proxy_removepattern(t_track_proxy *x, t_symbol *pat)
-{
-    result_argc = 0;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "removepattern: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    x->track->removePattern(pat->s_name);
-    return 0;
-}
-
-int track_proxy_resizepattern(t_track_proxy *x, t_symbol *pat, t_floatarg rows, t_floatarg cols)
-{
-    result_argc = 0;
-    t_int r = (t_int) rows;
-    t_int c = (t_int) cols;
-    Pattern *pattern = x->track->getPattern(pat->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "resizepattern: no such pattern: %s", pat->s_name);
-        return -2;
-    }
-    if(rows < 1 || cols < 1)
-    {
-        pd_error(x, "resizepattern: rows and columns must be positive");
-        return -6;
-    }
-    pattern->resize(r, c);
-    return 0;
-}
-
-int track_proxy_renamepattern(t_track_proxy *x, t_symbol *oldName, t_symbol *newName)
-{
-    result_argc = 0;
-    Pattern *pattern = x->track->getPattern(oldName->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "renamepattern: no such pattern: %s", oldName->s_name);
-        return -2;
-    }
-    pattern = x->track->getPattern(newName->s_name);
-    if(pattern)
-    {
-        pd_error(x, "renamepattern: destination pattern already exist: %s", newName->s_name);
-        return -3;
-    }
-    x->track->renamePattern(oldName->s_name, newName->s_name);
-    return 0;
-}
-
-int track_proxy_copypattern(t_track_proxy *x, t_symbol *src, t_symbol *dst)
-{
-    result_argc = 0;
-    Pattern *pattern = x->track->getPattern(src->s_name);
-    if(!pattern)
-    {
-        pd_error(x, "copypattern: no such pattern: %s", src->s_name);
-        return -2;
-    }
-    pattern = x->track->getPattern(dst->s_name);
-    if(pattern)
-    {
-        pd_error(x, "copypattern: destination pattern already exist: %s", dst->s_name);
-        return -3;
-    }
-    x->track->copyPattern(src->s_name, dst->s_name);
-    return 0;
-}
-
-void composer_setup()
-{
-    track_proxy_setup();
-}
diff --git a/externals/ffext/composer/PdClasses.hpp b/externals/ffext/composer/PdClasses.hpp
deleted file mode 100644
index 15e401cb6..000000000
--- a/externals/ffext/composer/PdClasses.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef COMPOSER_PDCLASSES_H_INCLUDED
-#define COMPOSER_PDCLASSES_H_INCLUDED
-
-#include <m_pd.h>
-
-#define MAX_RESULT_SIZE 128
-
-#define TRACK_SELECTOR "#composer::track"
-#define SONG_SELECTOR "#composer::song"
-
-class Track;
-class Song;
-
-typedef struct _track_proxy
-{
-    t_object x_obj;
-    t_outlet *outlet;
-    Track *track;
-    t_int editor_open;
-    t_symbol *editor_recv;
-    t_symbol *editor_send;
-} t_track_proxy;
-
-void track_proxy_setup(void);
-t_track_proxy *track_proxy_new(t_symbol *song_name, t_symbol *track_name);
-void track_proxy_free(t_track_proxy *x);
-void track_proxy_save(t_gobj *z, t_binbuf *b);
-void track_proxy_data(t_track_proxy *x, t_symbol *s, int argc, t_atom *argv);
-void track_proxy_properties(t_gobj *z, t_glist *owner);
-void track_proxy_send_result(t_track_proxy *x, int outlet, int editor);
-
-/*#begin methods*/
-int track_proxy_meta(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_editor(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_getpatterns(t_track_proxy *x);
-int track_proxy_getpatternsize(t_track_proxy *x, t_symbol *pat);
-int track_proxy_setrow(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_getrow(t_track_proxy *x, t_symbol *pat, t_floatarg rownum);
-int track_proxy_setcell(t_track_proxy *x, t_symbol *sel, int argc, t_atom *argv);
-int track_proxy_getcell(t_track_proxy *x, t_symbol *pat, t_floatarg rownum, t_floatarg colnum);
-int track_proxy_addpattern(t_track_proxy *x, t_symbol *name, t_floatarg rows, t_floatarg cols);
-int track_proxy_removepattern(t_track_proxy *x, t_symbol *pat);
-int track_proxy_resizepattern(t_track_proxy *x, t_symbol *pat, t_floatarg rows, t_floatarg cols);
-int track_proxy_renamepattern(t_track_proxy *x, t_symbol *oldName, t_symbol *newName);
-int track_proxy_copypattern(t_track_proxy *x, t_symbol *src, t_symbol *dst);
-/*#end methods*/
-
-#include "methods_pd.hpp"
-#include "methods_ed.hpp"
-
-extern "C" void composer_setup(void);
-
-#endif // COMPOSER_PDCLASSES_H_INCLUDED
diff --git a/externals/ffext/composer/Song.cpp b/externals/ffext/composer/Song.cpp
deleted file mode 100644
index c79350436..000000000
--- a/externals/ffext/composer/Song.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "Song.hpp"
-
-#include <iostream>
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-map<string,Song *> Song::byname;
-
-Song::Song(string songName)
-: name(songName)
-{
-}
-
-Song *Song::byName(string songName)
-{
-	if(byname.find(songName) == byname.end())
-		byname[songName] = new Song(songName);
-
-	return byname[songName];
-}
-
-void Song::print()
-{
-	cerr << "---- Song: " << name << " ----" << endl;
-
-	for(map<string,Track *>::iterator i = tracks.begin(); i != tracks.end(); i++)
-	{
-		cerr << "  Track[" << i->first << "]: " << i->first << endl;
-	}
-
-	cerr << "---- End song (" << name << ") ----" << endl;
-}
-
-Track *Song::getTrackByName(string trackName)
-{
-	if(tracks.find(trackName) == tracks.end())
-		return 0;
-	else
-		return tracks[trackName];
-}
diff --git a/externals/ffext/composer/Song.hpp b/externals/ffext/composer/Song.hpp
deleted file mode 100644
index 7784ad5a2..000000000
--- a/externals/ffext/composer/Song.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef COMPOSER_SONG_H_INCLUDED
-#define COMPOSER_SONG_H_INCLUDED
-
-#include "HasMeta.hpp"
-
-#include <map>
-#include <string>
-
-#include <m_pd.h>
-
-#include "Track.hpp"
-
-using std::map;
-using std::string;
-
-class Song : public HasMeta
-{
-private:
-	static map<string,Song *> byname;
-public:
-	static Song *byName(string songName);
-private:
-	string name;
-	map<string,Track *> tracks;
-protected:
-	Song(string songName);
-public:
-	void print();
-	Track *getTrackByName(string trackName);
-	inline const string &getName() {return name;}
-};
-
-#endif // COMPOSER_SONG_H_INCLUDED
diff --git a/externals/ffext/composer/Track.cpp b/externals/ffext/composer/Track.cpp
deleted file mode 100644
index d0ed4de5a..000000000
--- a/externals/ffext/composer/Track.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "Song.hpp"
-#include "Track.hpp"
-#include "Pattern.hpp"
-
-#include <iostream>
-
-using std::cout;
-using std::cerr;
-using std::endl;
-
-Track::Track(Song *_song, string trackName)
-: name(trackName), song(_song)
-{
-}
-
-Track *Track::byName(string songName, string trackName)
-{
-	Song *song = Song::byName(songName);
-
-	Track *track = song->getTrackByName(trackName);
-	if(!track) track = new Track(song, trackName);
-
-	return track;
-}
-
-void Track::print()
-{
-	cerr << "---- Track: " << name << " ----" << endl;
-
-    for(map<string,Pattern *>::iterator i = patterns.begin(); i != patterns.end(); i++)
-    {
-		cerr << "  Pattern[" << i->first << "]: " << i->second->getName() << endl;
-    }
-
-	cerr << "---- End track (" << name << ") ----" << endl;
-}
-
-void Track::addPattern(int rows, int cols, string name)
-{
-    Pattern *pattern = new Pattern(rows, cols, name);
-    patterns[name] = pattern;
-}
-
-Pattern *Track::getPattern(const string &p)
-{
-    if(patterns.find(p) != patterns.end())
-        return patterns[p];
-    else
-        return 0;
-}
-
-void Track::renamePattern(const string &oldName, const string &newName)
-{
-    Pattern *pattern = getPattern(oldName);
-    if(!pattern) return;
-    patterns[newName] = patterns[oldName];
-    patterns[newName]->setName(newName);
-    patterns.erase(oldName);
-}
-
-void Track::copyPattern(const string &src, const string &dst)
-{
-    Pattern *pattern = getPattern(src);
-    if(!pattern) return;
-    patterns[dst] = new Pattern(*patterns[src]);
-    patterns[dst]->setName(dst);
-}
-
-void Track::removePattern(const string &p)
-{
-    Pattern *pattern = getPattern(p);
-    if(!pattern) return;
-    patterns.erase(p);
-}
-
diff --git a/externals/ffext/composer/Track.hpp b/externals/ffext/composer/Track.hpp
deleted file mode 100644
index 93012143d..000000000
--- a/externals/ffext/composer/Track.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef COMPOSER_TRACK_H_INCLUDED
-#define COMPOSER_TRACK_H_INCLUDED
-
-#include "HasMeta.hpp"
-
-#include <map>
-#include <string>
-
-#include <m_pd.h>
-
-using std::string;
-using std::map;
-
-class Song;
-class Pattern;
-
-class Track : public HasMeta
-{
-public:
-	static Track *byName(string songName, string trackName);
-private:
-	string name;
-    map<string,Pattern *> patterns;
-	Song *song;
-protected:
-	Track(Song *_song, string trackName);
-public:
-	void print();
-	void addPattern(int rows, int cols, string name);
-    Pattern *getPattern(const string &p);
-    void renamePattern(const string &oldName, const string &newName);
-    void copyPattern(const string &src, const string &dst);
-    void removePattern(const string &p);
-	inline unsigned int getPatternCount() {return patterns.size();}
-	inline Song *getSong() {return song;}
-	inline const string &getName() {return name;}
-
-    typedef map<string,Pattern *>::const_iterator pattern_iterator;
-    inline pattern_iterator pattern_begin() const {return patterns.begin();}
-    inline pattern_iterator pattern_end() const {return patterns.end();}
-};
-
-#endif // COMPOSER_TRACK_H_INCLUDED
diff --git a/externals/ffext/composer/editor.tk b/externals/ffext/composer/editor.tk
deleted file mode 100644
index f800bbe4e..000000000
--- a/externals/ffext/composer/editor.tk
+++ /dev/null
@@ -1,688 +0,0 @@
-# ------------------------------------------------------------------------
-# Copyright (c) 2009 Federico Ferri.                                      
-# For information on usage and redistribution, and for a DISCLAIMER OF ALL
-# WARRANTIES, see the file, "LICENSE.txt," in this distribution.          
-#                                                                         
-# composer: a music composition framework for pure-data                   
-#                                                                         
-# 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.                  
-#                                                                         
-# See file LICENSE for further informations on licensing terms.           
-#                                                                         
-# 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.         
-#                                                                         
-# Based on PureData by Miller Puckette and others.                        
-# ------------------------------------------------------------------------
-
-package require Tcl 8.5
-package require Tk 8.5
-package require Tktable 2.9
-
-namespace eval pd::composer {
-    variable debug
-    variable w
-    array set w {}
-    variable songname
-    array set songname {}
-    variable trackname
-    array set trackname {}
-    variable currentpattern
-    array set currentpattern {}
-    variable size
-    array set size {}
-    variable patterns
-    array set patterns {}
-    variable tracks
-    array set tracks {}
-
-    variable quirks_fix_int_floats 0
-    variable symbolmap {empty {}}
-    # set to 1 until startup, for getting soon a pattern list
-    # affects the behavior of dispatcher::patterns branch
-    variable startup
-    array set startup {}
-    variable showpattern
-    array set showpattern {}
-
-    proc debugPrint {args} {
-        variable debug
-        if {![info exists debug]} {set debug 0}
-        if {$debug} {puts stderr "composer-TCL: $args"}
-    }
-
-    proc sendGui {what} {
-        debugPrint "sendGui $what"
-        catch {netsend $what}
-        lappend what \;\n
-        catch {pdsend $what}
-        catch {pd {*}$what}
-    }
-
-    proc editCommand {method args} {
-        linsert $args 0 [uplevel {set id}] ${method}E
-    }
-
-    proc createPattern {id name rows cols} {
-        debugPrint [info level 0]
-        variable patterns
-
-        if {$name in $patterns($id)} {
-            return -code error "Pattern '$name' already exists"
-        }
-        set rows [expr {int($rows)}]
-        set cols [expr {int($cols)}]
-        if {$rows <= 0 || $cols <= 0} {
-            return -code error "Pattern dimensions must pe positive integer"
-        }
-
-        sendGui [editCommand addpattern $name $rows $cols]
-        sendGui [editCommand getpatterns]
-    }
-
-    proc removePattern {id name} {
-        debugPrint [info level 0]
-        sendGui [editCommand removepattern $name]
-        sendGui [editCommand getpatterns]
-    }
-
-    proc copyPattern {id src dst} {
-        debugPrint [info level 0]
-        sendGui [editCommand copypattern $src $dst]
-        sendGui [editCommand getpatterns]
-    }
-
-    proc resizePattern {id name rows cols} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable size;
-
-        if {[dict exists $size($id) $name]} {
-            if {[list $rows $cols] == [dict get $size($id) $name]} return
-        }
-
-        set rows [expr {int($rows)}]
-        set cols [expr {int($cols)}]
-        if {$rows <= 0 || $cols <= 0} {
-            return -code error "Pattern dimensions must pe positive integer"
-        }
-
-        sendGui [editCommand resizepattern $name $rows $cols]
-        if {$currentpattern($id) == $name} {
-            displayPattern $id $name
-        }
-    }
-
-    proc renamePattern {id name newName} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable patterns;
-
-        if {$name == $newName} return
-        if {$newName in $patterns($id)} {
-            return -code error "Pattern name '$newName' already exists"
-        }
-        set idx [lsearch -exact $patterns($id) $name]
-        if {$idx == -1} {
-            return -code error "No such pattern: '$name'"
-        }
-
-        sendGui [editCommand renamepattern $name $newName]
-        if {$currentpattern($id) == $name} {
-            set currentpattern($id) $newName
-        }
-        sendGui [editCommand getpatterns]
-    }
-
-    proc generateNewPatternName {id} {
-        debugPrint [info level 0]
-        variable patterns;
-        set n 0
-        while 1 {
-            set t "P[format %.02d $n]"
-            if {$t in $patterns($id)} {incr n} else {return $t}
-        }
-    }
-
-    proc displayPattern {id name} {
-        debugPrint "request-pattern-size"
-        variable showpattern
-        set showpattern($id) 1
-        sendGui [editCommand getpatternsize $name]
-    }
-
-    proc updateTitle {id} {
-        variable w
-        variable songname
-        variable trackname
-        variable currentpattern
-        set t "Song: $songname($id)"
-        if {$currentpattern($id) == "Arrangement"} {
-            append t "  Arrangement"
-        } else {
-            append t "  Track: $trackname($id)"
-            if {$currentpattern($id) != {}} {
-                append t "  Pattern: $currentpattern($id)"
-            }
-        }
-        wm title $w($id) $t
-    }
-
-    proc displayPattern_async {id name} {
-        debugPrint [info level 0]
-        variable currentpattern
-        variable patterns
-        variable size
-        variable w
-        variable songname
-        variable trackname
-        variable [getDataVar $id]
-
-        set currentpattern($id) $name
-        updateTitle $id
-       
-        if {$currentpattern($id) == {}} {
-            grid forget $w($id).t
-            return
-        }
-
-        lassign [dict get $size($id) $name] rows cols
-        grid $w($id).t -row 10 -column 0 -sticky news
-        debugPrint "resizing tktable widget to ${rows}x${cols}"
-        $w($id).t configure -state normal -variable [getDataVar $id] -rows $rows -cols [expr {1+$cols}]
-        $w($id).f.p configure -values $patterns($id)
-        $w($id).f.p current [lsearch -exact $patterns($id) $name]
-    }
-
-    proc displayCurrentPattern {id} {
-        debugPrint [info level 0]
-        variable currentpattern
-        variable w
-        debugPrint "current pattern is {$currentpattern($id)}"
-        displayPattern $id $currentpattern($id)
-    }
-
-    proc rowTag {id r} {
-        if {$r % $::div1($id) == 0} {return "alt0"}
-        if {$r % $::div2($id) == 0} {return "alt1"}
-    }
-
-    proc refreshGrid {id} {
-        debugPrint [info level 0]
-        variable currentpattern
-        debugPrint "currentPattern is {$currentpattern($id)}"
-        variable w
-        $w($id).t configure -padx [$w($id).t cget -padx]
-    }
-
-    proc dw {id n k op} {
-        if {$op != {write}} {return}
-        if {$n != [getDataVar $id]} {return}
-        if {$k == {active}} {return}
-        if {$k == {#TEST KEY#}} {return}
-        variable currentpattern
-        variable symbolmap
-
-        lassign [split $k ,] row col
-        upvar [getDataVar $id] data
-        set newVal $data($k)
-
-        debugPrint "BEFORE: newVal = '$newVal'"
-        set newVal [dict get [dict merge [list $newVal $newVal] [lreverse $symbolmap]] $newVal]
-        debugPrint "AFTER: newVal = '$newVal'"
-
-        sendGui [editCommand setcell $currentpattern($id) $row $col $newVal]
-    }
-
-    proc getDataVar {id {P {}}} {
-        variable currentpattern
-        variable songname
-        variable trackname
-        if {$P == ""} {set P $currentpattern($id)}
-        set n "[namespace current]::data_$songname($id)_$trackname($id)_$P"
-        if {![info exists $n]} {
-            array set $n {}
-            trace add variable $n write [list [namespace current]::dw $id]
-            # TODO: when to remove the above variable trace?
-        }
-        return $n
-    }
-
-    proc columnSizeChanged {id} {
-        variable w
-        variable columnsizes
-        set newsz {}
-        # tktable width returns a list of pairs (!)
-        foreach pair [$w($id).t width] {lappend newsz {*}$pair}
-        if {$columnsizes($id) != $newsz} {
-            set columnsizes($id) $newsz
-            sendGui [editCommand meta track set colw {*}$newsz]
-        }
-    }
-
-    proc divChanged {id} {
-        refreshGrid $id
-        sendGui [editCommand meta track set div \
-            [expr {int($::div1($id))}] \
-            [expr {int($::div2($id))}]]
-    }
-
-    proc createMainWindow {id} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable w
-        variable songname
-        variable trackname
-        variable patterns
-        variable startup
-        variable showpattern
-        variable columnsizes
-        variable [getDataVar $id]
-
-        catch {destroy $w($id)}
-        debugPrint "creating window with path = '$w($id)'"
-        toplevel $w($id) -class [winfo class .]
-
-        debugPrint "top-toolbar(frame)"
-        grid [ttk::frame $w($id).f] \
-            -row 5 -columnspan 2 -sticky news
-        debugPrint "label"
-        grid [ttk::label $w($id).f.l -text "Pattern: "] \
-            -row 0 -column 0 -in $w($id).f
-        debugPrint "combobox patterns"
-        grid [ttk::combobox $w($id).f.p \
-            -textvariable "[namespace current]::currentpattern($id)"] \
-            -row 0 -column 1 -in $w($id).f
-        debugPrint "divs"
-        grid [ttk::label $w($id).f.ld1 -text "Div1: "] \
-            -row 0 -column 2 -in $w($id).f
-        grid [spinbox $w($id).f.d1 -command "[namespace current]::divChanged $id" \
-            -from 8 -to 64 \
-            -increment 1 -format %3.0f -width 3 -textvar ::div1($id)] \
-            -row 0 -column 3 -in $w($id).f
-        grid [ttk::label $w($id).f.ld2 -text "Div2: "] \
-            -row 0 -column 4 -in $w($id).f
-        grid [spinbox $w($id).f.d2 -command "[namespace current]::divChanged $id" \
-            -from 2 -to 64 \
-            -increment 1 -format %3.0f -width 3 -textvar ::div2($id)] \
-            -row 0 -column 5 -in $w($id).f
-
-        debugPrint "step2"
-        $w($id).f.p state readonly
-
-        debugPrint "bindevent"
-        bind $w($id).f.p <<ComboboxSelected>> \
-            "[namespace current]::displayCurrentPattern $id"
-        debugPrint "table"
-
-        table $w($id).t -state disabled \
-            -insertofftime 0 \
-            -bordercursor sb_h_double_arrow \
-            -colorigin -1 -sparsearray 1 \
-            -relief ridge -takefocus 1 -borderwidth 1 -colwidth 4 \
-            -browsecmd "[namespace current]::activeCellChanges $id %r %c" \
-            -cols 0 -rows 0 \
-            -cache 0 \
-            -colstretchmode none -rowstretchmode none \
-            -flashmode 1 -flashtime 2 -autoclear 1 \
-            -justify left -multiline 0 -resizeborders col \
-            -selectmode extended -selecttype cell \
-            -titlecols 1 -titlerows 0 \
-            -validate 0 \
-            -variable [getDataVar $id] \
-            -sparsearray 0 \
-            -exportselection 1 \
-            -xscrollcommand "$w($id).hscroll set" \
-            -yscrollcommand "$w($id).vscroll set" \
-            -rowtagcommand "[namespace current]::rowTag $id"
-        #grid $w($id).t -row 10 -column 0 -sticky news
-
-        if {![llength [info procs ::tk::table::ChangeWidth_]]} {
-            rename ::tk::table::ChangeWidth ::tk::table::ChangeWidth_
-            proc ::tk::table::ChangeWidth {w i a} "
-                ::pd::composer::columnSizeChanged $id
-                uplevel ::tk::table::ChangeWidth_ \$w \$i \$a
-                "
-        }
-
-        set columnsizes($id) {}
-
-        debugPrint "scrollbars"
-        grid [ttk::scrollbar $w($id).vscroll -orient vertical -command "$w($id).t yview"] -row 10 -column 1 -sticky ns
-        grid [ttk::scrollbar $w($id).hscroll -orient horizontal -command "$w($id).t xview"] -row 15 -column 0 -sticky ew
-        #grid [ttk::sizegrip $w($id).resize] -row 15 -column 1 -sticky se
-
-        grid [ttk::entry $w($id).eval] -row 20 -columnspan 2 -sticky ew
-        bind $w($id).eval <Return> "set cmd \[$w($id).eval get]; namespace eval [namespace current] \$cmd; $w($id).eval delete 0 end"
-
-        debugPrint "grid"
-        grid columnconfigure $w($id) 0 -weight 1
-        grid rowconfigure $w($id) 10 -weight 1
-
-        debugPrint "table-tags"
-        $w($id).t tag configure active  -relief solid -background gray -foreground black
-        $w($id).t tag configure flash   -background red   -foreground white
-        $w($id).t tag configure sel     -background blue  -foreground white
-        $w($id).t tag configure title   -background gray  -foreground white -justify right
-        $w($id).t tag configure alt0    -background "#20a8b8"
-        $w($id).t tag configure alt1    -background "#0f7f9f"
-        $w($id).t tag configure notecol -background "#dddded"
-
-        debugPrint "wm"
-        wm minsize $w($id) 300 150
-        wm protocol $w($id) WM_DELETE_WINDOW [list [namespace current]::sendGui [editCommand editor hide]]
-
-        debugPrint "menu"
-        menu $w($id).m -tearoff 0
-        $w($id).m add command -label "New pattern..." \
-            -command "[namespace current]::newPatternDialog $id"
-        $w($id).m add command -label "Pattern properties..." \
-            -command "[namespace current]::patternPropertiesDialog $id"
-        $w($id).m add command -label "Remove pattern..." \
-            -command "[namespace current]::removePatternConfirm $id"
-        $w($id).m add command -label "Create copy..." \
-            -command "[namespace current]::copyPatternDialog $id"
-
-        menu $w($id).mb
-        $w($id) configure -menu $w($id).mb
-        menu $w($id).mb.tools -tearoff 0
-        $w($id).mb.tools add command -label {Reload} \
-            -command {uplevel 0 {source $argv0}}
-        $w($id).mb add cascade -label {Pattern} -menu $w($id).m
-        $w($id).mb add cascade -label {Utils} -menu $w($id).mb.tools
-
-        debugPrint "more-bind-events"
-        bind $w($id).t <ButtonPress-3> "$w($id).t activate @%x,%y; tk_popup $w($id).m %X %Y"
-        bind $w($id).t <Control-t> "switchColumnType $id"
-        bind $w($id).t <ButtonRelease-1> "[namespace current]::columnSizeChanged $id"
-
-        set startup($id) 1
-        set showpattern($id) 0
-        debugPrint "request-patterns"
-        sendGui [editCommand getpatterns]
-
-        return $w($id)
-    }
-
-    proc switchColumnType {id} {
-        debugPrint [info level 0]
-        variable w
-        global colType
-        set curcol [$w($id).t index active col]
-        set tag {}
-        if {![info exists colType(c$curcol)]} {
-            set colType(c$curcol) {notes}
-            set tag {notecol}
-        } elseif {$colType(c$curcol) == {notes}} {
-            unset colType(c$curcol)
-        }
-
-        $w($id).t tag col $tag $curcol
-        #refreshGrid
-    }
-
-    proc activeCellChanges {id row col} {
-        debugPrint [info level 0]
-        variable w
-        if {$col < 0} {$w($id).t activate $row,[incr col]}
-    }
-
-    proc patternPropertiesDialog_common {id options} {
-        debugPrint [info level 0]
-        variable currentpattern
-        variable w
-        set bname 1
-        set brows 1
-        set bcols 1
-        set old_name {}
-        catch {set old_name $currentpattern($id)}
-        set vname {}
-        set vrows {}
-        set vcols {}
-        set action_cancel {destroy %w}
-        set action_ok $action_cancel
-
-        set opts {vname vrows vcols bname brows bcols action_ok action_cancel}
-        foreach opt $opts {
-            catch {set $opt [dict get $options $opt]}
-        }
-        foreach {o v} $options {
-            if {$o ni $opts} {
-                return -code error "Invalid option: $o"
-            }
-        }
-
-        set w_ $w($id).patternProps
-        catch {destroy $w_}
-        toplevel $w_ -class [winfo class .]
-
-        foreach v {action_ok action_cancel} {
-            set $v [string map [list %ns [namespace current] %id $id %w $w_ %old_name $old_name] [set $v]]
-        }
-
-        grid [ttk::label $w_.lname -text "Name: "] -row 0 -column 0
-        grid [ttk::label $w_.lrows -text "Rows: "] -row 1 -column 0
-        grid [ttk::label $w_.lcols -text "Cols: "] -row 2 -column 0
-        grid [ttk::entry $w_.ename] -row 0 -column 1
-        grid [ttk::entry $w_.erows] -row 1 -column 1
-        grid [ttk::entry $w_.ecols] -row 2 -column 1
-        grid [ttk::frame $w_.b] -row 999 -columnspan 2
-        grid [ttk::button $w_.b.ok -text Ok -command $action_ok] -row 0 -column 0 -in $w_.b
-        grid [ttk::button $w_.b.cancel -text Cancel -command $action_cancel] -row 0 -column 1 -in $w_.b
-
-        $w_.ename insert 0 $vname
-        $w_.erows insert 0 $vrows
-        $w_.ecols insert 0 $vcols
-
-        if {!$bname} {$w_.ename configure -state disabled}
-        if {!$brows} {$w_.erows configure -state disabled}
-        if {!$bcols} {$w_.ecols configure -state disabled}
-    }
-
-    proc patternPropertiesDialog {id {options {}}} {
-        debugPrint [info level 0]
-        variable currentpattern;
-        variable size;
-
-        dict set options action_ok {
-            %ns::renamePattern %id %old_name [%w.ename get]
-            %ns::resizePattern %id [%w.ename get] [%w.erows get] [%w.ecols get]
-            destroy %w
-        }
-        dict set options vname $currentpattern($id)
-        lassign [dict get $size($id) $currentpattern($id)] pat_rows pat_cols
-        dict set options vrows $pat_rows
-        dict set options vcols $pat_cols
-        patternPropertiesDialog_common $id $options
-    }
-
-    proc copyPatternDialog {id {options {}}} {
-        debugPrint [info level 0]
-        variable w;
-        variable size;
-        variable currentpattern;
-        dict set options brows 0
-        dict set options bcols 0
-        dict set options vname [generateNewPatternName $id]
-        lassign [dict get $size($id) $currentpattern($id)] pat_rows pat_cols
-        dict set options vrows $pat_rows
-        dict set options vcols $pat_rows
-        dict set options action_ok {
-            %ns::copyPattern %id %old_name [%w.ename get]
-            destroy %w
-        }
-        patternPropertiesDialog_common $id $options
-    }
-
-    proc removePatternConfirm {id} {
-        debugPrint [info level 0]
-        variable w;
-        variable currentpattern;
-        if {[tk_messageBox \
-            -type yesno -default no \
-            -title "Question" \
-            -icon question -message "Do you confirm pattern delete?" \
-            -detail "The operation cannot be undone" \
-            -parent $w($id)] == {yes}} {
-            removePattern $id $currentpattern($id)
-        }
-    }
-
-    proc newPatternDialog {id {options {}}} {
-        debugPrint [info level 0]
-        dict set options action_ok {
-            %ns::createPattern %id [%w.ename get] [%w.erows get] [%w.ecols get]
-            destroy %w
-        }
-        dict set options vname [generateNewPatternName $id]
-        dict set options vrows 16
-        dict set options vcols 8
-        patternPropertiesDialog_common $id $options
-    }
-
-    #entrypoint
-    proc init {id song_name track_name set_current_pattern debug_flag} {
-        debugPrint [info level 0]
-        variable debug
-        set debug [expr {$debug_flag != 0}]
-        variable w
-        variable songname
-        variable trackname
-        variable size
-        variable currentpattern
-        set w($id) .w_${song_name}_${track_name}
-        set songname($id) $song_name
-        set trackname($id) $track_name
-        if {$set_current_pattern == {NULL}} {
-            set currentpattern($id) {}
-        } else {
-            set currentpattern($id) $set_current_pattern
-        }
-        set size($id) {}
-    }
-
-    proc openWindow {id} {
-        debugPrint [info level 0]
-        createMainWindow $id
-        updateTitle $id
-    }
-
-    proc closeWindow {id} {
-        debugPrint [info level 0]
-        variable w
-        destroy $w($id)
-    }
-
-    proc setCellValueUI {id pat r c v} {
-        upvar 0 [getDataVar $id $pat] data
-        variable symbolmap
-        set data($r,$c) [dict get [dict merge [list $v $v] $symbolmap] $v]
-    }
-
-    proc dispatch {id args} {
-        debugPrint [info level 0]
-        variable w
-        variable patterns
-        variable size
-        variable currentpattern
-        variable startup
-        variable showpattern
-        variable quirks_fix_int_floats
-        switch -exact [lindex $args 0] {
-            patternnames {
-                # for track mode
-                set patterns($id) [lrange $args 1 end]
-                debugPrint "patterns <- $patterns($id)"
-                $w($id).f.p configure -values $patterns($id)
-                if {$startup($id)} {
-                    set startup($id) 0
-                    if {[llength $patterns($id)] > 0} {
-                        displayPattern $id [lindex $patterns($id) 0]
-                    }
-                }
-            }
-            patternsize {
-                set pat_name [lindex $args 1]
-                set pat_rows [lindex $args 2]
-                set pat_cols [lindex $args 3]
-                set new_size [list $pat_rows $pat_cols]
-                debugPrint "got patternsize: '$pat_name' (size = $pat_rows x $pat_cols)"
-                if {![dict exists $size($id) $pat_name] || [dict get $size($id) $pat_name] != $new_size || $showpattern($id)} {
-                    # TODO: uhm, does this really need to be inside the if???
-                    dict set size($id) $pat_name $new_size
-
-                    # request rows
-                    for {set i 0} {$i < $pat_rows} {incr i} {
-                        sendGui [editCommand getrow $pat_name $i]
-                    }
-                    # ...and column width
-                    sendGui [editCommand meta track get colw none]
-                    # ...and div1/div2 settings
-                    sendGui [editCommand meta track get div 8 4]
-                }
-            }
-            patternrow {
-                set pat_name [lindex $args 1]
-                if {$quirks_fix_int_floats} {
-                    set row_num [expr {int([lindex $args 2])}]
-                } else {
-                    set row_num [lindex $args 2]
-                }
-                set row [lrange $args 3 end]
-                debugPrint "got row: '$pat_name' ($row_num) {$row}"
-                setCellValueUI $id $pat_name $row_num -1 [expr {1+$row_num}]
-                for {set i 0} {$i < [llength $row]} {incr i} {
-                    setCellValueUI $id $pat_name $row_num $i [lindex $row $i]
-                }
-                lassign [dict get $size($id) $pat_name] pat_rows pat_cols
-                if {$row_num + 1 == $pat_rows} {
-                    if {$showpattern($id)} {
-                        set showpattern($id) 0
-                        displayPattern_async $id $pat_name
-                    }
-                }
-            }
-            patterncell {
-                set pat_name [lindex $args 1]
-                if {$quirks_fix_int_floats} {
-                    set row_num [expr {int([lindex $args 2])}]
-                    set col_num [expr {int([lindex $args 3])}]
-                } else {
-                    set row_num [lindex $args 2]
-                    set col_num [lindex $args 3]
-                }
-                set cell [lindex $args 4]
-                debugPrint "got cell: '$pat_name' ($row_num,$col_num) {$cell}"
-                debugPrint "dataVar = [getDataVar $id $pat_name]"
-                setCellValueUI $id $pat_name $row_num $col_num $cell
-            }
-            meta {
-                switch -exact [lindex $args 1] {
-                    track {
-                        switch -exact [lindex $args 2] {
-                            colw {
-                                set a [lrange $args 3 end]
-                                debugPrint "got meta: track: colw: '$a'"
-                                if {$a == {none}} return
-                                $w($id).t width {*}$a
-                            }
-                            div {
-                                lassign [lrange $args 3 end] ::div1($id) ::div2($id)
-                                debugPrint "got meta: track: div: '$::div1($id) $::div2($id)'"
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/externals/ffext/notemono/COPYING b/externals/ffext/notemono/COPYING
deleted file mode 100644
index 2128a66ea..000000000
--- a/externals/ffext/notemono/COPYING
+++ /dev/null
@@ -1,280 +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
diff --git a/externals/ffext/notemono/README b/externals/ffext/notemono/README
deleted file mode 100644
index 1b765baf4..000000000
--- a/externals/ffext/notemono/README
+++ /dev/null
@@ -1,5 +0,0 @@
-this external is for tracking highest/lowest note
-pressed on a midi keyboard, so you can achieve
-monophonic midi input, in order to control monophonic
-synth/oscillators
-
diff --git a/externals/ffext/notemono/makefile b/externals/ffext/notemono/makefile
deleted file mode 100644
index 1bf18aaa2..000000000
--- a/externals/ffext/notemono/makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-PD-PATH=/usr/lib/pd
-PD-SCR=/usr/include
-
-
-INCLUDE=-I$(PD-SCR) -I.
-LIB=-lc -lm
-CC_FLAGS = -DPD -c -Wall
-LD_FLAGS = --export-dynamic -shared -o
-
-
-TARGET=notemono.pd_linux
-OBJ=notemono.o
-#--------------------------------------------------------
-
-all: pd_linux
-
-pd_linux: $(TARGET)
-
-$(TARGET): $(OBJ)
-	$(LD) $(LD_FLAGS) $(TARGET) $(OBJ) $(LIB)
-	strip --strip-unneeded $(TARGET)
-	chmod 755 $(TARGET)
-
-.c.o:
-	$(CC) $(CC_FLAGS) $(INCLUDE) $<
-
-clean:
-	rm -f $(OBJ) $(TARGET)
diff --git a/externals/ffext/notemono/notemono-help.pd b/externals/ffext/notemono/notemono-help.pd
deleted file mode 100644
index cbbcd533b..000000000
--- a/externals/ffext/notemono/notemono-help.pd
+++ /dev/null
@@ -1,37 +0,0 @@
-#N canvas 409 325 572 404 10;
-#X obj 87 267 notemono low;
-#X obj 197 267 notemono high;
-#X obj 87 294 pack f f;
-#X obj 197 294 pack f f;
-#X obj 87 240 unpack f f;
-#X obj 197 240 unpack f f;
-#X obj 87 321 print low;
-#X obj 197 321 print high;
-#X obj 87 166 t a a;
-#X obj 87 52 notein;
-#X floatatom 181 53 5 1 16 1 <--select_midi_channel midich -;
-#X obj 87 92 pack f f;
-#X obj 87 128 spigot;
-#X obj 168 92 ==;
-#X msg 197 166 \; midich 1;
-#X obj 197 139 loadbang;
-#X connect 0 0 2 0;
-#X connect 0 1 2 1;
-#X connect 1 0 3 0;
-#X connect 1 1 3 1;
-#X connect 2 0 6 0;
-#X connect 3 0 7 0;
-#X connect 4 0 0 0;
-#X connect 4 1 0 1;
-#X connect 5 0 1 0;
-#X connect 5 1 1 1;
-#X connect 8 0 4 0;
-#X connect 8 1 5 0;
-#X connect 9 0 11 0;
-#X connect 9 1 11 1;
-#X connect 9 2 13 0;
-#X connect 10 0 13 1;
-#X connect 11 0 12 0;
-#X connect 12 0 8 0;
-#X connect 13 0 12 1;
-#X connect 15 0 14 0;
diff --git a/externals/ffext/notemono/notemono.c b/externals/ffext/notemono/notemono.c
deleted file mode 100644
index 4473f55d7..000000000
--- a/externals/ffext/notemono/notemono.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright (c) 2005 Federico Ferri.
- * Release under the terms of GPL license.
- * Based on PureData by Miller Puckette and others. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "m_pd.h"
-
-// change this if you have more than MAX_N fingers...
-#define MAX_N 16
-
-#define method(method_name) notemono ## _ ## method_name
-#define t_self t_notemono
-#define _self _notemono
-#define self_class notemono_class
-#define sz_classname "notemono"
-
-#define MODE_MIN    0
-#define MODE_MIN_S  "low"
-#define MODE_MAX    1
-#define MODE_MAX_S  "high"
-
-typedef struct _self
-{
-    t_object       x_obj;
-    t_outlet      *x_out2;
-    int            x_note_status[MAX_N]; //array
-    t_float        x_note_pitch;
-    t_float        x_note_vel;
-    t_float        x_out_midi;
-    int            x_out_gate;
-    int mode; // max or min ?
-} t_self;
-
-static t_class *self_class;
-
-static void method(out)(t_self *x) {
-    int j;
-    t_float m = -1;
-    int g = 0;
-    for(j=0; j<MAX_N; j++) {
-        if(x->x_note_status[j] >= 0) {
-            switch(x->mode) {
-                case MODE_MIN:
-                    if(x->x_note_status[j] < m || m == -1) {
-                        m = x->x_note_status[j];
-                        g = 1;
-                    }
-                    break;
-                case MODE_MAX:
-                    if(x->x_note_status[j] > m || m == -1) {
-                        m = x->x_note_status[j];
-                        g = 1;
-                    }
-                    break;
-            }
-        }
-    }
-    if(m != x->x_out_midi || g != x->x_out_gate) {
-        x->x_out_midi = m;
-        x->x_out_gate = g;
-        outlet_float(x->x_out2, g);
-	    outlet_float(x->x_obj.ob_outlet, m);
-    }
-}
-
-static void method(float)(t_self *x, t_float f) {
-    int j;
-    x->x_note_pitch = f;
-    for(j=0; j<MAX_N; j++) {
-	    if(x->x_note_status[j] == x->x_note_pitch) {
-		    if(x->x_note_vel > 0) {
-			    x->x_note_status[j] = x->x_note_pitch;
-			    method(out)(x);
-			    return;
-		    } else {
-			    x->x_note_status[j] = -1;
-			    method(out)(x);
-			    return;
-		    }
-	    }
-    }
-    if(x->x_note_vel > 0) {
-        for(j=0; j<MAX_N; j++) {
-            if(x->x_note_status[j] == -1 && x->x_note_vel > 0) {
-                x->x_note_status[j] = x->x_note_pitch;
-                method(out)(x);
-                return;
-            }
-        }
-    }
-}
-
-static void * method(new)(t_symbol* s, int ac, t_atom* av) {
-    t_self *x;
-    int err = 0;
-    if(ac == 1) {
-        x = (t_self *)pd_new(self_class);
-        x->x_out_midi = -1;
-        x->x_out_gate = 0;
-        t_symbol *arg = atom_getsymbolarg(0, ac, av);
-        if(gensym(MODE_MIN_S) == arg) {
-            x->mode = MODE_MIN;
-        } else if (gensym(MODE_MAX_S) == arg) {
-            x->mode = MODE_MAX;
-        } else {
-            err = 1;
-        }
-    } else {
-        err = 1;
-    }
-    if(err) {
-        error(sz_classname ": wrong arguments."
-            " possible values: " MODE_MIN_S " " MODE_MAX_S);
-        return NULL;
-    }
-    int j;
-    for(j=0; j<MAX_N; j++) x->x_note_status[j] = -1;
-    outlet_new((t_object *)x, &s_float);
-    floatinlet_new(&x->x_obj, &x->x_note_vel);
-    x->x_out2 = outlet_new(&x->x_obj, gensym("float"));
-    return (x);
-}
-
-void method(setup)(void) {
-    self_class = class_new(gensym(sz_classname), 
-			      (t_newmethod)method(new), 0,
-			      sizeof(t_self), 0,
-			      A_GIMME, 0);
-    class_addfloat(self_class, method(float));
-    class_sethelpsymbol(self_class, gensym(sz_classname));
-}
-
diff --git a/externals/ffext/tms5220~/Makefile b/externals/ffext/tms5220~/Makefile
deleted file mode 100644
index 7a84ae6bb..000000000
--- a/externals/ffext/tms5220~/Makefile
+++ /dev/null
@@ -1,298 +0,0 @@
-## Pd library template version 1.0.1
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = tms5220~
-
-# add your .c source files to the SOURCES variable, help files will be
-# included automatically
-SOURCES = tms5220~.c
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-SOURCES_android = 
-SOURCES_cygwin = 
-SOURCES_macosx = 
-SOURCES_iphoneos = 
-SOURCES_linux = 
-SOURCES_windows = 
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = 
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = 
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, example patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = 
-
-LIBS = -lsamplerate
-
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-
-INSTALL = install
-INSTALL_FILE    = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g
-LDFLAGS =  
-#LIBS = 
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS) \
-      -I/Applications/Pd-extended.app/Contents/Resources/include
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include \
-      -I/Applications/Pd-extended.app/Contents/Resources/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L$(PD_PATH)/src
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L$(PD_PATH)/src -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_FILE) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_FILE) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_FILE) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || \
-		$(INSTALL_FILE) $(SOURCES:.c=-help.pd) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS:.pd=-help.pd) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_FILE) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_FILE) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_FILE) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_FILE) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_FILE) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_FILE) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_FILE) $(SOURCES:.c=-help.pd) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_FILE) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_FILE) Makefile  $(DISTDIR)
-	$(INSTALL_FILE) README.txt $(DISTDIR)
-	$(INSTALL_FILE) LICENSE.txt $(DISTDIR)
-	$(INSTALL_FILE) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_FILE) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_FILE) $(ALLSOURCES:.c=-help.pd) $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_FILE) $(PDOBJECTS:.pd=-help.pd) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_FILE) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_FILE) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_FILE) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/ffext/tms5220~/README.txt b/externals/ffext/tms5220~/README.txt
deleted file mode 100644
index d1308aec9..000000000
--- a/externals/ffext/tms5220~/README.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-TMS5220 IC emulation for pure-data
-written by Federico Ferri
-Released under GPL-3 license.
-
-TMS5220 emulation core comes from MAME sources and it's written by Frank Palazzolo and others.
-
-The emulation should work the same as the original IC.
-A datasheet for the original IC can be found at:
-  http://www.gamessound.com/podcasts/podcast1/TI_TMS5220.pdf
-
-
diff --git a/externals/ffext/tms5220~/tms5220/driver.h b/externals/ffext/tms5220~/tms5220/driver.h
deleted file mode 100644
index e69de29bb..000000000
diff --git a/externals/ffext/tms5220~/tms5220/tms5220.c b/externals/ffext/tms5220~/tms5220/tms5220.c
deleted file mode 100644
index 1e61979fb..000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/**********************************************************************************************
-
-     TMS5220 simulator
-
-     Written for MAME by Frank Palazzolo
-     With help from Neill Corlett
-     Additional tweaking by Aaron Giles
-
-***********************************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include "driver.h"
-#include "tms5220.h"
-
-
-/* Pull in the ROM tables */
-#include "tms5220r.c"
-
-
-/* these contain data that describes the 128-bit data FIFO */
-#define FIFO_SIZE 16
-static unsigned char fifo[FIFO_SIZE];
-static int fifo_head;
-static int fifo_tail;
-static int fifo_count;
-static int bits_taken;
-
-
-/* these contain global status bits */
-static int speak_external;
-static int talk_status;
-static int buffer_low;
-static int buffer_empty;
-static int irq_pin;
-
-static void (*irq_func)(void);
-
-
-/* these contain data describing the current and previous voice frames */
-static unsigned short old_energy = 0;
-static unsigned short old_pitch = 0;
-static int old_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static unsigned short new_energy = 0;
-static unsigned short new_pitch = 0;
-static int new_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-
-/* these are all used to contain the current state of the sound generation */
-static unsigned short current_energy = 0;
-static unsigned short current_pitch = 0;
-static int current_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static unsigned short target_energy = 0;
-static unsigned short target_pitch = 0;
-static int target_k[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static int interp_count = 0;       /* number of interp periods (0-7) */
-static int sample_count = 0;       /* sample number within interp (0-24) */
-static int pitch_count = 0;
-
-static int u[11] = {0,0,0,0,0,0,0,0,0,0,0};
-static int x[10] = {0,0,0,0,0,0,0,0,0,0};
-
-static int randbit = 0;
-
-
-/* Static function prototypes */
-static void process_command (void);
-static int extract_bits (int count);
-static int parse_frame (int removeit);
-static void check_buffer_low (void);
-static void cause_interrupt (void);
-
-
-/*#define DEBUG_5220*/
-#ifdef DEBUG_5220
-    static FILE *f;
-#endif
-
-
-/**********************************************************************************************
-
-     tms5220_reset -- resets the TMS5220
-
-***********************************************************************************************/
-
-void tms5220_reset (void)
-{
-    /* initialize the FIFO */
-    memset (fifo, 0, sizeof (fifo));
-    fifo_head = fifo_tail = fifo_count = bits_taken = 0;
-
-    /* initialize the chip state */
-    speak_external = talk_status = buffer_empty = irq_pin = 0;
-    buffer_low = 1;
-
-    /* initialize the energy/pitch/k states */
-    old_energy = new_energy = current_energy = target_energy = 0;
-    old_pitch = new_pitch = current_pitch = target_pitch = 0;
-    memset (old_k, 0, sizeof (old_k));
-    memset (new_k, 0, sizeof (new_k));
-    memset (current_k, 0, sizeof (current_k));
-    memset (target_k, 0, sizeof (target_k));
-
-    /* initialize the sample generators */
-    interp_count = sample_count = pitch_count = 0;
-    randbit = 0;
-    memset (u, 0, sizeof (u));
-    memset (x, 0, sizeof (x));
-
-    #ifdef DEBUG_5220
-        f = fopen ("tms.log", "w");
-    #endif
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_reset -- reset the TMS5220
-
-***********************************************************************************************/
-
-void tms5220_set_irq (void (*func)(void))
-{
-    irq_func = func;
-}
-
-
-/**********************************************************************************************
-
-     tms5220_data_write -- handle a write to the TMS5220
-
-***********************************************************************************************/
-
-void tms5220_data_write (int data)
-{
-    /* add this byte to the FIFO */
-    if (fifo_count < FIFO_SIZE)
-    {
-        fifo[fifo_tail] = data;
-        fifo_tail = (fifo_tail + 1) % FIFO_SIZE;
-        fifo_count++;
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Added byte to FIFO (size=%2d)\n", fifo_count);
-        #endif
-    }
-    else
-    {
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Ran out of room in the FIFO!\n");
-        #endif
-    }
-
-    /* update the buffer low state */
-    check_buffer_low ();
-}
-
-
-/**********************************************************************************************
-
-     tms5220_status_read -- read status from the TMS5220
-
-	  From the data sheet:
-        bit 0 = TS - Talk Status is active (high) when the VSP is processing speech data.
-                Talk Status goes active at the initiation of a Speak command or after nine
-                bytes of data are loaded into the FIFO following a Speak External command. It
-                goes inactive (low) when the stop code (Energy=1111) is processed, or
-                immediately by a buffer empty condition or a reset command.
-        bit 1 = BL - Buffer Low is active (high) when the FIFO buffer is more than half empty.
-                Buffer Low is set when the "Last-In" byte is shifted down past the half-full
-                boundary of the stack. Buffer Low is cleared when data is loaded to the stack
-                so that the "Last-In" byte lies above the half-full boundary and becomes the
-                ninth data byte of the stack.
-        bit 2 = BE - Buffer Empty is active (high) when the FIFO buffer has run out of data
-                while executing a Speak External command. Buffer Empty is set when the last bit
-                of the "Last-In" byte is shifted out to the Synthesis Section. This causes
-                Talk Status to be cleared. Speed is terminated at some abnormal point and the
-                Speak External command execution is terminated.
-
-***********************************************************************************************/
-
-int tms5220_status_read (void)
-{
-    /* clear the interrupt pin */
-    irq_pin = 0;
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "Status read: TS=%d BL=%d BE=%d\n", talk_status, buffer_low, buffer_empty);
-    #endif
-
-    return (talk_status << 7) | (buffer_low << 6) | (buffer_empty << 5);
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_ready_read -- returns the ready state of the TMS5220
-
-***********************************************************************************************/
-
-int tms5220_ready_read (void)
-{
-    return (fifo_count < FIFO_SIZE-1);
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_int_read -- returns the interrupt state of the TMS5220
-
-***********************************************************************************************/
-
-int tms5220_int_read (void)
-{
-    return irq_pin;
-}
-
-
-
-/**********************************************************************************************
-
-     tms5220_process -- fill the buffer with a specific number of samples
-
-***********************************************************************************************/
-
-void tms5220_process(unsigned char *buffer, unsigned int size)
-{
-    int buf_count=0;
-    int i, interp_period;
-
-tryagain:
-
-    /* if we're not speaking, parse commands */
-    while (!speak_external && fifo_count > 0)
-        process_command ();
-
-    /* if there's nothing to do, bail */
-    if (!size)
-        return;
-
-    /* if we're empty and still not speaking, fill with nothingness */
-    if (!speak_external)
-        goto empty;
-
-    /* if we're to speak, but haven't started, wait for the 9th byte */
-    if (!talk_status)
-    {
-        if (fifo_count < 9)
-           goto empty;
-
-        /* parse but don't remove the first frame, and set the status to 1 */
-        parse_frame (0);
-        talk_status = 1;
-        buffer_empty = 0;
-    }
-
-    /* loop until the buffer is full or we've stopped speaking */
-    while ((size > 0) && speak_external)
-    {
-        int current_val;
-
-        /* if we're ready for a new frame */
-        if ((interp_count == 0) && (sample_count == 0))
-        {
-            /* Parse a new frame */
-            if (!parse_frame (1))
-                break;
-
-            /* Set old target as new start of frame */
-            current_energy = old_energy;
-            current_pitch = old_pitch;
-            for (i = 0; i < 10; i++)
-                current_k[i] = old_k[i];
-
-            /* is this a zero energy frame? */
-            if (current_energy == 0)
-            {
-                //printf("processing frame: zero energy\n");
-                target_energy = 0;
-                target_pitch = current_pitch;
-                for (i = 0; i < 10; i++)
-                    target_k[i] = current_k[i];
-            }
-
-            /* is this a stop frame? */
-            else if (current_energy == (energytable[15] >> 6))
-            {
-                //printf("processing frame: stop frame\n");
-                current_energy = energytable[0] >> 6;
-                target_energy = current_energy;
-                speak_external = talk_status = 0;
-                interp_count = sample_count = pitch_count = 0;
-
-                /* generate an interrupt if necessary */
-                cause_interrupt ();
-
-                /* try to fetch commands again */
-                goto tryagain;
-            }
-            else
-            {
-                /* is this the ramp down frame? */
-                if (new_energy == (energytable[15] >> 6))
-                {
-                    //printf("processing frame: ramp down\n");
-                    target_energy = 0;
-                    target_pitch = current_pitch;
-                    for (i = 0; i < 10; i++)
-                        target_k[i] = current_k[i];
-                }
-                /* Reset the step size */
-                else
-                {
-                    //printf("processing frame: Normal\n");
-                    //printf("*** Energy = %d\n",current_energy);
-                    //printf("proc: %d %d\n",last_fbuf_head,fbuf_head);
-
-                    target_energy = new_energy;
-                    target_pitch = new_pitch;
-
-                    for (i = 0; i < 4; i++)
-                        target_k[i] = new_k[i];
-                    if (current_pitch == 0)
-                        for (i = 4; i < 10; i++)
-                        {
-                            target_k[i] = current_k[i] = 0;
-                        }
-                    else
-                        for (i = 4; i < 10; i++)
-                            target_k[i] = new_k[i];
-                }
-            }
-        }
-        else if (interp_count == 0)
-        {
-            /* Update values based on step values */
-            //printf("\n");
-
-            interp_period = sample_count / 25;
-            current_energy += (target_energy - current_energy) / interp_coeff[interp_period];
-            if (old_pitch != 0)
-                current_pitch += (target_pitch - current_pitch) / interp_coeff[interp_period];
-
-            //printf("*** Energy = %d\n",current_energy);
-
-            for (i = 0; i < 10; i++)
-            {
-                current_k[i] += (target_k[i] - current_k[i]) / interp_coeff[interp_period];
-            }
-        }
-
-        if (old_energy == 0)
-        {
-            /* generate silent samples here */
-            current_val = 0x00;
-        }
-        else if (old_pitch == 0)
-        {
-            /* generate unvoiced samples here */
-            randbit = (rand () % 2) * 2 - 1;
-            current_val = (randbit * current_energy) / 4;
-        }
-        else
-        {
-            /* generate voiced samples here */
-            if (pitch_count < sizeof (chirptable))
-                current_val = (chirptable[pitch_count] * current_energy) / 256;
-            else
-                current_val = 0x00;
-        }
-
-        /* Lattice filter here */
-
-        u[10] = current_val;
-
-        for (i = 9; i >= 0; i--)
-        {
-            u[i] = u[i+1] - ((current_k[i] * x[i]) / 32768);
-        }
-        for (i = 9; i >= 1; i--)
-        {
-            x[i] = x[i-1] + ((current_k[i-1] * u[i-1]) / 32768);
-        }
-
-        x[0] = u[0];
-
-        /* clipping, just like the chip */
-
-        if (u[0] > 511)
-            buffer[buf_count] = 127;
-        else if (u[0] < -512)
-            buffer[buf_count] = -128;
-        else
-            buffer[buf_count] = u[0] >> 2;
-
-        /* Update all counts */
-
-        size--;
-        sample_count = (sample_count + 1) % 200;
-
-        if (current_pitch != 0)
-            pitch_count = (pitch_count + 1) % current_pitch;
-        else
-            pitch_count = 0;
-
-        interp_count = (interp_count + 1) % 25;
-        buf_count++;
-    }
-
-empty:
-
-    while (size > 0)
-    {
-        buffer[buf_count] = 0x00;
-        buf_count++;
-        size--;
-    }
-}
-
-
-
-/**********************************************************************************************
-
-     process_command -- extract a byte from the FIFO and interpret it as a command
-
-***********************************************************************************************/
-
-static void process_command (void)
-{
-    unsigned char cmd;
-
-    /* if there are stray bits, ignore them */
-    if (bits_taken)
-    {
-        bits_taken = 0;
-        fifo_count--;
-        fifo_head = (fifo_head + 1) % FIFO_SIZE;
-    }
-
-    /* grab a full byte from the FIFO */
-    if (fifo_count > 0)
-    {
-        cmd = fifo[fifo_head] & 0x70;
-        fifo_count--;
-        fifo_head = (fifo_head + 1) % FIFO_SIZE;
-
-        /* only real command we handle now is speak external */
-        if (cmd == 0x60)
-        {
-            speak_external = 1;
-
-            /* according to the datasheet, this will cause an interrupt due to a BE condition */
-            if (!buffer_empty)
-            {
-                buffer_empty = 1;
-                cause_interrupt ();
-            }
-        }
-    }
-
-    /* update the buffer low state */
-    check_buffer_low ();
-}
-
-
-
-/**********************************************************************************************
-
-     extract_bits -- extract a specific number of bits from the FIFO
-
-***********************************************************************************************/
-
-static int extract_bits (int count)
-{
-    int val = 0;
-
-    while (count--)
-    {
-        val = (val << 1) | ((fifo[fifo_head] >> bits_taken) & 1);
-        bits_taken++;
-        if (bits_taken >= 8)
-        {
-            fifo_count--;
-            fifo_head = (fifo_head + 1) % FIFO_SIZE;
-            bits_taken = 0;
-        }
-    }
-    return val;
-}
-
-
-
-/**********************************************************************************************
-
-     parse_frame -- parse a new frame's worth of data; returns 0 if not enough bits in buffer
-
-***********************************************************************************************/
-
-static int parse_frame (int removeit)
-{
-    int old_head, old_taken, old_count;
-    int bits, indx, i, rep_flag;
-
-    /* remember previous frame */
-    old_energy = new_energy;
-    old_pitch = new_pitch;
-    for (i = 0; i < 10; i++)
-        old_k[i] = new_k[i];
-
-    /* clear out the new frame */
-    new_energy = 0;
-    new_pitch = 0;
-    for (i = 0; i < 10; i++)
-        new_k[i] = 0;
-
-    /* if the previous frame was a stop frame, don't do anything */
-    if (old_energy == (energytable[15] >> 6))
-        return 1;
-
-    /* remember the original FIFO counts, in case we don't have enough bits */
-    old_count = fifo_count;
-    old_head = fifo_head;
-    old_taken = bits_taken;
-
-    /* count the total number of bits available */
-    bits = fifo_count * 8 - bits_taken;
-
-    /* attempt to extract the energy index */
-    bits -= 4;
-    if (bits < 0)
-        goto ranout;
-    indx = extract_bits (4);
-    new_energy = energytable[indx] >> 6;
-
-	/* if the index is 0 or 15, we're done */
-	if (indx == 0 || indx == 15)
-	{
-		#ifdef DEBUG_5220
-			if (f) fprintf (f, "  (4-bit energy=%d frame)\n",new_energy);
-		#endif
-
-		/* clear fifo if stop frame encountered */
-		if (indx == 15)
-		{
-			fifo_head = fifo_tail = fifo_count = bits_taken = 0;
-			removeit = 1;
-		}
-		goto done;
-	}
-
-    /* attempt to extract the repeat flag */
-    bits -= 1;
-    if (bits < 0)
-        goto ranout;
-    rep_flag = extract_bits (1);
-
-    /* attempt to extract the pitch */
-    bits -= 6;
-    if (bits < 0)
-        goto ranout;
-    indx = extract_bits (6);
-    new_pitch = pitchtable[indx] / 256;
-
-    /* if this is a repeat frame, just copy the k's */
-    if (rep_flag)
-    {
-        for (i = 0; i < 10; i++)
-            new_k[i] = old_k[i];
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "  (11-bit energy=%d pitch=%d rep=%d frame)\n", new_energy, new_pitch, rep_flag);
-        #endif
-        goto done;
-    }
-
-    /* if the pitch index was zero, we need 4 k's */
-    if (indx == 0)
-    {
-        /* attempt to extract 4 K's */
-        bits -= 18;
-        if (bits < 0)
-            goto ranout;
-        new_k[0] = k1table[extract_bits (5)];
-        new_k[1] = k2table[extract_bits (5)];
-        new_k[2] = k3table[extract_bits (4)];
-        new_k[3] = k4table[extract_bits (4)];
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "  (29-bit energy=%d pitch=%d rep=%d 4K frame)\n", new_energy, new_pitch, rep_flag);
-        #endif
-        goto done;
-    }
-
-    /* else we need 10 K's */
-    bits -= 39;
-    if (bits < 0)
-        goto ranout;
-    new_k[0] = k1table[extract_bits (5)];
-    new_k[1] = k2table[extract_bits (5)];
-    new_k[2] = k3table[extract_bits (4)];
-    new_k[3] = k4table[extract_bits (4)];
-    new_k[4] = k5table[extract_bits (4)];
-    new_k[5] = k6table[extract_bits (4)];
-    new_k[6] = k7table[extract_bits (4)];
-    new_k[7] = k8table[extract_bits (3)];
-    new_k[8] = k9table[extract_bits (3)];
-    new_k[9] = k10table[extract_bits (3)];
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "  (50-bit energy=%d pitch=%d rep=%d 10K frame)\n", new_energy, new_pitch, rep_flag);
-    #endif
-
-done:
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "Parsed a frame successfully - %d bits remaining\n", bits);
-    #endif
-
-    /* if we're not to remove this one, restore the FIFO */
-    if (!removeit)
-    {
-        fifo_count = old_count;
-        fifo_head = old_head;
-        bits_taken = old_taken;
-    }
-
-    /* update the buffer_low status */
-    check_buffer_low ();
-    return 1;
-
-ranout:
-
-    #ifdef DEBUG_5220
-        if (f) fprintf (f, "Ran out of bits on a parse!\n");
-    #endif
-
-    /* this is an error condition; mark the buffer empty and turn off speaking */
-    buffer_empty = 1;
-    talk_status = speak_external = 0;
-    fifo_count = fifo_head = fifo_tail = 0;
-
-    /* generate an interrupt if necessary */
-    cause_interrupt ();
-    return 0;
-}
-
-
-
-/**********************************************************************************************
-
-     check_buffer_low -- check to see if the buffer low flag should be on or off
-
-***********************************************************************************************/
-
-static void check_buffer_low (void)
-{
-    /* did we just become low? */
-    if (fifo_count < 8)
-    {
-        /* generate an interrupt if necessary */
-        if (!buffer_low)
-            cause_interrupt ();
-        buffer_low = 1;
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Buffer low set\n");
-        #endif
-    }
-
-    /* did we just become full? */
-    else
-    {
-        buffer_low = 0;
-
-        #ifdef DEBUG_5220
-            if (f) fprintf (f, "Buffer low cleared\n");
-        #endif
-    }
-}
-
-
-
-/**********************************************************************************************
-
-     cause_interrupt -- generate an interrupt
-
-***********************************************************************************************/
-
-static void cause_interrupt (void)
-{
-    irq_pin = 1;
-    if (irq_func) irq_func ();
-}
diff --git a/externals/ffext/tms5220~/tms5220/tms5220.h b/externals/ffext/tms5220~/tms5220/tms5220.h
deleted file mode 100644
index 614d7bc2a..000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef tms5220_h
-#define tms5220_h
-
-void tms5220_reset (void);
-void tms5220_set_irq (void (*func)(void));
-
-void tms5220_data_write (int data);
-int tms5220_status_read (void);
-int tms5220_ready_read (void);
-int tms5220_int_read (void);
-
-void tms5220_process (unsigned char *buffer, unsigned int size);
-
-#endif
-
diff --git a/externals/ffext/tms5220~/tms5220/tms5220.txt b/externals/ffext/tms5220~/tms5220/tms5220.txt
deleted file mode 100644
index 8af747c7f..000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-*****************************
-
-    TI TMS5220 Emulator
-    (c) Frank Palazzolo
-
-*****************************
-
-The TI TMS5220 Speech chip uses Linear-Predictive decoding scheme to produce
-speech from very compact data.  This scheme is very similar to the U.S.
-Federal Standard LPC-10e coding system, which was developed soon after
-this chip.
-
-It is virtually identical to the chip used in the landmark "Speak 'N Spell"
-toy produced in the '70s.
-
-Acknowledgements:
------------------
-
-I would like to thank Larry Brantingham, the original designer of the chip,
-for his technical help.
-
-I would also like to thank Neill Cortlett, who first showed that this chip
-could be emulated in real-time in his Multi-Gauntlet Emulator.
-
-Theory of operation:
---------------------
-
-The TI speech chip contains a 128-bit parallel-in, serial-out FIFO, a
-10-pole digital lattice filter which models the vocal tract, and a D/A
-converter.  It was originally design to operate either with a microcomputer
-interface, or with a serial speech ROM.  The Speech ROM functionality is
-not emulated as no arcade games require it.
-
-The input data is writen a byte at a time into the chip, and it is
-decoded bitwise into variable length frames.
-
-Possible Frame Types are as follows:
-
-          Energy RF Pitch  K1    K2    K3   K4   K5   K6   K7   K8  K9  K10
-          -----------------------------------------------------------------
-
-Silent    0000
-Stop      1111
-Repeat    XXXX   1  XXXXXX  
-Unvoiced  XXXX   0  000000 XXXXX XXXXX XXXX XXXX  
-Voiced    XXXX   0  XXXXXX XXXXX XXXXX XXXX XXXX XXXX XXXX XXXX XXX XXX XXX
-
-Stop Frame:     Stops the current speech
-Repeat Frame:   Uses the digital filter coefficients from the previous frame,
-                with new Energy and Pitch values
-Unvoiced Frame: Uses Noise generator to feed 4 pole digital filter
-                (All other coefficients are set to zero)
-Voiced Frame:   Uses Pulse Generator to feed 10 pole digital filter
-
-All parameters (Energy, Pitch, K1-K10) are indexes into a lookup table for
-actual values (see TMS5220R.c)
-
-K1-K10 are reflection coefficients for the lattice filter.
-
-Each frame is used to generate 200 samples, and 8 times during each frame,
-(every 25 samples), these values are linearly interpolated to smooth out
-frame transitions.
-
-The Noise generator is based on a shift-register type random-bit generator.
-The Pulse generator is based on a lookup table.
-
-API:
-----
-
-TBD
-
-More:
------
-
-For further technical info, the data sheet is floating around on the net.
-(I believe the name is TMS.PDF)  If you can't find a copy, email me and
-I'll point you towards it.  Feel free to contact me if you have a question.
-
-Frank Palazzolo
-
-palazzol@tir.com
-
-
-
-
-Downloaded from: http://files.emuwiki.com/tms5220.7z
diff --git a/externals/ffext/tms5220~/tms5220/tms5220r.c b/externals/ffext/tms5220~/tms5220/tms5220r.c
deleted file mode 100644
index 93ba249cf..000000000
--- a/externals/ffext/tms5220~/tms5220/tms5220r.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* TMS5220 ROM Tables */
-
-/* This is the energy lookup table (4-bits -> 10-bits) */
-
-const unsigned short energytable[0x10]={
-0x0000,0x00C0,0x0140,0x01C0,0x0280,0x0380,0x0500,0x0740,
-0x0A00,0x0E40,0x1440,0x1C80,0x2840,0x38C0,0x5040,0x7FC0};
-
-/* This is the pitch lookup table (6-bits -> 8-bits) */
-
-const unsigned short pitchtable [0x40]={
-0x0000,0x1000,0x1100,0x1200,0x1300,0x1400,0x1500,0x1600,
-0x1700,0x1800,0x1900,0x1A00,0x1B00,0x1C00,0x1D00,0x1E00,
-0x1F00,0x2000,0x2100,0x2200,0x2300,0x2400,0x2500,0x2600,
-0x2700,0x2800,0x2900,0x2A00,0x2B00,0x2D00,0x2F00,0x3100,
-0x3300,0x3500,0x3600,0x3900,0x3B00,0x3D00,0x3F00,0x4200,
-0x4500,0x4700,0x4900,0x4D00,0x4F00,0x5100,0x5500,0x5700,
-0x5C00,0x5F00,0x6300,0x6600,0x6A00,0x6E00,0x7300,0x7700,
-0x7B00,0x8000,0x8500,0x8A00,0x8F00,0x9500,0x9A00,0xA000};
-
-/* These are the reflection coefficient lookup tables */
-
-/* K1 is (5-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k1table    [0x20]={
-0x82C0,0x8380,0x83C0,0x8440,0x84C0,0x8540,0x8600,0x8780,
-0x8880,0x8980,0x8AC0,0x8C00,0x8D40,0x8F00,0x90C0,0x92C0,
-0x9900,0xA140,0xAB80,0xB840,0xC740,0xD8C0,0xEBC0,0x0000,
-0x1440,0x2740,0x38C0,0x47C0,0x5480,0x5EC0,0x6700,0x6D40};
-
-/* K2 is (5-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k2table    [0x20]={
-0xAE00,0xB480,0xBB80,0xC340,0xCB80,0xD440,0xDDC0,0xE780,
-0xF180,0xFBC0,0x0600,0x1040,0x1A40,0x2400,0x2D40,0x3600,
-0x3E40,0x45C0,0x4CC0,0x5300,0x5880,0x5DC0,0x6240,0x6640,
-0x69C0,0x6CC0,0x6F80,0x71C0,0x73C0,0x7580,0x7700,0x7E80};
-
-/* K3 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k3table    [0x10]={
-0x9200,0x9F00,0xAD00,0xBA00,0xC800,0xD500,0xE300,0xF000,
-0xFE00,0x0B00,0x1900,0x2600,0x3400,0x4100,0x4F00,0x5C00};
-
-/* K4 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k4table    [0x10]={
-0xAE00,0xBC00,0xCA00,0xD800,0xE600,0xF400,0x0100,0x0F00,
-0x1D00,0x2B00,0x3900,0x4700,0x5500,0x6300,0x7100,0x7E00};
-
-/* K5 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k5table    [0x10]={
-0xAE00,0xBA00,0xC500,0xD100,0xDD00,0xE800,0xF400,0xFF00,
-0x0B00,0x1700,0x2200,0x2E00,0x3900,0x4500,0x5100,0x5C00};
-
-/* K6 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k6table    [0x10]={
-0xC000,0xCB00,0xD600,0xE100,0xEC00,0xF700,0x0300,0x0E00,
-0x1900,0x2400,0x2F00,0x3A00,0x4500,0x5000,0x5B00,0x6600};
-
-/* K7 is (4-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k7table    [0x10]={
-0xB300,0xBF00,0xCB00,0xD700,0xE300,0xEF00,0xFB00,0x0700,
-0x1300,0x1F00,0x2B00,0x3700,0x4300,0x4F00,0x5A00,0x6600};
-
-/* K8 is (3-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k8table    [0x08]={
-0xC000,0xD800,0xF000,0x0700,0x1F00,0x3700,0x4F00,0x6600};
-
-/* K9 is (3-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k9table    [0x08]={
-0xC000,0xD400,0xE800,0xFC00,0x1000,0x2500,0x3900,0x4D00};
-
-/* K10 is (3-bits -> 9 bits+sign, 2's comp. fractional (-1 < x < 1) */
-
-const short k10table   [0x08]={
-0xCD00,0xDF00,0xF100,0x0400,0x1600,0x2000,0x3B00,0x4D00};
-
-/* chirp table */
-
-static char chirptable[41]={
-0x00, 0x2a, 0xd4, 0x32,
-0xb2, 0x12, 0x25, 0x14,
-0x02, 0xe1, 0xc5, 0x02,
-0x5f, 0x5a, 0x05, 0x0f,
-0x26, 0xfc, 0xa5, 0xa5,
-0xd6, 0xdd, 0xdc, 0xfc,
-0x25, 0x2b, 0x22, 0x21,
-0x0f, 0xff, 0xf8, 0xee,
-0xed, 0xef, 0xf7, 0xf6,
-0xfa, 0x00, 0x03, 0x02,
-0x01
-};
-
-/* interpolation coefficients */
-
-static char interp_coeff[8] = {
-8, 8, 8, 4, 4, 2, 2, 1
-};
-
diff --git a/externals/ffext/tms5220~/tms5220~-help.pd b/externals/ffext/tms5220~/tms5220~-help.pd
deleted file mode 100644
index edf216a29..000000000
--- a/externals/ffext/tms5220~/tms5220~-help.pd
+++ /dev/null
@@ -1,179 +0,0 @@
-#N canvas 221 103 826 512 10;
-#X obj 53 93 tms5220~;
-#X obj 53 382 dac~;
-#X obj 120 335 hsl 128 15 0 1 0 0 empty empty OUTPUT_LEVEL -2 -8 0
-10 -262144 -1 -1 12700 1;
-#X obj 53 334 *~ 0;
-#X msg 117 375 \; pd dsp 1;
-#X text 147 125 <-- interrupt;
-#X text 146 147 <-- ready;
-#X text 146 170 <-- status bits;
-#X msg 80 62 reset;
-#X text 43 473 (C) Federico Ferri - 2010;
-#X obj 68 168 t a a a;
-#X obj 68 265 & 16;
-#X obj 87 226 & 32;
-#X obj 107 187 & 64;
-#X obj 98 122 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 83 145 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X obj 107 206 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 64
-64;
-#X obj 87 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 32
-32;
-#X obj 68 284 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X text 138 206 <-- talk_status;
-#X text 118 244 <-- buffer_low;
-#X text 97 285 <-- buffer_empty;
-#X obj 53 35 r \$0.in;
-#X obj 344 123 s \$0.in;
-#X msg 344 36 silent;
-#X msg 361 64 stop;
-#X msg 334 273 repeat \$1 \$2;
-#X obj 334 299 s \$0.in;
-#X obj 382 223 hsl 64 15 0 63 0 0 empty empty PITCH -2 -8 0 10 -262144
--1 -1 2600 1;
-#X obj 337 194 hsl 64 15 1 14 0 0 empty empty ENERGY -2 -8 0 10 -262144
--1 -1 4400 1;
-#X obj 334 248 pack f f;
-#X obj 491 379 s \$0.in;
-#X obj 539 78 hsl 64 15 0 63 0 0 empty empty PITCH -2 -8 0 10 -262144
--1 -1 1400 1;
-#X obj 494 49 hsl 64 15 1 14 0 0 empty empty ENERGY -2 -8 0 10 -262144
--1 -1 600 1;
-#X obj 491 103 pack f f;
-#X obj 431 74 metro 25;
-#X obj 430 50 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 491 139 list append;
-#X obj 566 139 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 567 159 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 1900 1;
-#X obj 567 179 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 5100 1;
-#X obj 568 199 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 1600 1;
-#X obj 491 159 list append;
-#X obj 491 179 list append;
-#X obj 491 199 list append;
-#X obj 568 219 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 3500 1;
-#X obj 491 219 list append;
-#X obj 568 239 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 1500 1;
-#X obj 491 239 list append;
-#X obj 568 259 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 2700 1;
-#X obj 491 259 list append;
-#X obj 568 279 hsl 64 15 0 7 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 491 279 list append;
-#X obj 568 299 hsl 64 15 0 7 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 100 1;
-#X obj 491 299 list append;
-#X obj 568 319 hsl 64 15 0 7 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 600 1;
-#X obj 491 319 list append;
-#X obj 491 338 list prepend voiced;
-#X obj 491 359 list trim;
-#X obj 651 379 s \$0.in;
-#X obj 699 78 hsl 64 15 0 63 0 0 empty empty PITCH -2 -8 0 10 -262144
--1 -1 3300 1;
-#X obj 654 49 hsl 64 15 1 14 0 0 empty empty ENERGY -2 -8 0 10 -262144
--1 -1 6300 1;
-#X obj 651 103 pack f f;
-#X obj 651 139 list append;
-#X obj 726 139 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 4100 1;
-#X obj 727 159 hsl 64 15 0 31 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 727 179 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 5800 1;
-#X obj 728 199 hsl 64 15 0 15 0 1 empty empty kn -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 651 159 list append;
-#X obj 651 179 list append;
-#X obj 651 199 list append;
-#X obj 651 359 list trim;
-#X obj 651 338 list prepend unvoiced;
-#X obj 621 71 metro 25;
-#X obj 620 47 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 297 220 metro 25;
-#X obj 296 196 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 503 74 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 677 75 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X connect 0 0 3 0;
-#X connect 0 1 10 0;
-#X connect 0 2 15 0;
-#X connect 0 3 14 0;
-#X connect 2 0 3 1;
-#X connect 2 0 4 0;
-#X connect 3 0 1 0;
-#X connect 3 0 1 1;
-#X connect 8 0 0 0;
-#X connect 10 0 11 0;
-#X connect 10 1 12 0;
-#X connect 10 2 13 0;
-#X connect 11 0 18 0;
-#X connect 12 0 17 0;
-#X connect 13 0 16 0;
-#X connect 22 0 0 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 0;
-#X connect 26 0 27 0;
-#X connect 28 0 30 1;
-#X connect 29 0 30 0;
-#X connect 30 0 26 0;
-#X connect 32 0 34 1;
-#X connect 33 0 34 0;
-#X connect 34 0 37 0;
-#X connect 35 0 34 0;
-#X connect 36 0 35 0;
-#X connect 37 0 42 0;
-#X connect 38 0 37 1;
-#X connect 39 0 42 1;
-#X connect 40 0 43 1;
-#X connect 41 0 44 1;
-#X connect 42 0 43 0;
-#X connect 43 0 44 0;
-#X connect 44 0 46 0;
-#X connect 45 0 46 1;
-#X connect 46 0 48 0;
-#X connect 47 0 48 1;
-#X connect 48 0 50 0;
-#X connect 49 0 50 1;
-#X connect 50 0 52 0;
-#X connect 51 0 52 1;
-#X connect 52 0 54 0;
-#X connect 53 0 54 1;
-#X connect 54 0 56 0;
-#X connect 55 0 56 1;
-#X connect 56 0 57 0;
-#X connect 57 0 58 0;
-#X connect 58 0 31 0;
-#X connect 60 0 62 1;
-#X connect 61 0 62 0;
-#X connect 62 0 63 0;
-#X connect 63 0 68 0;
-#X connect 64 0 63 1;
-#X connect 65 0 68 1;
-#X connect 66 0 69 1;
-#X connect 67 0 70 1;
-#X connect 68 0 69 0;
-#X connect 69 0 70 0;
-#X connect 70 0 72 0;
-#X connect 71 0 59 0;
-#X connect 72 0 71 0;
-#X connect 73 0 62 0;
-#X connect 74 0 73 0;
-#X connect 75 0 30 0;
-#X connect 76 0 75 0;
-#X connect 77 0 34 0;
-#X connect 78 0 62 0;
diff --git a/externals/ffext/tms5220~/tms5220~-meta.pd b/externals/ffext/tms5220~/tms5220~-meta.pd
deleted file mode 100644
index 38451af38..000000000
--- a/externals/ffext/tms5220~/tms5220~-meta.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#N canvas 10 10 200 200 10;
-#N canvas 20 20 420 300 META 0;
-#X text 10 10 META this is a prototype of a libdir meta file;
-#X text 10 30 NAME tms5220~;
-#X text 10 50 AUTHOR Federico Ferri;
-#X text 10 70 LICENSE GPL;
-#X text 10 90 VERSION 0.1;
-#X restore 10 10 pd META;
diff --git a/externals/ffext/tms5220~/tms5220~.c b/externals/ffext/tms5220~/tms5220~.c
deleted file mode 100644
index 31fb873d5..000000000
--- a/externals/ffext/tms5220~/tms5220~.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* (C) 2010 Federico Ferri <mescalinum@gmail.com>
- * this software is gpl'ed software, read the file "README.txt" for details
- */
-
-#include "tms5220/tms5220.c"
-
-#define USE_LIBSAMPLERATE
-//#define DEBUG_TMS5220_TILDE
-
-// rate at which tms5220 emulator produces samples (according to datasheet)
-#define TMS5220_SAMPLE_RATE 8000
-
-#ifdef USE_LIBSAMPLERATE
-#define SRC_TYPE SRC_LINEAR //fastest
-//#define SRC_TYPE SRC_SINC_BEST_QUALITY
-#include <samplerate.h>
-#endif
-
-#include "m_pd.h"
-
-static t_class *tms5220_tilde_class;
-
-typedef struct _tms5220_tilde {
-	t_object x_obj;
-
-	// sample rate
-	t_float sr;
-	t_float resample_factor;
-
-#ifdef USE_LIBSAMPLERATE
-	SRC_STATE* src;
-#else
-#error Missing alternative implementation of sample rate converter. Please use libsamplerate.
-#endif
-
-	// status outlets
-	t_int status;
-	t_outlet *x_status;
-	t_int ready;
-	t_outlet *x_ready;
-	t_int interrupt;
-	t_outlet *x_interrupt;
-
-	t_float dummy;
-} t_tms5220_tilde;
-
-
-
-void tms5220_tilde_reset(t_tms5220_tilde *x) {
-	tms5220_reset();
-}
-
-void *tms5220_tilde_new(t_symbol *s, int argc, t_atom *argv) {
-	t_tms5220_tilde *x = (t_tms5220_tilde *)pd_new(tms5220_tilde_class);
-
-	x->status = x->ready = x->interrupt = 0;
-
-	outlet_new(&x->x_obj, &s_signal);
-	x->x_status = outlet_new(&x->x_obj, &s_float);
-	x->x_ready = outlet_new(&x->x_obj, &s_float);
-	x->x_interrupt = outlet_new(&x->x_obj, &s_float);
-
-	tms5220_tilde_reset(x);
-
-#ifdef USE_LIBSAMPLERATE
-	if(x->src) src_delete(x->src);
-
-	int err = -1;
-	x->src = src_new(SRC_TYPE, 1, &err);
-
-	if(x->src == NULL) {
-		error("Failed libsamplerate initialization.");
-		post("libsamplerate returned error code %d (%s).", err, src_strerror(err));
-	} else {
-#ifdef DEBUG_TMS5220_TILDE
-		post("tms5220~: DEBUG: Initialized sample rate converter '%s'", src_get_name(SRC_TYPE));
-#endif
-	}
-#endif
-
-	return (void *)x;
-}
-
-void tms5220_tilde_free(t_tms5220_tilde *x) {
-#ifdef USE_LIBSAMPLERATE
-	// deallocate sample rate converter object
-	if(x->src) {
-		src_delete(x->src);
-#ifdef DEBUG_TMS5220_TILDE
-		post("tms5220~: DEBUG: Destroyed sample rate converter '%s'", src_get_name(SRC_TYPE));
-#endif
-	}
-#endif
-}
-
-void tms5220_tilde_write(t_tms5220_tilde *x, t_floatarg data) {
-	tms5220_data_write((int)data);
-}
-
-#define CHECK_ARGS(argcvar, num, errmsg) if(argcvar != num) { error(errmsg); return; }
-#define CLIP_VAL(v, min, max) (((v) < (min)) ? (min) : (((v) > (max)) ? (max) : (v)))
-
-void tms5220_tilde_framefunc(t_tms5220_tilde *x, t_symbol *s, int argc, t_atom *argv) {
-	int energy, pitch, k[10], i;
-
-	energy = argc > 0 ? argv[0].a_w.w_float : -1;
-	pitch = argc > 1 ? argv[1].a_w.w_float : -1;
-	for(i = 2; i < 12; i++) k[i - 2] = argc > i ? argv[i].a_w.w_float : -1;
-
-	energy = CLIP_VAL(energy, 1, 14);
-	pitch = CLIP_VAL(pitch, 0, 63);
-	k[0] = CLIP_VAL(k[0], 0, 31);
-	k[1] = CLIP_VAL(k[1], 0, 31);
-	k[2] = CLIP_VAL(k[2], 0, 15);
-	k[3] = CLIP_VAL(k[3], 0, 15);
-	k[4] = CLIP_VAL(k[4], 0, 15);
-	k[5] = CLIP_VAL(k[5], 0, 15);
-	k[6] = CLIP_VAL(k[6], 0, 15);
-	k[7] = CLIP_VAL(k[7], 0, 7);
-	k[8] = CLIP_VAL(k[8], 0, 7);
-	k[9] = CLIP_VAL(k[9], 0, 7);
-
-	unsigned char data[8];
-	memset(&data[0], 0, 8);
-
-	data[0] = 0x60; //speak external
- 
-	if(energy == 0 || energy == 15) { error("illegal value for energy"); return; }
-
-	if(s == gensym("silent")) {
-		CHECK_ARGS(argc, 0, "usage: silent");
-		data[1] = 0;
-	} else if(s == gensym("stop")) {
-		CHECK_ARGS(argc, 0, "usage: stop");
-		data[1] = 0xf0;
-	} else if(s == gensym("repeat")) {
-		CHECK_ARGS(argc, 2, "usage: repeat <energy> <pitch>");
-		data[1] = ((energy << 4) | (1 << 3) | ((pitch & 56) >> 3));
-		data[2] = (((pitch & 7) << 5));
-	} else if(s == gensym("unvoiced")) {
-		CHECK_ARGS(argc, 6, "usage: repeat <energy> <pitch> <k1> <k2> <k3> <k4>");
-		data[1] = ((energy << 4) | 0 | 0);
-		data[2] = (k[0]);
-		data[3] = ((k[1] << 3) | ((k[2] & 14) >> 1));
-		data[4] = (((k[2] & 1) << 7) | (k[3] << 3));
-	} else if(s == gensym("voiced")) {
-		CHECK_ARGS(argc, 12, "usage: repeat <energy> <pitch> <k1> <k2> <k3> <k4> <k5> <k6> <k7> <k8> <k9> <k10>");
-		data[1] = ((energy << 4) | 0 | 0);
-		data[2] = (k[0]);
-		data[3] = ((k[1] << 3) | ((k[2] & 14) >> 1));
-		data[4] = (((k[2] & 1) << 7) | (k[3] << 3) | ((k[4] & 14) >> 1));
-		data[5] = (((k[4] & 1) << 7) | (k[5] << 3) | ((k[6] & 14) >> 1));
-		data[6] = (((k[6] & 1) << 7) | (k[7] << 4) | (k[8] << 1) | ((k[9] & 4) >> 2));
-		data[7] = (((k[9] & 3) << 6));
-	} else {
-		error("unknown method called: %s", s->s_name);
-		return;
-	}
-	//tms5220_reset();
-	for(i = 0; i < 8; i++) tms5220_data_write(data[i]);
-	//tms5220_data_write(0);
-}
-
-void tms5220_tilde_update_status(t_tms5220_tilde *x) {
-	t_int new_status, new_ready, new_interrupt;
-
-	new_status = tms5220_status_read();
-	new_ready = tms5220_ready_read();
-	new_interrupt = tms5220_int_read();
-
-	if(new_interrupt != x->interrupt) {
-		outlet_float(x->x_interrupt, new_interrupt);
-		x->interrupt = new_interrupt;
-	}
-
-	if(new_ready != x->ready) {
-		outlet_float(x->x_ready, new_ready);
-		x->ready = new_ready;
-	}
-
-	if(new_status != x->status) {
-		outlet_float(x->x_status, new_status);
-		x->status = new_status;
-	}
-}
-
-t_int *tms5220_tilde_perform(t_int *w) {
-	t_tms5220_tilde *x = (t_tms5220_tilde *)(w[1]);
-	t_sample       *in =        (t_sample *)(w[2]);
-	t_sample      *out =        (t_sample *)(w[3]);
-	int              n =               (int)(w[4]);
-
-	int m = (int)(0.0 + n / x->resample_factor);
-
-	unsigned char *bytebuf = (unsigned char *)malloc(sizeof(unsigned char) * m);
-	if(!bytebuf) {error("FATAL: cannot allocate signal buffer (byte)"); return w;}
-
-	float *floatbuf = (float *)malloc(sizeof(float) * m);
-	if(!floatbuf) {error("FATAL: cannot allocate signal buffer (float)"); return w;}
-
-	tms5220_process(bytebuf, m);
-	unsigned char *pb = bytebuf;
-	float *fb = floatbuf;
-	int m1 = m;
-	while (m1--) *fb++ = (0.5 + ((t_sample) *pb++)) / 127.5;
-	free(bytebuf);
-
-#ifdef USE_LIBSAMPLERATE
-	if(x->src != NULL) {
-		SRC_DATA src_data;
-		src_data.data_in = floatbuf;
-		src_data.input_frames = m;
-		src_data.data_out = out;
-		src_data.output_frames = n;
-		src_data.src_ratio = x->resample_factor;
-		src_data.end_of_input = 0;
-		int err;
-		if(0 != (err = src_process(x->src, &src_data))) {
-			error("error during resample (libsamplerate)");
-			post("error code: %d (%s)", err, src_strerror(err));
-		}
-#ifdef DEBUG_TMS5220_TILDE
-		// check residual:
-		if(src_data.input_frames_used < m) {
-			error("used only %d input frames, instead of %d", src_data.input_frames_used, m);
-		}
-		if(src_data.output_frames_gen < n) {
-			error("generated only %d output frames, instead of %d", src_data.output_frames_gen, n);
-		}
-#endif
-	} else {
-		error("libsamplerate not initialized.");
-	}
-#else
-	// missing implementation of poor man's sample rate converter
-	// use libsamplerate for now
-#endif
-
-	free(floatbuf);
-
-	tms5220_tilde_update_status(x);
-	
-	return (w + 5);
-}
-
-void tms5220_tilde_dsp(t_tms5220_tilde *x, t_signal **sp) {
-	// update sample rate & resample factor:
-	x->resample_factor = sp[0]->s_sr / TMS5220_SAMPLE_RATE;
-#ifdef DEBUG_TMS5220_TILDE
-	if(sp[0]->s_sr != x->sr)
-		post("tms5220~: DEBUG: samplerate has changed to %f; new resample factor is %f.", sp[0]->s_sr, (float)x->resample_factor);
-#endif
-	x->sr = sp[0]->s_sr;
-
-	dsp_add(tms5220_tilde_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
-}
-
-void tms5220_tilde_setup(void) {
-	tms5220_tilde_class = class_new(gensym("tms5220~"),
-		(t_newmethod)tms5220_tilde_new,
-		(t_method)tms5220_tilde_free,
-		sizeof(t_tms5220_tilde),
-		CLASS_DEFAULT, A_GIMME, 0);
-
-	CLASS_MAINSIGNALIN(tms5220_tilde_class, t_tms5220_tilde, dummy);
-
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_dsp, gensym("dsp"), A_CANT, 0);
-	//class_addfloat(tms5220_tilde_class, (t_method)tms5220_tilde_write);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_write, gensym("write"), A_DEFFLOAT, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_reset, gensym("reset"), 0);
-	// frame building commands:
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("silent"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("stop"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("repeat"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("unvoiced"), A_GIMME, 0);
-	class_addmethod(tms5220_tilde_class, (t_method)tms5220_tilde_framefunc, gensym("voiced"), A_GIMME, 0);
-
-	post("tms5220~: TSM5220 IC emulation");
-	post("tms5220~:   external by Federico Ferri <mescalinum@gmail.com>");
-	post("tms5220~:   based on code by Frank Palazzolo <palazzol@tir.com>");
-}
diff --git a/externals/ffext/tracker/CHANGELOG b/externals/ffext/tracker/CHANGELOG
deleted file mode 100644
index f7bac4a4a..000000000
--- a/externals/ffext/tracker/CHANGELOG
+++ /dev/null
@@ -1,26 +0,0 @@
-0.1.0 --------------------------------------------------------------------
-  initial version. minimal set of features
-
-0.1.1 --------------------------------------------------------------------
-  fixes to drawing, minor bugs
-
-0.2.0 --------------------------------------------------------------------
-  more features: added keyboard input
-                 new parameter saving
-                 saving data is now optional
-                 file load/save support
-
-0.2.1 --------------------------------------------------------------------
-  fixed makefile. added pd_darwin target
-
-0.2.2 --------------------------------------------------------------------
-  added send/receive symbols support
-
-0.2.3 --------------------------------------------------------------------
-  numbers are now aligned to right
-  notification messages are sent from user interaction
-  mouse behavior improved. now dragging faster changes more.
-  added nice makefile for target:
-    Linux
-    MacOS (thanks Steffen)
-    Win32 (thanks tof)
diff --git a/externals/ffext/tracker/COPYING b/externals/ffext/tracker/COPYING
deleted file mode 100644
index 2128a66ea..000000000
--- a/externals/ffext/tracker/COPYING
+++ /dev/null
@@ -1,280 +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
diff --git a/externals/ffext/tracker/README b/externals/ffext/tracker/README
deleted file mode 100644
index 1cf7e3772..000000000
--- a/externals/ffext/tracker/README
+++ /dev/null
@@ -1,2 +0,0 @@
-this is a 2D grid editor you can use like a tracker
-see the help patch for a demonstration
diff --git a/externals/ffext/tracker/TODO b/externals/ffext/tracker/TODO
deleted file mode 100644
index bdc715950..000000000
--- a/externals/ffext/tracker/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-ToDo list for tracker external:
-===============================
-
diff --git a/externals/ffext/tracker/makefile b/externals/ffext/tracker/makefile
deleted file mode 100644
index 264a1e889..000000000
--- a/externals/ffext/tracker/makefile
+++ /dev/null
@@ -1,63 +0,0 @@
-all: pd_linux
-#all: pd_win
-#all: pd_darwin
-
-.SUFFIXES: .pd_linux .pd_darwin .dll .tk .tk2c
-
-PDPATH = /home/pat/pd
-
-
-
-
-# ----------------------- WINDOWS -------------------------
-pd_win: tracker.dll
-tracker.dll: tracker.c tracker.h tracker.tk2c
-
-WINCFLAGS = -Wall -W -Wshadow -Wstrict-prototypes -DPD -DNT -W3 -WX -Werror -Wno-unused -mms-bitfields -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer
-WININCLUDE =  -I.. -I../include -I$(PDPATH)/src
-
-WINLDFLAGS = -shared
-
-.c.dll:
-	gcc -mms-bitfields $(WINCFLAGS) $(WININCLUDE) -o $*.o -c $*.c
-	gcc $(WINLDFLAGS) -o $*.dll $*.o $(PDPATH)/bin/pd.dll
-	strip --strip-unneeded $*.dll
-	rm -f $*.o
-
-# ----------------------- LINUX i386 ----------------------
-pd_linux: tracker.pd_linux
-tracker.pd_linux: tracker.c tracker.h tracker.tk2c
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-   -Wall -W -Wno-shadow -Wstrict-prototypes \
-   -Wno-unused -Wno-parentheses -Wno-switch
-LINUXINCLUDE = -I/usr/include -I$(PDPATH)/src
-LINUXLDFLAGS = --export-dynamic  -shared
-
-.c.pd_linux:
-	$(CC) $(LINUXCFLAGS) $(CFLAGS) $(LINUXINCLUDE) -fPIC -o $*.o -c $*.c
-	$(LD) $(LINUXLDFLAGS) -o $*.pd_linux $*.o -lc -lm
-	strip --strip-unneeded $*.pd_linux
-
-# ----------------------- Darwin (OSX) --------------------
-pd_darwin: tracker.pd_darwin
-tracker.pd_darwin: tracker.c tracker.h tracker.tk2c
-
-DARWINCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-   -Wall -W -Wno-shadow -Wstrict-prototypes \
-   -Wno-unused -Wno-parentheses -Wno-switch
-DARWININCLUDE = -I/usr/include -I$(PDPATH)/src
-DARWINLDFLAGS = -bundle -undefined suppress -flat_namespace
-
-.c.pd_darwin:
-	$(CC) $(DARWINCFLAGS) $(DARWININCLUDE) -o $*.o -c $*.c
-	$(LD) $(DARWINLDFLAGS) -o $*.pd_darwin $*.o -lc -lm
-
-# ----------------------- Miscellaneous -------------------
-.tk.tk2c:
-	sh tk2c.bash < $*.tk > $*.tk2c
-
-clean:
-	rm -f *.o *.pd_linux *.pd_darwin *.pd_win *.dll so_locations *.tk2c
-
-
diff --git a/externals/ffext/tracker/tk2c.bash b/externals/ffext/tracker/tk2c.bash
deleted file mode 100755
index 9dfeb0301..000000000
--- a/externals/ffext/tracker/tk2c.bash
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-#set -x
-
-while read line
-do
-  for word in $line
-  do
-    if [ "X"$word != "X"${word#\#} ]
-    then
-       echo // ${line#\#}
-       break
-    else
-       line=${line//\'/\\\'}
-#useless, slashes never gets in
-       line=${line//\\/\\\\}
-#this one's dirty, i know
-       line=${line//;/\\\\;}
-       line=${line//\"/\\\"}
-       echo 'sys_gui("'$line'\n");'
-       break
-    fi
-  done
-done
diff --git a/externals/ffext/tracker/tracker-help.pd b/externals/ffext/tracker/tracker-help.pd
deleted file mode 100644
index ba472910b..000000000
--- a/externals/ffext/tracker/tracker-help.pd
+++ /dev/null
@@ -1,106 +0,0 @@
-#N canvas 355 23 810 615 10;
-#X obj 56 370 tracker -data 10 10 9 8 7 6 5 4 3 2 1 0 10 9 8 7 6 5
-4 3 2 1 11 10 9 8 7 6 5 4 3 2 12 11 10 9 8 7 6 5 4 3 13 12 11 10 9
-8 7 6 5 4 14 13 12 11 10 9 8 7 6 5 15 14 13 12 11 10 9 8 7 6 16 15
-14 13 12 11 10 9 8 7 17 16 15 14 13 12 11 10 9 8 18 17 16 15 14 13
-12 11 10 9 -send trk-out -recv trk;
-#X msg 54 128 setrow 0 10 11 12 13 14 15 16 17 18 19;
-#X msg 68 150 setrow 0 999 999 999 999 999 999 999 999 999 999;
-#X msg 85 197 set 2 3 \$1;
-#X floatatom 85 180 5 0 0 0 - - -;
-#N canvas 0 0 450 300 display_output 0;
-#X obj 60 186 outlet;
-#X obj 60 132 list prepend set;
-#X obj 60 159 list trim;
-#X obj 60 51 r trk-out;
-#X obj 60 105 route output;
-#X obj 60 78 list trim;
-#X text 145 77 strip list selector;
-#X text 163 107 filter by output selector;
-#X text 192 136 prepend with set just to display in a msg;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 5 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 0;
-#X restore 55 278 pd display_output;
-#X msg 55 309 12 11 10 9 8 7 6 5 4 3;
-#X obj 276 244 f;
-#X obj 303 244 + 1;
-#X obj 276 268 % 10;
-#X obj 276 219 metro 100;
-#X obj 276 191 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 446 150 resize 10 10;
-#X msg 460 175 resize 10 20;
-#X text 577 150 load/save:;
-#X obj 444 272 tgl 15 0 empty \$0-tgl-trk empty 17 7 0 10 -262144 -1
--1 0 1;
-#X text 470 268 <- toggle row tracking;
-#X obj 54 244 s trk;
-#X obj 446 213 s trk;
-#X msg 444 297 \; trk trackrow \$1;
-#X msg 276 295 \; trk getrow \$1;
-#X msg 570 179 load test.trk;
-#X msg 586 205 save test.trk;
-#X obj 570 234 s trk;
-#X text 313 184 <- playback;
-#X text 51 93 MANY WAYS TO GET OR SET DATA: ----------------------------
-;
-#X msg 168 197 getrow \$1;
-#X msg 193 234 get 2 3;
-#X floatatom 168 178 5 0 0 0 - - -;
-#X obj 168 278 s trk;
-#X obj 31 22 cnv 15 650 35 empty empty tracker 20 12 0 14 -62784 -262144
-0;
-#X text 226 25 tracker external - by Federico Ferri <mescalinum[at]gmail[dot]com>
-;
-#N canvas 0 0 450 300 known_bugs 0;
-#X text 63 47 * GOP doesn't work;
-#X text 63 79 * dollarZero in send/recv doesn't work;
-#X restore 521 31 pd known_bugs;
-#N canvas 0 0 450 300 license 0;
-#X text 60 51 licensed under the terms of GNU/GPL license;
-#X text 60 79 see COPYING for details;
-#X restore 610 31 pd license;
-#N canvas 569 336 450 300 keyboard_control 0;
-#X text 41 44 first \, give focus with mouse. the focused item becomes
-red.;
-#X text 42 69 you can change value by mouse dragging \, or by keyboard.
-;
-#X text 42 97 to change the selected value with keyboard \, type digits
-and press return. if you typed some digits you can cancel editing by
-pressing esc. you can increase decrease value with keys +/-. you can
-move selected item (cursor) with HJKL keys.;
-#X restore 556 71 pd keyboard_control;
-#X obj 31 542 cnv 15 650 35 empty empty v0.2.3 20 12 0 14 -62784 -262144
-0;
-#N canvas 212 405 361 431 notify_and_synchronization 0;
-#X obj 42 43 tracker -rows 10 -cols 10;
-#X obj 42 213 route changenotify;
-#X obj 42 246 tracker -rows 10 -cols 10;
-#X obj 42 190 route list;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 3 0 1 0;
-#X restore 496 95 pd notify_and_synchronization;
-#X text 446 127 resize:;
-#X connect 1 0 17 0;
-#X connect 2 0 17 0;
-#X connect 3 0 17 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 7 1;
-#X connect 9 0 20 0;
-#X connect 10 0 7 0;
-#X connect 11 0 10 0;
-#X connect 12 0 18 0;
-#X connect 13 0 18 0;
-#X connect 15 0 19 0;
-#X connect 21 0 23 0;
-#X connect 22 0 23 0;
-#X connect 26 0 29 0;
-#X connect 27 0 29 0;
-#X connect 28 0 26 0;
diff --git a/externals/ffext/tracker/tracker.c b/externals/ffext/tracker/tracker.c
deleted file mode 100644
index 69a286452..000000000
--- a/externals/ffext/tracker/tracker.c
+++ /dev/null
@@ -1,781 +0,0 @@
-/* ------------------------------------------------------------------------ */
-/* Copyright (c) 2007 Federico Ferri.                                       */
-/* For information on usage and redistribution, and for a DISCLAIMER OF ALL */
-/* WARRANTIES, see the file, "LICENSE.txt," in this distribution.           */
-/*                                                                          */
-/* tracker: a general purpose gbrid-like widget                                */
-/*                                                                          */
-/* 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.                   */
-/*                                                                          */
-/* See file LICENSE for further informations on licensing terms.            */
-/*                                                                          */
-/* 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.          */
-/*                                                                          */
-/* Based on PureData by Miller Puckette and others.                         */
-/* Many thanks to Yves Degoyon for its externals.                           */
-/* ------------------------------------------------------------------------ */
-
-#include <stdlib.h>
-#include <string.h>
-#include "tracker.h"
-
-t_widgetbehavior tracker_widgetbehavior;
-static t_class* tracker_class;
-static t_symbol* keyname_sym;
-
-#define MARGIN_X 3
-#define MARGIN_Y 2
-#define CHR_EDIT "<"
-#define CHR_NORM " "
-#define DIGITS_MIN 1
-#define DIGITS_MAX 10
-
-static void tracker_clip_row_col(t_tracker* x, t_int* pr, t_int* pc) {
-    if((*pr) < 0) {
-        (*pr) = x->x_rows - (((-(*pr) - 1) % x->x_rows) + 1);
-    } else {
-        (*pr) = (*pr) % x->x_rows;
-    }
-    if((*pc) < 0) {
-        (*pc) = x->x_columns - (((-(*pc) - 1) % x->x_columns) + 1);
-    } else {
-        (*pc) = (*pc) % x->x_columns;
-    }
-}
-
-static t_float tracker_data_get(t_tracker* x, t_floatarg r, t_floatarg c) {
-    t_int ir = (t_int)r;
-    t_int ic = (t_int)c;
-    tracker_clip_row_col(x, &ir, &ic);
-    return x->x_data[(int)ir][(int)ic];
-}
-
-static void tracker_data_set(t_tracker* x, t_floatarg r, t_floatarg c, t_floatarg d) {
-    t_int ir = (t_int)r;
-    t_int ic = (t_int)c;
-    tracker_clip_row_col(x, &ir, &ic);
-    x->x_data[(int)ir][(int)ic] = d;
-}
-
-static const char* tracker_isedititem(t_tracker* x, int r, int c) {
-    if(x->x_active_row == r && x->x_active_row >= 0 &&
-       x->x_active_column == c && x->x_active_column >= 0 &&
-       x->x_buf[0]) return CHR_EDIT;
-    else return CHR_NORM;
-}
-
-static int tracker_getdisplayval(t_tracker* x, int r, int c) {
-    if(tracker_isedititem(x, r, c) == CHR_EDIT) {
-        return atoi(x->x_buf);
-    } else {
-        return tracker_data_get(x, r, c);
-    }
-}
-
-/* ---- drawing stuff ------------------------------------------------------ */
-
-static void tracker_draw_new(t_tracker* x, t_glist* glist) {
-    int r,c;
-    t_canvas* canvas = glist_getcanvas(glist);
-    sys_vgui(".x%x.c create rectangle %d %d %d %d -outline black -fill gray -tags %xSHAPE\n", canvas, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist)+x->x_columns*x->x_cell_width+2*MARGIN_X, text_ypix(&x->x_obj, glist)+x->x_rows*x->x_cell_height+2*MARGIN_Y, x);
-    sys_vgui(".x%x.c create rectangle %d %d %d %d -fill #dddddd -outline {} -tags {%xCURSOR}\n", canvas, 0, 0, 0, 0, x);
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            sys_vgui(".x%x.c create text %d %d -text {%d%s} -font -*-courier-bold--normal--%d-* -anchor ne -tags {%xTEXT %xTEXT.%d.%d} -fill black\n", canvas, text_xpix(&x->x_obj, glist)+(c+1)*x->x_cell_width+MARGIN_X, text_ypix(&x->x_obj, glist)+r*x->x_cell_height+MARGIN_Y, tracker_getdisplayval(x, r, c), tracker_isedititem(x, r, c), glist_getfont(glist), x, x, r, c);
-        }
-    }
-    //canvas_fixlinesfor(canvas, (t_text*)x);
-    tracker_draw_update(x);
-}
-
-static void tracker_draw_update(t_tracker* x) {
-    int r,c;
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -text {%d%s}\n", canvas, x, r, c, tracker_getdisplayval(x, r, c), tracker_isedititem(x, r, c));
-        }
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_update_row(t_tracker* x, t_floatarg r) {
-    t_int ir = (t_int)r;
-    t_int ic = 0;
-    tracker_clip_row_col(x, &ir, &ic);
-    int c;
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    for(c = 0; c < x->x_columns; c++) {
-        sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -text {%d%s}\n", canvas, x, ir, c, tracker_getdisplayval(x, r, c), tracker_isedititem(x, r, c));
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_update_single(t_tracker* x, t_floatarg r, t_floatarg c) {
-    t_int ir = (t_int)r;
-    t_int ic = (t_int)c;
-    tracker_clip_row_col(x, &ir, &ic);
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -text {%d%s}\n", canvas, x, ir, ic, tracker_getdisplayval(x, ir, ic), tracker_isedititem(x, ir, ic));
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_update_cursor_pos(t_tracker* x) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    if(x->x_cursor_pos >= 0 && x->b_cursor) {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, x->x_glist)+MARGIN_X-1, text_ypix(&x->x_obj, x->x_glist)+x->x_cursor_pos*x->x_cell_height+MARGIN_Y-1, text_xpix(&x->x_obj, x->x_glist)+x->x_columns*x->x_cell_width+MARGIN_X+1, text_ypix(&x->x_obj, x->x_glist)+(x->x_cursor_pos+1)*x->x_cell_height+MARGIN_Y+1);
-    } else {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, 0, 0, 0, 0);
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_move(t_tracker* x, t_glist* glist) {
-    int r,c;
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    sys_vgui(".x%x.c coords %xSHAPE %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist)+x->x_columns*x->x_cell_width+2*MARGIN_X, text_ypix(&x->x_obj, glist)+x->x_rows*x->x_cell_height+2*MARGIN_Y);
-    if(x->x_cursor_pos >= 0) {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, x->x_glist)+MARGIN_X-1, text_ypix(&x->x_obj, x->x_glist)+x->x_cursor_pos*x->x_cell_height+MARGIN_Y-1, text_xpix(&x->x_obj, x->x_glist)+x->x_columns*x->x_cell_width+MARGIN_X+1, text_ypix(&x->x_obj, x->x_glist)+(x->x_cursor_pos+1)*x->x_cell_height+MARGIN_Y+1);
-    } else {
-        sys_vgui(".x%x.c coords %xCURSOR %d %d %d %d\n", canvas, x, 0, 0, 0, 0);
-    }
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            sys_vgui(".x%x.c coords %xTEXT.%d.%d %d %d\n", canvas, x, r, c, text_xpix(&x->x_obj, glist)+(c+1)*x->x_cell_width+MARGIN_X, text_ypix(&x->x_obj, glist)+r*x->x_cell_height+MARGIN_Y);
-        }
-    }
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_draw_erase(t_tracker* x, t_glist* glist) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    sys_vgui(".x%x.c delete %xSHAPE\n", canvas, x);
-    sys_vgui(".x%x.c delete %xTEXT\n", canvas, x);
-    sys_vgui(".x%x.c delete %xCURSOR\n", canvas, x);
-}
-
-static void tracker_draw_select(t_tracker* x, t_glist* glist) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    if(x->x_selected) {
-        sys_vgui(".x%x.c itemconfigure %xSHAPE -fill blue\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xTEXT -fill white\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xCURSOR -fill blue\n", canvas, x);
-    } else {
-        sys_vgui(".x%x.c itemconfigure %xSHAPE -fill gray\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xTEXT -fill black\n", canvas, x);
-        sys_vgui(".x%x.c itemconfigure %xCURSOR -fill #dddddd\n", canvas, x);
-    }
-    if(x->x_active_row >= 0 && x->x_active_column >= 0)
-        sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill red\n", canvas, x, x->x_active_row, x->x_active_column);
-}
-
-/* ---- widget behavior stuff ---------------------------------------------- */
-
-static void tracker_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2) {
-    t_tracker* x = (t_tracker*)z;
-
-    *xp1 = text_xpix(&x->x_obj, owner);
-    *yp1 = text_ypix(&x->x_obj, owner);
-    *xp2 = text_xpix(&x->x_obj, owner)+x->x_columns*x->x_cell_width+2*MARGIN_X;
-    *yp2 = text_ypix(&x->x_obj, owner)+x->x_rows*x->x_cell_height+2*MARGIN_Y;
-}
-
-static void tracker_save(t_gobj* z, t_binbuf* b) {
-    t_tracker* x = (t_tracker*)z;
-
-    binbuf_addv(b, "ssiis", gensym("#X"), gensym("obj"),
-        (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,
-        atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)));
-
-    if(x->b_save_data) {
-        int ei,gi;
-        binbuf_addv(b, "sii", gensym("-data"), x->x_columns, x->x_rows);
-        /* save data: */
-        for (ei = 0; ei < x->x_rows; ei++) {
-            for (gi = 0; gi < x->x_columns; gi++) {
-                binbuf_addv(b, "i", (int)tracker_data_get(x, ei, gi));
-            }
-        }
-    } else {
-        binbuf_addv(b, "sisi",
-            gensym("-rows"), x->x_rows,
-            gensym("-cols"), x->x_columns
-        );
-    }
-
-    if(*x->s_send->s_name)
-        binbuf_addv(b, "ss", gensym("-send"), x->s_send);
-
-    if(*x->s_recv->s_name)
-        binbuf_addv(b, "ss", gensym("-recv"), x->s_recv);
-
-    binbuf_addv(b, ";");
-}
-
-static void tracker_properties(t_gobj* z, t_glist* owner) {
-    char buf[800];
-    t_tracker* x = (t_tracker*)z;
-
-    sprintf(buf, "pdtk_tracker_dialog %%s %d %d %d %d {%s} {%s}\n",
-        (int)x->x_columns, (int)x->x_rows,
-        (int)x->b_save_data, (int)x->x_ndigits,
-        x->s_send->s_name, x->s_recv->s_name
-    );
-    //post("buf=%s", buf);
-    gfxstub_new(&x->x_obj.ob_pd, x, buf);
-}
-
-static void tracker_select(t_gobj* z, t_glist* glist, int selected) {
-    t_tracker* x = (t_tracker*)z;
-
-    x->x_selected = selected;
-    tracker_draw_select(x, glist);
-}
-
-static void tracker_activate(t_gobj* z, t_glist* glist, int state) {
-    //post("tracker: activate(%d)", state);
-}
-
-static void tracker_vis(t_gobj* z, t_glist* glist, int vis) {
-    t_tracker* x = (t_tracker*)z;
-    t_rtext* y;
-
-    if(vis) {
-        tracker_draw_new(x, glist);
-    } else {
-        tracker_draw_erase(x, glist);
-    }
-}
-
-static void tracker_delete(t_gobj* z, t_glist* glist) {
-    canvas_deletelinesfor(glist_getcanvas(glist), (t_text*)z);
-}
-
-static void tracker_displace(t_gobj* z, t_glist* glist, int dx, int dy) {
-    t_tracker* x = (t_tracker*)z;
-    int oldx = text_xpix(&x->x_obj, glist);
-    int oldy = text_ypix(&x->x_obj, glist);
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    if(oldx != x->x_obj.te_xpix || oldy != x->x_obj.te_ypix) {
-        tracker_draw_move(x, x->x_glist);
-    }
-}
-
-static void tracker_reset_buffer(t_tracker* x) {
-    int n = MAX_BUF;
-    while(n--) x->x_buf[n] = 0;
-    x->x_buf[MAX_BUF] = 0;
-}
-
-static void tracker_key(void* z, t_floatarg fkey) {
-    t_tracker* x = (t_tracker*)z;
-    int k = (int)fkey, n = 0;
-
-    //if(k) post("key=%d (0x%.2x) ('%c')", k, k, k);
-
-    if(k >= '0' && k <= '9') {
-        //k -= '0';
-        if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-            while(x->x_buf[n]) n++;
-            if (n < MAX_BUF && n < x->x_ndigits) x->x_buf[n] = (char)k;
-            tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-        }
-    } else if(k == '\n') {
-        if(x->x_buf[0]) {
-            n = atoi(x->x_buf);
-            if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-                int oldr,oldc;
-                tracker_setitem(x, x->x_active_row, x->x_active_column, n);
-                tracker_changenotify(x, x->x_active_row, x->x_active_column);
-                tracker_reset_buffer(x);
-                tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-                //tracker_select_item(x, -1, -1);
-            }
-        }
-    } else if(k == '\x7f' || k == 8) {
-        if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-            while(x->x_buf[n]) n++;
-            n--;
-            if(n >= 0) x->x_buf[n] = 0;
-            tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-        }
-    } else if(k == '\x1b' || k == 27) {
-        tracker_reset_buffer(x);
-        tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-    } else if(k == '+') {
-        tracker_reset_buffer(x);
-        tracker_motion(x, 0, -1);
-    } else if(k == '-') {
-        tracker_reset_buffer(x);
-        tracker_motion(x, 0, 1);
-    // VIM-STYLE CURSOR MOVEMENT (how to use arrow keys?)
-    } else if(k == 'J' || k == 'j') { tracker_select_movecur(x,  0, -1);
-    } else if(k == 'K' || k == 'k') { tracker_select_movecur(x,  0,  1);
-    } else if(k == 'H' || k == 'h') { tracker_select_movecur(x, -1,  0);
-    } else if(k == 'L' || k == 'l') { tracker_select_movecur(x,  1,  0);
-    }
-}
-
-static void tracker_motion(t_tracker* x, t_floatarg dx, t_floatarg dy) {
-    if(x->x_active_row >= 0 && x->x_active_column >= 0 && dy != 0) {
-        t_float d = tracker_data_get(x, x->x_active_row, x->x_active_column);
-        d -= dy;
-        tracker_data_set(x, x->x_active_row, x->x_active_column, d);
-        tracker_changenotify(x, x->x_active_row, x->x_active_column);
-        tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-    }
-}
-
-static void tracker_select_movecur(t_tracker* x, int dx, int dy) {
-    int r = x->x_active_row, c = x->x_active_column;
-    if(r >= 0 && c >= 0) {
-        r += dy;
-        if(r < 0) r = 0;
-        if(r >= x->x_rows) r = x->x_rows - 1;
-        c += dx;
-        if(c < 0) c = 0;
-        if(c >= x->x_columns) c = x->x_columns - 1;
-        tracker_select_item(x, r, c);
-    }
-}
-
-static void tracker_select_item(t_tracker* x, int r, int c) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    // -1, -1 unselects
-    if(r >= 0 && c >= 0) {
-        if(r != x->x_active_row || c != x->x_active_column) {
-            if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-                sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill black\n", canvas, x, x->x_active_row, x->x_active_column);
-                tracker_reset_buffer(x);
-                tracker_draw_update_single(x, x->x_active_row, x->x_active_column);
-            }
-            x->x_active_row = r;
-            x->x_active_column = c;
-            sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill red\n", canvas, x, x->x_active_row, x->x_active_column);
-        }
-    } else {
-        if(x->x_active_row >= 0 && x->x_active_column >= 0) {
-            sys_vgui(".x%x.c itemconfigure %xTEXT.%d.%d -fill black\n", canvas, x, x->x_active_row, x->x_active_column);
-        }
-        x->x_active_row = -1;
-        x->x_active_column = -1;
-    }
-}
-
-static int tracker_click(t_gobj* z, t_glist* glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) {
-    t_tracker* x = (t_tracker*)z;
-    t_canvas* canvas = glist_getcanvas(glist);
-
-    if(doit) {
-        glist_grab(glist, &x->x_obj.te_g,
-            (t_glistmotionfn)tracker_motion, tracker_key, xpix, ypix);
-
-        int r,c,rx,ry;
-        rx = xpix - text_xpix(&x->x_obj, glist) - MARGIN_X;
-        ry = ypix - text_ypix(&x->x_obj, glist) - MARGIN_Y;
-        c = rx / x->x_cell_width;
-        r = ry / x->x_cell_height;
-        tracker_select_item(x, r, c);
-        tracker_reset_buffer(x);
-    }
-
-    return 1;
-}
-
-/* ------------------------------------------------------------------------- */
-
-static void tracker_update(t_tracker* x, t_symbol* s, int argc, t_atom* argv) {
-    tracker_draw_update(x);
-}
-
-static void tracker_resize(t_tracker* x, int newrows, int newcols) {
-    int oldrows = x->x_rows;
-    int oldcols = x->x_columns;
-    if(oldrows == newrows && oldcols == newcols) return;
-
-    int ei,ej;
-    t_float** oldbuf = x->x_data;
-    x->x_data = (t_float**)getbytes(newrows*sizeof(t_float*));
-    for(ei = 0; ei < newrows; ei++) {
-        x->x_data[ei] = (t_float*)getbytes(newcols*sizeof(t_float));
-        for(ej = 0; ej < newcols; ej++) {
-            x->x_data[ei][ej] = oldbuf[ei % oldrows][ej % oldcols];
-        }
-    }
-
-    for(ei = 0; ei < oldrows; ei++) {
-        freebytes(oldbuf[ei], oldcols*sizeof(t_float));
-    }
-    freebytes(oldbuf, oldrows*sizeof(t_float));
-
-    x->x_rows = newrows;
-    x->x_columns = newcols;
-}
-
-static void tracker_gresize(t_tracker* x, t_floatarg newrows, t_floatarg newcols) {
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    tracker_draw_erase(x, x->x_glist);
-    tracker_resize(x, (int)newrows, (int)newcols);
-    tracker_draw_new(x, x->x_glist);
-    canvas_fixlinesfor(canvas, (t_text*)x);
-}
-
-static void tracker_gdigits(t_tracker* x, t_floatarg d) {
-    x->x_ndigits = (int)d;
-    if(x->x_ndigits < DIGITS_MIN) x->x_ndigits = DIGITS_MIN;
-    if(x->x_ndigits > DIGITS_MAX) x->x_ndigits = DIGITS_MAX;
-    tracker_vis((t_gobj*)x, x->x_glist, 0);
-    tracker_vis((t_gobj*)x, x->x_glist, 1);
-}
-
-static void tracker_free(t_tracker* x) {
-    int ei;
-    for(ei = 0; ei < x->x_rows; ei++) {
-        freebytes(x->x_data[ei], x->x_columns*sizeof(t_float));
-    }
-    freebytes(x->x_data, x->x_rows*sizeof(t_float));
-}
-
-static void tracker_set_saveflag(t_tracker* x, t_floatarg b) {
-    x->b_save_data = (int)(b == 0 ? 0 : 1);
-}
-
-static void tracker_set_send(t_tracker* x, t_symbol *s) {
-    x->s_send = s;
-}
-
-static void tracker_set_recv(t_tracker* x, t_symbol *s) {
-    if(x->s_recv != gensym(""))
-        pd_unbind(&x->x_obj.ob_pd, x->s_recv);
-
-    x->s_recv = s;
-    //x->s_recv_r = canvas_realizedollar(glist_getcanvas(x->x_glist), s);
-
-    pd_bind(&x->x_obj.ob_pd, s);
-}
-
-static t_tracker* tracker_new(t_symbol* s, int argc, t_atom* argv) {
-    t_tracker* x;
-    t_pd* x2;
-    int ei;
-    
-    //post("tracker_new: create %s argc=%d", s->s_name, argc);
-
-    x = (t_tracker*)pd_new(tracker_class);
-    x->outlet0 = outlet_new(&x->x_obj, &s_list); //&s_float ??
-
-    tracker_reset_buffer(x);
-
-    //pd_bind(&x->x_obj.ob_pd, keyname_sym);
-
-    x->x_data = (t_float**)getbytes(sizeof(t_float*));
-    x->x_data[0] = (t_float*)getbytes(sizeof(t_float));
-    x->x_data[0][0] = 0;
-    x->x_columns = 1;
-    x->x_rows = 1;
-    x->x_ndigits = 3;
-    x->x_cursor_pos = -1;
-    x->b_cursor = 0;
-    x->b_save_data = 1;
-
-    x->s_send = gensym("");
-    x->s_recv = gensym("");
-
-    int cols = 10, rows = 10;
-    int got_data = 0;
-    if(argc > 0) {
-        #define ARG_CHECK_LOOP_BEGIN while(ei < argc) { if(0) {}
-        #define ARG_CHECK_LOOP_END }
-        #define MATCH_ARG(sz) else if(argv[ei].a_type == A_SYMBOL && \
-            strcmp(sz, argv[ei].a_w.w_symbol->s_name) == 0)
-        #define MATCH_ARG_T(sz,t) else if(argv[ei].a_type == A_SYMBOL && \
-            strcmp(sz, argv[ei].a_w.w_symbol->s_name) == 0 && (ei + 1) < \
-            argc && argv[ei+1].a_type == t)
-        #define MATCH_FAILED else
-        ei = 0;
-        /*----------------*/ARG_CHECK_LOOP_BEGIN
-        MATCH_ARG_T("-rows", A_FLOAT) {
-            ei++;
-            rows = (int)argv[ei++].a_w.w_float;
-        }
-        MATCH_ARG_T("-cols", A_FLOAT) {
-            ei++;
-            cols = (int)argv[ei++].a_w.w_float;
-        }
-        MATCH_ARG_T("-digits", A_FLOAT) {
-            ei++;
-            x->x_ndigits = (int)argv[ei++].a_w.w_float;
-            if(x->x_ndigits < DIGITS_MIN) x->x_ndigits = DIGITS_MIN;
-            if(x->x_ndigits > DIGITS_MAX) x->x_ndigits = DIGITS_MAX;
-        }
-        MATCH_ARG_T("-bg", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-bg", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-fg", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-fg", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-sl", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-sl", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-bd", A_FLOAT)   { ei++; ei++; }
-        MATCH_ARG_T("-bd", A_SYMBOL)  { ei++; ei++; }
-        MATCH_ARG_T("-send", A_SYMBOL){
-            ei++;
-            //x->s_send = argv[ei++].a_w.w_symbol;
-            tracker_set_send(x, argv[ei++].a_w.w_symbol);
-        }
-        MATCH_ARG_T("-recv", A_SYMBOL){
-            ei++;
-            //x->s_recv = argv[ei++].a_w.w_symbol;
-            tracker_set_recv(x, argv[ei++].a_w.w_symbol);
-        }
-        MATCH_ARG("-data") {
-            ei++;
-            if((argc - ei) < 2) {
-                post("tracker: too few arguments to option -data");
-                post("tracker: expeting: -data <rows> <cols> #rows*cols ...");
-                return NULL;
-            }
-            cols = argv[ei++].a_w.w_float;
-            rows = argv[ei++].a_w.w_float;
-            if((argc - ei) < (rows * cols)) {
-                post("tracker: too few arguments to option -data");
-                post("tracker: expeting: -data %d %d followed by %d floats",
-                    rows, cols, rows * cols);
-                return NULL;
-            }
-            tracker_resize(x, rows, cols);
-            int j;
-            for(j = 0; j < (rows * cols); j++) {
-                tracker_data_set(x, j / cols, j % cols, argv[ei++].a_w.w_float);
-            }
-            got_data = 1;
-            tracker_set_saveflag(x, 1);
-        }
-        MATCH_FAILED {
-            post("tracker: argument error: w_float=%f, w_symbol=%s",
-                argv[ei].a_w.w_float, argv[ei].a_w.w_symbol->s_name);
-            return NULL;
-        }
-        /*----------------*/ARG_CHECK_LOOP_END
-    }
-    if(!got_data) {
-        tracker_set_saveflag(x, 0);
-        tracker_resize(x, rows, cols);
-    }
-
-    x->x_glist = (t_glist*)canvas_getcurrent();
-
-    /* calculate font metrics */
-    int font = glist_getfont(x->x_glist);
-    int width = sys_fontwidth(font);
-    int height = sys_fontheight(font);
-    x->x_cell_width = width*(x->x_ndigits+1);
-    x->x_cell_height = height;
-
-    return x;
-}
-
-static void tracker_file_load(t_tracker* x, t_symbol* f) {
-    void* binbuf = binbuf_new();
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    if(binbuf_read_via_canvas(binbuf, f->s_name, canvas, 0)) {
-        //error("tracker: %s: read failed", f->s_name);
-        return;
-    }
-    
-    int argc = binbuf_getnatom(binbuf);
-    t_atom* argv = binbuf_getvec(binbuf);
-
-    if(argc < 2) {
-        error("tracker: empty or invalid file");
-    }
-
-    int j = 0;
-    int rows = (int)argv[j++].a_w.w_float,
-        cols = (int)argv[j++].a_w.w_float;
-    tracker_gresize(x, rows, cols);
-
-    int r,c;
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            tracker_data_set(x, r, c, argv[j++].a_w.w_float);
-        }
-    }
-    tracker_gresize(x, rows, cols);
-
-    binbuf_free(binbuf);
-}
-
-static void tracker_file_save(t_tracker* x, t_symbol* f) {
-    void* binbuf = binbuf_new();
-    t_canvas* canvas = glist_getcanvas(x->x_glist);
-    char buf[MAXPDSTRING];
-    canvas_makefilename(canvas, f->s_name, buf, MAXPDSTRING);
-    
-    int r,c;
-    binbuf_addv(binbuf, "ii", x->x_rows, x->x_columns);
-    for(r = 0; r < x->x_rows; r++) {
-        for(c = 0; c < x->x_columns; c++) {
-            binbuf_addv(binbuf, "i", (int)tracker_data_get(x, r, c));
-        }
-    }
-
-    if(binbuf_write(binbuf, buf, "", 0))
-        error("%s: write failed", f->s_name);
-    binbuf_free(binbuf);
-}
-
-static void tracker_getrow(t_tracker* x, t_floatarg row) {
-    int ei;
-    int argc = x->x_columns + 1;
-
-    t_atom *atombuf = (t_atom*)getbytes(sizeof(t_atom)*argc);
-
-    SETSYMBOL(&atombuf[0], gensym("output"));
-
-    for(ei = 0; ei < x->x_columns; ei++) {
-        SETFLOAT(&atombuf[ei+1], tracker_data_get(x, row, ei));
-    }
-    
-    outlet_list(x->outlet0, &s_list, argc, atombuf);
-    if(x->s_send != gensym(""))
-        pd_list(x->s_send->s_thing, &s_list, argc, atombuf);
-
-    freebytes(atombuf, sizeof(t_atom)*(x->x_columns+1));
-
-    if(x->b_cursor) {
-        t_int ir = (t_int)row;
-        t_int ic = 0;
-        tracker_clip_row_col(x, &ir, &ic);
-        x->x_cursor_pos = ir;
-        tracker_draw_update_cursor_pos(x);
-    }
-}
-
-static void tracker_changenotify(t_tracker* x, t_floatarg row, t_floatarg col) {
-    int ei = 0;
-    t_atom *atombuf = (t_atom*)getbytes(sizeof(t_atom)*5);
-
-    SETSYMBOL(&atombuf[ei], gensym("changenotify"));           ei++;
-    SETSYMBOL(&atombuf[ei], gensym("set"));                    ei++;
-    SETFLOAT(&atombuf[ei], row);                               ei++;
-    SETFLOAT(&atombuf[ei], col);                               ei++;
-    SETFLOAT(&atombuf[ei], tracker_data_get(x, row, col));     ei++;
-
-    outlet_list(x->outlet0, &s_list, ei, atombuf);
-    if(x->s_send != gensym(""))
-        pd_list(x->s_send->s_thing, &s_list, ei, atombuf);
-
-    freebytes(atombuf, sizeof(t_atom)*ei);
-}
-
-static void tracker_toggle_cursor(t_tracker* x, t_floatarg b) {
-    x->b_cursor = (int)(b == 0 ? 0 : 1);
-    tracker_draw_update_cursor_pos(x);
-}
-
-static void tracker_setrow(t_tracker* x, t_symbol* s, int argc, t_atom* argv) {
-    if(argc < 2) {
-        post("tracker: setrow: too few arguments");
-        return;
-    }
-    int ei;
-    for(ei = 1; ei < argc; ei++) {
-        if((ei - 1) >= x->x_columns) break;
-
-        if(argv[ei].a_type == A_FLOAT) {
-            tracker_data_set(x, argv[0].a_w.w_float, ei - 1, argv[ei].a_w.w_float);
-        } else {
-            post("tracker: warning: non-float atom converted to zero-value");
-            tracker_data_set(x, argv[0].a_w.w_float, ei - 1, 0);
-        }
-    }
-    tracker_draw_update_row(x, argv[0].a_w.w_float);
-}
-
-static void tracker_getitem(t_tracker* x, t_float row, t_float col) {
-    t_atom a[2];
-    SETSYMBOL(&a[0], gensym("output"));
-    SETFLOAT(&a[1], tracker_data_get(x, row, col));
-    outlet_list(x->outlet0, &s_list, 2, &a[0]);
-    if(x->s_send != gensym(""))
-        pd_list(x->s_send->s_thing, &s_list, 2, &a[0]);
-}
-
-static void tracker_setitem(t_tracker* x, t_float row, t_float col, t_float val) {
-    tracker_data_set(x, row, col, val);
-    tracker_draw_update_single(x, row, col);
-}
-
-static void tracker_list(t_tracker* x, t_symbol* s, int ac, t_atom* av) {
-//    startpost("tracker: list> %s", s->s_name);
-//    postatom(ac, av);
-//    endpost();
-}
-
-void tracker_setup(void) {
-keyname_sym = gensym("#keyname");
-#include "tracker.tk2c"
-    tracker_class = class_new(
-        gensym("tracker"),
-        (t_newmethod)tracker_new,
-        (t_method)tracker_free,
-        sizeof(t_tracker),
-        0,
-        A_GIMME,
-        0
-    );
-    class_addlist(tracker_class, tracker_list);
-    class_addmethod(tracker_class, (t_method)tracker_toggle_cursor,
-        gensym("trackrow"), A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_update,
-        gensym("update"), A_GIMME, 0);
-    class_addmethod(tracker_class, (t_method)tracker_setrow,
-        gensym("setrow"), A_GIMME, 0);
-    class_addmethod(tracker_class, (t_method)tracker_getrow,
-        gensym("getrow"), A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_setitem,
-        gensym("set"), A_FLOAT, A_FLOAT, A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_getitem,
-        gensym("get"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_gresize,
-        gensym("resize"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_set_saveflag,
-        gensym("set_saveflag"), A_FLOAT, 0);
-    class_addmethod(tracker_class, (t_method)tracker_set_send,
-        gensym("set_send"), A_SYMBOL, 0);
-    class_addmethod(tracker_class, (t_method)tracker_set_recv,
-        gensym("set_recv"), A_SYMBOL, 0);
-    class_addmethod(tracker_class, (t_method)tracker_file_load,
-        gensym("load"), A_SYMBOL, 0);
-    class_addmethod(tracker_class, (t_method)tracker_file_save,
-        gensym("save"), A_SYMBOL, 0);
-
-    tracker_widgetbehavior.w_getrectfn =    tracker_getrect;
-    tracker_widgetbehavior.w_displacefn =   tracker_displace;
-    tracker_widgetbehavior.w_selectfn =     tracker_select;
-    tracker_widgetbehavior.w_activatefn =   NULL;
-    tracker_widgetbehavior.w_deletefn =     tracker_delete;
-    tracker_widgetbehavior.w_visfn =        tracker_vis;
-    tracker_widgetbehavior.w_clickfn =      tracker_click;
-
-#if PD_MINOR_VERSION >= 37
-    class_setpropertiesfn(tracker_class, tracker_properties);
-    class_setsavefn(tracker_class, tracker_save);
-#else
-    tracker_widgetbehavior.w_propertiesfn = tracker_properties;
-    tracker_widgetbehavior.w_savefn = tracker_save;
-#endif
-
-    class_setwidget(tracker_class, &tracker_widgetbehavior);
-    class_sethelpsymbol(tracker_class, gensym("tracker.pd"));
-}
diff --git a/externals/ffext/tracker/tracker.h b/externals/ffext/tracker/tracker.h
deleted file mode 100644
index 7097ab041..000000000
--- a/externals/ffext/tracker/tracker.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) 2007 Federico Ferri
- * For information on usage and redistribution, and for a DISCLAIMER OF ALL
- * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
-
-#ifndef __G_GRID_H
-#define __G_GRID_H
-
-#include <ctype.h>
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-#include "s_stuff.h"
-
-#include <unistd.h>
-#include <stdio.h>
-
-#define MAX_BUF 10
-
-typedef struct _tracker
-{
-    t_object x_obj;
-    t_glist *x_glist;
-    t_int x_selected;      // selected flag (in edit mode)
-    t_int x_columns;       // # of cols
-    t_int x_rows;          // # of rows
-    t_int x_active_row;    // selected item row
-    t_int x_active_column; // selected item col
-    t_int x_ndigits;       // cell width (+1 of margin added automatically)
-    t_int x_cursor_pos;    // visual cursor position (row indicator)
-    t_int b_cursor;        // track cursor?
-    t_int b_save_data;     // save data?
-    char x_buf[MAX_BUF+1]; // edit buffer
-    t_int x_cell_width;    // cell width in pixels  (auto computed)
-    t_int x_cell_height;   // cell height in pixels (auto computed)
-    t_float** x_data;      // data (2d matrix)
-    t_outlet* outlet0;     // outlet
-    t_symbol* s_send;
-    t_symbol* s_recv;
-} t_tracker;
-
-static void tracker_draw_new(t_tracker* x, t_glist* glist);
-static void tracker_draw_update(t_tracker* x);
-static void tracker_draw_move(t_tracker* x, t_glist* glist);
-static void tracker_draw_erase(t_tracker* x, t_glist* glist);
-static void tracker_draw_select(t_tracker* x, t_glist* glist);
-static void tracker_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2);
-static void tracker_save(t_gobj* z, t_binbuf* b);
-static void tracker_properties(t_gobj* z, t_glist* owner);
-static void tracker_dialog(t_tracker* x, t_symbol* s, int argc, t_atom* argv);
-static void tracker_select(t_gobj* z, t_glist* glist, int selected);
-static void tracker_vis(t_gobj* z, t_glist* glist, int vis);
-static void tracker_delete(t_gobj* z, t_glist* glist);
-static void tracker_displace(t_gobj* z, t_glist* glist, int dx, int dy);
-static void tracker_resize(t_tracker* x, int newrows, int newcols);
-static void tracker_free(t_tracker* x);
-static void tracker_getrow(t_tracker* x, t_float row);
-static void tracker_setrow(t_tracker* x, t_symbol* s, int argc, t_atom* argv);
-static void tracker_getitem(t_tracker* x, t_float row, t_float col);
-static void tracker_setitem(t_tracker* x, t_float row, t_float col, t_float val);
-static void tracker_motion(t_tracker* x, t_floatarg dx, t_floatarg dy);
-static void tracker_select_item(t_tracker* x, int r, int c);
-static void tracker_select_movecur(t_tracker* x, int dx, int dy);
-static void tracker_changenotify(t_tracker* x, t_floatarg row, t_floatarg col);
-void tracker_setup(void);
-
-#endif // __G_GRID_H
diff --git a/externals/ffext/tracker/tracker.tk b/externals/ffext/tracker/tracker.tk
deleted file mode 100644
index e5887ab61..000000000
--- a/externals/ffext/tracker/tracker.tk
+++ /dev/null
@@ -1,121 +0,0 @@
-proc tracker_apply {id} {
-# strip "." from the TK id to make a variable name suffix 
-    set vid [string trimleft $id .]
-# for each variable, make a local variable to hold its name...
-    set var_graph_width [concat graph_width_$vid]
-    global $var_graph_width
-    set var_graph_height [concat graph_height_$vid]
-    global $var_graph_height
-    set var_saveflag [concat saveflag_$vid]
-    global $var_saveflag
-    set var_sym_send [concat sym_send_$vid]
-    global $var_sym_send
-    set var_sym_recv [concat sym_recv_$vid]
-    global $var_sym_recv
- 
-    set cmd [concat $id resize \
-        [eval concat $$var_graph_height] \
-        [eval concat $$var_graph_width] \
-        \;]
-    pd $cmd
-
-    set cmd [concat $id set_saveflag \
-        [eval concat $$var_saveflag] \
-        \;]
-    pd $cmd
-
-    set ss [string trim [set $var_sym_send]]
-    if {$ss != {}} {pd [concat $id set_send $ss \;]}
-
-    set rs [string trim [set $var_sym_recv]]
-    if {$rs != {}} {pd [concat $id set_recv $rs \;]}
-}
- 
-proc tracker_cancel {id} {
-    set cmd [concat $id cancel \;]
-    #puts stderr $cmd
-    pd $cmd
-}
- 
-proc tracker_ok {id} {
-    tracker_apply $id
-    tracker_cancel $id
-}
- 
-proc pdtk_tracker_dialog {id width height saveflag digitw ss rs} {
-    set vid [string trimleft $id .]
- 
-    set var_graph_width [concat graph_width_$vid]
-    global $var_graph_width
-    set var_graph_height [concat graph_height_$vid]
-    global $var_graph_height
-    set var_saveflag [concat saveflag_$vid]
-    global $var_saveflag
-    set var_sym_send [concat sym_send_$vid]
-    global $var_sym_send
-    set var_sym_recv [concat sym_recv_$vid]
-    global $var_sym_recv
-
-    set $var_graph_width $width
-    set $var_graph_height $height
-    set $var_saveflag $saveflag
-    set $var_sym_recv $rs
-    set $var_sym_send $ss
- 
-    toplevel $id -class [winfo class .]
-    wm title $id {tracker}
-    wm protocol $id WM_DELETE_WINDOW [concat tracker_cancel $id]
- 
-    label $id.label -text {GRID PROPERTIES}
-    pack $id.label -side top
- 
-    frame $id.buttonframe
-    pack $id.buttonframe -side bottom -fill x -pady 2m
-    button $id.buttonframe.cancel -text {Cancel}\
-        -command "tracker_cancel $id"
-    button $id.buttonframe.apply -text {Apply}\
-        -command "tracker_apply $id"
-    button $id.buttonframe.ok -text {OK}\
-        -command "tracker_ok $id"
-    pack $id.buttonframe.cancel -side left -expand 1
-    pack $id.buttonframe.apply -side left -expand 1
-    pack $id.buttonframe.ok -side left -expand 1
-     
-    frame $id.1rangef
-    pack $id.1rangef -side top
-    label $id.1rangef.lwidth -text "Width :"
-    #entry $id.1rangef.width -textvar $var_graph_width -width 7
-    spinbox $id.1rangef.width -textvariable $var_graph_width -width 7 -from 1 -to 99 -increment 1
-    pack $id.1rangef.lwidth $id.1rangef.width -side left
- 
-    frame $id.2rangef
-    pack $id.2rangef -side top
-    label $id.2rangef.lheight -text "Height :"
-    #entry $id.2rangef.height -textvar $var_graph_height -width 7
-    spinbox $id.2rangef.height -textvariable $var_graph_height -width 7 -from 1 -to 99 -increment 1
-    pack $id.2rangef.lheight $id.2rangef.height -side left
-
-    frame $id.3rangef
-    pack $id.3rangef -side top
-    label $id.3rangef.lsaveflag -text ""
-    checkbutton $id.3rangef.saveflag -variable $var_saveflag -text "save contents"
-    pack $id.3rangef.lsaveflag $id.3rangef.saveflag -side left
- 
-    frame $id.4rangef
-    pack $id.4rangef -side top
-    label $id.4rangef.lwidth -text "Send symbol :"
-    entry $id.4rangef.ss -textvar $var_sym_send -width 10
-    pack $id.4rangef.lwidth $id.4rangef.ss -side left
- 
-    frame $id.5rangef
-    pack $id.5rangef -side top
-    label $id.5rangef.lwidth -text "Receive symbol :"
-    entry $id.5rangef.rs -textvar $var_sym_recv -width 10
-    pack $id.5rangef.lwidth $id.5rangef.rs -side left
- 
-    bind $id.1rangef.width <KeyPress-Return> [concat tracker_ok $id]
-    bind $id.2rangef.height <KeyPress-Return> [concat tracker_ok $id]
-    bind $id.4rangef.ss <KeyPress-Return> [concat tracker_ok $id]
-    bind $id.5rangef.rs <KeyPress-Return> [concat tracker_ok $id]
-    focus $id.1rangef.width
-}
diff --git a/externals/framesync/LICENSE.txt b/externals/framesync/LICENSE.txt
deleted file mode 100644
index 443254047..000000000
--- a/externals/framesync/LICENSE.txt
+++ /dev/null
@@ -1,676 +0,0 @@
-
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
- 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-  
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/externals/framesync/Makefile b/externals/framesync/Makefile
deleted file mode 100644
index 09371389c..000000000
--- a/externals/framesync/Makefile
+++ /dev/null
@@ -1,331 +0,0 @@
-## Pd library template version 1.0.6
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = framesync
-
-# add your .c source files, one object per file, to the SOURCES
-# variable, help files will be included automatically
-SOURCES = 
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = clockrunning.pd fadeinout.pd fadeinout~.pd filelooper~.pd fps.pd fps_ms.pd frameclock.pd fsline.pd fsreadsf~.pd fsrecordctrl.pd fstabplay~.pd rangemod.pd tablooper~.pd tabpitcher~.pd tabstretcher~.pd
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = sdf.wav
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, test patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = 
-
-
-
-#------------------------------------------------------------------------------#
-#
-# things you might need to edit if you are using other C libraries
-#
-#------------------------------------------------------------------------------#
-
-CFLAGS = -I"$(PD_INCLUDE)" -Wall -W -g
-LDFLAGS =  
-LIBS = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-CFLAGS += DPD -DVERSION='"$(LIBRARY_VERSION)"'
-
-PD_INCLUDE = $(PD_PATH)/include
-# where to install the library, overridden below depending on platform
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL) -p -m 644
-INSTALL_DATA = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU)
-  # GNU/Hurd, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU/kFreeBSD)
-  # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  PD_PATH = $(cygpath $(PROGRAMFILES))/pd
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-# in case somebody manually set the HELPPATCHES above
-HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_DATA) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_DATA) Makefile  $(DISTDIR)
-	$(INSTALL_DATA) README.txt $(DISTDIR)
-	$(INSTALL_DATA) LICENSE.txt $(DISTDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_DATA) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(HELPPATCHES))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "CFLAGS: $(CFLAGS)"
-	@echo "LDFLAGS: $(LDFLAGS)"
-	@echo "LIBS: $(LIBS)"
-	@echo "PD_INCLUDE: $(PD_INCLUDE)"
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/framesync/README.txt b/externals/framesync/README.txt
deleted file mode 100644
index a3e9f802a..000000000
--- a/externals/framesync/README.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-
-framesync
-
-framesync is a library for syncing sounds to video using frame numbers as the
-unit of time.  It was developed as part of the sound design for the Cartier
-Foundation's Terre Natale project.  There are a couple of concepts in this
-library necessary to understand in order to use it:
-
-- the FPS (Frames-Per-Second) is a global value set everywhere in Pd
-- the frameclock is global, and each framesync object receives it automatically
-- the frameclock starts at 0 and flows linearly
-
diff --git a/externals/framesync/TODO.txt b/externals/framesync/TODO.txt
deleted file mode 100644
index 35be162c8..000000000
--- a/externals/framesync/TODO.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-- convert fps handling to use a name that includes the parent-most patch
diff --git a/externals/framesync/clockrunning-help.pd b/externals/framesync/clockrunning-help.pd
deleted file mode 100644
index 5542a7cf3..000000000
--- a/externals/framesync/clockrunning-help.pd
+++ /dev/null
@@ -1,9 +0,0 @@
-#N canvas 116 136 373 298 10;
-#X obj 95 187 clockrunning;
-#X obj 95 87 frameclock;
-#X obj 95 209 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X text 8 20 track whether the frameclock is running or not (there
-is a 1 frame delay to turn off);
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
diff --git a/externals/framesync/clockrunning.pd b/externals/framesync/clockrunning.pd
deleted file mode 100644
index 4319a147b..000000000
--- a/externals/framesync/clockrunning.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 228 488 450 300 10;
-#X msg 135 169 1;
-#X msg 184 169 0;
-#X obj 154 64 bang;
-#X obj 184 147 delay;
-#X obj 211 127 * 2;
-#X obj 211 87 loadbang;
-#X obj 154 41 inlet;
-#X obj 156 234 outlet;
-#X obj 211 107 fps_ms;
-#X connect 0 0 7 0;
-#X connect 1 0 7 0;
-#X connect 2 0 3 0;
-#X connect 2 0 0 0;
-#X connect 3 0 1 0;
-#X connect 4 0 3 1;
-#X connect 5 0 8 0;
-#X connect 6 0 2 0;
-#X connect 8 0 4 0;
diff --git a/externals/framesync/examples/sdf.wav b/externals/framesync/examples/sdf.wav
deleted file mode 100644
index eb48c25fa0f556094f39dade85a0ff6c06f77bbe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 109708
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
UQuN>V|GoM@ze#J^|LwZ}4^SUw9RL6T

diff --git a/externals/framesync/fadeinout-help.pd b/externals/framesync/fadeinout-help.pd
deleted file mode 100644
index fa6e33adb..000000000
--- a/externals/framesync/fadeinout-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 237 57 404 386 10;
-#X floatatom 80 212 9 0 0 0 - - -;
-#X obj 83 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 83 68 frameclock 100;
-#X floatatom 230 212 9 0 0 0 - - -;
-#X obj 233 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X obj 80 184 fadeinout 10 20 40 50;
-#X text 33 16 Generate a 0-to-1-to-0 envelope based on frame numbers
-\, outputting once per frame.;
-#X text 31 285 the first argument/inlet sets the start frame of fade-in
-;
-#X obj 230 184 fadeinout 25 40 90 95;
-#X text 31 344 the fourth argument/inlet sets the end frame of fade-out
-;
-#X text 31 325 the third argument/inlet sets the start frame of fade-out
-;
-#X text 31 304 the second argument/inlet sets the end frame of fade-in
-;
-#X connect 0 0 1 0;
-#X connect 3 0 4 0;
-#X connect 5 0 0 0;
-#X connect 8 0 3 0;
diff --git a/externals/framesync/fadeinout.pd b/externals/framesync/fadeinout.pd
deleted file mode 100644
index 56c712267..000000000
--- a/externals/framesync/fadeinout.pd
+++ /dev/null
@@ -1,41 +0,0 @@
-#N canvas 761 232 404 407 10;
-#X text 143 16 frame;
-#X obj 62 192 bang;
-#X msg 62 212 0;
-#X obj 105 81 moses \$1;
-#X obj 150 102 moses \$2;
-#X obj 202 191 bang;
-#X msg 202 212 1;
-#X obj 195 125 moses \$3;
-#X obj 240 146 moses \$4;
-#X obj 260 232 mapping/reverse;
-#X obj 192 43 inlet;
-#X obj 232 43 inlet;
-#X obj 272 43 inlet;
-#X obj 312 43 inlet;
-#X obj 127 340 outlet;
-#X obj 107 212 fsline \$1 \$2;
-#X obj 260 211 fsline \$3 \$4;
-#X obj 105 13 receive framesync/frameclock;
-#X connect 1 0 2 0;
-#X connect 2 0 14 0;
-#X connect 3 0 1 0;
-#X connect 3 1 4 0;
-#X connect 4 1 7 0;
-#X connect 5 0 6 0;
-#X connect 6 0 14 0;
-#X connect 7 0 5 0;
-#X connect 7 1 8 0;
-#X connect 8 1 1 0;
-#X connect 9 0 14 0;
-#X connect 10 0 3 1;
-#X connect 10 0 15 0;
-#X connect 11 0 4 1;
-#X connect 11 0 15 1;
-#X connect 12 0 7 1;
-#X connect 12 0 16 0;
-#X connect 13 0 8 1;
-#X connect 13 0 16 1;
-#X connect 15 0 14 0;
-#X connect 16 0 9 0;
-#X connect 17 0 3 0;
diff --git a/externals/framesync/fadeinout~-help.pd b/externals/framesync/fadeinout~-help.pd
deleted file mode 100644
index c09952487..000000000
--- a/externals/framesync/fadeinout~-help.pd
+++ /dev/null
@@ -1,26 +0,0 @@
-#N canvas 189 78 404 386 10;
-#X obj 83 68 frameclock 100;
-#X text 33 16 Generate a 0-to-1-to-0 envelope based on frame numbers
-\, outputting once per frame.;
-#X text 31 285 the first argument/inlet sets the start frame of fade-in
-;
-#X text 31 344 the fourth argument/inlet sets the end frame of fade-out
-;
-#X text 31 325 the third argument/inlet sets the start frame of fade-out
-;
-#X text 31 304 the second argument/inlet sets the end frame of fade-in
-;
-#X obj 50 149 osc~ 300;
-#X obj 200 150 noise~;
-#X obj 50 199 *~ 0.1;
-#X obj 143 243 dac~;
-#X obj 200 199 *~ 0.1;
-#X text 33 265 the inlet~ is for the audio to be faded in and out;
-#X obj 200 174 fadeinout~ 5 40 90 95;
-#X obj 50 174 fadeinout~ 10 20 40 95;
-#X connect 6 0 13 0;
-#X connect 7 0 12 0;
-#X connect 8 0 9 0;
-#X connect 10 0 9 1;
-#X connect 12 0 10 0;
-#X connect 13 0 8 0;
diff --git a/externals/framesync/fadeinout~.pd b/externals/framesync/fadeinout~.pd
deleted file mode 100644
index e96b02db6..000000000
--- a/externals/framesync/fadeinout~.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 757 456 358 381 10;
-#X obj 47 12 inlet~;
-#X obj 47 333 outlet~;
-#X obj 47 266 *~;
-#X obj 113 12 inlet;
-#X obj 153 12 inlet;
-#X obj 193 12 inlet;
-#X obj 233 12 inlet;
-#X obj 62 244 line~;
-#X obj 155 179 loadbang;
-#X obj 62 221 pack float float;
-#X obj 155 199 framesync/fps_ms;
-#X obj 62 117 fadeinout \$1 \$2 \$3 \$4;
-#X connect 0 0 2 0;
-#X connect 2 0 1 0;
-#X connect 3 0 11 0;
-#X connect 4 0 11 1;
-#X connect 5 0 11 2;
-#X connect 6 0 11 3;
-#X connect 7 0 2 1;
-#X connect 8 0 10 0;
-#X connect 9 0 7 0;
-#X connect 10 0 9 1;
-#X connect 11 0 9 0;
diff --git a/externals/framesync/filelooper~-help.pd b/externals/framesync/filelooper~-help.pd
deleted file mode 100644
index 744881355..000000000
--- a/externals/framesync/filelooper~-help.pd
+++ /dev/null
@@ -1,23 +0,0 @@
-#N canvas 110 130 556 452 10;
-#X text 23 15 loops a sound file between a startframe and endframe
-;
-#X text 163 188 start;
-#X text 164 200 frame;
-#X text 288 199 frame;
-#X text 288 189 end;
-#X text 27 238 audio out;
-#X text 49 197 filename;
-#X obj 170 57 frameclock 400;
-#X obj 54 285 output~;
-#X text 311 214 args: filename startframe# endframe#;
-#X text 26 146 This will loop the voice.wav sound file starting at
-frame 50 and ending at frame 200:;
-#X obj 54 216 filelooper~ examples/sdf.wav 45 291;
-#X text 29 341 FYI: if the time between start frame and end frame is
-shorter than the sample file \, then you'll get an error message in
-the Pd window:;
-#X text 44 385 error: soundfiler_read: truncated to 2.249e+06 elements
-;
-#X text 29 401 It is safe to ignore this message \, it just means it
-didn't load the entire sample into memory.;
-#X connect 11 0 8 0;
diff --git a/externals/framesync/filelooper~.pd b/externals/framesync/filelooper~.pd
deleted file mode 100644
index ab8b6e11a..000000000
--- a/externals/framesync/filelooper~.pd
+++ /dev/null
@@ -1,93 +0,0 @@
-#N canvas 683 441 573 321 10;
-#X obj 240 21 inlet;
-#X obj 155 42 loadbang;
-#X obj 400 21 inlet;
-#X obj 146 264 outlet~;
-#X text 294 23 start frame;
-#X text 445 19 end frame;
-#X obj 240 96 purepd/float_argument \$2;
-#X obj 400 96 purepd/float_argument \$3;
-#X text 101 22 first arg is filename;
-#X obj 40 21 inlet;
-#X obj 40 96 purepd/symbol_argument \$1;
-#X obj 155 65 trigger bang bang bang;
-#X obj 40 176 table \$0-sample;
-#X obj 146 197 tablooper~ \$0-sample;
-#N canvas 206 494 511 317 load 0;
-#X obj 22 143 pack symbol symbol;
-#X obj 22 166 zexy/makesymbol %s/%s;
-#X obj 22 120 ggee/getdir 2;
-#X obj 22 74 symbol;
-#X obj 22 10 inlet;
-#X obj 92 194 symbol \$0-sample;
-#X obj 22 96 trigger bang anything bang;
-#X obj 22 262 soundfiler;
-#X obj 163 10 inlet;
-#X obj 22 218 pack symbol symbol float;
-#X msg 22 239 read -resize -maxsize \$3 \$1 \$2;
-#X obj 22 41 trigger anything bang;
-#X obj 200 110 print [filelooper~];
-#X msg 200 80 setting maxsize to truncate table to needed size:;
-#X connect 0 0 1 0;
-#X connect 1 0 9 0;
-#X connect 2 0 0 0;
-#X connect 3 0 6 0;
-#X connect 4 0 11 0;
-#X connect 5 0 9 1;
-#X connect 6 0 2 0;
-#X connect 6 1 0 1;
-#X connect 6 2 5 0;
-#X connect 8 0 9 2;
-#X connect 9 0 10 0;
-#X connect 10 0 7 0;
-#X connect 11 0 3 0;
-#X connect 11 1 13 0;
-#X connect 13 0 12 0;
-#X restore 40 155 pd load \$0-sample;
-#N canvas 0 22 450 300 calc 0;
-#X obj 89 16 inlet;
-#X obj 249 16 inlet;
-#X text 143 18 start frame;
-#X text 294 14 end frame;
-#X obj 126 269 outlet;
-#X obj 141 140 fps_ms;
-#X obj 126 106 -;
-#X obj 89 79 float;
-#X obj 126 160 *;
-#X obj 89 52 trigger bang 0 bang;
-#X obj 141 203 samplerate~;
-#X obj 126 182 / 1000;
-#X obj 126 247 + 1000;
-#X obj 126 222 *;
-#X text 171 247 give it a little extra pad;
-#X connect 0 0 9 0;
-#X connect 1 0 7 1;
-#X connect 5 0 8 1;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 11 0;
-#X connect 9 0 7 0;
-#X connect 9 1 6 1;
-#X connect 9 2 5 0;
-#X connect 9 2 10 0;
-#X connect 10 0 13 1;
-#X connect 11 0 13 0;
-#X connect 12 0 4 0;
-#X connect 13 0 12 0;
-#X restore 139 135 pd calc array maxsize;
-#X msg 252 45 bang;
-#X connect 0 0 6 0;
-#X connect 1 0 11 0;
-#X connect 2 0 7 0;
-#X connect 6 0 13 1;
-#X connect 6 0 15 0;
-#X connect 7 0 13 2;
-#X connect 7 0 15 1;
-#X connect 9 0 10 0;
-#X connect 10 0 14 0;
-#X connect 11 0 10 0;
-#X connect 11 1 6 0;
-#X connect 11 2 7 0;
-#X connect 13 0 3 0;
-#X connect 15 0 14 1;
-#X connect 16 0 11 0;
diff --git a/externals/framesync/fps-help.pd b/externals/framesync/fps-help.pd
deleted file mode 100644
index 04efc5114..000000000
--- a/externals/framesync/fps-help.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#N canvas 262 51 450 300 10;
-#X text 38 24 Set the global Frames-Per-Second (FPS) for the global
-clock when using the 'framesync' library. You should only use this
-object once in a project. [frameclock] uses this object to set the
-FPS \, so if you are using [frameclock] \, don't use [fps] also.;
-#X msg 135 206 bang;
-#X floatatom 135 254 5 0 0 0 - - -;
-#X obj 135 230 value framesync/fps;
-#X text 39 157 If you want to get the current global FPS value \, then
-bang [value framesync/fps]:;
-#X obj 177 255 print current FPS;
-#X obj 165 117 framesync/fps 30;
-#X connect 1 0 3 0;
-#X connect 3 0 2 0;
-#X connect 3 0 5 0;
diff --git a/externals/framesync/fps.pd b/externals/framesync/fps.pd
deleted file mode 100644
index bc1c7a657..000000000
--- a/externals/framesync/fps.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 763 479 535 318 10;
-#X obj 112 189 value framesync/fps;
-#X text 279 100 default to 30fps;
-#X obj 112 79 initbang;
-#X obj 243 160 print [framesync/fps];
-#X msg 243 137 setting FPS to \$1;
-#X obj 112 100 purepd/float_argument \$1 30;
-#X text 97 235 TODO make it an actual singleton;
-#X connect 2 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 0 0;
-#X connect 5 0 4 0;
diff --git a/externals/framesync/fps_ms-help.pd b/externals/framesync/fps_ms-help.pd
deleted file mode 100644
index dd5d419a8..000000000
--- a/externals/framesync/fps_ms-help.pd
+++ /dev/null
@@ -1,23 +0,0 @@
-#N canvas 183 103 450 300 10;
-#X obj 100 132 fps_ms;
-#X text 30 34 get the Frames-Per-Second (FPS) in milliseconds (ms)
-to use with [metro] \, [delay] \, etc.;
-#X obj 73 170 metro;
-#X floatatom 117 158 8 0 0 0 - - -;
-#X obj 56 140 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 73 203 float;
-#X obj 111 203 + 1;
-#X floatatom 73 230 5 0 0 0 - - -;
-#X text 152 77 set the global FPS here:;
-#X text 207 270 (the default framerate is 30 fps);
-#X obj 100 110 loadbang;
-#X obj 300 77 framesync/fps 30;
-#X connect 0 0 2 1;
-#X connect 0 0 3 0;
-#X connect 2 0 5 0;
-#X connect 4 0 2 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
-#X connect 6 0 5 1;
-#X connect 10 0 0 0;
diff --git a/externals/framesync/fps_ms.pd b/externals/framesync/fps_ms.pd
deleted file mode 100644
index 78e443b8d..000000000
--- a/externals/framesync/fps_ms.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#N canvas 521 451 395 377 10;
-#X obj 50 18 inlet;
-#X obj 50 339 outlet;
-#X obj 50 51 route bang;
-#X obj 95 275 /;
-#X msg 95 254 1 \$1;
-#X obj 95 296 * 1000;
-#X obj 50 124 value framesync/fps;
-#X obj 50 150 select 0;
-#X msg 50 215 33.3333;
-#X text 102 214 default to 30fps;
-#X obj 62 193 print [framesync/fps_ms];
-#X msg 62 174 setting to default fps (30);
-#X obj 107 93 print [framesync/fps_ms];
-#X obj 107 73 cyclone/prepend no method for;
-#X connect 0 0 2 0;
-#X connect 2 0 6 0;
-#X connect 2 1 13 0;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 7 0 11 0;
-#X connect 7 1 4 0;
-#X connect 8 0 1 0;
-#X connect 11 0 10 0;
-#X connect 13 0 12 0;
diff --git a/externals/framesync/frameclock-help.pd b/externals/framesync/frameclock-help.pd
deleted file mode 100644
index 4c9430910..000000000
--- a/externals/framesync/frameclock-help.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 104 124 487 404 10;
-#X floatatom 52 321 5 0 0 0 - - -;
-#X text 51 22 a GUI to generate and control the frame clock \, with
-a default frames-per-second (FPS) of 30 frames/second.;
-#X floatatom 248 319 5 0 0 0 - - -;
-#X text 49 72 the first argument/inlet sets the total number of frames
-;
-#X text 49 92 the second argument/inlet sets the frames-per-second
-(FPS);
-#X text 54 346 you can set the current frame by dragging the yellow
-bar or by clicking in the frame number box \, typing in a number \,
-and hitting enter;
-#X obj 249 247 frameclock 200 24;
-#X obj 154 142 frameclock 400;
-#X text 318 134 <-- set total frames;
-#X text 17 135 set current frame -->;
-#X obj 53 249 frameclock 200 29.97;
-#X connect 6 0 2 0;
-#X connect 10 0 0 0;
diff --git a/externals/framesync/frameclock.pd b/externals/framesync/frameclock.pd
deleted file mode 100644
index ec42f827a..000000000
--- a/externals/framesync/frameclock.pd
+++ /dev/null
@@ -1,89 +0,0 @@
-#N canvas 122 280 727 505 10;
-#X obj 155 147 tgl 35 0 \$0-tgl \$0-tgl-receive run 5 7 0 14 -233017
--33289 -33289 0 1;
-#X obj 305 346 moses 0;
-#X obj 163 256 float;
-#X msg 150 49 0;
-#X obj 120 147 bng 35 250 50 0 empty empty reset 4 17 0 10 -262144
--4160 -258113;
-#X obj 327 434 outlet;
-#X obj 190 147 nbx 5 35 -1 1e+37 0 0 \$0-numbox \$0-numbox-receive
-empty 0 -8 0 16 -233017 -33289 -33289 0 256;
-#X obj 363 1 inlet;
-#N canvas 524 22 450 300 color 0;
-#X obj 161 16 inlet;
-#X obj 165 263 outlet;
-#X msg 158 214 color \$1 12 12;
-#X obj 159 162 select 0 1;
-#X msg 192 184 76;
-#X msg 157 184 10;
-#X obj 89 131 loadbang;
-#X connect 0 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 5 0;
-#X connect 3 1 4 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 5 0;
-#X restore 526 279 pd color;
-#X obj 363 64 purepd/float_argument \$1 1000;
-#X obj 344 366 moses;
-#X text 402 2 total frames;
-#X obj 433 19 loadbang;
-#X obj 433 39 trigger bang bang;
-#X obj 155 217 metro;
-#X obj 123 139 hsl 154 8 0 400 0 0 \$0-hsl \$0-hsl-receive empty -2
--8 0 10 -262130 -1 -1 0 1;
-#X msg 371 88 range 0 \$1;
-#X obj 435 337 bang;
-#X msg 490 20 bang;
-#X obj 263 75 + 1;
-#X obj 190 50 receive \$0-hsl;
-#X obj 93 333 send \$0-hsl-receive;
-#X obj 190 97 int;
-#X obj 526 256 receive \$0-tgl;
-#X obj 526 302 send \$0-tgl-receive;
-#X msg 93 310 set \$1;
-#X obj 375 434 send framesync/frameclock;
-#X text 377 379 output the last frame# from the right outlet;
-#X msg 150 97 set 0;
-#X obj 28 198 send framesync/reset;
-#X obj 571 24 framesync/fps \$2;
-#X obj 555 64 fps_ms;
-#X obj 24 14 inlet;
-#X text 65 13 set frame position;
-#X connect 0 0 14 0;
-#X connect 1 1 10 0;
-#X connect 2 0 1 0;
-#X connect 2 0 25 0;
-#X connect 3 0 22 0;
-#X connect 3 0 28 0;
-#X connect 4 0 3 0;
-#X connect 4 0 29 0;
-#X connect 6 0 2 1;
-#X connect 7 0 9 0;
-#X connect 8 0 24 0;
-#X connect 9 0 10 1;
-#X connect 9 0 16 0;
-#X connect 10 0 5 0;
-#X connect 10 0 19 0;
-#X connect 10 0 26 0;
-#X connect 10 1 17 0;
-#X connect 10 1 26 0;
-#X connect 10 1 5 0;
-#X connect 12 0 13 0;
-#X connect 13 0 9 0;
-#X connect 13 1 31 0;
-#X connect 14 0 2 0;
-#X connect 16 0 15 0;
-#X connect 17 0 0 0;
-#X connect 18 0 13 0;
-#X connect 19 0 22 0;
-#X connect 20 0 22 0;
-#X connect 22 0 6 0;
-#X connect 23 0 8 0;
-#X connect 25 0 21 0;
-#X connect 28 0 15 0;
-#X connect 31 0 14 1;
-#X connect 32 0 15 0;
-#X coords 0 -1 1 1 159 62 1 120 120;
diff --git a/externals/framesync/framesync-meta.pd b/externals/framesync/framesync-meta.pd
deleted file mode 100644
index b41901f64..000000000
--- a/externals/framesync/framesync-meta.pd
+++ /dev/null
@@ -1,7 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 25 49 420 300 META 1;
-#X text 13 41 NAME framesync;
-#X text 10 25 AUTHOR Hans-Christoph Steiner <hans@eds.org>;
-#X text 10 10 VERSION 0.0;
-#X text 10 10 DESCRIPTION framesync is a library for syncing sounds to video using frame numbers as the unit of time;
-#X restore 10 10 pd META;
diff --git a/externals/framesync/fsline-help.pd b/externals/framesync/fsline-help.pd
deleted file mode 100644
index 2987f8d89..000000000
--- a/externals/framesync/fsline-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 256 115 588 378 10;
-#X obj 80 184 fsline 10 20;
-#X floatatom 80 212 9 0 0 0 - - -;
-#X obj 83 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 12700 1;
-#X obj 83 68 frameclock 100;
-#X floatatom 230 212 9 0 0 0 - - -;
-#X obj 233 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 12700 1;
-#X floatatom 380 212 9 0 0 0 - - -;
-#X obj 383 239 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 12700 1;
-#X text 33 16 Generate a 0-to-1 line based on frame numbers \, outputting
-once per frame.;
-#X obj 230 184 fsline 30 40;
-#X obj 380 184 fsline 50 60;
-#X text 31 285 the first argument/inlet sets the start frame;
-#X text 31 304 the second argument/inlet sets the end frame;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 4 0 5 0;
-#X connect 6 0 7 0;
-#X connect 9 0 4 0;
-#X connect 10 0 6 0;
diff --git a/externals/framesync/fsline.pd b/externals/framesync/fsline.pd
deleted file mode 100644
index ebdbbd2e4..000000000
--- a/externals/framesync/fsline.pd
+++ /dev/null
@@ -1,42 +0,0 @@
-#N canvas 497 472 479 363 10;
-#X obj 145 118 purepd/float_argument \$1;
-#X obj 145 11 inlet;
-#X obj 190 68 loadbang;
-#X obj 305 11 inlet;
-#X text 199 13 start frame;
-#X text 350 9 end frame;
-#X obj 305 118 purepd/float_argument \$2;
-#X obj 190 91 trigger bang bang;
-#X obj 47 151 moses;
-#X obj 74 185 moses;
-#X obj 74 255 -;
-#X msg 219 209 \$2 \$1;
-#X obj 219 231 -;
-#X obj 219 189 pack float float;
-#X obj 74 280 /;
-#X obj 74 325 outlet;
-#X obj 101 165 + 1;
-#X obj 47 45 receive framesync/frameclock;
-#X text 44 28 current frame #;
-#X obj 225 166 trigger bang float;
-#X connect 0 0 8 1;
-#X connect 0 0 10 1;
-#X connect 0 0 13 0;
-#X connect 1 0 0 0;
-#X connect 2 0 7 0;
-#X connect 3 0 6 0;
-#X connect 6 0 16 0;
-#X connect 6 0 19 0;
-#X connect 7 0 0 0;
-#X connect 7 1 6 0;
-#X connect 8 1 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 14 1;
-#X connect 13 0 11 0;
-#X connect 14 0 15 0;
-#X connect 16 0 9 1;
-#X connect 17 0 8 0;
-#X connect 19 0 13 0;
-#X connect 19 1 13 1;
diff --git a/externals/framesync/fsreadsf~-help.pd b/externals/framesync/fsreadsf~-help.pd
deleted file mode 100644
index d7c6d6281..000000000
--- a/externals/framesync/fsreadsf~-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 285 106 438 400 10;
-#X text 272 227 frame;
-#X text 71 265 audio out;
-#X text 25 20 Plays a sound file til it ends \, synced up to the frame
-clock. Should stay in sync when randomly accessing different frame
-numbers.;
-#X text 96 227 name;
-#X text 271 216 start;
-#X obj 95 112 frameclock 400;
-#X obj 76 322 output~;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 95 243 fsreadsf~ examples/sdf.wav 40;
-#X text 177 328 arguments: soundfile startframe#;
-#X text 96 216 file;
-#X obj 266 264 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 283 264 bang when done;
-#X connect 7 0 5 0;
-#X connect 8 0 5 0;
-#X connect 10 0 6 0;
-#X connect 10 0 6 1;
-#X connect 10 1 13 0;
diff --git a/externals/framesync/fsreadsf~.pd b/externals/framesync/fsreadsf~.pd
deleted file mode 100644
index 529dcafa7..000000000
--- a/externals/framesync/fsreadsf~.pd
+++ /dev/null
@@ -1,105 +0,0 @@
-#N canvas 549 363 605 420 10;
-#X obj 280 21 inlet;
-#X obj 145 42 loadbang;
-#X obj 144 383 outlet~;
-#N canvas 998 355 601 426 play 0;
-#X obj 34 13 inlet;
-#X obj 90 375 outlet~;
-#X obj 90 336 readsf~;
-#X msg 79 301 1;
-#X msg 50 301 0;
-#X obj 34 70 select 0;
-#X obj 143 207 pack symbol symbol;
-#X obj 143 230 zexy/makesymbol %s/%s;
-#X obj 143 184 ggee/getdir 2;
-#X obj 143 160 trigger bang anything;
-#X obj 176 13 inlet;
-#X obj 143 138 symbol;
-#X obj 79 116 trigger bang bang bang;
-#X obj 143 282 pack symbol float;
-#X msg 143 303 open \$1 \$2;
-#N canvas 196 102 450 300 calc 0;
-#X obj 69 8 inlet;
-#X obj 73 266 outlet;
-#X obj 215 13 inlet;
-#X obj 356 13 inlet;
-#X text 254 13 start frame;
-#X text 405 9 end frame;
-#X text 101 12 filename;
-#X restore 242 260 pd calc position in soundfile;
-#X obj 325 13 inlet;
-#X obj 466 13 inlet;
-#X text 364 13 start frame;
-#X text 515 9 end frame;
-#X text 211 12 filename;
-#X obj 154 374 outlet;
-#X connect 0 0 5 0;
-#X connect 2 0 1 0;
-#X connect 2 1 21 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 4 0;
-#X connect 5 1 12 0;
-#X connect 6 0 7 0;
-#X connect 7 0 13 0;
-#X connect 8 0 6 0;
-#X connect 9 0 8 0;
-#X connect 9 1 6 1;
-#X connect 10 0 11 1;
-#X connect 11 0 9 0;
-#X connect 12 0 3 0;
-#X connect 12 1 11 0;
-#X connect 12 2 15 0;
-#X connect 13 0 14 0;
-#X connect 14 0 2 0;
-#X connect 15 0 13 1;
-#X connect 16 0 15 1;
-#X connect 17 0 15 2;
-#X restore 144 341 pd play sample;
-#X obj 144 318 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 177 198 select;
-#X msg 177 221 1;
-#X text 334 23 start frame;
-#X obj 253 383 outlet;
-#X msg 32 281 0;
-#X obj 280 96 purepd/float_argument \$2;
-#X text 141 22 first arg is filename;
-#X obj 431 223 bang;
-#X msg 431 245 0;
-#X obj 32 176 bang;
-#X obj 32 139 receive framesync/frameclock;
-#X text 32 122 current frame #;
-#X obj 80 21 inlet;
-#X obj 80 96 purepd/symbol_argument \$1;
-#X obj 431 203 receive framesync/reset;
-#X obj 59 219 fps_ms;
-#X obj 32 260 delay;
-#X obj 59 198 loadbang;
-#X obj 59 240 * 2;
-#X obj 145 65 trigger bang bang;
-#X connect 0 0 10 0;
-#X connect 1 0 24 0;
-#X connect 3 0 2 0;
-#X connect 3 1 8 0;
-#X connect 4 0 3 0;
-#X connect 5 0 6 0;
-#X connect 6 0 4 0;
-#X connect 9 0 4 0;
-#X connect 9 0 3 0;
-#X connect 10 0 5 1;
-#X connect 10 0 3 2;
-#X connect 12 0 13 0;
-#X connect 13 0 3 0;
-#X connect 14 0 21 0;
-#X connect 15 0 5 0;
-#X connect 15 0 14 0;
-#X connect 17 0 18 0;
-#X connect 18 0 3 1;
-#X connect 19 0 12 0;
-#X connect 20 0 23 0;
-#X connect 21 0 9 0;
-#X connect 22 0 20 0;
-#X connect 23 0 21 1;
-#X connect 24 0 18 0;
-#X connect 24 1 10 0;
diff --git a/externals/framesync/fsrecordctrl.pd b/externals/framesync/fsrecordctrl.pd
deleted file mode 100644
index f8b864e72..000000000
--- a/externals/framesync/fsrecordctrl.pd
+++ /dev/null
@@ -1,46 +0,0 @@
-#N canvas 383 444 566 403 10;
-#X obj 69 212 select 0;
-#X obj 126 212 bang;
-#X obj 69 170 spigot;
-#X obj 102 102 tgl 15 0 empty empty rec -1 7 0 9 -233017 -33289 -33289
-0 1;
-#X text 137 169 record control;
-#X msg 126 257 0;
-#X msg 69 257 1;
-#X obj 89 281 change;
-#X obj 69 190 moses \$1;
-#X text 125 189 total frames;
-#N canvas 524 22 450 300 color 0;
-#X obj 149 22 inlet;
-#X obj 153 269 outlet;
-#X msg 146 220 color \$1 12 12;
-#X obj 147 168 select 0 1;
-#X msg 145 190 10;
-#X msg 180 190 13;
-#X obj 76 154 loadbang;
-#X connect 0 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 4 0;
-#X restore 49 102 pd color;
-#X obj 6 72 inlet;
-#X obj 89 301 outlet;
-#X obj 322 140 select 0 1;
-#X connect 0 0 6 0;
-#X connect 1 0 5 0;
-#X connect 2 0 8 0;
-#X connect 3 0 2 1;
-#X connect 3 0 10 0;
-#X connect 3 0 13 0;
-#X connect 5 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 12 0;
-#X connect 8 0 0 0;
-#X connect 8 1 1 0;
-#X connect 10 0 3 0;
-#X connect 11 0 2 0;
-#X connect 13 0 5 0;
-#X coords 0 -1 1 1 80 18 1 100 100;
diff --git a/externals/framesync/fstabplay~-help.pd b/externals/framesync/fstabplay~-help.pd
deleted file mode 100644
index e9f12b5c1..000000000
--- a/externals/framesync/fstabplay~-help.pd
+++ /dev/null
@@ -1,35 +0,0 @@
-#N canvas 238 126 606 403 10;
-#X text 212 227 frame;
-#X text 241 263 bang when done;
-#X text 71 265 audio out;
-#X text 25 20 Plays a sound file til it ends \, synced up to the frame
-clock. Should stay in sync when randomly accessing different frame
-numbers.;
-#X text 96 216 array;
-#X text 96 227 name;
-#X text 211 216 start;
-#X text 177 308 arguments: arrayname startframe#;
-#X obj 377 279 soundfiler;
-#X obj 377 232 symbol \$0-array;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 126079 float 2;
-#X coords 0 1 126079 -1 200 140 1;
-#X restore 376 50 graph;
-#X msg 377 254 read examples/sdf.wav \$1;
-#X obj 95 112 frameclock 400;
-#X obj 76 322 output~;
-#X obj 95 243 fstabplay~ \$0-array 40;
-#X obj 224 264 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 377 211 loadbang;
-#X connect 9 0 11 0;
-#X connect 11 0 8 0;
-#X connect 14 0 13 0;
-#X connect 14 0 13 1;
-#X connect 14 1 15 0;
-#X connect 16 0 12 0;
-#X connect 17 0 12 0;
-#X connect 19 0 9 0;
diff --git a/externals/framesync/fstabplay~.pd b/externals/framesync/fstabplay~.pd
deleted file mode 100644
index a5d500584..000000000
--- a/externals/framesync/fstabplay~.pd
+++ /dev/null
@@ -1,83 +0,0 @@
-#N canvas 35 253 684 636 10;
-#X obj 301 4 inlet;
-#X obj 325 164 / 1000;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 202 30 loadbang;
-#X obj 504 11 inlet;
-#X text 544 8 frame # when to play;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 89 300 moses;
-#X obj 116 336 moses;
-#X obj 143 241 int;
-#X obj 143 261 + 1;
-#X obj 143 299 +;
-#X obj 318 143 fps_ms;
-#X obj 22 38 receive framesync/frameclock;
-#X text 19 21 current frame #;
-#X text 342 3 array to play;
-#X obj 133 109 arraysize;
-#X obj 116 598 outlet~;
-#X obj 116 401 -;
-#X obj 273 598 outlet;
-#X msg 301 526 set \$1;
-#X obj 255 119 samplerate~;
-#X obj 255 187 *;
-#X obj 116 437 *;
-#X obj 116 460 %;
-#X text 319 598 TODO bang when complated playing sample;
-#X obj 202 50 trigger bang bang bang bang;
-#X msg 260 32 bang;
-#X obj 143 221 /;
-#X text 168 223 samples/frame;
-#X obj 22 65 trigger anything bang;
-#X obj 116 571 tabread~ \$1;
-#X obj 196 470 purepd/once;
-#X obj 196 450 bang;
-#X obj 116 549 line~;
-#X obj 116 526 pack float float;
-#X obj 116 490 select 0;
-#X msg 82 526 0;
-#X connect 0 0 2 0;
-#X connect 1 0 22 1;
-#X connect 2 0 16 1;
-#X connect 2 0 20 0;
-#X connect 3 0 26 0;
-#X connect 4 0 6 0;
-#X connect 6 0 7 1;
-#X connect 6 0 11 1;
-#X connect 6 0 18 1;
-#X connect 7 1 8 0;
-#X connect 8 0 18 0;
-#X connect 8 0 32 1;
-#X connect 8 1 33 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 11 0 8 1;
-#X connect 12 0 1 0;
-#X connect 12 0 35 1;
-#X connect 13 0 30 0;
-#X connect 16 0 24 1;
-#X connect 16 0 28 0;
-#X connect 18 0 23 0;
-#X connect 20 0 31 0;
-#X connect 21 0 22 0;
-#X connect 22 0 23 1;
-#X connect 22 0 28 1;
-#X connect 23 0 24 0;
-#X connect 24 0 36 0;
-#X connect 26 1 21 0;
-#X connect 26 2 2 0;
-#X connect 26 2 12 0;
-#X connect 26 3 6 0;
-#X connect 27 0 26 0;
-#X connect 28 0 9 0;
-#X connect 30 0 7 0;
-#X connect 30 1 16 0;
-#X connect 31 0 17 0;
-#X connect 32 0 19 0;
-#X connect 33 0 32 0;
-#X connect 34 0 31 0;
-#X connect 35 0 34 0;
-#X connect 36 0 37 0;
-#X connect 36 1 35 0;
-#X connect 37 0 34 0;
diff --git a/externals/framesync/rangemod.pd b/externals/framesync/rangemod.pd
deleted file mode 100644
index 792894bba..000000000
--- a/externals/framesync/rangemod.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 0 22 450 300 10;
-#X obj 79 13 inlet;
-#X obj 124 268 outlet;
-#X obj 79 63 moses \$1;
-#X obj 124 118 - \$1;
-#X obj 124 87 moses \$2;
-#X obj 124 151 % \$3;
-#X connect 0 0 2 0;
-#X connect 2 1 4 0;
-#X connect 3 0 5 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
diff --git a/externals/framesync/tablooper~-help.pd b/externals/framesync/tablooper~-help.pd
deleted file mode 100644
index eccd75268..000000000
--- a/externals/framesync/tablooper~-help.pd
+++ /dev/null
@@ -1,58 +0,0 @@
-#N canvas 159 79 594 533 10;
-#X text 30 7 loops a sound file between a startframe and endframe;
-#X text 133 227 start;
-#X text 134 239 frame;
-#X text 216 239 frame;
-#X text 215 229 end;
-#X text 29 278 audio out;
-#X obj 90 69 frameclock 400;
-#X obj 56 455 output~;
-#X text 31 187 This will loop the voice.wav sound file starting at
-frame 50 and ending at frame 200:;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 126079 float 2;
-#X coords 0 1 126079 -1 100 70 1;
-#X restore 420 19 graph;
-#X obj 402 121 symbol \$0-array;
-#X obj 402 165 soundfiler;
-#X obj 402 100 loadbang;
-#X msg 460 101 bang;
-#X text 238 255 args: array startframe# endframe#;
-#X text 49 236 array;
-#X obj 259 330 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X floatatom 256 349 5 0 0 0 - - -;
-#X obj 256 309 line;
-#X text 149 276 right outlet outputs a message to send to a line which
-will generate a line with 0 at the start and 1 at the end;
-#X obj 85 431 *~;
-#X obj 100 411 line~;
-#X obj 85 355 osc~ 333;
-#X msg 177 382 0;
-#X obj 85 376 *~ 0.3;
-#X obj 177 361 select 1;
-#X msg 90 42 33;
-#X msg 123 42 53;
-#X msg 402 142 read examples/sdf.wav \$1;
-#X msg 152 42 111;
-#X obj 62 256 tablooper~ \$0-array 40 186;
-#X text 180 41 <-- try jumping to a frame;
-#X connect 10 0 28 0;
-#X connect 12 0 10 0;
-#X connect 13 0 10 0;
-#X connect 16 0 17 0;
-#X connect 18 0 16 0;
-#X connect 18 0 25 0;
-#X connect 20 0 7 1;
-#X connect 21 0 20 1;
-#X connect 22 0 24 0;
-#X connect 23 0 21 0;
-#X connect 24 0 20 0;
-#X connect 25 0 23 0;
-#X connect 26 0 6 0;
-#X connect 27 0 6 0;
-#X connect 28 0 11 0;
-#X connect 29 0 6 0;
-#X connect 30 0 7 0;
-#X connect 30 1 18 0;
-#X connect 30 1 21 0;
diff --git a/externals/framesync/tablooper~.pd b/externals/framesync/tablooper~.pd
deleted file mode 100644
index c3b2b30a0..000000000
--- a/externals/framesync/tablooper~.pd
+++ /dev/null
@@ -1,104 +0,0 @@
-#N canvas 535 426 858 542 10;
-#X obj 301 4 inlet;
-#X obj 131 508 outlet~;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 224 26 loadbang;
-#X obj 504 11 inlet;
-#X text 544 8 frame # when to play;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 104 190 moses;
-#X obj 131 210 moses;
-#X obj 131 361 -;
-#X obj 273 508 outlet;
-#X obj 131 481 tabplay~ \$1;
-#X msg 301 436 set \$1;
-#X obj 32 101 receive framesync/frameclock;
-#X text 29 84 current frame #;
-#X text 342 3 array to play;
-#X obj 674 11 inlet;
-#X obj 674 82 purepd/float_argument \$3;
-#X text 714 8 frame # when to stop;
-#X obj 224 46 trigger bang bang bang bang bang;
-#X msg 285 26 bang;
-#X obj 208 481 bang;
-#X obj 252 238 fps_ms;
-#X obj 237 317 samplerate~;
-#X obj 237 359 *;
-#X obj 252 338 / 1000;
-#X obj 131 397 *;
-#X obj 131 420 %;
-#X obj 224 396 arraysize;
-#X msg 212 430 stop;
-#N canvas 738 24 450 300 reset 0;
-#X obj 191 140 delay;
-#X obj 191 119 bang;
-#X obj 128 210 purepd/once;
-#X obj 221 119 + 1;
-#X obj 205 164 receive framesync/reset;
-#X obj 13 11 inlet;
-#X obj 221 11 inlet;
-#X obj 128 250 outlet;
-#X obj 242 250 outlet;
-#X obj 191 186 bang;
-#X obj 91 86 float;
-#X obj 91 116 -;
-#X text 130 85 if we skipped a frame \, reset;
-#X obj 91 137 select -1;
-#X text 230 134 if the frameclock stops \, reset;
-#X obj 13 50 trigger float float bang float;
-#X connect 0 0 9 0;
-#X connect 1 0 0 0;
-#X connect 2 0 7 0;
-#X connect 3 0 0 1;
-#X connect 4 0 9 0;
-#X connect 5 0 15 0;
-#X connect 6 0 3 0;
-#X connect 9 0 2 1;
-#X connect 9 0 8 0;
-#X connect 10 0 11 0;
-#X connect 11 0 13 0;
-#X connect 13 1 9 0;
-#X connect 15 0 2 0;
-#X connect 15 1 10 1;
-#X connect 15 2 10 0;
-#X connect 15 2 1 0;
-#X connect 15 3 11 1;
-#X restore 131 262 pd reset delay;
-#X text 319 508 TODO output messages to send to line \, line~ \, vline~
-;
-#X connect 0 0 2 0;
-#X connect 2 0 12 0;
-#X connect 2 0 28 1;
-#X connect 3 0 19 0;
-#X connect 4 0 6 0;
-#X connect 6 0 9 1;
-#X connect 6 0 7 1;
-#X connect 7 1 8 0;
-#X connect 8 0 30 0;
-#X connect 9 0 26 0;
-#X connect 11 0 1 0;
-#X connect 11 1 21 0;
-#X connect 12 0 11 0;
-#X connect 13 0 7 0;
-#X connect 16 0 17 0;
-#X connect 17 0 8 1;
-#X connect 19 0 23 0;
-#X connect 19 0 28 0;
-#X connect 19 1 22 0;
-#X connect 19 2 2 0;
-#X connect 19 3 6 0;
-#X connect 19 4 17 0;
-#X connect 20 0 19 0;
-#X connect 21 0 11 0;
-#X connect 22 0 25 0;
-#X connect 22 0 30 1;
-#X connect 23 0 24 0;
-#X connect 24 0 26 1;
-#X connect 25 0 24 1;
-#X connect 26 0 27 0;
-#X connect 27 0 11 0;
-#X connect 28 0 27 1;
-#X connect 29 0 11 0;
-#X connect 29 0 10 0;
-#X connect 30 0 9 0;
-#X connect 30 1 29 0;
diff --git a/externals/framesync/tabpitcher~-help.pd b/externals/framesync/tabpitcher~-help.pd
deleted file mode 100644
index d4f4dae3e..000000000
--- a/externals/framesync/tabpitcher~-help.pd
+++ /dev/null
@@ -1,37 +0,0 @@
-#N canvas 279 99 618 384 10;
-#X text 140 227 frame;
-#X text 71 265 audio out;
-#X text 96 216 array;
-#X text 96 227 name;
-#X text 141 216 start;
-#X obj 377 279 soundfiler;
-#X obj 377 232 symbol \$0-array;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 20756 float 2;
-#X coords 0 1 20756 -1 200 140 1;
-#X restore 376 50 graph;
-#X obj 94 113 frameclock 400;
-#X obj 76 322 output~;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 377 211 loadbang;
-#X obj 95 244 tabpitcher~ \$0-array 10 60;
-#X text 13 17 Plays a sound til it ends \, synced up to the frame clock
-\, with a set pitch \, based on a root pitch. The root pitch defaults
-to 69 (A above middle C \, 440Hz). It stays in sync when randomly accessing
-different frame numbers.;
-#X text 231 216 root;
-#X text 230 227 pitch;
-#X text 186 227 pitch;
-#X text 184 216 play;
-#X text 177 308 arguments: arrayname startframe# play_pitch root_pitch
-;
-#X msg 377 254 read -resize examples/sdf.wav \$1;
-#X connect 6 0 21 0;
-#X connect 10 0 8 0;
-#X connect 11 0 8 0;
-#X connect 13 0 6 0;
-#X connect 14 0 9 0;
-#X connect 14 0 9 1;
-#X connect 21 0 5 0;
diff --git a/externals/framesync/tabpitcher~.pd b/externals/framesync/tabpitcher~.pd
deleted file mode 100644
index 4d935d376..000000000
--- a/externals/framesync/tabpitcher~.pd
+++ /dev/null
@@ -1,96 +0,0 @@
-#N canvas 311 314 1069 636 10;
-#X obj 301 4 inlet;
-#X obj 325 164 / 1000;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 202 30 loadbang;
-#X obj 504 11 inlet;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 89 319 moses;
-#X obj 116 355 moses;
-#X obj 143 292 int;
-#X obj 143 312 + 1;
-#X obj 143 334 +;
-#X obj 318 143 fps_ms;
-#X obj 12 38 receive framesync/frameclock;
-#X text 9 21 current frame #;
-#X text 342 3 array to play;
-#X obj 123 109 arraysize;
-#X obj 116 598 outlet~;
-#X obj 116 397 -;
-#X msg 301 526 set \$1;
-#X obj 255 119 samplerate~;
-#X obj 255 187 *;
-#X obj 116 428 *;
-#X msg 260 32 bang;
-#X obj 143 272 /;
-#X text 282 206 samples/frame;
-#X obj 12 65 trigger anything bang;
-#X obj 116 541 line~;
-#X obj 116 516 pack float float;
-#X obj 116 480 select 0;
-#X msg 82 516 0;
-#X obj 684 11 inlet;
-#X text 544 8 frame # when to start;
-#X obj 864 11 inlet;
-#X obj 202 50 trigger bang bang bang bang bang bang;
-#X text 724 8 pitch to play;
-#X text 904 8 root pitch of sample;
-#X obj 864 82 purepd/float_argument \$4 69;
-#X obj 684 82 purepd/float_argument \$3 69;
-#X obj 704 109 mtof;
-#X obj 752 110 mtof;
-#X text 729 140 speed change;
-#X obj 255 208 *;
-#X obj 704 140 /;
-#X obj 116 571 tabread4~ \$1;
-#X obj 116 450 moses;
-#X connect 0 0 2 0;
-#X connect 1 0 20 1;
-#X connect 2 0 15 1;
-#X connect 2 0 18 0;
-#X connect 3 0 33 0;
-#X connect 4 0 5 0;
-#X connect 5 0 6 1;
-#X connect 5 0 10 1;
-#X connect 5 0 17 1;
-#X connect 6 1 7 0;
-#X connect 7 0 17 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 7 1;
-#X connect 11 0 1 0;
-#X connect 11 0 27 1;
-#X connect 12 0 25 0;
-#X connect 15 0 23 0;
-#X connect 15 0 44 1;
-#X connect 17 0 21 0;
-#X connect 18 0 43 0;
-#X connect 19 0 20 0;
-#X connect 20 0 41 0;
-#X connect 21 0 44 0;
-#X connect 22 0 33 0;
-#X connect 23 0 8 0;
-#X connect 25 0 6 0;
-#X connect 25 1 15 0;
-#X connect 26 0 43 0;
-#X connect 27 0 26 0;
-#X connect 28 0 29 0;
-#X connect 28 1 27 0;
-#X connect 29 0 26 0;
-#X connect 30 0 37 0;
-#X connect 32 0 36 0;
-#X connect 33 1 19 0;
-#X connect 33 2 2 0;
-#X connect 33 2 11 0;
-#X connect 33 3 5 0;
-#X connect 33 4 37 0;
-#X connect 33 5 36 0;
-#X connect 36 0 39 0;
-#X connect 37 0 38 0;
-#X connect 38 0 42 0;
-#X connect 39 0 42 1;
-#X connect 41 0 21 1;
-#X connect 41 0 23 1;
-#X connect 42 0 41 1;
-#X connect 43 0 16 0;
-#X connect 44 0 28 0;
diff --git a/externals/framesync/tabstretcher~-help.pd b/externals/framesync/tabstretcher~-help.pd
deleted file mode 100644
index 7107a33bf..000000000
--- a/externals/framesync/tabstretcher~-help.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 232 120 595 379 10;
-#X text 165 227 frame;
-#X text 71 265 audio out;
-#X text 96 216 array;
-#X text 96 227 name;
-#X text 164 216 start;
-#X obj 357 279 soundfiler;
-#X obj 357 232 symbol \$0-array;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X array \$0-array 20756 float 2;
-#X coords 0 1 20756 -1 200 140 1;
-#X restore 376 38 graph;
-#X obj 94 113 frameclock 400;
-#X obj 76 322 output~;
-#X msg 108 82 78;
-#X msg 77 82 55;
-#X text 134 80 <-- try jumping to a frame;
-#X obj 357 211 loadbang;
-#X obj 95 243 tabstretcher~ \$0-array 10 44;
-#X text 176 316 arguments: arrayname startframe# endframe#;
-#X msg 357 254 read -resize examples/sdf.wav \$1;
-#X text 246 227 frame;
-#X text 252 216 end;
-#X text 5 20 Plays a complete sound file til it ends \, synced up to
-the frame clock. The sound is stretched or shrunk based on the end
-frame number. It stays in sync when randomly accessing different frame
-numbers.;
-#X connect 6 0 16 0;
-#X connect 10 0 8 0;
-#X connect 11 0 8 0;
-#X connect 13 0 6 0;
-#X connect 14 0 9 0;
-#X connect 14 0 9 1;
-#X connect 16 0 5 0;
diff --git a/externals/framesync/tabstretcher~.pd b/externals/framesync/tabstretcher~.pd
deleted file mode 100644
index f754e9cb5..000000000
--- a/externals/framesync/tabstretcher~.pd
+++ /dev/null
@@ -1,71 +0,0 @@
-#N canvas 685 275 872 599 10;
-#X obj 301 4 inlet;
-#X obj 301 83 purepd/symbol_argument \$1;
-#X obj 213 30 loadbang;
-#X obj 504 11 inlet;
-#X obj 504 82 purepd/float_argument \$2;
-#X obj 89 300 moses;
-#X obj 116 336 moses;
-#X obj 260 119 fps_ms;
-#X obj 22 38 receive framesync/frameclock;
-#X text 19 21 current frame #;
-#X text 342 3 array to play;
-#X obj 133 119 arraysize;
-#X obj 116 568 outlet~;
-#X obj 116 371 -;
-#X msg 301 496 set \$1;
-#X obj 116 407 *;
-#X obj 116 430 %;
-#X msg 271 32 bang;
-#X obj 22 65 trigger anything bang;
-#X obj 116 511 line~;
-#X obj 116 486 pack float float;
-#X obj 116 450 select 0;
-#X msg 82 486 0;
-#X obj 684 11 inlet;
-#X text 724 8 frame # when to stop;
-#X text 544 8 frame # when to start;
-#X obj 684 82 purepd/float_argument \$3;
-#X obj 213 50 trigger bang bang bang bang bang;
-#X obj 504 171 -;
-#X text 529 171 total frames to play;
-#X obj 425 342 /;
-#X obj 504 192 * -1;
-#X obj 116 541 tabread4~ \$1;
-#X connect 0 0 1 0;
-#X connect 1 0 11 1;
-#X connect 1 0 14 0;
-#X connect 2 0 27 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 1;
-#X connect 4 0 13 1;
-#X connect 4 0 28 0;
-#X connect 5 1 6 0;
-#X connect 6 0 13 0;
-#X connect 7 0 20 1;
-#X connect 8 0 18 0;
-#X connect 11 0 16 1;
-#X connect 11 0 30 0;
-#X connect 13 0 15 0;
-#X connect 14 0 32 0;
-#X connect 15 0 16 0;
-#X connect 16 0 21 0;
-#X connect 17 0 27 0;
-#X connect 18 0 5 0;
-#X connect 18 1 11 0;
-#X connect 19 0 32 0;
-#X connect 20 0 19 0;
-#X connect 21 0 22 0;
-#X connect 21 1 20 0;
-#X connect 22 0 19 0;
-#X connect 23 0 26 0;
-#X connect 26 0 28 1;
-#X connect 26 0 6 1;
-#X connect 27 1 7 0;
-#X connect 27 2 1 0;
-#X connect 27 3 4 0;
-#X connect 27 4 26 0;
-#X connect 28 0 31 0;
-#X connect 30 0 15 1;
-#X connect 31 0 30 1;
-#X connect 32 0 12 0;
diff --git a/externals/frankenstein/GArhythm.c b/externals/frankenstein/GArhythm.c
deleted file mode 100644
index a05502648..000000000
--- a/externals/frankenstein/GArhythm.c
+++ /dev/null
@@ -1,707 +0,0 @@
-/* 
-
-*/
-#include <stdlib.h>
-#include <time.h>
-#include "m_pd.h"
-
-#define BUFFER_LENGHT 16 // lunghezza dei buffers (quanti elementi nel pattern)
-#define MAX_POPULATION 100
-#define CHOIR 20
-#define NUM_STRUM 4 // quanti strumenti uso , max 8
-
-#define DEF_PROB_CROSSOVER 0.9f
-#define DEF_PROB_MUTATION 0.025f
-#define REINSERT_SRC 1 // quanti reinserisco ad ogni ciclo usando il ritmo src
-#define REINSERT_LAST 0 // quanti reinserisco ad ogni ciclo usando il ritmo src
-
-#define DEBUG 0 // messaggi di debug
-
-static t_class *GArhythm_class;
-
-
-typedef struct _GArhythm
-{
-    t_object x_obj; // myself
-    t_symbol *x_arrayname_src_strum1; // where i read the current pattern
-    t_symbol *x_arrayname_src_strum2; // where i read the current pattern
-    t_symbol *x_arrayname_src_strum3; // where i read the current pattern
-    t_symbol *x_arrayname_src_strum4; // where i read the current pattern
-	t_symbol *x_arrayname_dest_strum1; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_strum2; // where i put the computed pattern
-    t_symbol *x_arrayname_dest_strum3; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_strum4; // where i put the computed pattern
-	//t_float *buf_strum1; // buffer strum1o
-	//t_float *buf_strum2; //  buffer alto
-	// tutti gli indici vanno da 0 a 1;
-	float indice_variazione; // quanto cambio dalla battuta precedente
-	float indice_riempimento; // quanto voglio fitto il pattern risultante
-	float indice_aderenza; // quanto simile al ritmo sorgente devo essere
-	// la popolazione array di cromosomi
-	char population[MAX_POPULATION][BUFFER_LENGHT];
-	float prob_crossover;
-	float prob_mutation;
-	char last[BUFFER_LENGHT];
-	int reinsert_src;
-	int reinsert_last;
-} t_GArhythm;
-
-void GArhythm_init_pop(t_GArhythm *x)
-{
-	int i, j, tmp, k;
-	double rnd;
-
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		for (j=0; j<BUFFER_LENGHT; j++)
-		{
-			tmp = 0;
-			for (k=0; k<NUM_STRUM; k++)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd > 0.5)
-				{
-					tmp =  tmp + (1<<k); // da 0 a MAX_POPULATION
-				} 
-			}
-			x->population[i][j]=tmp;
-		}
-		if (DEBUG)
-			post("inizializzo population[%i] = %i%i%i%i", 
-				i, 
-				x->population[i][0],
-				x->population[i][1],
-				x->population[i][2],
-				x->population[i][3]
-				); 
-	}
-	
-}
-
-void GArhythm_reinit_pop(t_GArhythm *x)
-{
-	int i, j, vecsize, ntot, tmp, me;
-	float prob, variatore;
-	t_garray *arysrc_strum1;
-	t_garray *arysrc_strum2;
-	t_garray *arysrc_strum3;
-	t_garray *arysrc_strum4;
-	t_float *vecsrc_strum1;
-	t_float *vecsrc_strum2;
-	t_float *vecsrc_strum3;
-	t_float *vecsrc_strum4;
-
-	// load tables
-
-	if (!(arysrc_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum1, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum1->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum1, &vecsize, &vecsrc_strum1))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum1->s_name);
-	} 
-	else if (!(arysrc_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum2, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum2->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum2, &vecsize, &vecsrc_strum2))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum2->s_name);
-	}
-	else if (!(arysrc_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum3, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum3->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum3, &vecsize, &vecsrc_strum3))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum3->s_name);
-	}
-	else if (!(arysrc_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum4, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum4->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum4, &vecsize, &vecsrc_strum4))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum4->s_name);
-	}
-	
-	for (i=0; i<MAX_POPULATION; i++)
-		{
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				char c = 0x00;
-				if (vecsrc_strum1[j])
-					c = c | 0x01;
-				if (vecsrc_strum2[j])
-					c = c | (0x01 << 1);
-				if (vecsrc_strum3[j])
-					c = c | (0x01 << 2);
-				if (vecsrc_strum4[j])
-					c = c | (0x01 << 3);
-				x->population[i][j]=c;
-			}
-		}
-}
-
-void GArhythm_init_buf(t_float *buf)
-{
-	int i;
-	for (i=0; i<sizeof(buf); i++)
-	{
-		buf[i] = 0;
-	}
-}
-
-void GArhythm_allocate_buffers(t_GArhythm *x)
-{
-//	x->buf_strum1 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf_strum2 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	GArhythm_init_buf(x->buf_strum1);
-//	GArhythm_init_buf(x->buf_strum2);
-	
-}
-
-void GArhythm_free(t_GArhythm *x)
-{
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-}
-
-// returns fitness: how similar are man and woman
-static double GArhythm_evaluate_fitness1(char *woman, char *man)
-{
-	int res=0;
-	int max = BUFFER_LENGHT*2;
-	int i;
-	/*
-	// commenting here I allow beat swapped rhythms to be considered as identical
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		if (woman[i] == man[i])
-			res++;
-	}
-	*/
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		if ((woman[i]!= 0) && (man[i] != 0))
-			res++;
-		if ((woman[i]== 0) && (man[i] == 0))
-			res++;
-	}
-	return (float) ((float) res) / ((float) max);
-}
-
-// riempimento
-static double GArhythm_evaluate_fitness2(char *woman, char *man)
-{
-	int i, j, max;
-	double ris=0;
-	max = BUFFER_LENGHT * NUM_STRUM;
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		for (j=0; j<NUM_STRUM; j++)
-		{
-			if (man[i] & (0x01<<j))
-				ris++;
-		}
-	}
-	return (float) ((float) ris) / ((float) max);
-
-}
-
-// similarities TODO
-static double GArhythm_evaluate_fitness3(char *woman, char *man)
-{
-	// TODO: DUMMY, not working!
-	int i;
-	short int global1[BUFFER_LENGHT];
-	short int global2[BUFFER_LENGHT];
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		if (woman[i] != 0x00)
-			global1[i]=1;
-		else
-			global1[i]=0;
-		if (man[i] != 0x00)
-			global2[i]=1;
-		else
-			global2[i]=0;
-
-	}
-	// TODO
-	return 0;
-}
-
-// penalyze too many consecutive beats
-static double GArhythm_evaluate_fitness4(char *woman, char *man)
-{
-	int i, j, max, curr_consecutivi, max_consecutivi, tot_consecutivi;
-	double ris=0;
-	curr_consecutivi = max_consecutivi = tot_consecutivi = 0;
-	max = (BUFFER_LENGHT-1) * NUM_STRUM;
-	for (j=0; j<NUM_STRUM; j++)
-	{
-		i=1; 
-		curr_consecutivi = 0;
-		while(i<BUFFER_LENGHT)
-		{
-			if ((man[i] & (0x01<<j)) && (man[i-1] & (0x01<<j)))
-			{
-				// here is an event
-				//is it the first?
-				curr_consecutivi++;
-				if (curr_consecutivi>max_consecutivi)
-					max_consecutivi = curr_consecutivi;
-			} else
-			{
-				tot_consecutivi += curr_consecutivi;
-				curr_consecutivi = 0;
-			}
-			i++;
-		}
-	}
-	ris = (float) (((float) ris) / ((float) max));
-	return 1 - ris;
-
-}
-
-static void GArhythm_create_child(t_GArhythm *x, char *woman, char *man, char *child)
-{
-		double rnd;
-		int split, i, j, tmp;
-		// crossover
-		rnd = rand()/((double)RAND_MAX + 1);
-		if (rnd < x->prob_crossover)
-		{
-			split =(int) ( rnd * BUFFER_LENGHT); // da 0 a MAX_POPULATION
-			for (i=0; i< split; i++)
-			{
-				child[i] = woman[i];
-			}
-			for (i=split; i<BUFFER_LENGHT; i++)
-			{
-				child[i] = man[i];
-			}
-			// TODO: vertical split (some instr from mammy, some from daddy)
-		}else
-		{
-			for (i=0; i< BUFFER_LENGHT; i++)
-			{
-				child[i] = woman[i];
-			}
-		}
-		// mutation
-		for (i=0; i< BUFFER_LENGHT; i++)
-		{
-			// per ogni battito
-			for (j=0; j<NUM_STRUM; j++)
-			{
-				// per ogni strumento
-				tmp = child[i] & (0x01<<j); // tmp > 0 se è presente il battito là
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < x->prob_mutation)
-				{
-					if (DEBUG)
-						post("mutazione al battito %i allo strumento %i", i, j);
-					if (tmp)
-					{
-						child[i] = child[i] & (~(0x01<<j)); // tolgo il bit
-					} else
-					{	
-						child[i] = child[i] | (0x01<<j); // aggiungo il bit						
-					}
-				}
-			}
-		}
-		if (DEBUG)
-			post("generato figlio %i %i %i %i tra %i %i %i %i e %i %i %i %i, split=%i", 
-				child[0], child[1], child[2], child[3],
-				woman[0], woman[1], woman[2], woman[3], 
-				man[0], man[1], man[2], man[3],
-				split);
-
-}
-
-static void GArhythm_bang(t_GArhythm *x) {
-
-	int i, j, vecsize, ntot, tmp, me;
-	float prob, variatore;
-	t_garray *arysrc_strum1;
-	t_garray *arysrc_strum2;
-	t_garray *arysrc_strum3;
-	t_garray *arysrc_strum4;
-	t_garray *arydest_strum1;
-	t_garray *arydest_strum2;
-	t_garray *arydest_strum3;
-	t_garray *arydest_strum4;
-	t_float *vecsrc_strum1;
-	t_float *vecsrc_strum2;
-	t_float *vecsrc_strum3;
-	t_float *vecsrc_strum4;
-	t_float *vecdest_strum1;
-	t_float *vecdest_strum2;
-	t_float *vecdest_strum3;
-	t_float *vecdest_strum4;
-	double rnd;
-	int winner;
-	double winner_fitness;
-
-	char figli[MAX_POPULATION][BUFFER_LENGHT];
-
-	// load tables
-
-	if (!(arysrc_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum1, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum1->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum1, &vecsize, &vecsrc_strum1))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum1->s_name);
-	} 
-	else if (!(arysrc_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum2, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum2->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum2, &vecsize, &vecsrc_strum2))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum2->s_name);
-	}
-	else if (!(arysrc_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum3, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum3->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum3, &vecsize, &vecsrc_strum3))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum3->s_name);
-	}
-	else if (!(arysrc_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum4, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_strum4->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_strum4, &vecsize, &vecsrc_strum4))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum4->s_name);
-	}
-	  else 	if (!(arydest_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum1, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum1->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum1, &vecsize, &vecdest_strum1))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum1->s_name);
-	}
-	 else 	if (!(arydest_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum2, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum2->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum2, &vecsize, &vecdest_strum2))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum2->s_name);
-	}
-	 else 	if (!(arydest_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum3, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum3->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum3, &vecsize, &vecdest_strum3))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum3->s_name);
-	}
-	 else 	if (!(arydest_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_dest_strum4, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_strum4->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_strum4, &vecsize, &vecdest_strum4))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_strum4->s_name);
-	}
-	else // I got arrays and data
-	{
-		// vecdest_strum2 e _strum1 contengono i valori in float degli array
-		if (DEBUG)
-			post("--------- starting process");
-	
-		// uccido a caso REINSERT_SRC elementi e inserisco il ritmo src al loro posto
-		for (i=0; i<x->reinsert_src; i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			me = (int) (rnd * MAX_POPULATION);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				char c = 0x00;
-				if (vecsrc_strum1[j])
-					c = c | 0x01;
-				if (vecsrc_strum2[j])
-					c = c | (0x01 << 1);
-				if (vecsrc_strum3[j])
-					c = c | (0x01 << 2);
-				if (vecsrc_strum4[j])
-					c = c | (0x01 << 3);
-				x->population[me][j]=c;
-			}
-		}
-		// uccido a caso REINSERT_LAST elementi e inserisco il last al loro posto
-		for (i=0; i<x->reinsert_last; i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			me = (int) (rnd * MAX_POPULATION);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j]=x->last[j];
-			}
-		}
-
-		// metà sono donne, prese a caso
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			int winner=CHOIR;
-			int winner_value=0;
-			int men[CHOIR];
-			char figlio[BUFFER_LENGHT];
-			double fitness1[CHOIR];
-			double fitness2[CHOIR];
-			double fitness3[CHOIR];
-			double fitnessTOT[CHOIR];
-			rnd = rand()/((double)RAND_MAX + 1);
-			me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			// me è la donna che valuta gli uomini
-
-			if (DEBUG)
-				post("woman %i = %i %i %i %i", me, x->population[me][0], x->population[me][1], x->population[me][2], x->population[me][3]);
-
-			for (j=0; j<CHOIR; j++)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				tmp =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-				// tmp è questo uomo
-				men[j] = tmp;
-				fitness1[j]=GArhythm_evaluate_fitness1(x->population[me], x->population[tmp]);
-				fitness2[j]=GArhythm_evaluate_fitness2(x->population[me], x->population[tmp]);
-				fitness3[j]=GArhythm_evaluate_fitness3(x->population[me], x->population[tmp]);
-				fitnessTOT[j]=fitness1[j] * (x->indice_aderenza) 
-					+ fitness2[j] * (x->indice_riempimento) 
-					+ (1 - fitness2[j]) * (1-(x->indice_riempimento)) 
-					+ fitness3[j] * (x->indice_variazione)
-					+ GArhythm_evaluate_fitness4(x->population[me], x->population[tmp]);
-				if (winner_value <= fitnessTOT[j])
-				{
-					winner = tmp;
-					winner_value = fitnessTOT[j];
-				}
-			}
-			// winner è il maschio migliore nel coro
-			if (DEBUG)
-				post("ho scelto il maschio %i", winner);
-			// genero un figlio
-			GArhythm_create_child(x, x->population[me], x->population[winner], figlio);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				figli[i][j] = figlio[j];
-			}
-		}
-
-		// uccido a caso metà popolazione e ci metto i nuovi nati
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			// me è chi deve morire
-
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j] = figli[i][j];
-			}
-		}
-
-		// prendo il più adatto rispetto all'ultimo ritmo suonato
-		winner = 0;
-		winner_fitness = 0;
-		for(i=0; i<BUFFER_LENGHT; i++)
-		{
-			double tmp1, tmp2, tmp3, tmpTOT;
-			tmp1 = GArhythm_evaluate_fitness1(x->last, x->population[i]);
-			tmp2 = GArhythm_evaluate_fitness2(x->last, x->population[i]);
-			tmp3 = GArhythm_evaluate_fitness3(x->last, x->population[i]);
-			tmpTOT = tmp1 * (x->indice_aderenza) 
-					+ tmp2 * (x->indice_riempimento) 
-					+ (1-tmp2) * (1-(x->indice_riempimento)) 
-					+ tmp3 * (x->indice_variazione)
-					+ GArhythm_evaluate_fitness4(x->last, x->population[i]);
-			if (tmpTOT >= winner_fitness)
-			{
-				winner_fitness = tmpTOT;
-				winner = i;
-			}
-		}
-			
-		for (i=0; i<BUFFER_LENGHT; i++)
-		{
-			// copio il vincitor ein x->last
-			x->last[i] = x->population[winner][i];
-			// scrivo i buffer in uscita
-			vecdest_strum1[i]=((x->population[winner][i] & (0x01<<0)) ? 1 : 0);				
-			vecdest_strum2[i]=((x->population[winner][i] & (0x01<<1)) ? 1 : 0);				
-			vecdest_strum3[i]=((x->population[winner][i] & (0x01<<2)) ? 1 : 0);				
-			vecdest_strum4[i]=((x->population[winner][i] & (0x01<<3)) ? 1 : 0);				
-		}
-
-		// redraw the arrays
-		//garray_redraw(arysrc);
-		garray_redraw(arydest_strum1);
-		garray_redraw(arydest_strum2);
-		garray_redraw(arydest_strum3);
-		garray_redraw(arydest_strum4);
-
-
-	}
-}
-/*
-static void GArhythm_src(t_GArhythm *x, t_symbol *s) {
-    x->x_arrayname_src = s;
-}
-*/
-
-static void GArhythm_variazione_set(t_GArhythm *x, t_floatarg f)
-{
-  x->indice_variazione = f;
- }
-
-static void GArhythm_aderenza_set(t_GArhythm *x, t_floatarg f)
-{
-  x->indice_aderenza = f;
-}
-
-static void GArhythm_riempimento_set(t_GArhythm *x, t_floatarg f)
-{
-  x->indice_riempimento = f;
-}
-
-static void GArhythm_crossover_set(t_GArhythm *x, t_floatarg f)
-{
-  x->prob_crossover = f;
-}
-
-static void GArhythm_mutation_set(t_GArhythm *x, t_floatarg f)
-{
-  x->prob_mutation = f;
-}
-
-static void GArhythm_reinsert_src_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f>=0)
-		x->reinsert_src = (int) f;
-}
-
-static void GArhythm_reinsert_last_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f>=0)
-		x->reinsert_last = (int) f;
-}
-
-static void GArhythm_prob_crossover_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f<=1 && f>=0)
-		x->prob_crossover = f;
-}
-
-static void GArhythm_prob_mutation_set(t_GArhythm *x, t_floatarg f)
-{
-	if (f<=1 && f>=0) 
-		x->prob_mutation = f;
-}
-
-static void GArhythm_help(t_GArhythm *x)
-{
-	post("");
-	post("");
-	post("GArhythm");
-	post("");
-	post("a rhythm generator/variatior that uses co-evolving Genetic Algorithms");
-	post("at the moment it only works with 16 step measure, 1 measure rhythms, it needs 4 arrays as input rhythms and outputs its rhythms on 4 arrays");
-	post("");
-
-	post("global usage hints");
-	post("you must provide 8 arguments: the first 4 are the names of arrays with src rhythms, the second 4 are names of arrays where GArhythm will put its output");
-	post("send a bang each time you want a new population (and a new rhythm) to be evaluated");
-	post("");
-	post("available commands");
-	post("reinit: initialize the population with the content of the src arrays");
-	post("variazione float: sets the index of wanted variation between the last proposed rhythm and the next one (from 0 to 1)");
-	post("aderenza float: sets the index of wanted closeness between the current src rhythm and proposed one (from 0 to 1)");
-	post("riempimento float: set 0 if you want sparse rhythms, 1 if you want a rhythm full of events");
-	post("reinsert_src int: how many times the src rhythms will be randomly copied in the population before breeding");
-	post("reinsert_last int: how many times the last rhythms will be randomly copied in the population before breeding");
-	post("prob_crossover float: sets the crossover probability. default is %f", DEF_PROB_CROSSOVER);
-	post("prob_mutation float: sets the mutation probability, default is %f", DEF_PROB_MUTATION);
-
-}
-
-
-static void *GArhythm_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_GArhythm *x = (t_GArhythm *)pd_new(GArhythm_class);
-	GArhythm_allocate_buffers(x);
-	GArhythm_init_pop(x);
-	// inizializzo gli indici
-	x->indice_variazione=0;
-	x->indice_riempimento=0;
-	x->indice_aderenza=0;
-	x->prob_crossover = DEF_PROB_CROSSOVER;
-	x->prob_mutation = DEF_PROB_MUTATION;
-	x->reinsert_src=REINSERT_SRC;
-	x->reinsert_last=REINSERT_LAST;
-
-	srand( (unsigned)time( NULL ) );
-	
-	if (argc>0) 
-	{
-		x->x_arrayname_src_strum1 = atom_getsymbolarg(0, argc, argv);
-	} 
-	if (argc>1) 
-	{
-		x->x_arrayname_src_strum2 = atom_getsymbolarg(1, argc, argv);
-	} 
-	if (argc>2) 
-	{
-		x->x_arrayname_src_strum3 = atom_getsymbolarg(2, argc, argv);
-	} 
-	if (argc>3) 
-	{
-		x->x_arrayname_src_strum4 = atom_getsymbolarg(3, argc, argv);
-	} 
-	if (argc>4) 
-	{
-		x->x_arrayname_dest_strum1 = atom_getsymbolarg(4, argc, argv);
-	}
-	if (argc>5) 
-	{
-		x->x_arrayname_dest_strum2 = atom_getsymbolarg(5, argc, argv);
-	}
-	if (argc>6) 
-	{
-		x->x_arrayname_dest_strum3 = atom_getsymbolarg(6, argc, argv);
-	}
-	if (argc>7) 
-	{
-		x->x_arrayname_dest_strum4 = atom_getsymbolarg(7, argc, argv);
-	}
-
-    return (x);
-}
-
-void GArhythm_setup(void)
-{
-    GArhythm_class = class_new(gensym("GArhythm"), (t_newmethod)GArhythm_new,
-        (t_method)GArhythm_free, sizeof(t_GArhythm), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(GArhythm_class, (t_method)GArhythm_bang);
-//    class_addmethod(GArhythm_class, (t_method)GArhythm_src, gensym("src"),A_SYMBOL, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_variazione_set, gensym("variazione"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_riempimento_set, gensym("riempimento"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_aderenza_set, gensym("aderenza"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_reinit_pop, gensym("reinit"), 0, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_reinsert_src_set, gensym("reinsert_src"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_reinsert_last_set, gensym("reinsert_last"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_prob_crossover_set, gensym("prob_crossover"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_prob_mutation_set, gensym("prob_mutation"), A_DEFFLOAT, 0);
-	class_addmethod(GArhythm_class, (t_method)GArhythm_help, gensym("help"), 0, 0);
-}
diff --git a/externals/frankenstein/GArhythm.vcproj b/externals/frankenstein/GArhythm.vcproj
deleted file mode 100755
index fafd049d0..000000000
--- a/externals/frankenstein/GArhythm.vcproj
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="GArhythm"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:GArhythm_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/GArhythm.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="GArhythm.c">
-			</File>
-			<File
-				RelativePath="common.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/Makefile b/externals/frankenstein/Makefile
deleted file mode 100755
index cf2fecad1..000000000
--- a/externals/frankenstein/Makefile
+++ /dev/null
@@ -1,42 +0,0 @@
-# customize here !
-#VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
-#VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
-VC="C:\Programmi\Microsoft Platform SDK"
-VC="C:\Programmi\Microsoft Visual C++ Toolkit 2003"
-#PDPATH="H:\PureData\pd-0.38-3.msw\pd"
-#PDPATH="C:\Documents and Settings\Davide\Documenti\personali\pd-0.38-3.msw\pd"
-PDPATH="C:\Programmi\pd\pd"
-
-current: pd_nt distclean
-
-pd_nt: chord_melo.dll chords_memory.dll harmonizer.dll voicing_analyzer.dll GArhythm.dll ritmo1.dll rhythms_memory.dll themes_memory.dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-
-PDNTINCLUDE = /I. /I$(PDPATH)\tcl\include /I$(PDPATH)\src /I$(VC)\include /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDPATH)\bin\pd.lib 
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c common.c $*.c
-	link /dll /export:$*_setup $*.obj common.obj $(PDNTLIB) 
-
-
-
-clean:
-	-del link.stamp
-	-del *.obj
-	-del *.lib
-	-del *.exp
-	-del *.dll
-
-distclean:
-	-del *.obj
-	-del *.lib
-	-del *.exp
diff --git a/externals/frankenstein/README.txt b/externals/frankenstein/README.txt
deleted file mode 100644
index 09d3cefd1..000000000
--- a/externals/frankenstein/README.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-frankenstein set of externals
-
-authors:
-dmorelli: www.davidemorelli.it
-pland: www.davidcasal.com
-with the help of vatic and using soundspotter code (copyright 2006 Michael Casey)
-
-copyright (c) 2006 Davide Morelli and David Plans Casal
-
-last update: 
-14-10-2005
-
-------------------- what is this?
-
-this is an attempt to build an intelligent system for realtime 
-improvisation, a system that follows a human player and proposes
-rhythm, melody, chords sequences, formal structure.
-it learns the style in realtime.
-it uses various AI techniques: GA, searchs, ANN (maybe)
-
-description of files:
-
-chord_melo.c
-a GA melody generator. it takes a melody as input and evolves it over time.
-uses co-evolutionary techniques (Todd)
-
-chords_memory.c
-it is a directional graph which implements a memory of the played 
-chords sequences, you can train it...
-and once trained you can ask questions like:
-in C major, from a D minor 7h where did I go most if the times?
-or
-in C major, from a D minor 7h build a chord sequence to bring me
-in D major in 4 steps using the chords sequences I used most
-
-harmonizer.c
-a GA external that build choir voicing for 5 voices: 
-you pass it the midi value of each voice, starting chord, next chord
-and it outputs a list with the midi values of each voice.
-avoids hidden 8ves and 5ths.
-
-
-folders:
-
-doc/
-implementation documents, notes, logs, ideas, etc..
-patches/
-example patches, help patches, some used in performances, etc..
-aima/
-python patches not yes used but interesting for agents
-ruby/
-gridflow patches not yet used
-old/
-old not used code
-test/
-testing code, not to be used
-backup/
-previous versions
-
-
-TODO:
-
-gluer/solderer
-an external that takes the input of two or more chord_melody,
-a chord sequence and glues the melody statemets together
-to build a long complete melody.
-
-form_manager
-an external that manages the form and structure of the piece:
-decide which melody statement to use, the chord sequence to ask for, etc..
-
-various objects to detect played notes
-
-diatonic_melody.c
-same as chord_melody but without chord reference, only scale used
-(for post-tonal music non based on chords)
-
-chromatic_melo.c
-same as diatonic_melo but without any reference (for atonal music)
diff --git a/externals/frankenstein/SHOWME.pd b/externals/frankenstein/SHOWME.pd
deleted file mode 100644
index f870d2846..000000000
--- a/externals/frankenstein/SHOWME.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 63 95 785 518 12;
-#X obj 513 100 tabwrite src;
-#X obj 644 87 tabwrite dest;
-#N canvas 0 0 450 300 graph25 0;
-#X array src 16 float 1;
-#A 0 53 52 55 53 52 50 48 47 48 55 57 59 60 55 52 48;
-#X array dest 16 float 1;
-#A 0 53 50 52 38 64 46 43 41 48 64 67 67 36 55 53 57;
-#X coords 0 127 15 0 400 250 1;
-#X restore 75 32 graph;
-#X obj 572 38 tgl 15 0 empty empty START 0 -6 0 8 -258699 -1 -1 1 1
-;
-#X floatatom 550 138 5 0 0 0 - - -;
-#X floatatom 596 138 5 0 0 0 - - -;
-#X floatatom 648 137 5 0 0 0 - - -;
-#X obj 591 279 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1
-0 1;
-#X obj 627 279 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1
-1 1;
-#X obj 572 56 chord_melo_test3;
-#X floatatom 613 213 5 0 0 0 current_melo - -;
-#X connect 3 0 9 0;
-#X connect 9 0 4 0;
-#X connect 9 0 0 0;
-#X connect 9 1 1 0;
-#X connect 9 1 5 0;
-#X connect 9 2 10 0;
-#X connect 9 3 0 1;
-#X connect 9 3 1 1;
-#X connect 9 3 6 0;
diff --git a/externals/frankenstein/bay.orc b/externals/frankenstein/bay.orc
deleted file mode 100755
index 78edb681b..000000000
--- a/externals/frankenstein/bay.orc
+++ /dev/null
@@ -1,463 +0,0 @@
-; ================================================================
-; Header
-; ================================================================
-sr=44100
-kr=882
-ksmps=50
-nchnls=2
-
-; ================================================================
-; Globals
-; ================================================================
-zakinit 10,10
-
-; Global variable for the reverb unit
-ga1 init 0
-
-; ================================================================
-; Tables
-; ================================================================
-; Waveform for the string-pad
-iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25,  .0, .1,  .1, .1
-
-; Senoid required by chorus
-isine ftgen 2, 0, 4096, 10, 1
-
-
-; ================================================================
-; Instruments
-; ================================================================
-
-
-instr 1	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz1"
-kpos invalue "pos1"
-kamp  invalue "amp1"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 2	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz2"
-kpos invalue "pos2"
-kamp  invalue "amp2"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 3	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
- ; ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz3"
-kpos invalue "pos3"
-kamp  invalue "amp3"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 4	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz4"
-kpos invalue "pos4"
-kamp  invalue "amp4"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 5	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz5"
-kpos invalue "pos5"
-kamp  invalue "amp5"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; live input per reverbero
-
-instr 8	;live input
-  asig1,asig2	ins
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-; strumento senza invalue
-
-instr 9	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-  ihz  = p4
-  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-  ipos = p6
-  iamp = ampdb(idb)
-
-; modified by dmorelli
-
-;kpos invalue "pos1"
-;kamp  invalue "amp1"
-;kctrl = kamp*70
-;kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, ihz, 1            ; audio oscillator
-  acel1   oscil   kctrl, ihz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, ihz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  ippan =       ipos*1.570796325  ; half of PI (radians of 90o angle)
-  ipleft        =       cos(ippan)        ; half sign "down"
-  ipright       =       sin(ippan)        ; half sign "up"
-  asig1 = asig*ipleft;
-  asig2 = asig*ipright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; ================================================================
-; EFFECTS
-; ================================================================
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
-; I made some of its parameters accesible trhough score
-instr 10	;Chorus
-  ; Read input from zak
-  a1     zar     1
-  a2     zar     2
-  idlyml=p4      ;delay in milliseconds
-  k1             oscili          idlyml/p5, 1, 2
-  ar1l           vdelay3 a1, idlyml/5+k1, 900    ;delayed sound 1
-  ar1r           vdelay3 a2, idlyml/5+k1, 900    ;delayed sound 1
-  k2             oscili          idlyml/p5, .995, 2
-  ar2l           vdelay3 a1, idlyml/5+k2, 700    ;delayed sound 2
-  ar2r           vdelay3 a2, idlyml/5+k2, 700    ;delayed sound 2
-  k3             oscili          idlyml/p5, 1.05, 2
-  ar3l           vdelay3 a1, idlyml/5+k3, 700    ;delayed sound 3
-  ar3r           vdelay3 a2, idlyml/5+k3, 700    ;delayed sound 3
-  k4             oscili          idlyml/p5, 1, 2
-  ar4l           vdelay3 a1, idlyml/5+k4, 900    ;delayed sound 4
-  ar4r           vdelay3 a2, idlyml/5+k4, 900    ;delayed sound 4
-  aoutl          =               (a1+ar1l+ar2l+ar3l+ar4l)*.5
-  aoutr          =               (a2+ar1r+ar2r+ar3r+ar4r)*.5
-
-  ; To the output mixer
-  zawm            aoutl, 5
-  zawm            aoutr, 6
-  ; and also to the reverb unit
-  ga1 = ga1 + (aoutl+aoutr)*.5
-endin
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Reverb
-; 8 delay line FDN reverb, with feedback matrix based upon 
-; physical modeling scattering junction of 8 lossless waveguides
-; of equal characteristic impedance. Based on Julius O. Smith III, 
-; "A New Approach to Digital Reverberation using Closed Waveguide
-; Networks," Proceedings of the International Computer Music 
-; Conference 1985, p. 47-53 (also available as a seperate
-; publication from CCRMA), as well as some more recent papers by
-; Smith and others.
-;
-; Coded by Sean Costello, October 1999
-instr 25	;Reverb
-  ; Note: ga1 is the global input to the reverb.
-  afilt1 init 0
-  afilt2 init 0
-  afilt3 init 0
-  afilt4 init 0
-  afilt5 init 0
-  afilt6 init 0
-  afilt7 init 0
-  afilt8 init 0
-  idel1 = (2473.000/sr)
-  idel2 = (2767.000/sr)
-  idel3 = (3217.000/sr)
-  idel4 = (3557.000/sr)
-  idel5 = (3907.000/sr)
-  idel6 = (4127.000/sr)
-  idel7 = (2143.000/sr)
-  idel8 = (1933.000/sr)
-  
-  
-  igain = p4      ; gain of reverb. Adjust empirically
-                  ; for desired reverb time. .6 gives
-                  ; a good small "live" room sound, .8
-                  ; a small hall, .9 a large hall,
-                  ; .99 an enormous stone cavern.
-  
-  ipitchmod = p5  ; amount of random pitch modulation
-                  ; for the delay lines. 1 is the "normal"
-                  ; amount, but this may be too high for
-                  ; held pitches such as piano tones.
-                  ; Adjust to taste.
-  
-  itone = p6      ; Cutoff frequency of lowpass filters
-                  ; in feedback loops of delay lines,
-                  ; in Hz. Lower cutoff frequencies results
-                  ; in a sound with more high-frequency
-                  ; damping.
-  
-  ; k1-k8 are used to add random pitch modulation to the
-  ; delay lines. Helps eliminate metallic overtones
-  ; in the reverb sound.
-  k1      randi   .001, 3.1, .06
-  k2      randi   .0011, 3.5, .9
-  k3      randi   .0017, 1.11, .7
-  k4      randi   .0006, 3.973, .3
-  k5      randi   .001, 2.341, .63
-  k6      randi   .0011, 1.897, .7
-  k7      randi   .0017, 0.891, .9
-  k8      randi   .0006, 3.221, .44
-  ; apj is used to calculate "resultant junction pressure" for 
-  ; the scattering junction of 8 lossless waveguides
-  ; of equal characteristic impedance. If you wish to
-  ; add more delay lines, simply add them to the following 
-  ; equation, and replace the .25 by 2/N, where N is the 
-  ; number of delay lines.
-  apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
-  
-  
-  adum1   delayr  1
-  adel1   deltapi idel1 + k1 * ipitchmod
-          delayw  ga1 + apj - afilt1
-  
-  adum2   delayr  1
-  adel2   deltapi idel2 + k2 * ipitchmod
-          delayw  ga1 + apj - afilt2
-  
-  adum3   delayr  1
-  adel3   deltapi idel3 + k3 * ipitchmod
-          delayw  ga1 + apj - afilt3
-  
-  adum4   delayr  1
-  adel4   deltapi idel4 + k4 * ipitchmod
-          delayw  ga1 + apj - afilt4
-  
-  adum5   delayr  1
-  adel5   deltapi idel5 + k5 * ipitchmod
-          delayw  ga1 + apj - afilt5
-  
-  adum6   delayr  1
-  adel6   deltapi idel6 + k6 * ipitchmod
-          delayw  ga1 + apj - afilt6
-  
-  adum7   delayr  1
-  adel7   deltapi idel7 + k7 * ipitchmod
-          delayw  ga1 + apj - afilt7
-  
-  adum8   delayr  1
-  adel8   deltapi idel8 + k8 * ipitchmod
-          delayw  ga1 + apj - afilt8
-  
-  ; 1st order lowpass filters in feedback
-  ; loops of delay lines.
-  afilt1  tone    adel1 * igain, itone
-  afilt2  tone    adel2 * igain, itone
-  afilt3  tone    adel3 * igain, itone
-  afilt4  tone    adel4 * igain, itone
-  afilt5  tone    adel5 * igain, itone
-  afilt6  tone    adel6 * igain, itone
-  afilt7  tone    adel7 * igain, itone
-  afilt8  tone    adel8 * igain, itone
-  
-  ; The outputs of the delay lines are summed
-  ; and sent to the stereo outputs. This could
-  ; easily be modified for a 4 or 8-channel 
-  ; sound system.
-  aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
-  aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
-  ;outs    aout1, aout2
-  ; To the output mixer
-  zawm aout1, 5
-  zawm aout2, 6
-  ga1 = 0
-endin
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Output mixer
-; It applies a bass enhancement, compression and fadeout
-; to the whole piece,
-instr 30	;Mixer
-  ; Read input from zak
-  a1  zar 5
-  a2  zar 6
-  ; Bass enhancement
-  al1 butterlp a1, 100
-  al2 butterlp a2, 100
-  a1 = al1*1.5 +a1
-  a2 = al2*1.5 +a2 
-
-  ; Global amplitude shape
-  ; It applies a gain of p4 to the whole piece, and creates a
-  ; fadeout the last p5 seconds
-  kenv   linseg  p4, p3-p5, p4, p5, 0 
-  a1=a1*kenv
-  a2=a2*kenv 
-  
-  ; Compression
-  a1 dam a1, 5000, 0.5, 1, 0.2, 0.1  
-  a2 dam a2, 5000, 0.5, 1, 0.2, 0.1  
-  
-  outs a1, a2
-  zacl 0, 10
-endin
-
diff --git a/externals/frankenstein/chord_melo.c b/externals/frankenstein/chord_melo.c
deleted file mode 100644
index 975b6534a..000000000
--- a/externals/frankenstein/chord_melo.c
+++ /dev/null
@@ -1,1137 +0,0 @@
-/* 
-BUGS:
-- I had to comment out arrays re-display because it crashed my pd
-- sometimes dest_played gets filled with junk
-
-TODO:
-- now rests can't be used! change chord_melo_seq_max_min
-*/
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-#include "m_pd.h"
-
-#define BUFFER_LENGHT 16 // lunghezza dei buffers (quanti elementi nel pattern)
-#define MAX_POPULATION 500
-#define CHOIR 20
-#define NOTES 128 // how many notes can I use ? MIDI !
#define MAX_OCTAVES 3
-
-#define DEF_PROB_CROSSOVER 0.9f
-#define DEF_PROB_MUTATION 0.03f
-#define REINSERT_SRC 2 // quanti reinserisco ad ogni ciclo usando il ritmo src
-#define REINSERT_LAST 0 // quanti reinserisco ad ogni ciclo usando l'ultimo ritmo scelto
-
-#define DEBUG 1 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-static t_class *chord_melo_class;
-
-// 1 gene of the genome
-typedef struct _chord_melo_gene
-{
-	int chord_note; // 0-12
-	int passing_note; // from -4 to +4
-	int played; // 0 / 1
-} chord_melo_gene;
-
-// an interval between 2 genes
-typedef struct _chord_melo_interval
-{
-	int direction; // -1/0/1 
-	int chord_note; // 0-12
-	int passing_note; // from -4 to +4
-} chord_melo_interval;
-
-typedef struct _chord_melo_critic
-{
-	double interval[12][9];
-} chord_melo_critic;
-
-// return the interval between 2 genes
-chord_melo_interval chord_melo_Getchord_melo_interval(chord_melo_gene *g1, chord_melo_gene *g2)
-{
-	int note1, note2;
-	chord_melo_interval res;
-	if (g1->chord_note < g2->chord_note)
-	{
-		// ascending
-		res.direction = 1;
-	} else if (g1->chord_note > g2->chord_note)
-	{
-		// descending
-		res.direction = -1;
-	} else if (g1->passing_note == g2->passing_note)
-	{
-		// unison
-		res.direction = 0;		
-	} else
-	{
-		// passing note
-		if (g1->passing_note < g2->passing_note)
-		{
-			// ascending
-			res.direction = 1;
-		} else
-		{
-			// descending
-			res.direction = -1;
-		}
-	}
-	res.chord_note = g1->chord_note - g2->chord_note;
-	res.passing_note = g2->passing_note - g1->passing_note;
-	return res;
-}
-
-// fills an array of intervals with the transition in a genome
-void chord_melo_transitions(chord_melo_interval *res, chord_melo_gene *src)
-{
-	int i;
-	//chord_melo_gene *last;
-	//last = &src[0];
-	for (i=1;i<BUFFER_LENGHT;i++)
-	{
-		res[i-1] = chord_melo_Getchord_melo_interval(&src[i-1], &src[i]);
-		//last = &src[i];		
-	}
-}
-
-// fills an array of integers to design the shape of a genome
-// -1 = descending, 0=unisone, 1=ascending
-void chord_melo_shape(int *res, chord_melo_gene *src)
-{
-	int i, tmp;
-	chord_melo_gene *last;
-	last = &src[0];
-	for (i=1;i<BUFFER_LENGHT;i++)
-	{
-		tmp = chord_melo_Getchord_melo_interval(last, &src[i]).chord_note;
-		if (tmp == 0)
-		{
-			tmp = chord_melo_Getchord_melo_interval(last, &src[i]).passing_note;
-			if (abs(tmp) > 1)
-				tmp = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		}
-		//res[i-1] = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		res[i-1] = tmp;
-		last = &src[i];
-	}
-	if (DEBUG_VERBOSE)
-		post("shape: %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
-		res[0], res[1],res[2],res[3],res[4],res[5],res[6],res[7],res[8],res[9],
-		res[10],res[11],res[12],res[13],res[14]);
-
-}
-
-// fills a 4 gene long array with a sequence
-// starting - max/min - max/min - ending
-void chord_melo_seq_max_min(chord_melo_gene *seq,  chord_melo_gene *src)
-{
-	// return a 4 gene seq: 
-	// seq[0] = starting
-	// seq[1] = min/max
-	// seq[2] = min/max
-	// seq[3] = end
-	int i;
-	int min_pos=0;
-	int max_pos=0;
-	int first_pos=0;
-	int last_pos=0;
-	chord_melo_interval interv;
-	chord_melo_gene curr_min = src[0];
-	chord_melo_gene curr_max = src[0];
-	for (i=1;i<BUFFER_LENGHT;i++)
-	{
-		// look for first
-		//TODO
-		// look for last
-		//TODO
-		// look for min
-		interv = chord_melo_Getchord_melo_interval(&curr_min, &src[i]);
-		if (interv.direction < 0)
-		{
-			min_pos = i;
-			curr_min = src[i];
-		}
-		// look for max
-		interv = chord_melo_Getchord_melo_interval(&curr_max, &src[i]);
-		if (interv.direction > 0)
-		{
-			max_pos = i;
-			curr_max = src[i];
-		}
-	}
-	seq[0] = src[0];
-	seq[3] = src[BUFFER_LENGHT-1];
-	if (min_pos<max_pos)
-	{
-		seq[1] = src[min_pos];
-		seq[2] = src[max_pos];
-	} else
-	{
-		seq[2] = src[min_pos];
-		seq[1] = src[max_pos];
-	}
-
-
-}
-
-// return the shape of the min/max sequence
-void chord_melo_higher_shape(int *res, chord_melo_gene *src)
-{
-	int i, tmp;
-	chord_melo_gene *last;
-	chord_melo_gene seq[4];
-	// i get the max min sequence
-	chord_melo_seq_max_min(seq, src);
-	last = &seq[0];
-	for (i=1;i<4;i++)
-	{
-		tmp = chord_melo_Getchord_melo_interval(last, &src[i]).chord_note;
-		if (tmp == 0)
-		{
-			tmp = chord_melo_Getchord_melo_interval(last, &src[i]).passing_note;
-			if (abs(tmp) > 1)
-				tmp = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		}
-		//res[i-1] = chord_melo_Getchord_melo_interval(last, &src[i]).direction;
-		res[i-1] = tmp;
-
-		//res[i-1] = chord_melo_Getchord_melo_interval(last, &seq[i]).direction;
-		last = &seq[i];
-	}
-
-	if (DEBUG_VERBOSE)
-		post("higher shape: %i %i %i %i",
-		res[0], res[1],res[2],res[3]);
-}
-
-typedef struct _chord_melo
-{
-    t_object x_obj; // myself
-    t_symbol *x_arrayname_src_note; // where i read the current pattern
-    t_symbol *x_arrayname_src_octave; // where i read the current pattern
-    t_symbol *x_arrayname_src_passing; // where i read the current pattern
-	t_symbol *x_arrayname_src_played; // where i read the current pattern
-    t_symbol *x_arrayname_dest_note; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_octave; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_passing; // where i put the computed pattern
-	t_symbol *x_arrayname_dest_played;
-	// tutti gli indici vanno da 0 a 1;
-	float indice_fitness1;
-	float indice_fitness2;
-	float indice_fitness3;
-	// la popolazione array di cromosomi
-	chord_melo_gene population[MAX_POPULATION][BUFFER_LENGHT];
-	float prob_crossover;
-	float prob_mutation;
-	chord_melo_gene last[BUFFER_LENGHT];
-	chord_melo_gene last_src[BUFFER_LENGHT];
-	int init;
-	t_float *vecsrc_note;
-	t_float *vecsrc_octave;
-	t_float *vecsrc_passing;
-	t_float *vecsrc_played;
-	t_float *vecdest_note;
-	t_float *vecdest_octave;
-	t_float *vecdest_passing;
-	t_float *vecdest_played;
-	int tables_loaded;
-
-} t_chord_melo;
-
-
-// i use pointers to return more than 1 object at a time
-void chord_melo_gene2note(chord_melo_gene thisgene, 
-									 unsigned int *octave, 
-									 unsigned int *note, 
-									 int *alteration, 
-									 unsigned int *played)
-{
-	*octave = thisgene.chord_note / 3;
-	*note = thisgene.chord_note % 3;
-	*alteration = thisgene.passing_note;
-	*played = thisgene.played;
-}
-
-// passing note as a value between 0 and 2 (with octave)
-chord_melo_gene chord_melo_note2gene(unsigned int octave,
-											  unsigned int note,
-											  int alteration,
-											  unsigned int played)
-{
-	chord_melo_gene ris;
-	ris.chord_note = note + 3*octave;
-	ris.passing_note = alteration;
-	ris.played = played;
-	return ris;
-}
-
-// passing note as a value 0-12 (without octave)
-chord_melo_gene chord_melo_note2geneB(unsigned int note,
-											  int alteration,
-											  unsigned int played)
-{
-	chord_melo_gene ris;
-	ris.chord_note = note;
-	ris.passing_note = alteration;
-	ris.played = played;
-	return ris;
-}
-
-// returns next passing note from src in the wanted direction, both chromatic or diatonic
-chord_melo_gene chord_melo_get_next_passing(chord_melo_gene *src, int direction, int chromatic)
-{
-	int new_note;
-	int new_octave;
-	int new_passing;
-	int origine_nota;
-	int origine_ottava;
-	int origine_passaggio;
-	chord_melo_gene res;
-	origine_nota = src->chord_note % 3;
-	origine_ottava = src->chord_note / 3;
-	origine_passaggio = src->passing_note;
-	if (chromatic)
-	{
-		if (direction < 0)
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio - 1;
-		} else
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio + 1;
-		}
-	} else
-	{
-		// diatonic
-		if (direction < 0)
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio - 2;
-		} else
-		{
-			new_octave = origine_ottava;
-			new_note = origine_nota;
-			new_passing = origine_passaggio + 2;
-		}
-	}
-	// check notes
-	if ((new_passing < -4 )&&(new_note==0))
-	{
-		new_passing += 5;
-		new_note = 2;
-		new_octave -= 1;
-	}
-	if ((new_passing < -3 )&&(new_note>0))
-	{
-		new_passing += 4;
-		new_note -= 1;
-	}
-	if ((new_passing > 4 )&&(new_note==2))
-	{
-		new_passing -= 5;
-		new_note = 0;
-		new_octave += 1;
-	}
-	if ((new_passing > 3 )&&(new_note<2))
-	{
-		new_passing -= 4;
-		new_note += 1;
-	}
-	if (new_octave < 0)
-		new_octave=0;
-
-	if (new_octave > 2)
-		new_octave=2;
-
-//	if (new_octave > MAX_OCTAVES)
-//		new_octave=MAX_OCTAVES;
-
-	res = chord_melo_note2gene(new_octave, new_note, new_passing, 1);
-	return res;
-}
-
-void chord_melo_fill_critic(chord_melo_critic *critic, chord_melo_gene *src)
-{
-	int i, j;
-	chord_melo_interval intervalli[BUFFER_LENGHT-1];
-	for (i=0; i<12; i++)
-	{
-		for (j=0; j<9; j++)
-		{
-			critic->interval[i][j]=0;
-		}
-	}
-	chord_melo_transitions(intervalli, src);
-	for (i=0; i<(BUFFER_LENGHT-1); i++)
-	{
-		if (critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] < 0)
-					critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] = 0;
-		critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] = 
-			critic->interval[intervalli[i].chord_note][intervalli[i].passing_note] +1;
-	}
-}
-
-double chord_melo_Todd_fitness1(chord_melo_critic *woman, chord_melo_gene *man)
-{
-	
-	int i, j, res;
-	chord_melo_interval intervalli[BUFFER_LENGHT-1];
-	chord_melo_transitions(intervalli, man);
-	res = 0;
-	for (i=0; i<(BUFFER_LENGHT-1); i++)
-	{
-		res += woman->interval[intervalli[i].chord_note][intervalli[i].passing_note];
-	}
-	
-	return res;
-}
-
-// fitness functions over higher shape
-double chord_melo_fitness1(chord_melo_gene *woman, chord_melo_gene *man)
-{
-	int i, res;
-	int hi_shape1[4];
-	int hi_shape2[4];
-	chord_melo_higher_shape(hi_shape1, woman);
-	chord_melo_higher_shape(hi_shape2, man);
-	res = 0;
-	for (i=0; i<4; i++)
-	{
-		if (hi_shape1[i] * hi_shape2[i]>=0)
-		{
-			// same direction
-			res += 12 - abs(hi_shape2[i] - hi_shape1[i]);
-		} else if (hi_shape1[i] * hi_shape2[i]==0)
-		{
-			// one voice moving, the other no
-		} else
-		{
-			// opposite direction
-			res -= 5;
-		}
-	}
-
-	return res;
-}
-
-// fitness functions over punctual shape
-double chord_melo_fitness2(chord_melo_gene *woman, chord_melo_gene *man)
-{
-	int i, res;
-	int shape1[BUFFER_LENGHT-1];
-	int shape2[BUFFER_LENGHT-1];
-	chord_melo_shape(shape1, woman);
-	chord_melo_shape(shape2, man);
-	res = 0;
-	for (i=0; i<4; i++)
-	{
-		if (shape1[i] * shape2[i]>=0)
-		{
-			// same direction
-			res += 12 - abs(shape2[i] - shape1[i]);
-		} else if (shape1[i] * shape2[i]==0)
-		{
-			// one voice moving, the other no
-		} else
-		{
-			// opposite direction
-			res -= 5;
-		}
-	}
-	return res;
-}
-
-
-void chord_melo_create_child(t_chord_melo *x, chord_melo_gene *woman, chord_melo_gene *man, chord_melo_gene *child)
-{
-		double rnd, rnd2;
-		int split, i, j, tmp, direction;
-		// crossover
-		rnd = rand()/((double)RAND_MAX + 1);
-		if (rnd < x->prob_crossover)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-
-				// vertical split
-				//split =(int) ( rnd * BUFFER_LENGHT); // da 0 a MAX_POPULATION
-				split = rand() % BUFFER_LENGHT;
-				for (i=0; i< split; i++)
-				{
-					child[i] = woman[i];
-				}
-				for (i=split; i<BUFFER_LENGHT; i++)
-				{
-					child[i] = man[i];
-				}
-		}else
-		{
-			for (i=0; i< BUFFER_LENGHT; i++)
-			{
-				child[i] = woman[i];
-			}
-		}
-		// mutation
-		
-		for (i=0; i< BUFFER_LENGHT; i++)
-		{
-			rnd = rand()/((double)RAND_MAX + 1);
-			if (rnd < x->prob_mutation)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < 0.4)
-				{
-					int prec=6;
-					int tmp_oct;
-					int tmp_note;
-					int tmp_alt;
-					int tmp_played;
-					int interval;
-					// new chord note
-					int nuovanota = 0;
-					int nuovaplayed=0;
-					if (i>0)
-					{
-						chord_melo_gene2note(child[i-1], &tmp_oct, &tmp_note, &tmp_alt, &tmp_played);
-						prec = 3*tmp_oct + tmp_note;
-						rnd2 = rand()/((double)RAND_MAX + 1);
-						if (rnd2 < 0.3)
-							interval = 1;
-						else if (rnd2 < 0.6)
-							interval = 2;
-						else if (rnd2 < 0.8)
-							interval = 3;
-						else if (rnd2 < 0.9)
-							interval = 4;
-//						else if (rnd2 < 0.95)
-//							interval = 5;
-//						else if (rnd2 < 0.99)
-//							interval = 6;
-//						else 
-//							interval = 7;
-						rnd2 = rand()/((double)RAND_MAX + 1);
-						if (rnd2 < 0.5)
-							interval *= -1;
-
-						nuovanota = prec + interval;
-
-					} else
-					{
-						rnd2 = rand()/((double)RAND_MAX + 1);
-						nuovanota = rnd2 * 12;
-					}
-					child[i] = chord_melo_note2gene(nuovanota / 3, nuovanota % 3, 0, 1);
-				} else if (rnd < 0.8)
-				{
-					// diatonic passing note
-					if (i>0)
-					{
-						if (child[i-1].passing_note == 0)
-						{
-							// only diatonic passing note if i come from a chord note!
-							rnd2 = rand()/((double)RAND_MAX + 1);
-							if (rnd2 < 0.5)
-								direction = -1;
-							else
-								direction = 1;
-							child[i] = chord_melo_get_next_passing(&child[i-1], direction, 0);
-							// resolve passing note
-							if (i<(BUFFER_LENGHT-1))
-								child[i+1] = chord_melo_get_next_passing(&child[i], direction, 0);
-							// shall I go on?
-							if ((i<(BUFFER_LENGHT-2)) && 
-								((child[i-1].chord_note==2 && direction==1)||
-								(child[i-1].chord_note==0 && direction==-1)))
-							{
-								child[i+2] = chord_melo_get_next_passing(&child[i+1], direction, 0);
-							}
-								
-						}
-					}
-				} else
-				{
-					// chromatic passing note
-						if (child[i-1].passing_note == 0)
-						{
-							// only diatonic passing note if i come from a chord note!
-							rnd2 = rand()/((double)RAND_MAX + 1);
-							if (rnd2 < 0.5)
-								direction = -1;
-							else
-								direction = 1;
-							child[i] = chord_melo_get_next_passing(&child[i-1], direction, 1);
-							// resolve passing note
-							if (i<(BUFFER_LENGHT-1))
-								child[i+1] = chord_melo_get_next_passing(&child[i], direction, 1);
-							// shall I go on?
-							if ((i<(BUFFER_LENGHT-2)) && 
-								((child[i-1].chord_note==2 && direction==1)||
-								(child[i-1].chord_note==0 && direction==-1)))
-							{
-								child[i+2] = chord_melo_get_next_passing(&child[i+1], direction, 1);
-							}
-								
-						}
-				}
-				
-			}
-		}
-		
-
-		
-
-
-}
-
-
-
-// -----------------  normal external code ...
-
-
-void chord_melo_init_pop(t_chord_melo *x)
-{
-	int i, j, tmp, tmp2, k;
-	double rnd;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		for (j=0; j<BUFFER_LENGHT; j++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//tmp = rnd * NOTES;
-			tmp = rand() % NOTES;
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//tmp2 = rnd * 12;
-			tmp2 = rand() % 12;
-			x->population[i][j] = chord_melo_note2gene(tmp2 / 3, tmp2 % 3, 0, 1);
-
-		}
-
-	}
-}
-
-
-void chord_melo_init_pop2(t_chord_melo *x)
-{
-	int i, j, tmp, tmp2, k;
-	double rnd;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		rnd = rand()/((double)RAND_MAX + 1);
-		//if (rnd > 0.5)
-		if (rnd > 1)
-		{
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				//rnd = rand()/((double)RAND_MAX + 1);
-				//tmp = rnd * NOTES;
-				tmp = rand() % NOTES;
-				//rnd = rand()/((double)RAND_MAX + 1);
-				//tmp2 = rnd * 12;
-				tmp2 = rand() % 12;
-				x->population[i][j] = chord_melo_note2gene(tmp2 / 3, tmp2 % 3, 0, 1);
-
-			}
-		} else
-		{
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[i][j] = x->last_src[j];
-			}
-
-		}
-
-	}
-
-	for (j=0; j<BUFFER_LENGHT; j++)
-	{
-		x->last[j] = x->last_src[j];
-		if (DEBUG)
-			post("init last[%] chord_note=%i passing_note=%i played=%i", j,
-			x->last[j].chord_note, x->last[j].passing_note, x->last[j].played);
-	//	x->last[j] = x->population[0][j];
-	//	x->last[i] = chord_melo_note2gene(1,1,0,1);
-	}
-
-	x->init=1;
-
-}
-
-
-void chord_melo_init_buf(t_float *buf)
-{
-	int i;
-	for (i=0; i<sizeof(buf); i++)
-	{
-		buf[i] = 0;
-	}
-}
-
-void chord_melo_allocate_buffers(t_chord_melo *x)
-{
-//	x->buf_strum1 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf_strum2 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	chord_melo_init_buf(x->buf_strum1);
-//	chord_melo_init_buf(x->buf_strum2);
-	
-}
-
-void chord_melo_free(t_chord_melo *x)
-{
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-}
-
-
-void chord_melo_get_tables(t_chord_melo *x) {
-
-	t_garray *arysrc_note;
-	t_garray *arysrc_octave;
-	t_garray *arysrc_passing;
-	t_garray *arysrc_played;
-	t_garray *arydest_note;
-	t_garray *arydest_octave;
-	t_garray *arydest_passing;
-	t_garray *arydest_played;
-
-	int vecsize;
-	
-		// load tables
-
-	if (!(arysrc_note = (t_garray *)pd_findbyclass(x->x_arrayname_src_note, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_note->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_note, &vecsize, &(x->vecsrc_note)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_note->s_name);
-	}
-		else if (!(arysrc_octave = (t_garray *)pd_findbyclass(x->x_arrayname_src_octave, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_octave->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_octave, &vecsize, &(x->vecsrc_octave)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_octave->s_name);
-	}
-		else if (!(arysrc_passing = (t_garray *)pd_findbyclass(x->x_arrayname_src_passing, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_passing->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_passing, &vecsize, &(x->vecsrc_passing)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_passing->s_name);
-	}
-	else if (!(arysrc_played = (t_garray *)pd_findbyclass(x->x_arrayname_src_played, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src_played->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc_played, &vecsize, &(x->vecsrc_played)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_played->s_name);
-	}
-	  else 	if (!(arydest_note = (t_garray *)pd_findbyclass(x->x_arrayname_dest_note, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_note->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_note, &vecsize, &(x->vecdest_note)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_note->s_name);
-	} 
-	else 	if (!(arydest_octave = (t_garray *)pd_findbyclass(x->x_arrayname_dest_octave, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_octave->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_octave, &vecsize, &(x->vecdest_octave)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_octave->s_name);
-	} 
-	else 	if (!(arydest_passing = (t_garray *)pd_findbyclass(x->x_arrayname_dest_passing, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_passing->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_passing, &vecsize, &(x->vecdest_passing)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_note->s_name);
-	}
-	 else 	if (!(arydest_played = (t_garray *)pd_findbyclass(x->x_arrayname_dest_played, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest_played->s_name);
-	}
-    else if (!garray_getfloatarray(arydest_played, &vecsize, &(x->vecdest_played)))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest_played->s_name);
-	}
-	else // I got arrays and data
-	{
-		// tutto ok
-		x->tables_loaded=1;
-	}
-}
-
-static void chord_melo_bang(t_chord_melo *x) {
-
-	int i, j, vecsize, ntot, tmp, me;
-	float prob, variatore;
-	
-	double rnd;
-	int winner;
-	double winner_fitness;
-	double average_fitness;
-	chord_melo_gene src_genome[BUFFER_LENGHT];
-	chord_melo_gene figli[MAX_POPULATION][BUFFER_LENGHT];
-
-	//chord_melo_critic src_critic;
-	chord_melo_critic last_critic;
-
-	if (x->tables_loaded == 0)
-	{
-		chord_melo_get_tables(x);
-	}
-	else // I got arrays and data
-	{
-		if (DEBUG)
-			post("--------- starting process");
-
-		if (DEBUG)
-			post("building genome for the src melody:");
-
-		srand((unsigned int)time((time_t *)NULL));
-
-		// get src's genome
-		for (i=0; i<BUFFER_LENGHT; i++)
-		{
-			src_genome[i] = chord_melo_note2gene(x->vecsrc_octave[i],
-				x->vecsrc_note[i], x->vecsrc_passing[i], x->vecsrc_played[i]);
-			x->last_src[i] = src_genome[i];
-			//post("src melody: vecsrc_octave[i]=%f,vecsrc_note[i]=%f,vecsrc_passing[i]=%f", 
-			//	vecsrc_octave[i], vecsrc_note[i], vecsrc_passing[i]);
-
-		}
-	//return;
-
-		if (x->init==0)
-			return;
-
-		// uccido a caso REINSERT_SRC elementi e inserisco il ritmo src al loro posto
-		for (i=0; i<REINSERT_SRC; i++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me = (int) (rnd * MAX_POPULATION);
-			me = rand() % MAX_POPULATION;
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j]=src_genome[j];
-			}
-		}
-		
-		//return;
-
-		// uccido a caso REINSERT_LAST elementi e inserisco il last al loro posto
-		for (i=0; i<REINSERT_LAST; i++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me = (int) (rnd * MAX_POPULATION);
-			me = rand() % MAX_POPULATION;
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j]=x->last[j];
-			}
-		}
-
-		// metà sono donne, prese a caso
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			//chord_melo_critic this_chord_melo_critic;
-			int winner=0;
-			double winner_value=0;
-			int men[CHOIR];
-			chord_melo_gene figlio[BUFFER_LENGHT];
-			double fitness1[CHOIR];
-			double fitness2[CHOIR];
-			double fitness3[CHOIR];
-			double fitnessTOT[CHOIR];
-			double fitnessTodd1[CHOIR];
-			chord_melo_critic woman_critic;
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			me = rand() % MAX_POPULATION;
-			// me è la donna che valuta gli uomini
-			
-			if (DEBUG_VERBOSE)
-				post("woman %i = %i %i %i %i", me, x->population[me][0], x->population[me][1], x->population[me][2], x->population[me][3]);
-
-			chord_melo_fill_critic(&woman_critic, x->population[me]);
-			
-			for (j=0; j<CHOIR; j++)
-			{
-				//rnd = rand()/((double)RAND_MAX + 1);
-				//tmp =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-				tmp = rand() % MAX_POPULATION;
-				// tmp è questo uomo
-				men[j] = tmp;
-				if (DEBUG_VERBOSE)
-					post("i will evaluate man %i", tmp);
-				fitness1[j]=chord_melo_fitness1(x->population[me], x->population[tmp]);
-				fitness2[j]=chord_melo_fitness2(x->population[me], x->population[tmp]);
-				fitnessTodd1[j]=chord_melo_Todd_fitness1(&woman_critic, x->population[tmp]);
-				fitnessTOT[j]=fitness1[j] * (x->indice_fitness1)
-					+ fitness2[j] * (x->indice_fitness2)
-					+ fitnessTodd1[j] * (x->indice_fitness3);
-				if (DEBUG_VERBOSE)
-					post("man %i has fitness %i", tmp, fitnessTOT[j]);
-				if (winner_value <= fitnessTOT[j])
-				{
-					winner = tmp;
-					winner_value = fitnessTOT[j];
-				}
-			}
-			// winner è il maschio migliore nel coro
-			if (DEBUG_VERBOSE)
-				post("ho scelto il maschio %i con fitness %i", winner, winner_value);
-			// chord_melo_genero un figlio
-			chord_melo_create_child(x, x->population[me], x->population[winner], figlio);
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				figli[i][j] = figlio[j];
-			}
-		}
-
-		// uccido a caso metà popolazione e ci metto i nuovi nati
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			//rnd = rand()/((double)RAND_MAX + 1);
-			//me =(int) ( rnd * MAX_POPULATION); // da 0 a MAX_POPULATION
-			me = rand() % MAX_POPULATION;
-			// me è chi deve morire
-
-			for (j=0; j<BUFFER_LENGHT; j++)
-			{
-				x->population[me][j] = figli[i][j];
-			}
-		}
-
-		// prendo il più adatto rispetto all'ultimo ritmo suonato
-		winner = 0;
-		winner_fitness = 0;
-		average_fitness = 0;
-		
-		//chord_melo_fill_critic(&src_critic, src_genome);
-		chord_melo_fill_critic(&last_critic, x->last);
-
-		for(i=0; i<MAX_POPULATION; i++)
-		{
-			double tmp1, tmp2, tmp3, tmpTOT, fitnessTodd1;
-			//tmp1 = chord_melo_fitness1(src_genome, x->population[i]);
-			//tmp2 = chord_melo_fitness2(src_genome, x->population[i]);
-			//fitnessTodd1=chord_melo_Todd_fitness1(&src_critic, x->population[i]);
-			tmp1 = chord_melo_fitness1(x->last, x->population[i]);
-			tmp2 = chord_melo_fitness2(x->last, x->population[i]);
-			fitnessTodd1=chord_melo_Todd_fitness1(&last_critic, x->population[i]);
-			tmpTOT = tmp1 * (x->indice_fitness1) + 
-				tmp2 * (x->indice_fitness2) + 
-				fitnessTodd1 * (x->indice_fitness3);
-
-			//post("%i fitness = %i", i, tmpTOT);
-			
-			if (tmpTOT >= winner_fitness)
-			{
-				winner_fitness = tmpTOT;
-				winner = i;
-			}
-			average_fitness += tmpTOT;
-		}
-		average_fitness = average_fitness / MAX_POPULATION;
-
-		if (DEBUG)
-			post("winner is number %i with fitness=%d, average fitness = %d", winner, winner_fitness, average_fitness); 
-			
-		for (i=0; i<BUFFER_LENGHT; i++)
-		{
-			int note, played, octave, passing;
-			// copio il vincitore in x->last
-			x->last[i] = x->population[winner][i];
-			// scrivo i buffer in uscita
-			chord_melo_gene2note(x->population[winner][i],
-				&octave, &note, &passing, &played);
-			x->vecdest_note[i]=note;				
-			x->vecdest_octave[i]=octave;				
-			x->vecdest_passing[i]=passing;				
-			x->vecdest_played[i]=(played > 0 ? 1 : 0);
-			if (DEBUG)
-				post("winner[%i] chord_note=%i, octave=%i, passing=%i, played=%i",
-				i, note, octave, passing, played);
-		}
-
-		//return;
-
-		// redraw the arrays
-/*		garray_redraw(arydest_note);
-		garray_redraw(arydest_octave);
-		garray_redraw(arydest_passing);
-		garray_redraw(arydest_played);
-*/
-
-	}
-}
-
-void chord_melo_src_note(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_note = s;
-}
-
-void chord_melo_src_octave(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_octave = s;
-}
-
-void chord_melo_src_passing(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_passing = s;
-}
-
-void chord_melo_src_played(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_src_played = s;
-}
-
-void chord_melo_dest_note(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_note = s;
-}
-
-void chord_melo_dest_octave(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_octave = s;
-}
-
-void chord_melo_dest_passing(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_passing = s;
-}
-
-void chord_melo_dest_played(t_chord_melo *x, t_symbol *s) {
-    x->x_arrayname_dest_played = s;
-}
-
-
-void chord_melo_fitness1_set(t_chord_melo *x, t_floatarg f)
-{
-  x->indice_fitness1 = f;
- }
-
-void chord_melo_fitness2_set(t_chord_melo *x, t_floatarg f)
-{
-  x->indice_fitness2 = f;
-}
-
-void chord_melo_fitness3_set(t_chord_melo *x, t_floatarg f)
-{
-  x->indice_fitness3 = f;
-}
-
-void chord_melo_crossover_set(t_chord_melo *x, t_floatarg f)
-{
-  x->prob_crossover = f;
-}
-
-void chord_melo_mutation_set(t_chord_melo *x, t_floatarg f)
-{
-  x->prob_mutation = f;
-}
-
-/*
-void chord_melo_init(t_chord_melo *x, t_symbol *s) {
-	chord_melo_init_pop2(x);
-}
-*/
-
-void *chord_melo_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_chord_melo *x = (t_chord_melo *)pd_new(chord_melo_class);
-	chord_melo_allocate_buffers(x);
-	chord_melo_init_pop(x);
-	// inizializzo gli indici
-	x->indice_fitness1=0;
-	x->indice_fitness2=0;
-	x->indice_fitness3=0;
-	x->prob_crossover = DEF_PROB_CROSSOVER;
-	x->prob_mutation = DEF_PROB_MUTATION;
-	x->init=0;
-	x->tables_loaded=0;
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		x->last[i] = chord_melo_note2gene(1,0,0,1);
-	}
-	srand(time(&a));
-
-	if (argc>0) 
-	{
-		x->x_arrayname_src_note = atom_getsymbolarg(0, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_note=%s",x->x_arrayname_src_note->s_name); 
-	} 
-	if (argc>1) 
-	{
-		x->x_arrayname_src_octave = atom_getsymbolarg(1, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_octave=%s",x->x_arrayname_src_octave->s_name); 
-	} 
-	if (argc>2) 
-	{
-		x->x_arrayname_src_passing = atom_getsymbolarg(2, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_passing=%s",x->x_arrayname_src_passing->s_name); 
-	}
-	if (argc>3) 
-	{
-		x->x_arrayname_src_played = atom_getsymbolarg(3, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_src_played=%s",x->x_arrayname_src_played->s_name); 
-	} 
-	if (argc>4) 
-	{
-		x->x_arrayname_dest_note = atom_getsymbolarg(4, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_note=%s",x->x_arrayname_dest_note->s_name); 
-	}
-	if (argc>5) 
-	{
-		x->x_arrayname_dest_octave = atom_getsymbolarg(5, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_octave=%s",x->x_arrayname_dest_octave->s_name); 
-	}
-	if (argc>6) 
-	{
-		x->x_arrayname_dest_passing = atom_getsymbolarg(6, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_passing=%s",x->x_arrayname_dest_passing->s_name); 
-	}
-	if (argc>7) 
-	{
-		x->x_arrayname_dest_played = atom_getsymbolarg(7, argc, argv);
-		if (DEBUG)
-			post("x->x_arrayname_dest_played=%s",x->x_arrayname_dest_played->s_name); 
-	}
-    return (x);
-}
-
-void chord_melo_setup(void)
-{
-    chord_melo_class = class_new(gensym("chord_melo"), (t_newmethod)chord_melo_new,
-        (t_method)chord_melo_free, sizeof(t_chord_melo), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(chord_melo_class, (t_method)chord_melo_bang);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_src_note, gensym("src_note"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_src_octave, gensym("src_octave"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_src_passing, gensym("src_passing"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_src_played, gensym("src_played"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_dest_note, gensym("dest_note"),A_SYMBOL, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_dest_octave, gensym("dest_octave"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_dest_passing, gensym("dest_passing"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_dest_played, gensym("dest_played"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_fitness1_set, gensym("fitness1"), A_DEFFLOAT, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_fitness2_set, gensym("fitness2"), A_DEFFLOAT, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_fitness3_set, gensym("fitness3"), A_DEFFLOAT, 0);
-    class_addmethod(chord_melo_class, (t_method)chord_melo_init_pop2, gensym("init"),A_SYMBOL, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_mutation_set, gensym("mutation"), A_DEFFLOAT, 0);
-	class_addmethod(chord_melo_class, (t_method)chord_melo_crossover_set, gensym("crossover"), A_DEFFLOAT, 0);
-
-}
diff --git a/externals/frankenstein/chord_melo_test3.pd b/externals/frankenstein/chord_melo_test3.pd
deleted file mode 100644
index 4b5185a06..000000000
--- a/externals/frankenstein/chord_melo_test3.pd
+++ /dev/null
@@ -1,630 +0,0 @@
-#N canvas 204 24 1015 713 12;
-#X obj 620 131 metro;
-#N canvas 1 23 466 316 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 684 102 pd msecs;
-#X obj 683 28 loadbang;
-#X obj 620 108 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#N canvas 0 22 498 348 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 0;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 empty empty 1/4 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 0;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 379 92 graph;
-#X floatatom 706 127 5 0 0 0 - - -;
-#X obj 632 169 delay;
-#X obj 667 148 / 2;
-#X text 296 172 this delay is to center the quantization;
-#X obj 685 78 nbx 5 14 30 1000 0 0 empty empty empty 0 -6 0 10 -258699
--1 -1 120 256;
-#X text 29 30 test1: detect rhythmic pattern and proposes a counterpoint
-;
-#N canvas 0 22 458 308 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 fitness1 \$1;
-#X msg 136 74 fitness2 \$1;
-#X msg 231 133 fitness3 \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 713 532 pd valori;
-#X obj 713 378 vsl 15 128 0 1 0 0 empty empty 1st 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 760 380 vsl 15 128 0 1 0 0 empty empty 2nd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 800 383 vsl 15 128 0 1 0 0 empty empty 3rd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X floatatom 700 515 5 0 0 0 - - -;
-#X floatatom 750 513 5 0 0 0 - - -;
-#X floatatom 800 522 5 0 0 0 - - -;
-#X obj 719 49 s sampleinit;
-#X obj 726 294 loadbang;
-#N canvas 105 213 716 372 initMelody 0;
-#X obj 79 28 loadbang;
-#X msg 18 132 \; src_played const 1 \;;
-#X msg 29 261 \; src_passing const 0 \;;
-#X msg 260 69 \; src_note 0 0 1 2 2 1 1 0 0 0 2 2 2 0 2 1 0 \;;
-#X msg 235 143 \; src_passing 0 0 0 0 -2 0 -2 0 -1 0 0 2 4 0 0 0 0
-\;;
-#X msg 247 107 \; src_octave 0 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 \;;
-#X connect 0 0 3 0;
-#X connect 0 0 1 0;
-#X connect 0 0 5 0;
-#X connect 0 0 4 0;
-#X restore 57 108 pd initMelody;
-#X obj 153 586 noteout;
-#X obj 153 562 makenote;
-#X msg 238 539 60;
-#X msg 270 539 100;
-#X obj 244 517 loadbang;
-#X msg 684 49 120;
-#X msg 712 328 1;
-#X obj 770 119 table src_octave;
-#X obj 769 96 table src_note;
-#X obj 770 141 table src_passing;
-#X obj 770 165 table src_played;
-#N canvas 14 41 980 629 play_melody 0;
-#X obj 58 50 t f f f f;
-#X obj 58 116 tabread dest_note;
-#X obj 225 79 tabread dest_octave;
-#X obj 186 153 tabread dest_passing;
-#X obj 2 290 tabread dest_played;
-#X obj 1 315 select 1;
-#X obj 259 -4 inlet;
-#X obj 659 8 inlet;
-#X floatatom 710 68 5 0 0 0 - - -;
-#X text 729 52 base midi note;
-#X obj 225 103 * 12;
-#X obj 57 144 select 0 1 2;
-#X msg 57 186 0;
-#X msg 103 184 4;
-#X msg 150 185 7;
-#X obj 159 266 +;
-#X obj 170 303 +;
-#X obj 180 344 + 36;
-#X text 245 344 default C;
-#X obj 275 535 outlet;
-#X floatatom 204 390 5 0 0 0 - - -;
-#X obj 95 451 int 0;
-#X obj 2 339 bang;
-#X obj 435 50 t f f f f;
-#X obj 372 332 select 1;
-#X obj 596 120 * 12;
-#X obj 428 161 select 0 1 2;
-#X msg 428 203 0;
-#X msg 474 201 4;
-#X msg 521 202 7;
-#X obj 530 283 +;
-#X obj 541 320 +;
-#X obj 551 361 + 36;
-#X text 616 361 default C;
-#X floatatom 575 407 5 0 0 0 - - -;
-#X obj 466 468 int 0;
-#X obj 373 356 bang;
-#X obj 373 307 tabread dest_played2;
-#X obj 429 133 tabread dest_note2;
-#X obj 596 96 tabread dest_octave2;
-#X obj 557 170 tabread dest_passing2;
-#X obj 883 242 inlet;
-#X obj 235 491 spigot;
-#X msg 221 455 1;
-#X msg 256 456 0;
-#X obj 318 492 spigot;
-#X msg 297 455 1;
-#X msg 332 456 0;
-#X obj 258 19 t f f;
-#X obj 247 430 select 0 1;
-#X floatatom 373 533 5 0 0 0 - - -;
-#X floatatom 195 539 5 0 0 0 - - -;
-#X connect 0 0 4 0;
-#X connect 0 1 1 0;
-#X connect 0 2 3 0;
-#X connect 0 3 2 0;
-#X connect 1 0 11 0;
-#X connect 2 0 10 0;
-#X connect 3 0 15 1;
-#X connect 4 0 5 0;
-#X connect 5 0 22 0;
-#X connect 6 0 48 0;
-#X connect 7 0 8 0;
-#X connect 7 0 17 1;
-#X connect 7 0 32 1;
-#X connect 10 0 16 1;
-#X connect 11 0 12 0;
-#X connect 11 1 13 0;
-#X connect 11 2 14 0;
-#X connect 12 0 15 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 0;
-#X connect 15 0 16 0;
-#X connect 16 0 17 0;
-#X connect 17 0 20 0;
-#X connect 17 0 21 1;
-#X connect 21 0 42 0;
-#X connect 22 0 21 0;
-#X connect 23 0 37 0;
-#X connect 23 1 38 0;
-#X connect 23 2 40 0;
-#X connect 23 3 39 0;
-#X connect 24 0 36 0;
-#X connect 25 0 31 1;
-#X connect 26 0 27 0;
-#X connect 26 1 28 0;
-#X connect 26 2 29 0;
-#X connect 27 0 30 0;
-#X connect 28 0 30 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 0;
-#X connect 31 0 32 0;
-#X connect 32 0 34 0;
-#X connect 32 0 35 1;
-#X connect 35 0 45 0;
-#X connect 36 0 35 0;
-#X connect 37 0 24 0;
-#X connect 38 0 26 0;
-#X connect 39 0 25 0;
-#X connect 40 0 30 1;
-#X connect 41 0 49 0;
-#X connect 42 0 19 0;
-#X connect 42 0 51 0;
-#X connect 43 0 42 1;
-#X connect 44 0 45 1;
-#X connect 45 0 19 0;
-#X connect 45 0 50 0;
-#X connect 46 0 45 1;
-#X connect 47 0 42 1;
-#X connect 48 0 0 0;
-#X connect 48 1 23 0;
-#X connect 49 0 43 0;
-#X connect 49 0 44 0;
-#X connect 49 1 46 0;
-#X connect 49 1 47 0;
-#X restore 153 432 pd play_melody;
-#X floatatom 264 313 5 0 0 0 base_midi_note - -;
-#N canvas 80 41 790 533 test_src_melody 0;
-#X obj 64 33 t f f f f;
-#X obj -17 299 select 1;
-#X obj 67 3 inlet;
-#X obj 418 160 inlet;
-#X floatatom 442 209 5 0 0 0 - - -;
-#X text 461 193 base midi note;
-#X obj 268 125 * 12;
-#X obj 57 144 select 0 1 2;
-#X msg 57 186 0;
-#X msg 103 184 4;
-#X msg 150 185 7;
-#X obj 159 266 +;
-#X obj 170 303 +;
-#X obj 180 344 + 36;
-#X text 245 344 default C;
-#X obj 120 482 outlet;
-#X floatatom 204 390 5 0 0 0 - - -;
-#X obj 116 450 int 0;
-#X obj -16 323 bang;
-#X obj -16 274 tabread src_played;
-#X obj 58 116 tabread src_note;
-#X obj 267 102 tabread src_octave;
-#X obj 186 153 tabread src_passing;
-#X connect 0 0 19 0;
-#X connect 0 1 20 0;
-#X connect 0 2 22 0;
-#X connect 0 3 21 0;
-#X connect 1 0 18 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 0 13 1;
-#X connect 6 0 12 1;
-#X connect 7 0 8 0;
-#X connect 7 1 9 0;
-#X connect 7 2 10 0;
-#X connect 8 0 11 0;
-#X connect 9 0 11 0;
-#X connect 10 0 11 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 13 0 16 0;
-#X connect 13 0 17 1;
-#X connect 17 0 15 0;
-#X connect 18 0 17 0;
-#X connect 19 0 1 0;
-#X connect 20 0 7 0;
-#X connect 21 0 6 0;
-#X connect 22 0 11 1;
-#X restore 26 383 pd test_src_melody;
-#N canvas 0 22 462 312 chords 0;
-#X obj 146 45 select 0;
-#X obj 147 17 inlet;
-#X obj 150 255 outlet;
-#X msg 123 193 36;
-#X msg 177 193 41;
-#X msg 232 191 36;
-#X msg 286 191 43;
-#X obj 142 96 int 0;
-#X obj 144 69 bang;
-#X obj 202 99 + 1;
-#X obj 141 122 % 4;
-#X obj 137 147 select 0 1 2 3;
-#X connect 0 0 8 0;
-#X connect 1 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 7 0 9 0;
-#X connect 7 0 10 0;
-#X connect 8 0 7 0;
-#X connect 9 0 7 1;
-#X connect 10 0 11 0;
-#X connect 11 0 3 0;
-#X connect 11 1 4 0;
-#X connect 11 2 5 0;
-#X connect 11 3 6 0;
-#X restore 265 290 pd chords;
-#X obj 102 619 outlet;
-#X obj 14 619 outlet;
-#X obj 569 246 outlet;
-#X obj 379 233 t a a a a;
-#X obj 607 56 inlet;
-#X obj 80 181 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 78 215 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1 0
-1;
-#N canvas 0 22 650 510 toggle 0;
-#X obj 170 119 r toggleSRC;
-#X obj 136 144 int 0;
-#X obj 136 168 select 1;
-#X obj 137 192 bang;
-#X obj 154 20 inlet;
-#X obj 197 270 outlet;
-#X obj 203 231 int 0;
-#X obj 86 104 bang;
-#X obj 201 60 t a a;
-#X connect 0 0 1 1;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 6 0;
-#X connect 4 0 8 0;
-#X connect 6 0 5 0;
-#X connect 7 0 1 0;
-#X connect 8 0 7 0;
-#X connect 8 1 6 1;
-#X restore 33 414 pd toggle;
-#N canvas 0 22 662 522 toggle 0;
-#X obj 136 144 int 0;
-#X obj 136 168 select 1;
-#X obj 137 192 bang;
-#X obj 154 20 inlet;
-#X obj 197 270 outlet;
-#X obj 203 231 int 0;
-#X obj 86 104 bang;
-#X obj 201 60 t a a;
-#X obj 170 119 r toggleOUT;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 2 0 5 0;
-#X connect 3 0 7 0;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 7 0 6 0;
-#X connect 7 1 5 1;
-#X connect 8 0 0 1;
-#X restore 155 495 pd toggle;
-#N canvas 0 22 778 359 read-tables 0;
-#X obj 93 110 tabread dest_note;
-#X floatatom 96 147 5 0 0 0 - - -;
-#X floatatom 341 44 5 0 0 0 - - -;
-#X floatatom 244 147 5 0 0 0 - - -;
-#X floatatom 388 146 5 0 0 0 - - -;
-#X floatatom 532 143 5 0 0 0 - - -;
-#X obj 243 91 tabread dest_octave;
-#X obj 386 109 tabread dest_passing;
-#X obj 529 89 tabread dest_played;
-#X obj 514 175 print;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
-#X connect 2 0 6 0;
-#X connect 2 0 7 0;
-#X connect 2 0 8 0;
-#X connect 6 0 3 0;
-#X connect 7 0 4 0;
-#X connect 8 0 5 0;
-#X connect 8 0 9 0;
-#X restore 847 310 pd read-tables;
-#X msg 866 529 mutation \$1;
-#X msg 883 549 crossover \$1;
-#X obj 865 373 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 899 371 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 845 507 5 0 0 0 - - -;
-#X floatatom 900 505 5 0 0 0 - - -;
-#X msg 791 327 1;
-#N canvas 0 22 923 490 chord_melo1 0;
-#X obj 94 49 inlet;
-#X obj 349 58 inlet;
-#X obj 123 264 bang;
-#X obj 140 116 select 0;
-#X obj 185 256 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 191 187 int 0;
-#X obj 240 188 + 1;
-#X floatatom 191 211 5 0 0 0 generation - -;
-#X obj 191 164 bang;
-#X msg 23 270 init a;
-#X obj 22 227 select 1;
-#X obj 23 248 bang;
-#X obj 222 344 chord_melo src_note src_octave src_passing src_played
-dest_note dest_octave dest_passing dest_played;
-#X obj 415 139 table dest_note;
-#X obj 416 162 table dest_octave;
-#X obj 415 184 table dest_passing;
-#X obj 415 208 table dest_played;
-#X connect 0 0 3 0;
-#X connect 1 0 12 0;
-#X connect 2 0 12 0;
-#X connect 3 0 2 0;
-#X connect 3 0 8 0;
-#X connect 4 0 12 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 1;
-#X connect 8 0 5 0;
-#X connect 9 0 12 0;
-#X connect 10 0 11 0;
-#X connect 11 0 9 0;
-#X restore 667 589 pd chord_melo1;
-#N canvas 0 22 923 490 chord_melo2 0;
-#X obj 94 49 inlet;
-#X obj 349 58 inlet;
-#X obj 123 264 bang;
-#X obj 140 116 select 0;
-#X obj 185 256 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 191 187 int 0;
-#X obj 240 188 + 1;
-#X floatatom 191 211 5 0 0 0 generation - -;
-#X obj 191 164 bang;
-#X msg 23 270 init a;
-#X obj 22 227 select 1;
-#X obj 23 248 bang;
-#X obj 415 139 table dest_note2;
-#X obj 416 162 table dest_octave2;
-#X obj 415 184 table dest_passing2;
-#X obj 415 208 table dest_played2;
-#X obj 222 344 chord_melo src_note src_octave src_passing src_played
-dest_note2 dest_octave2 dest_passing2 dest_played2;
-#X connect 0 0 3 0;
-#X connect 1 0 16 0;
-#X connect 2 0 16 0;
-#X connect 3 0 2 0;
-#X connect 3 0 8 0;
-#X connect 4 0 16 0;
-#X connect 5 0 6 0;
-#X connect 5 0 7 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 1;
-#X connect 8 0 5 0;
-#X connect 9 0 16 0;
-#X connect 10 0 11 0;
-#X connect 11 0 9 0;
-#X restore 473 628 pd chord_melo2;
-#X obj 339 336 manager;
-#N canvas 0 22 698 589 sum 0;
-#X obj 116 64 inlet;
-#X obj 150 338 outlet;
-#X obj 278 36 inlet;
-#X obj 265 72 select 0;
-#X obj 264 124 int 0;
-#X obj 312 123 + 1;
-#X obj 266 96 bang;
-#X obj 86 202 spigot;
-#X obj 147 203 int;
-#X obj 104 236 + 0;
-#X obj 124 99 t f f;
-#X obj 211 126 bang;
-#X text 383 222 not working yet;
-#X text 337 254 it should join the two statements;
-#X text 326 277 join means make the first interval small;
-#X text 400 192 TODO;
-#X obj 204 295 spigot;
-#X obj 251 201 bang;
-#X msg 246 223 1;
-#X obj 257 247 -;
-#X obj 253 177 t a a;
-#X obj 254 147 % 2;
-#X connect 0 0 10 0;
-#X connect 2 0 3 0;
-#X connect 3 0 6 0;
-#X connect 3 0 11 0;
-#X connect 4 0 5 0;
-#X connect 4 0 21 0;
-#X connect 5 0 4 1;
-#X connect 6 0 4 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 1;
-#X connect 9 0 1 0;
-#X connect 10 0 8 1;
-#X connect 10 0 7 0;
-#X connect 10 1 16 0;
-#X connect 11 0 8 0;
-#X connect 16 0 1 0;
-#X connect 17 0 18 0;
-#X connect 18 0 19 0;
-#X connect 19 0 16 1;
-#X connect 20 0 17 0;
-#X connect 20 1 19 1;
-#X connect 21 0 20 0;
-#X connect 21 0 7 1;
-#X restore 224 468 pd sum;
-#N canvas 0 22 458 308 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 fitness1 \$1;
-#X msg 136 74 fitness2 \$1;
-#X msg 231 133 fitness3 \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 511 539 pd valori;
-#X obj 511 385 vsl 15 128 0 1 0 0 empty empty 1st 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 558 387 vsl 15 128 0 1 0 0 empty empty 2nd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 598 390 vsl 15 128 0 1 0 0 empty empty 3rd 0 -8 0 8 -262144
--1 -1 12700 1;
-#X floatatom 498 522 5 0 0 0 - - -;
-#X floatatom 548 520 5 0 0 0 - - -;
-#X floatatom 598 529 5 0 0 0 - - -;
-#X obj 524 301 loadbang;
-#X msg 510 335 1;
-#X msg 589 334 1;
-#X msg 423 568 mutation \$1;
-#X msg 440 588 crossover \$1;
-#X obj 422 412 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 456 410 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 402 546 5 0 0 0 - - -;
-#X floatatom 457 544 5 0 0 0 - - -;
-#X floatatom 344 439 5 0 0 0 - - -;
-#X obj 304 614 outlet;
-#X connect 0 0 6 0;
-#X connect 1 0 0 1;
-#X connect 1 0 5 0;
-#X connect 1 0 7 0;
-#X connect 2 0 26 0;
-#X connect 2 0 18 0;
-#X connect 3 0 0 0;
-#X connect 4 0 39 0;
-#X connect 6 0 4 0;
-#X connect 7 0 6 1;
-#X connect 9 0 1 0;
-#X connect 11 0 53 1;
-#X connect 12 0 11 0;
-#X connect 12 0 15 0;
-#X connect 13 0 11 1;
-#X connect 13 0 16 0;
-#X connect 14 0 11 2;
-#X connect 14 0 17 0;
-#X connect 19 0 27 0;
-#X connect 19 0 52 0;
-#X connect 22 0 21 0;
-#X connect 22 1 21 1;
-#X connect 23 0 22 1;
-#X connect 24 0 22 2;
-#X connect 25 0 24 0;
-#X connect 25 0 23 0;
-#X connect 26 0 9 0;
-#X connect 27 0 12 0;
-#X connect 27 0 13 0;
-#X connect 32 0 36 0;
-#X connect 32 0 44 0;
-#X connect 33 0 34 1;
-#X connect 33 0 32 1;
-#X connect 34 0 37 0;
-#X connect 34 0 43 0;
-#X connect 35 0 33 0;
-#X connect 39 1 32 0;
-#X connect 39 1 34 0;
-#X connect 39 2 35 0;
-#X connect 39 2 53 0;
-#X connect 39 2 54 0;
-#X connect 39 3 38 0;
-#X connect 39 3 55 0;
-#X connect 39 3 56 1;
-#X connect 40 0 3 0;
-#X connect 43 0 22 0;
-#X connect 44 0 22 0;
-#X connect 46 0 53 1;
-#X connect 47 0 53 1;
-#X connect 48 0 46 0;
-#X connect 48 0 50 0;
-#X connect 49 0 47 0;
-#X connect 49 0 51 0;
-#X connect 52 0 14 0;
-#X connect 55 0 32 2;
-#X connect 55 0 73 0;
-#X connect 55 0 74 0;
-#X connect 57 0 54 1;
-#X connect 58 0 57 0;
-#X connect 58 0 61 0;
-#X connect 59 0 57 1;
-#X connect 59 0 62 0;
-#X connect 60 0 57 2;
-#X connect 60 0 63 0;
-#X connect 64 0 65 0;
-#X connect 64 0 66 0;
-#X connect 65 0 58 0;
-#X connect 65 0 59 0;
-#X connect 66 0 60 0;
-#X connect 67 0 54 1;
-#X connect 68 0 54 1;
-#X connect 69 0 67 0;
-#X connect 69 0 71 0;
-#X connect 70 0 68 0;
-#X connect 70 0 72 0;
diff --git a/externals/frankenstein/chords_memory.c b/externals/frankenstein/chords_memory.c
deleted file mode 100644
index 01a5bf5a2..000000000
--- a/externals/frankenstein/chords_memory.c
+++ /dev/null
@@ -1,1044 +0,0 @@
-/* 
-chords_memory:
-an external that using graph
-learns the played style 
-and reproduces chords sequences 
-see
-http://en.wikipedia.org/wiki/Graph_%28mathematics%29
-for an idea of what graphs are (but we'll use weights also)
-
-idea:
-
-------- NODES
-
-each node of the graph is a chord
-each node has a name like "Imin Imaj ... IImin IImaj .... etc"
-We'll cover each possible grade and form, each grade can be
-maj
-min
-dim
-aug
-maj7maj
-maj7min
-min7maj
-min7min
-dim7dim
-dim7min
-dim7maj
-aug7min
-aug7maj
-(tot 13 forms)
-
-pland adding more chord types here:
-
-
-
-we have 12 grades:
-I
-I# 
-II 
-II# 
-III 
-IV 
-IV# 
-V 
-V# 
-VI 
-VI# 
-VII
-
-for a total of 12x13=156 nodes
-
-------- ARCS
-
-each node is connected to any other node
-each node has a weight
-the weight is augmented each time the human plays this chord sequence
-so probably I V will have high weight
-and I VI#7 will be very light
-
-this will be a table of 156x156 int (24336 elements)
-
-what can i do with the graph?
-
-i can do questions like:
-
-simple questions like: 
-starting from IIImin tell me a chord so i have a high weight (no novelty)
-starting from IIImin tell me a chord so I have hight novelty (low weight)
-(the graph simply must select the arc starting from IIImin with the desired weight)
-
-i can build walks giving starting chord:
-as before but more than 1 passage
-
-i can build walks giving target chord:
-- "build a walk from current chord to target chord with high novelty"
-- "build the shortest walk from current chord to target chord with novelty less than ..."
-- "build a 4 chords long walk from here to there with ... average novelty"
-all these questions are usefull if there is a "form manager" that decides
-the piece structure,for example it wants the 2nd theme to start in 4 measures 
-and asks for a chord sequence with medium novelty ending on the dominant (V),
-when the piece is ending it can ask for a coming back to the first tone..
-
-once we have all the arcs building walks is simply a matter of apply search methods
-like http://en.wikipedia.org/wiki/A%2A_search_algorithm
-there are plenty of such algos, we must just copy them down.
-
-
-*/
-#include <stdlib.h>
-#include <math.h>
-// for random, we may want to use it when building walks
-#include <time.h> 
-// for file io
-#include <stdio.h>
-// for string manipulation
-#include <string.h>
-#include <ctype.h>
-
-#include "m_pd.h"
-#include "common.h"
-
-
-#define DEBUG 1 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-// is this system Little Endian? (thanks to Mathieu Bouchard)
-// TODO: use this code in file writing/reading
-// instead of forcing little endian!
-//static inline int is_le() {int x=1; return ((char *)&x)[0];}
-
-// ------------------------------- declaration of used types 
-
-static t_class *chords_memory_class;
-
-
-// data type for the steps of a walk
-typedef struct _step
-{
-	// 1 if i must modulate to tonality before computing chord
-	int modulate;
-	// this chord
-	chord_t chord;
-	// new tonality to be applied before chord
-	int tonality_note;
-	int tonality_mode;
-} step_t;
-
-// struct defining this external's memory space
-typedef struct _chords_memory
-{
-    t_object x_obj; // myself
-	t_outlet *x_outchordname;         /* chord name, e.g. "Cmajor7" */
-	t_outlet *x_outtonalityname;      /* chord name, e.g. "Cmajor7" */
-	t_outlet *x_outchordssequence;    /* sequence of chords,a walk */
-	t_outlet *x_outnovelty; /* the degree of novelty of last added chord */
-	// the matrix : arcs of the graph
-	// each tonality mode has his matrix
-	// each matrix is in this form:
-	// from which chord to which chord
-	short int arcs[MODES_NUM][NODES_NUM][NODES_NUM];
-	// modulations matrix
-	// same as above
-	// but for modulations
-	short int modulations[MODES_NUM][NODES_NUM][MODULATIONS_NUM];
-	// I use this to normalize weights 0-1
-	short int maxweight[MODES_NUM];
-	// to convert from absolute tones (C, D, E, ..) to relative ones (I, II, III) and back
-	abs_note_t fundamental_note; // describes current tonality
-	modes_t fundamental_mode; // describes current tonality
-	// to save and load my status
-	t_symbol *filename;
-	// to normalize weights to 0-1
-	chord_t last_chord;
-	int last_chord_set;
-	// to use for walks
-	step_t *walk;
-	int steps;
-	int using_walk;
-	int current_step;
-
-} t_chords_memory;
-
-//static inline int mod(int a, int b) {int c=a%b; c+=b&-(c&&(a<0)^(b<0)); return c;}
-
-// bring this number in 0 12 range
-int clean_note(int src)
-{
-	while (src>12)
-		src-=12;
-	while (src<0)
-		src+=12;
-	return src;
-}
-// or use this one:
-#define MOD(x,y) (((x%y)+y)%y)
-
-
-// ------------------------------- init functions
-
-// initializes the graphs to 0 (everything is new)
-void chords_memory_init_graph(t_chords_memory *x)
-{
-	int i, j, m;
-	for (m=0; m<MODES_NUM; m++)
-	{
-		x->maxweight[m]=1;
-		for (i=0; i<NODES_NUM; i++)
-		{
-			for (j=0; j<NODES_NUM; j++)
-			{
-				// initially every chord sequence is a novelty
-				x->arcs[m][i][j]=0;
-			}
-		}
-	}
-	x->last_chord_set=0;
-}
-
-void chords_memory_init(t_chords_memory *x, t_floatarg f)
-{
-	chords_memory_init_graph(x);
-}
-
-
-// ------------- function for string manipulation (from string to chords)
-
-// builds a string for this chord
-// the string is in maxlib's chord format
-void chords_memory_chord2string(t_chords_memory *x, char *string, chord_t chord)
-{
-	abs_note_t newnote;
-	memset( string, '\0', sizeof(string) );
-	newnote = clean_note(chord.note + x->fundamental_note);
-	switch (newnote)
-	{
-		case C:	strcat(string, "C "); 			  break;
-		case Db:	strcat(string, "Db "); 			  break;
-		case D:	strcat(string, "D "); 			  break;
-		case Eb:	strcat(string, "Eb "); 			  break;
-		case E:	strcat(string, "E "); 			  break;
-		case F:	strcat(string, "F "); 			  break;
-		case Gb:	strcat(string, "Gb "); 			  break;
-		case G:	strcat(string, "G "); 			  break;
-		case Ab:	strcat(string, "Ab "); 			  break;
-		case A:	strcat(string, "A "); 			  break;
-		case Bb:	strcat(string, "Bb "); 			  break;
-		case B:	strcat(string, "B "); 			  break;
-	}
-	switch (chord.mode)
-	{
-		case kUnison:	strcat(string, "unison"); 			  break;
-		case kMaj:		strcat(string, "major"); 			  break;
-		case kMin:		strcat(string, "minor"); 			  break;
-		case kDim:		strcat(string, "diminished"); 		  break;
-		case kAug:		strcat(string, "augmented"); 		  break;
-
-		case kMaj7:		strcat(string, "major 7th"); 		  break;
-		case kDom7:		strcat(string, "dominant 7th"); 		  break;
-		case kMin7: 	strcat(string, "minor 7th"); 		  break;
-		case kHalfDim7:	strcat(string, "half diminished 7th"); break;
-		case kDim7:		strcat(string, "diminished 7th");	  break;
-		case kMinMaj7:	strcat(string, "minor/major 7th");	  break;
-
-		case kMaj7s5:	strcat(string, "major 7th #5");		  break;
-		case kMaj7b5:	strcat(string, "major 7th b5");		  break;
-		case kDom7s5:	strcat(string, "dominant 7th #5"); 	  break;
-		case kDom7b5:	strcat(string, "dominant 7th b5"); 	  break;
-		case kDomb9:	strcat(string, "dominant b9");		  break;
-
-		case kMaj9:		strcat(string, "major 9th");			  break;
-		case kDom9:		strcat(string, "dominant 9th");		  break;
-		case kMin9:		strcat(string, "minor 9th");			  break;
-		case kHalfDim9:	strcat(string, "half diminished 9th"); break;
-		case kMinMaj9:	strcat(string, "minor major 9th");	  break;
-		case kDimMaj9:	strcat(string, "diminished major 9th");break;
-		case kMaj9b5:	strcat(string, "major 9th b5");		  break;
-		case kDom9b5:	strcat(string, "dominant 9th b5");	  break;
-		case kDom9b13:	strcat(string, "dominant 9th b13");	  break;
-		case kMin9s11:	strcat(string, "minor 9th #11");		  break;
-		case kmM9b11:	strcat(string, "minor/maj 9th b11");	  break;
-
-		case kMaj7b9:	strcat(string, "major 7th b9");		  break;
-		case kMaj7s5b9:	strcat(string, "major 7th #5 b9");	  break;
-		case kDom7b9:	strcat(string, "dominant 7th b9");	  break;
-		case kMin7b9:	strcat(string, "minor 7th b9");		  break;
-		case kMinb9s11:	strcat(string, "minor b9 #11");		  break;
-		case kHalfDimb9:strcat(string, "half diminished b9");  break;
-		case kDim7b9:	strcat(string, "diminished b9");		  break;
-		case kMinMajb9: strcat(string, "minor/major b9");	  break;
-		case kDimMajb9:	strcat(string, "diminished M7 b9");	  break;
-
-		case kMaj7s9:	strcat(string, "major 7th #9");		  break;
-		case kDom7s9:	strcat(string, "dominant #9");		  break;
-		case kMaj7s11:	strcat(string, "major 7th #11");		  break;
-		case kMaj9s13:	strcat(string, "major 9th #13");		  break;
-		case kMs9s11:	strcat(string, "major #9 #11");		  break;
-		case kHDimb11:	strcat(string, "half diminished b11"); break;
-
-		case kMaj11:	strcat(string, "major 11th");		  break;
-		case kDom11:	strcat(string, "dominant 11th");		  break;
-		case kMin11:	strcat(string, "minor 11th");		  break;
-		case kHalfDim11:strcat(string, "half diminished 11th");break;
-		case kDim11:	strcat(string, "diminished 11th");	  break;
-		case kMinMaj11:	strcat(string, "minor/major 11th");	  break;
-		case kDimMaj11: strcat(string, "diminished maj 11th"); break;
-
-		case kMaj11b5:	strcat(string, "major 11th b5");		  break;
-		case kMaj11s5:	strcat(string, "major 11th #5");		  break;
-		case kMaj11b9:	strcat(string, "major 11th b9");		  break;
-		case kMaj11s9:	strcat(string, "major 11th #9");		  break;
-		case kMaj11b13:	strcat(string, "major 11th b13");	  break;
-		case kMaj11s13:	strcat(string, "major 11th #13");	  break;
-		case kM11b5b9:	strcat(string, "major 11th b5 b9");	  break;
-		case kDom11b5:	strcat(string, "dominant 11th b5");	  break;
-		case kDom11b9:	strcat(string, "dominant 11th b9");	  break;
-		case kDom11s9:	strcat(string, "dominant 11th #9");	  break;
-		case kHalfDim11b9:strcat(string, "half dim 11th b9");  break;
-		case kDom7s11:	strcat(string, "dominant #11");		  break;
-		case kMin7s11:	strcat(string, "minor 7th #11");		  break;
-
-		case kDom13s11:	strcat(string, "dominant 13th #11");	  break;
-		case kM7b913:	strcat(string, "major 7 b9 13");		  break;
-		case kMaj7s13:	strcat(string, "major 7th #13");		  break;
-		case kM7b9s13:	strcat(string, "major 7 b9 #13");	  break;
-		case kDom7b13:	strcat(string, "dominant 7th b13");	  break;
-		case kChrom:	strcat(string, "chromatic");			  break;
-
-	}
-}
-
-// helper function that returns a substring of str
-// starting from start and ending in end
-char* substring_r(char* buffer, char* str, int start, int end)
-{
-      int i, x = 0;
-      for(i = start ; i <= end; i++)
-            buffer[x++] = str[i];
-      buffer[x] = '\0';
-      return buffer;
-}
-
-// TODO: function to translate a string to chord
-// used both from inlet and from textfile
-chord_t chords_memory_string2chord(t_chords_memory *x, char *string)
-{
-	chord_t chord;
-	int index1;
-	int interval;
-	abs_note_t absnote;
-	char substr[32]; // is 32 ok?
-	if (DEBUG)
-		post("chords_memory_string2chord: string='%s'",string);
-	// c strings ends with \0
-	// so I set the substring to \0
-	memset( substr, '\0', sizeof(substr) );
-	// I assume the input is from maxlib's [chord]
-	// i don't need the notes before ":"
-	index1 = strcspn( string, ":");
-	if (index1 == strlen(string))
-	{
-		// : not found
-		// then the input was not from maxlib's [chord]
-		// i hope they passed me the right string...
-		strncpy( substr, string, strlen(string));
-	} else
-	{
-		// I will work on the right substring split by ":"
-		substring_r(substr, string, index1+1, strlen(string)-1);
-		if (isspace(substr[0]))
-		{
-			// substring inizia con uno spazio, lo tolgo
-			index1 = strlen(substr)-1;
-			memmove(substr, substr+1, index1); 
-			substr[index1] = '\0';
-		}
-	}
-	// now in substr i *should* have a string like this
-	// "C dominant 7th"
-	if (DEBUG)
-		post("chords_memory_string2chord: substr='%s'",substr);
-	// now I need to understand how many semitones there are
-	// between x->current_fundamental and this chord
-	absnote = from_string_to_abs_tone(substr);
-	interval = clean_note(absnote - x->fundamental_note);
-	chord.note = interval;
-	chord.mode=string2mode(substr); 
-	if (DEBUG)
-		post("chords_memory_string2chord: chord.note=%i chord.mode=%i",chord.note, chord.mode);
-	return chord;
-}
-
-// ------------------------------- search functions
-
-// internal function
-// find the better chord starting from chord1
-// using the desired weight which is a value between 0 and 1
-// so i have to normalize weights to 0-1 interval
-// i use maxweight to do that
-// TODO: add random, don't simply select the best but make a list with candidates
-//  and select randomly
-chord_t chords_memory_find_better(t_chords_memory *x, chord_t chord1, float desired_weight)
-{
-	// chords are integers
-	// to know what this integer means do that:
-	// int tone = chord1 / TONES_NUM
-	// int type = chord1 % TYPES_NUM
-	// the use a switch(tone) and a switch(type) 
-	// to know what kind of chord is this
-	int chord1int, chord2int, i, best_index;
-	float best_value;
-	float tmp;
-	double rnd;
-	chord_t chord2;
-	chord1int = chord1.note*TYPES_NUM + chord1.mode;
-
-	//rnd = rand()/((double)RAND_MAX + 1);
-	//best_index = rnd * NODES_NUM;
-	tmp = 0;
-	//best_value = fabs(((float) x->arcs[chord1int][best_index]) / ((float) x->maxweight) - desired_weight);
-	//if (DEBUG_VERBOSE)
-	//	post("chords_memory_find_better: initial %i best value = %f",best_index, best_value);
-	best_index = x->fundamental_mode; // fallback is I
-	best_value = 2; // higher than everyone
-	for (i=0; i<NODES_NUM; i++)
-	{
-		// i don't want it if has never been used
-		// i wouldn't know where to go then
-		// and i'd end up wondering blind
-		if (x->arcs[x->fundamental_mode][chord1int][i]>0)
-		{
-			tmp = fabs(((float)x->arcs[x->fundamental_mode][chord1int][i]) / ((float)x->maxweight[x->fundamental_mode]) - desired_weight);
-				if (DEBUG_VERBOSE)
-					post("chords_memory_find_better: x->arcs[%i][%i][%i]=%i x->maxweight[%i]=%i desired_weight=%f tmp=%f",x->fundamental_mode,chord1int,i, x->arcs[x->fundamental_mode][chord1int][i], x->fundamental_mode, x->maxweight[x->fundamental_mode], desired_weight, tmp);
-
-			if (tmp < best_value)
-			{
-				if (DEBUG_VERBOSE)
-				{
-					post("chords_memory_find_better: new best with value = %f", tmp);
-					post("chords_memory_find_better: x->arcs[%i][chord1int][%i]=%i x->maxweight[%i]=%i desired_weight=%f",x->fundamental_mode,i, x->arcs[x->fundamental_mode][chord1int][i], x->fundamental_mode, x->maxweight[x->fundamental_mode], desired_weight);
-				}
-
-				best_value = tmp;
-				best_index = i;
-			}
-			if (tmp == best_value)
-			{
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < 0.5)
-				{
-					best_value = tmp;
-					best_index = i;
-					if (DEBUG_VERBOSE)
-					{
-						post("chords_memory_find_better: new best with value = %f", tmp);
-						post("chords_memory_find_better: x->arcs[%i][chord1int][%i]=%i x->maxweight[%i]=%i desired_weight=%f",x->fundamental_mode,i, x->arcs[x->fundamental_mode][chord1int][i],x->fundamental_mode,x->maxweight[x->fundamental_mode], desired_weight);
-					}
-				}
-			}
-		}
-	}
-	// now in best_index I have the best chord
-	// i build the chord back from the integer
-	chord2.mode = best_index % TYPES_NUM;
-	chord2.note = best_index / TYPES_NUM;
-	if (DEBUG)
-		post("chords_memory_find_better: chord.note=%i chord.mode=%i",chord2.note, chord2.mode);
-	return chord2;
-}
-
-// data structures to be used by build_walk
-
-// to sort arrays
-#include "sglib.h"
-
-// the data set we will work on it a matrix of candidates steps
-// this define each possibile chord and/or modulation
-// that can be chosen at each step
-typedef struct _possible_step
-{
-	int chordInt;
-	int cost; // NB integers!
-	int modulation; // 1 if needs modulations before new chord
-	int tonalityInt;
-} possible_step_t;
-
-typedef struct _possible_step2
-{
-	int index;
-	int cost; // NB integers!
-} possible_step2_t;
-
-// a row of our data set
-// each row is a step in the walk
-typedef struct _step_row
-{
-	possible_step_t cell[NODES_NUM+MODULATIONS_NUM];
-	int curr_cell;
-} step_row_t;
-
-// this is the real searching function
-// implementing a modified version of the 
-// depth limited search
-// the difference is that we don't accept solutions
-// in less than the wanted number of steps
-
-// sglib comparator for an array of possible_step_t
-#define POSSIBLE_STEP_COMPARATOR(e1, e2) (e1.cost - e2.cost)
-#define MY_ARRAY_ELEMENTS_EXCHANGER(type, a, i, j) {type tmp;tmp=a[i];a[i]=a[j];a[j]=tmp;}
-
-// recursive function
-// returns 0 if solutions was not found
-// 1 if a solution was found
-// the way i implement this changes the search function
-// actually is a greedy one:
-// i always select the lower cost
-// and take the first solution
-// this algo is:
-// COMPLETE: YES
-// OPTIMAL: NO
-// complexity (where s=steps, n=nodes:
-// best case: n*s
-// worst case: n^s
-// this will surely need threads!
-int chords_memory_build_walk_recursive(t_chords_memory *x,
-							 int chord_from_int, 
-							 int tonality_from_int, 
-							 int chord_to_int, 
-							 int tonality_to_int, 
-							 int this_step, 
-							 int wanted_steps, 
-							 float desired_weight,
-							 step_row_t *step_matrix)
-{
-
-	int i, cost_tmp, ret;
-	int this_tonality_note;
-	int this_tonality_mode;
-	float cost_float;
-	//test
-	possible_step2_t *ordered_list;
-	ordered_list = malloc(sizeof(possible_step2_t)*(NODES_NUM+MODULATIONS_NUM));
-
-	this_tonality_note = tonality_from_int / MODES_NUM;
-	this_tonality_mode = tonality_from_int % MODES_NUM;
-
-	if (DEBUG)
-		post("chords_memory_build_walk_recursive: recursive function called, this_step=%i,this_tonality_mode=%i", 
-		this_step,this_tonality_mode);
-
-	// first of all, I write all costs in step_matrix[this_step];
-	// chords first
-	for (i=0; i<NODES_NUM; i++)
-	{
-		step_matrix[this_step].cell[i].chordInt = i;
-		step_matrix[this_step].cell[i].modulation = 0;
-		// evaluate this cost
-		if (x->arcs[this_tonality_mode][chord_from_int][i]>0)
-		{
-			cost_float = fabs(((float)x->arcs[this_tonality_mode][chord_from_int][i]) / ((float)x->maxweight[this_tonality_mode]) - desired_weight);
-		} else
-		{
-			cost_float = 2; // never used this chord, so very costly
-		}
-		cost_tmp = cost_float * 1000;
-		step_matrix[this_step].cell[i].cost = cost_tmp;
-
-		//test
-		ordered_list[i].index=i;
-		ordered_list[i].cost=cost_tmp;
-
-		if (DEBUG_VERBOSE)
-			post("%i: cost_float=%f cost_tmp=%i chordInt=%i", 
-			i,cost_float,step_matrix[this_step].cell[i].cost, step_matrix[this_step].cell[i].chordInt); 
-	}
-	// then modulations
-	for (i=NODES_NUM; i<MODULATIONS_NUM; i++)
-	{
-		step_matrix[this_step].cell[i].tonalityInt = i-NODES_NUM;
-		step_matrix[this_step].cell[i].modulation = 1;
-		// step_matrix[this_step].cell[i].chordInt = ?? TODO
-		//step_matrix[this_step].cell[i].cost = ?? TODO
-		step_matrix[this_step].cell[i].cost = 2;
-		// HOW DO I MANAGE MODULATIONS ?!?!?!
-
-	}
-	step_matrix[this_step].curr_cell=0;
-
-	if (DEBUG_VERBOSE)
-		post("sorting...");
-	// now order the costs using sglib
-	// as i am greedy i follow the cheaper path first
-//	SGLIB_ARRAY_QUICK_SORT (possible_step_t, step_matrix[this_step].cell, NODES_NUM+MODULATIONS_NUM, POSSIBLE_STEP_COMPARATOR, MY_ARRAY_ELEMENTS_EXCHANGER)
-	SGLIB_ARRAY_QUICK_SORT (possible_step2_t, ordered_list, NODES_NUM+MODULATIONS_NUM, POSSIBLE_STEP_COMPARATOR, MY_ARRAY_ELEMENTS_EXCHANGER)
-
-	// this function is called recursively
-	//base case is then this_step==wanted_steps-1
-
-//	for (step_matrix[this_step].curr_cell=0; 
-//		step_matrix[this_step].curr_cell<(NODES_NUM+MODULATIONS_NUM); 
-//		step_matrix[this_step].curr_cell++)
-	for (i=0; i<(NODES_NUM+MODULATIONS_NUM); i++)
-	{
-		step_matrix[this_step].curr_cell = ordered_list[i].index;
-		// i don't want solutions that use never heard chords...
-		if (ordered_list[i].cost < 2000)
-		{
-			if (DEBUG_VERBOSE)
-			{
-				post("step_matrix[%i].curr_cell=%i chodInt=%i cost=%i", 
-					this_step,step_matrix[this_step].curr_cell,
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt,
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].cost
-					); 
-			}
-			if (this_step==wanted_steps-1)
-			{
-				// base case
-				// look for the solution
-				if ((step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt == chord_to_int) &&
-					(step_matrix[this_step].cell[step_matrix[this_step].curr_cell].tonalityInt == tonality_to_int))
-				{
-					// i just found a solution!
-					if (DEBUG)
-						post("chords_memory_build_walk_recursive: solution found! chord_note=%i chord_to_int=%i",
-						chord_to_int/TYPES_NUM,chord_to_int);
-					free(ordered_list);
-					return 1; // as i am greedy (and lazy) i return immediatly
-				}
-			} else
-			{
-				// recurive case
-				ret = chords_memory_build_walk_recursive(x, 
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt, 
-					step_matrix[this_step].cell[step_matrix[this_step].curr_cell].tonalityInt, 
-					chord_to_int,  
-					tonality_to_int, 
-					this_step+1, 
-					wanted_steps, 
-					desired_weight, 
-					step_matrix);
-				if 	(ret == 1)
-				{
-					// solution found below me!
-					if (DEBUG)
-						post("chords_memory_build_walk_recursive: solution found! chordInt=%i cost=%i",
-						step_matrix[this_step].cell[step_matrix[this_step].curr_cell].chordInt,
-						step_matrix[this_step].cell[step_matrix[this_step].curr_cell].cost);
-					free(ordered_list);
-					return 1;
-				}
-
-			}
-		}
-	}
-	free(ordered_list);
-	return 0;
-}
-
-// TODO: add ending tonality !!!!
-void chords_memory_build_walk(t_chords_memory *x, chord_t starting_chord, chord_t ending_chord, float desired_weight, int steps)
-{
-	int i,j,s,n, ret;
-	int chord_from_int, chord_to_int, tonality_from_int, tonality_to_int;
-	step_row_t *step_matrix;
-	// for output
-	t_atom *chords_sequence;
-	char stringTMP[25];
-	// alloc arrays
-	if (x->using_walk)
-		free(x->walk);
-	x->walk = malloc(sizeof(step_t)*steps);
-	step_matrix = malloc(sizeof(step_row_t)*steps);
-	chords_sequence = malloc(sizeof(t_atom)*steps);
-
-	// for each step:
-	// fill this step with costs
-	// order the list
-	// take the first
-	// use it to fill the next level until you get to the desired step
-	// if you don't find a solution then step back
-	// select the second alternative and again
-	chord_from_int = starting_chord.note * TYPES_NUM + starting_chord.mode ;
-	tonality_from_int = x->fundamental_note * MODES_NUM + x->fundamental_mode;
-	chord_to_int = ending_chord.note * TYPES_NUM + ending_chord.mode ;
-	tonality_to_int = tonality_from_int; // TODO !!!!!
-
-	if (DEBUG)
-		post("chords_memory_build_walk: calling recursive function");
-
-	ret = chords_memory_build_walk_recursive(x, chord_from_int, tonality_from_int, chord_to_int,  tonality_to_int, 
-		0, steps, desired_weight, step_matrix);
-	if (ret==0)
-	{
-		// no solution found
-		// what do i do now?!?!
-		if (DEBUG)
-			post("no solution found");
-		return;
-	}
-	//  copy the solution to the x->walk
-	//  and set all needed vars
-	for (i=0; i<steps; i++)
-	{
-		int chordIntTMP = step_matrix[i].cell[step_matrix[i].curr_cell].chordInt;
-		int tonalityIntTMP = step_matrix[i].cell[step_matrix[i].curr_cell].tonalityInt;
-		int modulationTMP = step_matrix[i].cell[step_matrix[i].curr_cell].modulation;
-		// i copy this chord/modulation to the walk
-		x->walk[i].modulate = modulationTMP;
-		x->walk[i].chord.note = chordIntTMP / TYPES_NUM;
-		x->walk[i].chord.mode = chordIntTMP % TYPES_NUM;
-		x->walk[i].tonality_note = tonalityIntTMP / MODULATIONS_NUM;
-		x->walk[i].tonality_mode = tonalityIntTMP % MODULATIONS_NUM;
-		// build a list to send out to the 
-		// right outlet
-		chords_memory_chord2string(x,stringTMP,x->walk[i].chord);
-		if (DEBUG)
-			post("chord: %s", stringTMP);
-
-		//outlet_symbol(x->x_outtonalityname, gensym(stringTMP));
-
-		SETSYMBOL(chords_sequence+1, gensym(stringTMP));
-		//SETSYMBOL(chords_sequence+1, stringTMP);
-	}
-
-	// send the solution list to outlet x_outchordssequence
-	outlet_list(x->x_outchordssequence,
-                     gensym("list") ,
-					 steps, 
-					 chords_sequence);
-
-	// TODO: set other vars for walk
-	
-	// free arrays
-	free(step_matrix);
-	free(chords_sequence);
-	// don't free walk, will be freed by someone else
-}
-
-
-// ------------------------------- from now on there are functions directly called by pd
-
-// when you send a |next x( message...
-// function actually invoked when sending a "next x" message to the external
-void chords_memory_next(t_chords_memory *x, t_floatarg f)
-{
-	float desired_weight;
-	chord_t best;
-	char string[32];
-	desired_weight = f;
-	best = chords_memory_find_better(x, x->last_chord, desired_weight);
-	chords_memory_chord2string(x, string, best);
-	outlet_symbol(x->x_outchordname, gensym(string));
-}
-
-// when you send a search message
-void chords_memory_search(t_chords_memory *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int steps;
-	chord_t chord2;
-	float desired_weight;
-	// parse the list
-	// you need chord_dest, steps and desired_weight
-	// (later desired tonality also)
-
-	if (argc<4)
-	{
-		error("usage: search chord-note chord-type steps weight");
-		return;
-	}
-	
-	chord2.note = atom_getint(argv);
-	chord2.mode= atom_getint(argv+1);
-	steps = atom_getint(argv+2);
-	desired_weight = atom_getfloat(argv+3);
-
-	chords_memory_build_walk(x, x->last_chord, chord2, desired_weight, steps);
-
-}
-
-
-// ------------------------------- functions to set and add chords/tonality
-
-// sets the current chord
-void chords_memory_set_chord(t_chords_memory *x, t_symbol *s) {
-	if (! x->last_chord_set)
-	{
-		x->last_chord_set=1;
-	}
-	x->last_chord = chords_memory_string2chord(x, s->s_name);
-	if (DEBUG)
-		post("chords_memory_set_chord: chord.note=%i chord.mode=%i",x->last_chord.note, x->last_chord.mode);
-}
-
-// add a chord sequence to the graph
-float chords_memory_add(t_chords_memory *x, chord_t chord1, chord_t chord2)
-{
-	// chords are integers
-	// to know what this integer means do that:
-	// int tone = chord1 / TONES_NUM
-	// int type = chord1 % TYPES_NUM
-	// the use a switch(tone) and a switch(type) 
-	// to know what kind of chord is this
-
-	int chord1int, chord2int;
-	chord1int = chord1.note*TYPES_NUM + chord1.mode;
-	chord2int = chord2.note*TYPES_NUM + chord2.mode;
-	// now that i've translated chords in integers i can add
-	// 1 to its wheight (a bit less new)
-	x->arcs[x->fundamental_mode][chord1int][chord2int] = x->arcs[x->fundamental_mode][chord1int][chord2int] + 1;
-	// is this the new maxweight?
-	if (x->arcs[x->fundamental_mode][chord1int][chord2int] > x->maxweight[x->fundamental_mode])
-	{
-		x->maxweight[x->fundamental_mode] = x->arcs[x->fundamental_mode][chord1int][chord2int];
-		if (DEBUG)
-			post("x->maxweight[%i] = %i",x->fundamental_mode, x->maxweight[x->fundamental_mode]);
-	}
-	return (float) (((float) x->arcs[x->fundamental_mode][chord1int][chord2int]) / ((float) x->maxweight[x->fundamental_mode]) );
-
-}
-
-// function invoked when a new chord is added at the graph
-// the external remembers the previous played chord
-void chords_memory_add_chord(t_chords_memory *x, t_symbol *s) {
-    chord_t chord1;
-	float ret = 0;
-	chord1 = chords_memory_string2chord(x, s->s_name);
-	if (x->last_chord_set)
-	{
-		ret = chords_memory_add(x, x->last_chord, chord1);
-	} 
-	else
-	{
-		x->last_chord_set=1;
-	}
-	x->last_chord = chord1;
-	if (DEBUG)
-		post("chord added: %s", s->s_name); 
-	outlet_float(x->x_outnovelty, ret);
-}
-
-// sets the current tonality
-void chords_memory_set_tonality(t_chords_memory *x, t_symbol *s) {
-	chord_t c;
-	int old_tonality;
-	int interval;
-	old_tonality = x->fundamental_note;
-	//x->fundamental_note = (x->fundamental_note + from_string_to_abs_tone(s->s_name)) % 12;
-	x->fundamental_note = from_string_to_abs_tone(s->s_name);
-	x->fundamental_mode = from_string_to_mode(s->s_name);
-	// when i set the tonality i always
-	// go on the I grade
-	if (! x->last_chord_set)
-	{
-		x->last_chord_set=1;
-	}
-	interval = x->fundamental_note - old_tonality;
-	x->last_chord.note = clean_note(x->last_chord.note - interval);
-	outlet_symbol(x->x_outtonalityname, gensym(s->s_name));
-	if (DEBUG)
-	{
-		post("chords_memory_set_tonality: new tonality note=%i mode=%i",x->fundamental_note,x->fundamental_mode);
-		post("chords_memory_set_tonality: chord.note=%i chord.mode=%i",x->last_chord.note, x->last_chord.mode);
-	}
-}
-
-// adds this modulation to memory
-// code similar to chords_memory_add
-// but adds a modulation instead of a chord
-void chords_memory_add_modulation(t_chords_memory *x, t_symbol *s) {
-	chord_t c;
-	int old_tonality;
-	int newnote,newmode,newabsnote,chord1int;
-	short int modulationInt;
-	old_tonality = x->fundamental_note;
-	//x->fundamental_note = (x->fundamental_note + from_string_to_abs_tone(s->s_name)) % 12;
-	newabsnote = from_string_to_abs_tone(s->s_name);
-	newmode = from_string_to_mode(s->s_name);
-	// when i set the tonality i always
-	// go on the I grade
-	if (! x->last_chord_set)
-	{
-		x->last_chord_set=1;
-	}
-	newnote = clean_note(newabsnote - old_tonality);
-	modulationInt = newnote*MODES_NUM + newmode;
-	chord1int = x->last_chord.note*TYPES_NUM + x->last_chord.mode;
-	x->modulations[x->fundamental_mode][chord1int][modulationInt] = x->modulations[x->fundamental_mode][chord1int][modulationInt] + 1;
-	// is this the new maxweight?
-	if (x->modulations[x->fundamental_mode][chord1int][modulationInt] > x->maxweight[x->fundamental_mode])
-	{
-		x->maxweight[x->fundamental_mode] = x->modulations[x->fundamental_mode][chord1int][modulationInt];
-	}
-	if (DEBUG)
-	{
-		post("chords_memory_add_modulation: new tonality note=%i mode=%i",newnote,newmode);
-	}
-	chords_memory_set_tonality(x, gensym(s->s_name));
-}
-
-// ---------------------- file I/O
-
-// function to read graph from a file
-void chords_memory_read_from_file(t_chords_memory *x, t_symbol *s)
-{
-	FILE *fp;
-	int i, j, m;
-	unsigned char tmp[2];
-	if ((fp=fopen(s->s_name, "r+b"))==NULL)
-	{
-		post("error: can't open file %s", s->s_name);
-		return;
-	}
-	
-	for (m=0; m<MODES_NUM; m++)
-	{
-		// i read maxweight
-		x->maxweight[m] = (fgetc(fp)<<16)|(fgetc(fp));
-		// i read the matrix
-		for (i=0; i<NODES_NUM; i++)
-		{
-			for (j=0; j<NODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				tmp[0] = fgetc(fp);
-				tmp[1] = fgetc(fp);
-				x->arcs[m][i][j] = (tmp[0]<<8)|(tmp[1]);
-				if (DEBUG_VERBOSE)
-				{
-					if (x->arcs[m][i][j]>0)
-					{
-						post("x->arcs[%i][%i][%i] = %i",m,i,j,x->arcs[m][i][j]);
-					}
-				}
-			}
-			for (j=0; j<MODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				tmp[0] = fgetc(fp);
-				tmp[1] = fgetc(fp);
-				x->modulations[m][i][j] = (tmp[0]<<8)|(tmp[1]);
-				if (DEBUG_VERBOSE)
-				{
-					if (x->modulations[m][i][j]>0)
-					{
-						post("x->modulations[%i][%i][%i] = %i",m,i,j,x->modulations[m][i][j]);
-					}
-				}
-			}
-		}
-		if (DEBUG)
-			post("x->maxweight[%i] = %i",m, x->maxweight[m]);
-	}
-	if (DEBUG)
-		post("graph read from file %s",s->s_name);
-	fclose(fp);
-
-}
-
-// function to write graph to a file (for later loading)
-void chords_memory_write_to_file(t_chords_memory *x, t_symbol *s)
-{
-	FILE *fp;
-	int i, j, m, tmp;
-	fp=fopen(s->s_name, "w+b");
-
-	for (m=0; m<MODES_NUM; m++)
-	{
-		// i write down maxweight
-		fputc(x->maxweight[m]>>8, fp);
-		tmp = x->maxweight[m]<<8;
-		tmp = tmp >> 8;
-		fputc(tmp, fp);
-		// i write down the matrix
-		for (i=0; i<NODES_NUM; i++)
-		{
-			for (j=0; j<NODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				fputc(x->arcs[m][i][j]>>8, fp);
-				tmp = x->arcs[m][i][j]<<8;
-				tmp = tmp >> 8;
-				fputc(tmp, fp);
-			}
-			for (j=0; j<MODES_NUM; j++)
-			{
-				// this should avoids problems little/big endian
-				// i force little endian (most significant byte first)
-				fputc(x->modulations[m][i][j]>>8, fp);
-				tmp = x->modulations[m][i][j]<<8;
-				tmp = tmp >> 8;
-				fputc(tmp, fp);
-			}
-		}
-	}
-	if (DEBUG)
-		post("graph wrote to file %s",s->s_name);
-	fclose(fp);
-}
-
-// TODO: function that reads chords from a textfile and trains the graph
-
-// TODO: recursive function that builds a walk from chord1 to chord2 using desired novelty
-
-// set filename
-void chords_memory_set_filename(t_chords_memory *x, t_symbol *s) {
-    x->filename = s;
-}
-
-
-
-void *chords_memory_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_chords_memory *x = (t_chords_memory *)pd_new(chords_memory_class);
-	x->x_outchordname = outlet_new(&x->x_obj, gensym("symbol"));
-	x->x_outtonalityname = outlet_new(&x->x_obj, gensym("symbol"));
-	x->x_outchordssequence = outlet_new(&x->x_obj, gensym("list"));
-	x->x_outnovelty = outlet_new(&x->x_obj, gensym("float"));
-	srand(time(&a));
-	chords_memory_init_graph(x);
-	x->fundamental_note = C;
-	x->fundamental_mode = MAJOR;
-	 // example parameter
-	if (argc>0) 
-	{
-		x->filename = atom_getsymbolarg(0, argc, argv);
-		chords_memory_read_from_file(x, x->filename); 
-	} 
-
-    return (x);
-}
-
-// here I free allocated memory if any
-void chords_memory_free(t_chords_memory *x)
-{
-//	free(x->current_fundamental);
-}
-
-void chords_memory_setup(void)
-{
-    chords_memory_class = class_new(gensym("chords_memory"), (t_newmethod)chords_memory_new,
-        (t_method)chords_memory_free, sizeof(t_chords_memory), CLASS_DEFAULT, A_GIMME, 0);
-    // file I/O
-	class_addmethod(chords_memory_class, (t_method)chords_memory_write_to_file, gensym("write"),A_SYMBOL, 0);
-    class_addmethod(chords_memory_class, (t_method)chords_memory_read_from_file, gensym("read"),A_SYMBOL, 0);
- 	// ask for the best choice form here
-	class_addmethod(chords_memory_class, (t_method)chords_memory_next, gensym("next"), A_DEFFLOAT, 0);
-    // ask for a path from here to desired destination
-	class_addmethod(chords_memory_class, (t_method)chords_memory_search, gensym("search"), A_GIMME, 0);
-    // add or set chord
-	class_addmethod(chords_memory_class, (t_method)chords_memory_add_chord, gensym("add"),A_SYMBOL, 0);
-    class_addmethod(chords_memory_class, (t_method)chords_memory_set_chord, gensym("set"),A_SYMBOL, 0);
-	// change current tonality
-	class_addmethod(chords_memory_class, (t_method)chords_memory_set_tonality, gensym("tonality"),A_SYMBOL, 0);
-	class_addmethod(chords_memory_class, (t_method)chords_memory_add_modulation, gensym("modulation"),A_SYMBOL, 0);
- 	// reinit memory
-	class_addmethod(chords_memory_class, (t_method)chords_memory_init, gensym("init"), A_DEFFLOAT, 0);
-
-}
diff --git a/externals/frankenstein/chords_memory.vcproj b/externals/frankenstein/chords_memory.vcproj
deleted file mode 100755
index cd37ad700..000000000
--- a/externals/frankenstein/chords_memory.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="chords_memory"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:chords_memory_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/chords_memory.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="chords_memory.c">
-			</File>
-			<File
-				RelativePath="common.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/common.c b/externals/frankenstein/common.c
deleted file mode 100644
index 5abfd3898..000000000
--- a/externals/frankenstein/common.c
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*
-
-implementation of common functions used by the externals of the frank framework
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-*/
-#include "common.h"
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "m_pd.h" // to post errors and debug messages
-
-t_duration int2duration(int n)
-{
-	t_duration dur;
-	int curr, i, j, ok, currden;
-	curr=0;
-	ok=0;
-	for (i=0; i<num_possible_denominators; i++)
-	{
-		currden = possible_denominators[i];
-		for (j=0; j<currden; j++)
-		{
-			if (curr==n)
-			{
-				dur.numerator=j;
-				dur.denominator=currden;
-				j=currden;
-				i=num_possible_denominators;
-				ok=1;
-			} else
-				curr++;
-		}
-	}
-	if (ok)
-		return dur;
-	else
-	{
-		dur.numerator=1;
-		dur.denominator=1;
-		return dur;
-	}
-}
-
-unsigned short int duration2int(t_duration dur)
-{
-	unsigned short int curr, i, j;
-	curr=0;
-	for (i=0; i<num_possible_denominators; i++)
-	{
-		for (j=0; j<i; j++)
-		{
-			if ((dur.numerator==j) && (dur.denominator==possible_denominators[i]))
-			{
-				return curr;
-			} else
-				curr++;
-		}
-	}
-	return curr;	
-}
-
-int possible_durations()
-{
-	int ris, i;
-	ris = 0;
-	for (i=0; i<num_possible_denominators; i++)
-	{
-		ris += possible_denominators[i]-1;
-	}
-	ris += 1;
-	return ris;
-}
-
-t_duration float2duration(float fduration)
-{
-	float minDiff, currfduration, currDiff;
-	int i, maxi;
-	t_duration currDur, bestDur;
-
-	bestDur.numerator=1;
-	bestDur.denominator=1;
-	minDiff = 1;
-	maxi = possible_durations();
-	for (i=0; i<maxi; i++)
-	{
-	//	post("i=%i", i);
-		currDur = int2duration(i);
-	//	post("currDur=%i/%i", currDur.numerator, currDur.denominator);
-		currfduration = duration2float(currDur);
-	//	post("currfduration=%f", currfduration);
-		currDiff = (float) fabs(fduration - currfduration);
-		if (currDiff<=minDiff)
-		{
-			minDiff = currDiff;
-			bestDur = currDur;
-		}
-	}
-	return bestDur;
-}
-
-float duration2float(t_duration duration)
-{
-	return (float) (((float)duration.numerator) / ((float)duration.denominator));
-}
-
-void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float fstart, float fduration)
-{
-	t_duration res;
-	t_rhythm_event *newElement;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = malloc(sizeof(t_rhythm_event));
-	// set the pointers
-	newElement->previous = 0;
-	newElement->next = 0;
-	newElement->voice=voice;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-	*firstEvent = newElement;
-	//post("DEBUG setFirstBeat: %i %i", res.numerator, res.denominator);
-}
-
-void concatenateBeat(t_rhythm_event *currentEvent, unsigned short int voice, float fstart, float fduration)
-{
-	t_duration res;
-	t_rhythm_event *newElement, *lastElement;
-	lastElement = currentEvent;
-	while(lastElement->next)
-		lastElement = lastElement->next;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = (t_rhythm_event *) malloc(sizeof(t_rhythm_event));
-	// set the pointers
-	newElement->previous = lastElement;
-	newElement->next = 0;
-	lastElement->next = newElement;
-	newElement->voice=voice;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-	//post("DEBUG concatenateBeat: %i %i", res.numerator, res.denominator);
-}
-
-void freeBeats(t_rhythm_event *currentEvent)
-{
-	t_rhythm_event *prev;
-	t_rhythm_event *next;
-
-	if (currentEvent==0)
-		return;
-
-	// go to the first element of the list
-	while(currentEvent->previous)
-		currentEvent = currentEvent->previous;
-
-	// now free each element
-	next=currentEvent->next;
-	while(currentEvent)
-	{
-		prev = currentEvent;
-		currentEvent = currentEvent->next;
-		free(prev);
-	} 
-	currentEvent = 0;
-
-}
-
-void add_t_rhythm_memory_arc(t_rhythm_memory_node *srcNode, unsigned short int dstNode)
-{
-	t_rhythm_memory_arc *newArc;
-	t_rhythm_memory_arc *lastArc;
-
-	// create a new arc
-	newArc = (t_rhythm_memory_arc *) malloc(sizeof(t_rhythm_memory_arc));
-	newArc->to_node_index = dstNode;
-	// go to the last arc in the list
-	// and add this arc as the last
-	lastArc = srcNode->arcs;
-	if (lastArc)
-	{
-		// this is not the first arc
-		while(lastArc->next_arc)
-			lastArc = lastArc->next_arc;
-		lastArc->next_arc = newArc;
-	} else
-	{
-		// this is the first arc
-		srcNode->arcs = newArc;
-	}
-}
-
-// initialize this representation, allocates memory for the pointers
-void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep, unsigned short int id)
-{
-	int i;
-	// allocate space for the data structure
-	*this_rep = (t_rhythm_memory_representation *)malloc(sizeof(t_rhythm_memory_representation));
-	// space for transitions
-	(*this_rep)->transitions = (t_rhythm_memory_node *) malloc(sizeof(t_rhythm_memory_node) * possible_durations());
-	// initialize transitions
-	for (i=0; i<possible_durations(); i++)
-	{
-		(*this_rep)->transitions[i].first=0;
-		(*this_rep)->transitions[i].weight=0;
-		(*this_rep)->transitions[i].arcs=0;
-	}
-	(*this_rep)->rhythms = 0;
-	// the naming variables
-	(*this_rep)->id = id; // the main id
-	(*this_rep)->last_sub_id = 0; // the sub id
-	(*this_rep)->next = 0;
-	(*this_rep)->max_weight = 0;
-}
-
-// add a new rhythm in the list of similar thythms related to one main rhythm
-unsigned short int add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm)
-{
-	t_rhythm_memory_element *curr;
-	t_rhythm_memory_element *newElement;
-	t_rhythm_event *currEvent;
-	t_rhythm_memory_arc *currArc, *newArc, *prevArc;
-	unsigned short int last, sub_id;
-	int i, arcFound;
-	if (new_rhythm==0)
-		return INVALID_RHYTHM;
-	// creates a new element of the list of similar rhythms
-	newElement = (t_rhythm_memory_element *) malloc(sizeof(t_rhythm_memory_element));
-	newElement->rhythm = new_rhythm;
-	newElement->next = 0;
-	sub_id = this_rep->last_sub_id;
-	newElement->id = sub_id;
-	this_rep->last_sub_id++;
-	// finds the last element and adds itself
-	curr = this_rep->rhythms;
-	if (curr)
-	{
-		while (curr->next)
-			curr=curr->next;
-		curr->next = newElement;
-
-	} else
-	{
-		this_rep->rhythms = newElement;
-	}
-	// now update the transition table..
-	currEvent = new_rhythm;
-	// set the first event..
-	i = duration2int(new_rhythm->start);
-	this_rep->transitions[i].first++;
-	last = 0;
-	while (currEvent)
-	{
-		// get the duration and translate into an int
-		i = duration2int(currEvent->start);
-		if (last) // NB if last==0 then last is not set
-		{
-			// add an arc between last and i
-			currArc = this_rep->transitions[last].arcs;
-			arcFound=0;
-			// is this arc rpesent?
-			// also i need to get to the last element of the lsit
-			while (currArc)
-			{
-				// for each arc in the list
-				if (currArc->to_node_index == i)
-				{
-					// this arc is already present
-					arcFound=1;
-				}
-				prevArc = currArc; // last valid arc
-				currArc = currArc->next_arc;
-			} 
-			if (!arcFound)
-			{
-				// this arc was not present, add it!
-				newArc = (t_rhythm_memory_arc *) malloc(sizeof(t_rhythm_memory_arc));
-				newArc->next_arc = 0; 
-				newArc->to_node_index = i; // set my destination
-				if (this_rep->transitions[last].arcs)
-				{
-					// this is not the first arc
-					// then prevArc is set and valid
-					prevArc->next_arc = newArc;
-				} else
-				{
-					// this is the first arc
-					this_rep->transitions[last].arcs = newArc;
-				}
-			}
-		}
-		// increment the weight
-		this_rep->transitions[i].weight++;
-		if (this_rep->transitions[i].weight > this_rep->max_weight)
-		{
-			// a new champion!
-			this_rep->max_weight = this_rep->transitions[i].weight;
-			//post("DEBUG: max_weight=%i", this_rep->max_weight);
-		}
-		last = i;
-		currEvent = currEvent->next;
-	}
-	return sub_id;
-}
-
-// free the list of representations
-void free_memory_representations(t_rhythm_memory_representation *this_rep)
-{
-	int i, maxi;
-	t_rhythm_memory_representation *currRep, *oldRep;
-	t_rhythm_memory_element *currElement, *tmpElement;
-	t_rhythm_memory_arc *currArc, *tmpArc;
-	currRep = this_rep;
-	while(currRep)
-	{
-		// free the table
-		maxi = possible_durations();
-		for (i=0; i<maxi; i++)
-		{
-			currArc = currRep->transitions[i].arcs;
-			while (currArc)
-			{
-				tmpArc = currArc;
-				currArc = currArc->next_arc;
-				free(tmpArc);
-			}
-		}
-		free(currRep->transitions);
-
-		// free the list of similar rhythms
-		currElement = currRep->rhythms;
-		while (currElement)
-		{
-			freeBeats(currElement->rhythm);
-			tmpElement = currElement;
-			currElement = currElement->next;
-			free(tmpElement);
-		}
-		oldRep = currRep;
-		currRep = currRep->next;
-		free(oldRep);
-	}
-
-}
-
-void create_array_beats(unsigned short int **this_array, t_rhythm_event *currentEvent)
-{
-	unsigned short int *new_array;
-	//t_rhythm_event *curr_event;
-	int i, maxi, startint;
-	maxi = possible_durations();
-	// allocate space for the nodes
-	new_array = (unsigned short int *) malloc(sizeof(unsigned short int) * maxi);
-	// set default values
-	for (i=0; i<maxi; i++)
-	{
-			new_array[i] = 0;
-	}
-	// set the actual data
-	//curr_event = currentEvent;
-	while(currentEvent)
-	{
-		startint = duration2int(currentEvent->start);
-		new_array[startint]=1;
-		currentEvent = currentEvent->next;
-	}
-	*this_array = new_array;
-
-}
-
-// compares this rhythm to this representation
-// and tells you how close it is to it
-void compare_rhythm_vs_representation(t_rhythm_memory_representation *this_rep, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 )
-{
-	t_duration tmp_dur, this_dur;
-	t_rhythm_event *curr_event;
-	float this_weight_float, average_weight, strong_ratio;
-	int i, max_i, int_from_dur, this_weight_int, beats, strong_ok, strong_no;
-	unsigned short int *src_rhythm_array, *tmp_rhythm_array;
-	unsigned short int best_subid, curr_subid;
-	float best_closeness, curr_closeness;
-	int sub_ok, sub_no, sub_count;
-	int count_strong;
-	t_rhythm_memory_element *possible_rhythms;
-
-	// check that the return values have been allocated
-	if ((sub_id==0)||(root_closeness==0)||(sub_closeness==0))
-	{
-		post("error in find_similar_rhythm(): return values not allocated");
-		return;
-	}
-
-	max_i = possible_durations();
-	// create an array of bools
-	create_array_beats(&src_rhythm_array, src_rhythm);
-
-	// look the main table for closeness to the main rhythm
-	curr_event = src_rhythm;
-	beats=0;
-	strong_ok=0;
-	strong_no=0;
-	strong_ratio=0;
-	/*
-	average_weight = 0;
-	while(curr_event)
-	{
-		int_from_dur = duration2int(curr_event->start);
-		// get the weight of this beat
-		this_weight_int = this_rep->transitions[int_from_dur].weight;
-		this_weight_float = (float) ( ((float) this_weight_int) / ((float) this_rep->max_weight));
-		average_weight += this_weight_float;
-		beats++;
-		curr_event = curr_event->next;
-	}
-	// this is the average weight of this rhythm in this representation
-	if (beats==0)
-	{
-		average_weight = 0;
-	} else
-	{
-		average_weight = (float) (average_weight / ((float) beats));
-	}
-	*/
-	// look all the representation's rhythm 
-	// looking for strong beats corrispondance
-	count_strong = 0;
-	for (i=0; i<max_i; i++)
-	{
-			this_weight_int = this_rep->transitions[i].weight;
-			this_weight_float = (float) (((float) this_weight_int) / ((float) this_rep->max_weight));
-			//post("DEBUG: transition %i this_weight_int=%i max_weight=%i this_weight_float=%f", i, this_weight_int, this_rep->max_weight, this_weight_float);
-			if (this_weight_float > min_to_be_main_rhythm_beat)
-			{
-				// this is a main rhythm beat
-				if (src_rhythm_array[i]>0)
-				{
-					// both playing
-					strong_ok++;
-					//post("DEBUG: beat %i, both playing", i);
-				} else
-				{
-					// strong beat miss
-					strong_no++;
-					//post("DEBUG: beat %i, src not playing", i);
-				}
-				count_strong++;
-			}	
-	}
-
-	// ratio of corresponding strong beats.. 
-	// close to 0 = no corrispondance
-	// close to 1 = corrispondance
-	if (count_strong==0)
-	{
-		strong_ratio = 0;
-	} else
-	{
-		strong_ratio = (float) ( ( ((float) strong_ok) / ((float)count_strong) ) -
-			( ((float) strong_no) / ((float)count_strong) )) ;
-		//post("DEBUG: strong_ratio=%f", strong_ratio);
-	}
-	// for each rhythm in the list
-	// count the number of identical nodes
-	// cound thenumber of different nodes
-	best_subid = curr_subid = INVALID_RHYTHM;
-	best_closeness = curr_closeness = 0;
-	possible_rhythms = this_rep->rhythms;
-	while(possible_rhythms)
-	{
-		// create the table of this rhythm
-		create_array_beats(&tmp_rhythm_array, possible_rhythms->rhythm);
-		sub_ok = sub_no = sub_count = 0;
-		for (i=0; i<max_i; i++)
-		{
-			if (tmp_rhythm_array[i]>0  && src_rhythm_array[i]>0)
-			{
-				sub_ok++;
-			} else if (tmp_rhythm_array[i]==0  && src_rhythm_array[i]==0)
-			{
-				// nothing important
-			} else
-			{
-				sub_no++;
-			}
-			sub_count++;
-		}
-		if (sub_no == 0)
-		{
-			curr_closeness = 1;
-		} else
-		{
-			curr_closeness = (float) (( ((float) sub_ok) - ((float) sub_no) ) / ((float) sub_count));
-		}
-		if (curr_closeness > best_closeness)
-		{
-			best_closeness = curr_closeness;
-			best_subid = possible_rhythms->id;
-		}
-		possible_rhythms = possible_rhythms->next;
-		free(tmp_rhythm_array);
-	}
-
-	// return the better matching rhythm id
-	// and the closeness floats
-
-	*sub_id = best_subid;
-	*sub_closeness = best_closeness;
-	*root_closeness = strong_ratio;
-
-	// free allocated memory
-	free(src_rhythm_array);
-}
-
-void find_rhythm_in_memory(t_rhythm_memory_representation *rep_list, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *id, // the id of the closest rhythm
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 )
-{
-	unsigned short int best_id, curr_id, best_subid, curr_subid;
-	float best_closeness, curr_closeness, best_sub_closeness, curr_sub_closeness;
-	t_rhythm_memory_representation *this_rep;
-	best_closeness = curr_closeness = best_sub_closeness = curr_sub_closeness = 0;
-	best_id = curr_id = best_subid = curr_subid = INVALID_RHYTHM;
-	// for each element of the rep_list
-	this_rep = rep_list;
-	while(this_rep)
-	{
-		// if max_weight maxweight == 0 then there are no rhythms and no table
-		if (this_rep->max_weight)
-		{
-			compare_rhythm_vs_representation(this_rep, 
-				src_rhythm, 
-				&curr_subid, 
-				&curr_closeness, 
-				&curr_sub_closeness);
-			if (curr_closeness > best_closeness)
-			{
-				best_closeness = curr_closeness;
-				best_id = this_rep->id;
-				best_sub_closeness = curr_sub_closeness;
-				best_subid = curr_subid;
-			}
-		}
-		this_rep = this_rep->next;
-	}
-
-	*id = best_id;
-	*sub_id = best_subid;
-	*root_closeness = best_closeness;
-	*sub_closeness = best_sub_closeness;
-	
-
-}
-
-
-// create a new memory for rhythms
-void rhythm_memory_create(t_rhythm_memory_representation **this_rep)
-{
-	create_rhythm_memory_representation(this_rep, 0);
-}
-
-// free the space 
-void rhythm_memory_free(t_rhythm_memory_representation *rep_list)
-{
-	t_rhythm_memory_representation *curr, *nextRep;
-	nextRep = rep_list;
-	while (nextRep)
-	{
-		curr = nextRep;
-		nextRep = curr->next;
-		free_memory_representations(curr);
-	}
-
-}
-// evaluate this rhythm and add it to the memory if is new
-void rhythm_memory_evaluate(t_rhythm_memory_representation *rep_list, // the memory
-							t_rhythm_event *src_rhythm, // the rhythm to evaluate
-							// is it a new rhythm? (0 if no, 1 if new main rhythm, 2 if new subrhythm)
-							unsigned short int *new_rhythm,
-							// the id of the closest rhythm or the new id assigned
-							unsigned short int *id, 
-							// the sub-id of the closest sub-rhythm or the new sub-id assigned
-							unsigned short int *sub_id,
-							// how much this rhythm is close to the root (1=identical, 0=nothing common)
-							float *root_closeness,
-							// how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-							float *sub_closeness 
-							)
-{
-	float root_closeness_found, sub_closeness_found;
-	unsigned short int id_found, sub_id_found, new_id;
-	t_rhythm_memory_representation *curr, *newRep, *lastRep;
-	int found;
-
-	// look for the closest main rhythm and subrhythm
-	find_rhythm_in_memory(rep_list, 
-						 src_rhythm, // the src rhythm 
-						 &id_found, // the id of the closest rhythm
-						 &sub_id_found, // the sub-id of the closest sub-rhythm 
-						 &root_closeness_found, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 &sub_closeness_found // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 );
-
-	// decide if add to the memory or if return the closest
-
-	if (root_closeness_found >= (float)min_to_be_same_rhythm)
-	{
-		// is close enough to be considered a rhythm
-		post("DEBUG: rhythm found");
-		*new_rhythm = 0;
-		*id = id_found;
-		*root_closeness = root_closeness_found;
-		if (sub_closeness_found >= (float)min_to_be_same_subrhythm)
-		{
-			// this is a known subrhythm
-			post("DEBUG: sub-rhythm found");
-			*sub_id = sub_id_found;
-			*sub_closeness = sub_closeness_found;
-			//only in this case free the memory allocated for the rhythm
-			freeBeats(src_rhythm);
-		} else
-		{
-			// add this rhythm as a new subrhythm
-			curr = rep_list;
-			found = 0;
-			while (curr && !found)
-			{
-				if (curr->id == id_found)
-				{
-					// i've found the rhythm
-					found = 1;
-				} else
-				{
-					curr = curr->next;
-				}
-			}
-
-			sub_id_found = add_t_rhythm_memory_element(curr, src_rhythm);
-			sub_closeness_found = 1;
-			*sub_id = sub_id_found;
-			*sub_closeness = sub_closeness_found;
-			*new_rhythm = 2;
-			//post("DEBUG: new subrhythm");
-		}
-	} else
-	{
-		// this is a completely new rhythm!
-		// find the last id and representation
-		curr = rep_list;
-		new_id = 0;
-		lastRep = 0;
-		while (curr)
-		{
-			new_id = curr->id;
-			lastRep = curr;
-			curr = curr->next;
-		}	
-		// create a new representation with a new id
-		new_id++;
-		create_rhythm_memory_representation(&newRep, new_id);
-		// link the representations
-		lastRep->next = newRep;
-		// add the rhythm as subrhythm
-		sub_id_found = add_t_rhythm_memory_element(newRep, src_rhythm);
-		sub_closeness_found = 1;
-		*sub_id = sub_id_found;
-		*sub_closeness = sub_closeness_found;
-		*id = new_id;
-		*root_closeness = 1;
-		*new_rhythm = 1;
-		//post("DEBUG: new rhythm");
-	}
-
-}
-// return 0 if failed finding the rhythm, 1 if the rhythm was found
-int rhythm_memory_get_rhythm(t_rhythm_memory_representation *rep_list, // the memory
-							  t_rhythm_event **out_rhythm, // a pointer to the returned rhythm
-							  // the id of the main rhythm wanted
-							  unsigned short int id, 
-							  // the sub-id of the sub-rhythm wanted
-							  unsigned short int sub_id)
-{
-	// look for this id and subid in memory and return that subrhythm
-	t_rhythm_memory_representation *curr;
-	t_rhythm_memory_element *curr2;
-	curr = rep_list;
-	while (curr)
-	{
-		if (curr->id == id)
-		{
-			// this is the right main rhythm
-			// now look for the correct subid
-			curr2 = curr->rhythms;
-			while (curr2)
-			{
-				if (curr2->id == sub_id)
-				{
-					// i've found the rhythm!
-					*out_rhythm=curr2->rhythm;
-					return 1;
-				}
-				curr2 = curr2->next;
-			}
-
-		}
-
-		curr = curr->next;
-	}
-	// if i am here then i didn't find the rhythm
-	return 0;
-}
-
-
-// ------------------- themes manipulation functions
-
-// set the first note of a sequence
-void setFirstNote(t_note_event **firstEvent, unsigned short int voice, float fstart, float fduration, t_note note)
-{
-	t_duration res;
-	t_note_event *newElement;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = malloc(sizeof(t_note_event));
-	// set the pointers
-	newElement->previous = 0;
-	newElement->next = 0;
-	newElement->voice=voice;
-	newElement->note.chord = note.chord;
-	newElement->note.diatonic = note.diatonic;
-	newElement->note.interval = note.interval;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-	*firstEvent = newElement;
-}
-
-//adds a note at the end of this list
-void concatenateNote(t_note_event *currentEvent, unsigned short int voice, float fstart, float fduration, t_note note)
-{
-	t_duration res;
-	t_note_event *newElement, *lastElement;
-	lastElement = currentEvent;
-	while(lastElement->next)
-		lastElement = lastElement->next;
-	// convert from float to duration
-	res = float2duration(fduration);
-	// allocate a new element of the list
-	newElement = (t_note_event *) malloc(sizeof(t_note_event));
-	// set the pointers
-	newElement->previous = lastElement;
-	newElement->next = 0;
-	lastElement->next = newElement;
-	newElement->voice=voice;
-	newElement->note.chord = note.chord;
-	newElement->note.diatonic = note.diatonic;
-	newElement->note.interval = note.interval;
-	newElement->duration.numerator = res.numerator;
-	newElement->duration.denominator = res.denominator;
-	res = float2duration(fstart);
-	newElement->start.numerator = res.numerator;
-	newElement->start.denominator = res.denominator;
-}
-
-// used to free the memory allocated by this list
-void freeNotes(t_note_event *currentEvent)
-{
-	t_note_event *prev;
-	t_note_event *next;
-
-	// go to the first element of the list
-	while(currentEvent->previous)
-		currentEvent = currentEvent->previous;
-
-	// now free each element
-	next=currentEvent->next;
-	do
-	{
-		prev = currentEvent;
-		next = currentEvent->next;
-		free(currentEvent);
-	} while(next);
-
-}
-
-
-// ------------- function for string manipulation (from string to chords)
-
-// tries to find out absolute tones names in this string
-abs_note_t from_string_to_abs_tone(const char *substr)
-{
-	if (strstr(substr, "C"))
-		return C;
-	if (strstr(substr, "Db"))
-		return Db;
-	if (strstr(substr, "D"))
-		return D;
-	if (strstr(substr, "Eb"))
-		return Eb;
-	if (strstr(substr, "E"))
-		return E;
-	if (strstr(substr, "F"))
-		return F;
-	if (strstr(substr, "Gb"))
-		return Gb;
-	if (strstr(substr, "G"))
-		return G;
-	if (strstr(substr, "Ab"))
-		return Ab;
-	if (strstr(substr, "A"))
-		return A;
-	if (strstr(substr, "Bb"))
-		return Bb;
-	if (strstr(substr, "B"))
-		return B;
-	return C;
-}
-/*
-chord_type_t from_string_to_type(const char *substr)
-{
-	if (strstr(substr, "minor/major 7th"))
-		return kMinMaj7;
-	if (strstr(substr, "major 7th"))
-		return kMaj7;
-	if (strstr(substr, "major"))
-		return kMaj;
-	if (strstr(substr, "minor 7th"))
-		return kMin7;
-	if (strstr(substr, "minor"))
-		return kMin;
-	if (strstr(substr, "half diminished 7th"))
-		return kHalfDim7;
-	if (strstr(substr, "diminished 7th"))
-		return kDim7;
-	if (strstr(substr, "diminished"))
-		return kDim;
-	if (strstr(substr, "augmented"))
-		return kAug;
-	if (strstr(substr, "dominant 7th"))
-		return kDom7;
-	// pland adding chords 30.11.05
-	if (strstr(substr, "dominant b9"))
-		return kDomb9;
-	if (strstr(substr, "major 9th"))
-		return kMaj9;
-	if (strstr(substr, "dominant 9th"))
-		return kDom9;
-	if (strstr(substr, "minor 9th"))
-		return kMin9;
-	if (strstr(substr, "half diminished 9th"))
-		return kHalfDim9;
-	if (strstr(substr, "minor major 9th"))
-		return kMinMaj9;
-	if (strstr(substr, "diminished major 9th"))
-		return kDimMaj9;
-	// TODO: other chords
-	// beware when adding new chords
-	// put shorter names at end of this function!
-	return C;
-}
-*/
-// find the tonality mode in this string
-modes_t from_string_to_mode(const char *substr)
-{
-	if (strstr(substr, "major"))
-		return MAJOR;
-	if (strstr(substr, "minor"))
-		return MINOR;
-
-	// TODO: other modes (doric, misolidian , custom, etc..
-	return C;
-}
-
-// tries to find out absolute tones names in this string
-abs_note_t string2note(const char *substr)
-{
-	if (strstr(substr, "C"))
-		return C;
-	if (strstr(substr, "Db"))
-		return Db;
-	if (strstr(substr, "D"))
-		return D;
-	if (strstr(substr, "Eb"))
-		return Eb;
-	if (strstr(substr, "E"))
-		return E;
-	if (strstr(substr, "F"))
-		return F;
-	if (strstr(substr, "Gb"))
-		return Gb;
-	if (strstr(substr, "G"))
-		return G;
-	if (strstr(substr, "Ab"))
-		return Ab;
-	if (strstr(substr, "A"))
-		return A;
-	if (strstr(substr, "Bb"))
-		return Bb;
-	if (strstr(substr, "B"))
-		return B;
-	return C;
-}
-
-chord_type_t string2mode(const char *substr)
-{
-	// beware when adding new chords
-	// put shorter names at end of this function!
-	if (strstr(substr, "unison"))
-		return kUnison;
-	if (strstr(substr, "major 7 b9 13"))
-		return kM7b913;
-	if (strstr(substr, "major 7th #13"))
-		return kMaj7s13;
-	if (strstr(substr, "major 7 b9 #13"))
-		return kM7b9s13;
-	if (strstr(substr, "dominant 7th b13"))
-		return kDom7b13;
-	if (strstr(substr, "major 7th #5"))
-		return kMaj7s5;
-	if (strstr(substr, "major 7th b5"))
-		return kMaj7b5;
-	if (strstr(substr, "dominant 7th #5"))
-		return kDom7s5;
-	if (strstr(substr, "dominant 7th b5"))
-		return kDom7b5;
-	if (strstr(substr, "half diminished 9th"))
-		return kHalfDim9;
-	if (strstr(substr, "minor major 9th"))
-		return kMinMaj9;
-	if (strstr(substr, "diminished major 9th"))
-		return kDimMaj9;
-	if (strstr(substr, "major 9th b5"))
-		return kMaj9b5;
-	if (strstr(substr, "dominant 9th b5"))
-		return kDom9b5;
-	if (strstr(substr, "dominant 9th b13"))
-		return kDom9b13;
-	if (strstr(substr, "minor 9th #11"))
-		return kMin9s11;
-	if (strstr(substr, "minor/maj 9th b11"))
-		return kmM9b11;
-	if (strstr(substr, "major 7th b9"))
-		return kMaj7b9;
-	if (strstr(substr, "major 7th #5 b9"))
-		return kMaj7s5b9;
-	if (strstr(substr, "dominant 7th b9"))
-		return kDom7b9;
-	if (strstr(substr, "minor 7th b9"))
-		return kMin7b9;
-	if (strstr(substr, "minor b9 #11"))
-		return kMinb9s11;
-	if (strstr(substr, "half diminished b9"))
-		return kHalfDimb9;
-	if (strstr(substr, "diminished b9"))
-		return kDim7b9;
-	if (strstr(substr, "minor/major b9"))
-		return kMinMajb9;
-	if (strstr(substr, "diminished M7 b9"))
-		return kDimMajb9;
-	if (strstr(substr, "major 7th #9"))
-		return kMaj7s9;
-	if (strstr(substr, "dominant #9"))
-		return kDom7s9;
-	if (strstr(substr, "major 7th #11"))
-		return kMaj7s11;
-	if (strstr(substr, "major 9th #13"))
-		return kMaj9s13;
-	if (strstr(substr, "major #9 #11"))
-		return kMs9s11;
-	if (strstr(substr, "half diminished b11"))
-		return kHDimb11;
-	if (strstr(substr, "major 11th"))
-		return kMaj11;
-	if (strstr(substr, "dominant 11th"))
-		return kDom11;
-	if (strstr(substr, "minor 11th"))
-		return kMin11;
-	if (strstr(substr, "half diminished 11th"))
-		return kHalfDim11;
-	if (strstr(substr, "diminished 11th"))
-		return kDim11;
-	if (strstr(substr, "minor/major 11th"))
-		return kMinMaj11;
-	if (strstr(substr, "diminished maj 11th"))
-		return kDimMaj11;
-	if (strstr(substr, "major 11th b5"))
-		return kMaj11b5;
-	if (strstr(substr, "major 11th #5"))
-		return kMaj11s5;
-	if (strstr(substr, "major 11th b9"))
-		return kMaj11b9;
-	if (strstr(substr, "major 11th #9"))
-		return kMaj11s9;
-	if (strstr(substr, "major 11th b13"))
-		return kMaj11b13;
-	if (strstr(substr, "major 11th #13"))
-		return kMaj11s13;
-	if (strstr(substr, "major 11th b5 b9"))
-		return kM11b5b9;
-	if (strstr(substr, "dominant 11th b5"))
-		return kDom11b5;
-	if (strstr(substr, "dominant 11th b9"))
-		return kDom11b9;
-	if (strstr(substr, "dominant 11th #9"))
-		return kDom11s9;
-	if (strstr(substr, "half dim 11th b9"))
-		return kHalfDim11b9;
-	if (strstr(substr, "dominant #11"))
-		return kDom7s11;
-	if (strstr(substr, "minor 7th #11"))
-		return kMin7s11;
-	if (strstr(substr, "dominant 13th #11"))
-		return kDom13s11;
-	if (strstr(substr, "chromatic"))
-		return kChrom;
-	if (strstr(substr, "dominant b9"))
-		return kDomb9;
-	if (strstr(substr, "major 9th"))
-		return kMaj9;
-	if (strstr(substr, "dominant 9th"))
-		return kDom9;
-	if (strstr(substr, "minor 9th"))
-		return kMin9;
-	if (strstr(substr, "minor/major 7th"))
-		return kMinMaj7;
-	if (strstr(substr, "major 7th"))
-		return kMaj7;
-	if (strstr(substr, "half diminished 7th"))
-		return kHalfDim7;
-	if (strstr(substr, "diminished 7th"))
-		return kDim7;
-	if (strstr(substr, "major"))
-		return kMaj;
-	if (strstr(substr, "minor 7th"))
-		return kMin7;
-	if (strstr(substr, "minor"))
-		return kMin;
-	if (strstr(substr, "diminished"))
-		return kDim;
-	if (strstr(substr, "augmented"))
-		return kAug;
-	if (strstr(substr, "dominant 7th"))
-		return kDom7;
-
-	return kUnison;
-}
-
diff --git a/externals/frankenstein/common.h b/externals/frankenstein/common.h
deleted file mode 100644
index 53baa3419..000000000
--- a/externals/frankenstein/common.h
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
-
-header file for common functions used by the externals of the "frank framework".
-
-the frank framework is a set of pd externals implementing AI agents for improvisation.
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-*/
-
-// here i put common data structures and functions
-
-// ------------------------------------------------ data structures
-
-
-// --------- theme notation
-
-
-typedef struct t_note t_note;
-typedef struct t_duration t_duration;
-typedef struct t_note_event t_note_event;
-
-typedef struct t_note
-{
-	unsigned short int chord; // 0 if is not a chord (strong) note, 1 if it is
-	unsigned short int diatonic; // 0 if is a note not belonging to this tonality
-	int interval; // semitones from prefious note
-};
-typedef struct t_duration
-{
-	unsigned short int numerator; // like in music notation: in a 1/4 note the numerator is 1
-	unsigned short int denominator; // like in music notation: in a 1/4 note the denominator is 4
-};
-struct t_note_event
-{
-	unsigned short int voice;
-	t_note note;
-	t_duration start; // moment of the noteon event
-	t_duration duration; // duration of this event
-	t_note_event *previous; // this is a list, link to the previous element
-	t_note_event *next;  // this is a list, link to the next element
-};
-
-
-// --------- rhythm notation
-
-// data structures
-
-// this describes a rhythm
-typedef struct t_rhythm_event t_rhythm_event;
-struct t_rhythm_event
-{
-	unsigned short int voice;
-	t_duration start; // moment of the noteon event
-	t_duration duration; // duration of this event
-	t_rhythm_event *previous; // this is a list, link to the previous element
-	t_rhythm_event *next;  // this is a list, link to the next element
-};
-
-// rhythms memory graph
-
-// list implementation
-// this implements a graph that stores the memory of the current rhythm sub-elements
-// list of links
-// the actual implementation will be an array of nodes, each node 
-
-// this describes a probability transition table
-typedef struct t_rhythm_memory_arc t_rhythm_memory_arc;
-typedef struct t_rhythm_memory_node t_rhythm_memory_node;
-// graph node
-struct t_rhythm_memory_node
-{
-	// start is implicit:
-	// this is in an array
-	// use int2duration and duration2int 
-	// against the index in the array to get its value
-	unsigned short int first; // how many times this has been the first event
-	unsigned short int weight; // how many times this has been an event
-	t_rhythm_memory_arc *arcs; // the list of arcs to other nodes
-} ;
-// graph arc: related to t_rhythm_memory_node
-struct t_rhythm_memory_arc
-{
-	unsigned short int to_node_index; // the target of this link (arc)
-	t_rhythm_memory_arc *next_arc; // next link in the list
-} ;
-// it will be arranged in a heap list.. ?
-
-//#define num_possible_denominators 11
-//static unsigned short int possible_denominators[] = {1,2,3,4,6,8,12,16,18,24,32};
-#define num_possible_denominators 7
-static unsigned short int possible_denominators[] = {1,2,3,4,6,8,12};
-
-// the minimum percentage for a beat to be considered part of the main rhythm
-#define min_to_be_main_rhythm_beat 0.7
-// minimum value to be considered a subrhythm of this rhythm
-#define min_to_be_same_rhythm 0.7
-// minimum percentage to be considered this exact rhythm
-#define min_to_be_same_subrhythm 0.9
-
-// this defines a space for rhythms, variations, transitions and representations
-typedef struct t_rhythm_memory_representation t_rhythm_memory_representation;
-typedef struct t_rhythm_memory_element t_rhythm_memory_element;
-typedef struct t_rhythm_memory_first_node t_rhythm_memory_first_node;
-// element of a list of rhythms
-struct t_rhythm_memory_element
-{
-	t_rhythm_event *rhythm; // this rhythm
-	t_rhythm_memory_element *next; // next element of the list
-	unsigned short int id; // its sub id
-} ;
-// a rhythm in memory, each rhythm is :
-// - its probability transition table
-// - similar rhythms played
-// - each one has its main id and each different played rhythm its sub-id
-struct t_rhythm_memory_representation
-{
-	t_rhythm_memory_node *transitions;
-	unsigned short int max_weight;
-	t_rhythm_memory_element *rhythms;
-	unsigned short int id; // its main id
-	unsigned short int last_sub_id; // last sub assigned
-	// I can express a list of representations with this data structure
-	t_rhythm_memory_representation *next;
-} ;
-
-// define a return value to express "rhythm not found in this representation"
-#define INVALID_RHYTHM 65535
-
-// chords data structure
-// tells you how many durations there // how can a chord be?
-#define TYPES_NUM 69 // keep me updated
-typedef enum {
-	// this enumerator is from maxlib chord 
- kUnison = 0,
-kMaj = 1, 
-kMin = 2, 
-kDim = 3, 
-kAug = 4, 
-kMaj7 = 5, 
-kDom7 = 6, 
-kMin7 = 7, 
-kHalfDim7 = 8, 
-kDim7 = 9, 
-kMinMaj7 = 10, 
-kMaj7s5 = 11,
-kMaj7b5 = 12,
-kDom7s5 = 13,
-kDom7b5 = 14,
-kDomb9 = 15, 
-kMaj9 = 16,
-kDom9 = 17,
-kMin9 = 18,
-kHalfDim9 = 19,
-kMinMaj9 = 20,
-kDimMaj9 = 21,
-kMaj9b5 = 22,
-kDom9b5 = 23,
-kDom9b13 = 24,
-kMin9s11 = 25,
-kmM9b11 = 26,
-kMaj7b9 = 27,
-kMaj7s5b9 = 28,
-kDom7b9 = 29,
-kMin7b9 = 30,
-kMinb9s11 = 31,
-kHalfDimb9 = 32,
-kDim7b9 = 33,
-kMinMajb9 = 34, 
-kDimMajb9 =35,
-kMaj7s9 = 36,
-kDom7s9 = 37,
-kMaj7s11 = 38,
-kMs9s11 = 39,
-kHDimb11 = 40,
-kMaj11 = 41,
-kDom11 = 42,
-kMin11 = 43,
-kHalfDim11 = 44,  
-kDim11 = 45,
-kMinMaj11 =46, 
-kDimMaj11 =47,
-kMaj11b5 = 48,
-kMaj11s5 = 49,
-kMaj11b9 = 50,
-kMaj11s9 = 51,
-kMaj11b13 = 52,
-kMaj11s13 = 53,
-kM11b5b9 = 54,
-kDom11b5 = 55,
-kDom11b9 = 56,
-kDom11s9 = 57,
-kHalfDim11b9 = 58,
-kDom7s11 = 59,
-kMin7s11 = 60,
-kDom13s11 = 61,
-kM7b913 = 62,
-kMaj7s13 = 63,
-kMaj9s13 = 64,
-kM7b9s13 = 65,
-kDom7b13 = 66,
-kChrom = 67,
-kNone = 68
-			} chord_type_t;
-
-// how many tones do we have in our octave?
-#define TONES_NUM 12 // keep me updated
-typedef enum {
-			I=0,
-			Id=1,
-			II=2,
-			IId=3,
-			III=4,
-			IV=5,
-			IVd=6,
-			V=7,
-			Vd=8,
-			VI=9,
-			VId=10,
-			VII=11			
-			} chord_tone_t;
-
-// how many nodes does this graph have?
-// for now TYPES_NUM*TONES_NUM
-// when we introduce modulation
-// we'll have more
-#define NODES_NUM TYPES_NUM*TONES_NUM
-
-// this defines a chord in a tonality
-typedef struct _chord
-{
-	chord_type_t mode;
-	chord_tone_t note;
-} chord_t;
-
-// enumeration of absolute notes 
-// i'll need this when parsing strings like "C major"
-typedef enum {
-			C=0,
-			Db=1,
-			D=2,
-			Eb=3,
-			E=4,
-			F=5,
-			Gb=6,
-			G=7,
-			Ab=8,
-			A=9,
-			Bb=10,
-			B=11			
-			} abs_note_t;
-
-// enumeration of modes
-// i'll start with minor and major only
-// but we could add phrigian, doric, misolidian ,e tc...
-#define MODES_NUM 2
-typedef enum {
-		MAJOR=0,
-		MINOR=1	} modes_t;
-
-#define MODULATIONS_NUM MODES_NUM*TONES_NUM
-
-
-
-// ------------------------------------------------ functions
-
-// ----------- rhythm manipolation functions
-
-// converts from integer to duration: used to know this table index
-// what corresponds in terms of duration
-t_duration int2duration(int n);
-// converts from duration to integer: used to know this duration
-// what corresponds in terms table index
-unsigned short int duration2int(t_duration dur);
-
-int possible_durations();
-
-// converts from float (0-1) to duration. it performs quantization
-t_duration float2duration(float fduration);
-
-// converts from numerator/denominator to a float (0-1)
-float duration2float(t_duration duration);
-
-// --- rhythms creation and manupulation functions
-
-// set the first beat of a sequence
-// this also creates a new rhythm
-void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float fstart, float fduration);
-
-//adds a beat at the end of this list
-void concatenateBeat(t_rhythm_event *currentEvent, unsigned short int voice, float fstart, float fduration);
-
-// used to free the memory allocated by this list
-void freeBeats(t_rhythm_event *currentEvent);
-
-
-// --- memory representation of rhythms
-
-// create an array of nodes (without arcs?) to express the beats in this rhythm (the noteon moments)
-void create_array_beats(unsigned short int **this_array, t_rhythm_event *currentEvent);
-
-// add an arc to this node
-void add_t_rhythm_memory_arc(t_rhythm_memory_node *srcNode, unsigned short int dstNode);
-
-// create and initialize this representation, allocate memory for the pointers
-// I must pass its id also
-void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep, unsigned short int id);
-
-// add a new rhythm in the list of similar rhythms related to one main rhythm
-// the sub id is auto-generated and returned
-unsigned short int add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm);
-
-// free the list of representations
-void free_memory_representations(t_rhythm_memory_representation *this_rep);
-
-// compares this rhythm to this representation
-// and tells you how close it is to it
-// I return values using pointers
-// the unsigned short and the 2 floats should be already allocated
-void compare_rhythm_vs_representation(t_rhythm_memory_representation *this_rep, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 );
-
-// same as before but search all available representations
-void find_rhythm_in_memory(t_rhythm_memory_representation *rep_list, 
-						 t_rhythm_event *src_rhythm, // the src rhythm 
-						 unsigned short int *id, // the id of the closest rhythm
-						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
-						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
-						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-						 );
-
-// the following are the functions that externals should use
-/* usage:
-
-	// first of all declare a pointer for the memory
-	t_rhythm_memory_representation *rhythms_memory;
-	// initialize it
-	rhythm_memory_create(&this_rep);
-	// then each time you get a rhythm let the memory evaluate it and
-	// tell you if is a new rhythm or a old one
-	float root_closeness, sub_closeness;
-	unsigned short int id, subid, is_it_a_new_rhythm;
-	rhythm_memory_evaluate(rhythms_memory, rhythm, &is_it_a_new_rhythm,
-							&id, &subid, &root_closeness, &sub_closeness);
-	if (is_it_a_new_rhythm==1)
-	{
-		// it was a completely new rhythm
-		// id tells us new id assigned
-		// and subid tells us the new sub id assigned
-	}
-	if (is_it_a_new_rhythm==2)
-	{
-		// it was a new sub-rhythm of a known rhythm
-		// id tells us rht root rhythm id
-		// and subid tells us the new sub id assigned
-	}
-	if (is_it_a_new_rhythm==0)
-	{
-		// it was a known rhythm and subrhythm
-		// id and subid tell us the identificator
-	}
-	// i can also use root_closeness and sub_closeness and is_it_a_new_rhythm
-	// to know how much novelty there was in this rhythm
-
-	// i can ask the memory to give me back a specific rhythm
-	t_rhythm_event *wanted_rhythm
-	int rhythm_found = rhythm_memory_get_rhythm(rhythms_memory,
-							  wanted_rhythm,
-							  id, // the id of the main rhythm wanted
-							  sub_id // the sub-id of the sub-rhythm wanted
-							  );
-	if (rhythm_found == 0)
-	{
-		// that rhythm was not present!
-	}
-
-	// when i am ready I should free the memory
-	rhythm_memory_free(rhythms_memory);
-*/
-
-
-// create a new memory for rhythms
-void rhythm_memory_create(t_rhythm_memory_representation **this_rep);
-// free the space 
-void rhythm_memory_free(t_rhythm_memory_representation *rep_list);
-// evaluate this rhythm and add it to the memory if is new
-void rhythm_memory_evaluate(t_rhythm_memory_representation *rep_list, // the memory
-							t_rhythm_event *src_rhythm, // the rhythm to evaluate
-							// is it a new rhythm? (0 if no, 1 if new main rhythm, 2 if new subrhythm)
-							unsigned short int *new_rhythm,
-							// the id of the closest rhythm or the new id assigned
-							unsigned short int *id, 
-							// the sub-id of the closest sub-rhythm or the new sub-id assigned
-							unsigned short int *sub_id,
-							// how much this rhythm is close to the root (1=identical, 0=nothing common)
-							float *root_closeness,
-							// how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
-							float *sub_closeness 
-							);
-// return 0 if failed finding the rhythm, 1 if the rhythm was found
-int rhythm_memory_get_rhythm(t_rhythm_memory_representation *rep_list, // the memory
-							  t_rhythm_event **out_rhythm, // a pointer to the returned rhythm
-							  // the id of the main rhythm wanted
-							  unsigned short int id, 
-							  // the sub-id of the sub-rhythm wanted
-							  unsigned short int sub_id);
-
-// -------- notes manipulation functions
-
-// set the first beat of a sequence
-void setFirstNote(t_note_event **firstEvent, unsigned short int voice, float fstart, float fduration, t_note note);
-
-//adds a beat at the end of this list
-void concatenateNote(t_note_event *currentEvent, unsigned short int voice, float fstart, float fduration, t_note note);
-
-// used to free the memory allocated by this list
-void freeNotes(t_note_event *currentEvent);
-
-
-
-
-// ------------- function for string manipulation (from string to chords)
-
-// tries to find out absolute tones names in this string
-abs_note_t from_string_to_abs_tone(const char *substr);
-chord_type_t from_string_to_type(const char *substr);
-modes_t from_string_to_mode(const char *substr);
-chord_type_t string2mode(const char *substr);
-abs_note_t string2note(const char *substr);
diff --git a/externals/frankenstein/doc/LINKS.txt b/externals/frankenstein/doc/LINKS.txt
deleted file mode 100644
index d8685c531..000000000
--- a/externals/frankenstein/doc/LINKS.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-
-open source libs ready to be used...
-
-AthenaCL:
-is a python software for algorithmic composition
-we could use some code through pyext
-http://www.flexatone.net/athena.html
-this is specific for post tonal theory
-http://www.flexatone.net/athenaDocs/www/ch-analysis.htm
-
-AIMA Python code, working agents, etc.
-http://aima.cs.berkeley.edu/python/readme.html
-
-BEAGLE, implements co-evolution, open source, C++
-beagle.gel.ulaval.ca
-
-open source c++ genetic algorithm: 
-http://lancet.mit.edu/ga/
-
-plain ansi C (multi platform?):
-http://sourceforge.net/projects/ga-lib
-
-another in c++:
-http://sourceforge.net/projects/ga2
-
-
diff --git a/externals/frankenstein/doc/README.txt b/externals/frankenstein/doc/README.txt
deleted file mode 100644
index 524dfc191..000000000
--- a/externals/frankenstein/doc/README.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-***README***
-
-Vatic, davide, please add notes and thoughts here for now...
-
-****Ruby/Gridflow instructions***
-
-In order to use some of the objects in the test patches, for now just [random_choice] within [manager] in the chord_melo_test patches, you will need GridFlow and Ruby installed.
-
-Please find instructions here:
-
-http://gridflow.ca/latest/doc/install.html
-
-Once you have Ruby 1.8.0 or above installed, and GridFlow is happily starting in Puredata, you should see the following at PD startup:
-
-setting up Ruby-for-PureData...
-we are using Ruby version 1.8.1
-[gf] This is GridFlow 0.8.1 within Ruby version 1.8.1
-
-Or, something similar.
-
-Now, you will need to copy ruby/.gridflow_startup to your home directory. If it is somewhere else than /home/you/ or /Users/you, you can always load it from pd by using the Ruby console input (see pd's console window, and under IN - OUT), by doing:
-
-load "/path/to/.gridflow_startup
-
-You're now able to write puredata objects in Ruby!
-
-
diff --git a/externals/frankenstein/doc/chords_graph.doc b/externals/frankenstein/doc/chords_graph.doc
deleted file mode 100755
index e8390c2803851ad7d11fef9c262a87072c6dd055..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 75264
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
Lr__%Bd=&WqGq3PE

diff --git a/externals/frankenstein/doc/chords_graph.sxw b/externals/frankenstein/doc/chords_graph.sxw
deleted file mode 100755
index 9f901ec9193e401c1f5dfe9bb0a9c16c2dc7332f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16853
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

diff --git a/externals/frankenstein/doc/genomes-notes.txt b/externals/frankenstein/doc/genomes-notes.txt
deleted file mode 100644
index e39e52434..000000000
--- a/externals/frankenstein/doc/genomes-notes.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-
-***read README.txt before this file***
-
-this ideas are related to shostakovich prelude n.2 in a minor
-
-
-how do we map notes <--> genome ?
-
-
-
---------------- 1st idea: whole MIDI, absolute values
-
-keep all the chromatic values, all midi notes
-
-the fitness functions and crossover functions will manage the thing
-(no notes outside current chord, etc..)
-
-each gene is a byte, 
-- first 7 bits for midi note (unsigned char, 0-127)
-- last bit for rest (1=play, 0=rest)
-
-why yes: 
--not restricted to prelude n.2 musical space
--not restricted to tonal music space
-
-why not:
--huge transition table, intervals table
--we don't want values we don't need
--difficult to write fitness functions that check for tonality, chords, etc..
-
----------------- 2nd idea: chromatic scale, chord relative
-
-notes are relative to current chord but still in a chromatic space.
-the critics must choose the diatonic ones and discard atonal ones
-
-each gene is a byte, 
-- first 7 bits for midi note (unsigned char, 0-127)
-- last bit for rest (1=play, 0=rest)
-
-
-why yes:
--we can use the same melody to different chords
--not restricted to prelude n.2 musical space
--not restricted to tonal music space
-
-why not:
--still huge tables
--difficult to write fitness functions that check for tonality, chords, etc..
-
----------------- 3rd idea: diatonic scale, chord relative
-
-the musical space is diatonic, no more chromatic. critics need to work much less, 
-they only have to know if a note is in the chord or not.
-
-problem: how to use chromatic passing notes this way?
-
-possibile notes are 7*4=28 (7 notes per octave) + passing notes
-we could use : 1 byte for each gene
-- 5 bits for note (0-32)
-- 2 bit for cromatic passing note (0=no, 1=descending, 2=ascending, 4=not used)
-- 1 bit for rests
-
-
-why yes:
--we can use the same melody to different chords
--quick fitness functions
--we don't have notes we don't want
-
-why not:
--restricted to tonal music space
-
----------------- 4th idea: chord notes
-
-
-the musical space are the chord notes, not even the diatonic scale. 
-critics don't have to check anything! 
-
-problem: how to use (chromatic or diatonic) passing notes?
-
-possibile notes are 3*4=12 (3 notes per octave) + passing notes
-we should use a struct for the gene:
-{
-	- note (from 0 to 16)
-	- rest (0/1)
-	- passing_note (from -4 to +4)
-}
-
-possible passing notes are 9: 
-no passing, from -4 semitones to +4 semitones
-
-the fitness functions and crossover functions will have to care sbout rules for passing notes:
-+3 and +4 are allowed only for the 3rd note of the chord
--4 and -3 are allowed only for the 1st note of the chord
-every passing note can exist only if the note before was next to it and proceeding in the same direction
-each passing note must resolve on the nearer chord note in the right direction
-
-why yes:
--we can use the same melody to different chords
--quickest fitness functions
--we don't have notes we don't want
-
-why not:
--restricted to tonal music space
--restricted to 3-notes-chords-based harmonies (jazz is 4 notes based)
-
-
-
-
-
-common problems:
-
-i can think a way to rule passing notes (a passing note must come from a consonant note and go to a consonant note)
-but what can we do if a passing not is at the very end of the melody? (i don't know what will the next note be)
-...we should have to know what will be the next chord...
-
-
-
-
-
-
-
-
-
-Davide Morelli
-17.09.05
diff --git a/externals/frankenstein/doc/maxlibnotes.txt b/externals/frankenstein/doc/maxlibnotes.txt
deleted file mode 100644
index 532ddf974..000000000
--- a/externals/frankenstein/doc/maxlibnotes.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-081005
-
--the most universally useful maxlib object has to be [borax], since it not only gives us velocity, pitch, duration, but also can detect the number of voices currently playing, various delta values, can count note-ons (incrementally), amongst other things. It's like a swiss army knife of music analysis, and I suspect this is where our live input (in davide's diagram) needs to make use of maxlib in order to derive what we will feed the chord extractor, then graph. 
-
--[gestalt] is for monophonic melodies only, but with [tilt], will detect the onset of melodies
-
--[chord] is based on Robert Rowe's Machine Musicianship algorithms for chord detection, and will successfully detect most chords, but most importantly will give us the MIDI note number of the bass note, and its -class-.
-
--[history] is interesting, because while it calculates the average value fed into its first inlet over N millisecond periods, it can also tell us the general tendency (up = 1, down = -1), which may be useful somewhere in the agent, to build more musical output. Also, [edge] is interesting because it detects falling and rising 'edges' in a sequence.
-
--[iso] is interesting, because it can store and play sequences of MIDI notes -and- onsets in milliseconds, but of course we're once again talking about monophonic melodies, unless we run several in parallel somehow, but they'd have to 'know' about each other.
-
--interestingly, [subst] performs what I see as the bit-shifting part of our current GA construction, and may actually help in understanding how we'd build a solderer agent.
-
--[match] could be useful, because it matches incoming data against up to 16 creation arguments, and outputs a list; this might help in determining how closely the live player is playing against generated output or suggestions? just a thought.
-
diff --git a/externals/frankenstein/doc/model.doc b/externals/frankenstein/doc/model.doc
deleted file mode 100755
index af2fcc23911065b48d77d7216d6449d9c7516336..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17920
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
U1VMWw!{6WUG15K+ycGHW0|@r74gdfE

diff --git a/externals/frankenstein/doc/model.sxw b/externals/frankenstein/doc/model.sxw
deleted file mode 100755
index b3b446feee935688e1bb0f32a5060ddf8e9d35de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6944
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
KKv2efQu;sqbM<2Y

diff --git a/externals/frankenstein/frankenstein.sln b/externals/frankenstein/frankenstein.sln
deleted file mode 100755
index 0542fd83b..000000000
--- a/externals/frankenstein/frankenstein.sln
+++ /dev/null
@@ -1,45 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chords_memory", "chords_memory.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rhythms_memory", "rhythms_memory.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "themes_memory", "themes_memory.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "harmonizer", "harmonizer.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "voicing_analyzer", "voicing_analyzer.vcproj", "{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-EndProject
-Global
-	GlobalSection(SolutionConfiguration) = preSolution
-		ConfigName.0 = Debug
-		ConfigName.1 = Release
-	EndGlobalSection
-	GlobalSection(ProjectDependencies) = postSolution
-	EndGlobalSection
-	GlobalSection(ProjectConfiguration) = postSolution
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.ActiveCfg = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Debug.Build.0 = Debug|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.ActiveCfg = Release|Win32
-		{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}.Release.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-	EndGlobalSection
-	GlobalSection(ExtensibilityAddIns) = postSolution
-	EndGlobalSection
-EndGlobal
diff --git a/externals/frankenstein/harmonizer.c b/externals/frankenstein/harmonizer.c
deleted file mode 100644
index 56180f92b..000000000
--- a/externals/frankenstein/harmonizer.c
+++ /dev/null
@@ -1,823 +0,0 @@
-/* 
-harmonizer:
-this external build voicing from a chord to another.
-takes n voices (midi) as input
-you can set the current chord
-you can ask for next note of each voice to get to a target chord
-
-usefull to create chorals
-
-voicing is built using traditional GA (not co-evolving GA)
-
-voicing rules are hardcoded and are:
-- no parallel 8ths nor 5ths
-- better no hidden 8ths nor 5ths
-- better if uniform voice spacing (except for the bass)
-- better if little intervals
-- no all voices same direction
-- no voices outside limits
-- better complete chords
-
-TODO:
-would be nice to be able so set some rule at runtime 
-or at least set the importance of rules in realtime..
-
-
-*/
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-// for string manipulation
-#include <string.h>
-#include <ctype.h>
-#include "m_pd.h"
-#include "common.h"
-
-// to sort arrays
-#include "sglib.h"
-
-#define MAX_POPULATION 500
-
-#define DEF_PROB_MUTATION 0.03f
-
-#define VOICES 5
-
-#define NOTES_RANGE 80 // this should be multiple of 16
-#define LOWER_POSSIBLE_NOTE 24 // lower note possible, it should be a C
-#define POSSIBLE_NOTES (NOTES_RANGE/12*5) // 5 is the max number of notes in a chord
-
-// default values 
-#define DEF_WIDENESS 3 // 3 octaves
-#define DEF_CENTER_NOTE 72 // central C
-// testing i noticed that we don't need more than 1 generation..
-// this is because we create an initial population that is really good
-// we may not need to crossover at all!
-#define GENERATIONS 1
-
-#define DEBUG 0 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-static t_class *harmonizer_class;
-
-
-
-// this defines a chord in a tonality
-typedef struct _chord_abs
-{
-	chord_type_t mode;
-	abs_note_t note;
-} chord_abs_t;
-
-
-typedef struct _harmonizer
-{
-    t_object x_obj; // myself
-	// genotypes
-	//int population[MAX_POPULATION][VOICES];
-	//int current_voices[VOICES];
-	int *population[MAX_POPULATION];
-	int *current_voices;
-	chord_abs_t current_chord;
-	chord_abs_t target_chord;
-	int target_notes[POSSIBLE_NOTES];
-	t_outlet *l_out;
-	int voices;
-	float wideness;
-	int center_note;
-	float i_like_parallelism;
-	float small_intervals;
-	//TODO
-//	int lower_octave;
-//	int notes_range;
-	
-} t_harmonizer;
-
-// I build a table of possible notes
-// are the notes (midi)that form target_chord
-void build_possible_notes_table(t_harmonizer *x)
-{
-	int i, octave, basenote;
-	int n1, n2, n3, n4, n5;
-	n1=n2=n3=n4=0; // there always is the fundamental
-	if (DEBUG_VERBOSE)
-		post("build_possible_notes_table target_chord.mode=%i target_chord.note=%i", x->target_chord.mode, x->target_chord.note);
-	switch (x->target_chord.mode)
-	{
-		case kMaj:		n2=4; n3=7; n4=0;n5=0;break;
-		case kMin:		n2=3; n3=7; n4=0;n5=0;break;
-		case kDim:		n2=3; n3=6; n4=0;n5=0;break;
-		case kAug:		n2=4; n3=8; n4=0;n5=0;break;
-		case kMaj7:		n2=4; n3=7; n4=11;n5=0;break;
-		case kDom7:		n2=4; n3=7; n4=10;n5=0;break;
-		case kMin7: 	n2=3; n3=7; n4=10;n5=0;break;
-		case kHalfDim7:	n2=3; n3=6; n4=10;n5=0;break;
-		case kDim7:		n2=3; n3=6; n4=9;n5=0;break;
-		case kMinMaj7:	n2=4; n3=7; n4=11;n5=0;break;
-
-		case kMaj7b9:	n2=4; n3=7; n4=11;n5=1;break;
-		case kMaj9:		n2=4; n3=7; n4=11;n5=2;break;
-		//case kMinMaj7:	n2=4; n3=7; n4=11;n5=3;break;
-		//case kMaj7:		n2=4; n3=7; n4=11;n5=4;break;
-		case kDom7s11:	n2=4; n3=7; n4=10;n5=6;break;
-		case kDomb9:	n2=4; n3=7; n4=10;n5=1;break;
-		case kMaj7s5:	n2=4; n3=8; n4=11;n5=0;break;
-		case kMin9:		n2=3; n3=7; n4=2;n5=0;break;
-
-		case kDom9:		n2=4; n3=7; n4=10;n5=2;break;
-
-		case kM7b9s13:		n2=1; n3=10; n4=11;n5=4;break;
-		case kMinMajb9:		n2=1; n3=3; n4=11;n5=7;break;
-		case kDimMajb9:		n2=3; n3=6; n4=11;n5=1;break;
-
-		case kMinMaj9:		n2=3; n3=7; n4=11;n5=2;break;
-		case kHalfDimb9:	n2=3; n3=6; n4=1;n5=10;break;
-		case kDim7b9:		n2=3; n3=6; n4=1;n5=9;break;
-		case kMaj7s9:		n2=3; n3=4; n4=7;n5=11;break;
-		case kDom7s9:		n2=3; n3=4; n4=7;n5=10;break;
-		case kMaj11:		n2=4; n3=5; n4=7;n5=11;break;
-		case kMaj7b5:		n2=4; n3=6; n4=11;n5=0;break;
-		case kMaj7s13:		n2=4; n3=7; n4=11;n5=10;break;
-
-		case kUnison:		n2=0; n3=0; n4=0;n5=0;break;
-
-
-		case kDom7b5:		n2=4; n3=6; n4=10;n5=0;break;
-
-		case kHalfDim9:		n2=3; n3=6; n4=10;n5=2;break;
-
-		case kMaj9b5:		n2=4; n3=6; n4=11;n5=2;break;
-		case kDom9b5:		n2=4; n3=6; n4=10;n5=2;break;
-		case kDom9b13:		n2=4; n3=2; n4=8;n5=10;break;
-		case kMin9s11:		n2=2; n3=3; n4=6;n5=7;break;
-		case kmM9b11:		n2=3; n3=11; n4=2;n5=4;break;
-
-		case kMaj7s5b9:		n2=2; n3=4; n4=8;n5=11;break;
-		case kDom7b9:		n2=1; n3=4; n4=7;n5=10;break;
-		case kMin7b9:		n2=1; n3=3; n4=7;n5=10;break;
-		case kMinb9s11:		n2=1; n3=3; n4=7;n5=6;break;
-
-		case kMaj7s11:		n2=4; n3=6; n4=7;n5=11;break;
-		case kMs9s11 :		n2=3; n3=4; n4=6;n5=7;break;
-		case kHDimb11 :		n2=3; n3=6; n4=10;n5=4;break;
-
-		case kDom11 :		n2=4; n3=7; n4=10;n5=5;break;
-		case kMin11 :		n2=3; n3=7; n4=5;n5=0;break;
-		case kHalfDim11 :	n2=3; n3=6; n4=10;n5=5;break;
-		case kDim11 :		n2=3; n3=6; n4=9;n5=5;break;
-		case kMinMaj11 :	n2=3; n3=7; n4=11;n5=5;break;
-		case kDimMaj11 :	n2=3; n3=6; n4=11;n5=5;break;
-		case kMaj11b5 :		n2=4; n3=6; n4=5;n5=0;break;
-		case kMaj11s5 :		n2=4; n3=5; n4=8;n5=0;break;
-		case kMaj11b9 :		n2=4; n3=5; n4=7;n5=1;break;
-		case kMaj11s9 :		n2=4; n3=5; n4=7;n5=3;break;
-		case kMaj11b13 :	n2=4; n3=5; n4=7;n5=8;break;
-		case kMaj11s13 :	n2=4; n3=5; n4=10;n5=11;break;
-		case kM11b5b9 :		n2=4; n3=6; n4=1;n5=11;break;
-		case kDom11b5 :		n2=4; n3=6; n4=10;n5=5;break;
-		case kDom11b9 :		n2=4; n3=5; n4=10;n5=1;break;
-		case kDom11s9 :		n2=4; n3=5; n4=10;n5=3;break;
-		case kHalfDim11b9 :	n2=3; n3=6; n4=5;n5=1;break;
-		case kMin7s11 :		n2=3; n3=7; n4=10;n5=6;break; // is it correct?
-		case kDom13s11 :	n2=4; n3=10; n4=6;n5=9;break; // is it correct ?
-		case kM7b913 :		n2=4; n3=10; n4=1;n5=9;break;
-		case kMaj9s13 :		n2=2; n3=4; n4=11;n5=9;break;
-		case kDom7b13 :		n2=4; n3=10; n4=9;n5=7;break;
-		case kChrom :		n2=1; n3=2; n4=3;n5=4;break;
-
-	}
-	if (DEBUG_VERBOSE)
-		post("build_possible_notes_table n2=%i n3=%i n4=%i", n2, n3, n4);
-
-	basenote=0;
-	switch (x->target_chord.note)
-	{
-		case C:		basenote=0;break;
-		case Db:	basenote=1;break;
-		case D:		basenote=2;break;
-		case Eb:	basenote=3;break;
-		case E:		basenote=4;break;
-		case F:		basenote=5;break;
-		case Gb:	basenote=6;break;
-		case G:		basenote=7;break;
-		case Ab:	basenote=8;break;
-		case A:		basenote=9;break;
-		case Bb:	basenote=10;break;
-		case B:		basenote=11;break;
-	}
-	if (DEBUG_VERBOSE)
-		post("build_possible_notes_table basenote=%i", basenote);
-	i=0;
-	octave=0;
-	while (i<(POSSIBLE_NOTES-3))
-	{
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n1;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n2;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n3;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n4;
-		x->target_notes[i++]=octave*12 + LOWER_POSSIBLE_NOTE + basenote + n5;
-		octave++;
-	}
-	if (DEBUG_VERBOSE)
-	{
-		i=0;
-		while (i<(POSSIBLE_NOTES))
-		{
-			post("x->target_notes[%i]=%i", i, x->target_notes[i++]);
-		}
-	}
-}
-
-
-
-// -----------------  normal external code ...
-
-void harmonizer_init_pop(t_harmonizer *x)
-{
-	int i, j, tmp, tmp2, k, steps, note, insertpoint;
-	double rnd;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		for (j=0; j<x->voices; j++)
-		{
-			/*
-			// totally randome version
-			rnd = rand()/((double)RAND_MAX + 1);
-			tmp = rnd * POSSIBLE_NOTES;
-			x->population[i][j] = x->target_notes[tmp];
-			*/
-
-			// not totally random: i start from currend chord's notes
-			// and randomly go up or down
-			insertpoint = 0;
-			while ((insertpoint < POSSIBLE_NOTES) && (x->target_notes[insertpoint] < x->current_voices[j]))
-				insertpoint++;
-			if (insertpoint >= POSSIBLE_NOTES)
-			{ 
-				// i didn't find my insert point, possible?
-				// i pick a random one
-				rnd = rand()/((double)RAND_MAX + 1);
-				tmp = rnd * POSSIBLE_NOTES;
-				x->population[i][j] = x->target_notes[tmp];
-			} else
-			{
-				// insert point found
-				rnd = rand()/((double)RAND_MAX + 1);
-				if (rnd < 0.5)
-				{
-					// i go up
-					rnd = rand()/((double)RAND_MAX + 1);
-					steps = rnd * 10; // how many steps (good notes) will I ignore?
-					note = insertpoint + steps;
-					if (note >= POSSIBLE_NOTES)
-						note = POSSIBLE_NOTES-1;
-					
-				} else
-				{
-					// i go down
-					rnd = rand()/((double)RAND_MAX + 1);
-					steps = rnd * 10; // how many steps (good notes) will I ignore?
-					note = insertpoint - steps;
-					if (note < 0)
-						note = 0;
-				}
-				// finally assign the note
-				x->population[i][j] = x->target_notes[note];
-			}
-		}
-	}
-}
-
-void harmonizer_allocate(t_harmonizer *x)
-{
-	int i;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		x->population[i] = malloc(sizeof(int)*x->voices);
-	}
-	x->current_voices = malloc(sizeof(int)*x->voices);
-	
-}
-
-void harmonizer_free(t_harmonizer *x)
-{
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-	
-	int i;
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		free(x->population[i]);
-	}
-	free(x->current_voices);
-}
-
-// here i evaluate this voicing
-int fitness(t_harmonizer *x, int *candidate)
-{
-	int i, j, tmp, res, last, avgHI, avgLOW, min, max, distance;
-	float wideness, ftmp;
-	short int chord_notes[4];
-	short int chord_notes_ok[4];
-	//short int transitions[VOICES];
-	short int *transitions;
-	//short int directions[VOICES];
-	short int *directions;
-	// intervals between voices
-	// for parallel and hidden 5ths
-	// voices spacing etc..
-	//short int intervals[VOICES][VOICES]; 
-	short int **intervals; 
-	//short int notes[VOICES];
-	short int *notes;
-	res=50; // starting fitness
-
-	if (DEBUG_VERBOSE)
-		post("evaluating fitness of %i %i %i %i", candidate[0], candidate[1], candidate[2], candidate[3]);
-
-	// allocate arrays
-	transitions = malloc(sizeof(short int)*x->voices);
-	directions = malloc(sizeof(short int)*x->voices);
-	notes = malloc(sizeof(short int)*x->voices);
-	intervals = malloc(sizeof(short int *) * x->voices);
-	for (i=0; i<x->voices; i++)
-	{
-		intervals[i] = malloc(sizeof(short int) * x->voices);
-	}
-
- 	// shared objects
-	for (i=0; i<x->voices; i++)
-	{
-		notes[i]=candidate[i];
-		transitions[i] = candidate[i] - x->current_voices[i];
-		if (transitions[i]!=0)
-			directions[i] = transitions[i]/abs(transitions[i]);
-		else
-			directions[i] = 0;
-		if (DEBUG_VERBOSE)
-			post("directions[%i]=%i", i, directions[i]);
-
-	}
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			intervals[i][j] = (candidate[i]-candidate[j])%12 ;
-			if (DEBUG_VERBOSE)
-				post("intervals[%i][%i]=%i", i, j, intervals[i][j]);
-		}
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(short int, notes, x->voices, SGLIB_NUMERIC_COMPARATOR)
-
-	// all same direction? 
-	if ( directions[0]==directions[1] &&
-	directions[1]==directions[2] &&
-	directions[2]==directions[3])
-	{
-		res += 10 * x->i_like_parallelism;
-		if (DEBUG_VERBOSE)
-			post("same direction!");
-	}
-	
-	// parallel 5ths or octaves? (if yes return 0)
-	// how?
-	// hidden 8ths nor 5ths ?
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			if (intervals[i][j]==7 || intervals[i][j]==0)
-			{
-				// hidden or parallel 5th,octave or unison
-				// bad!
-				if (directions[i]==directions[j])
-				{
-					res += 10 * x->i_like_parallelism;
-					if (DEBUG_VERBOSE)
-						post("hidden or parallel consonance!");
-				}
-			}
-		}
-	}
-
-	// is voice spacing uniform ?(except for the bass)
-	// TODO: use notes[]
-	// are voices average centered?
-	tmp=0;
-	for (i=1; i<x->voices; i++)
-	{
-		tmp+=notes[i];
-		if (DEBUG_VERBOSE)
-			post("average note is %i at passage %i", tmp, i);
-	}
-	// this is the average note
-	tmp = tmp/(x->voices-1);
-	if (DEBUG_VERBOSE)
-		post("average note is %i after division by (x->voices-1)", tmp);
-//	tmp = abs((LOWER_POSSIBLE_NOTE + NOTES_RANGE)*2/3 - tmp); // how much average is far from 72
-	tmp = abs(x->center_note - tmp); // how much average is far from desired center note
-	res += 30; 
-	res -= tmp;
-	
-	if (DEBUG_VERBOSE)
-		post("average note is %i far from 2/3 of notes range", tmp);
-
-	tmp=0;
-	/*
-	// are voices average centered?
-	for (i=0; i<VOICES; i++)
-	{
-		tmp+=notes[i];
-	}
-	// this is the average note
-	tmp = tmp/VOICES;
-	tmp = abs(72-tmp); // how much average is far from 72
-	res += 30; 
-	res -= tmp;
-	*/
-
-	// are intervals small?
-	//res+=50;
-	if (DEBUG_VERBOSE)
-		post("res before transitions %i", res);
-	for (i=0; i<x->voices; i++)
-	{
-		if (DEBUG_VERBOSE)
-			post("transitions[%i] = %i",i, transitions[i]);
-		res-=abs(transitions[i]) * x->small_intervals;
-		// give an incentive for semitones etc..
-		if (transitions[i]==0)
-			res += 5;
-		if (abs(transitions[i]==1))
-			res += 5 * x->small_intervals;
-		if (abs(transitions[i]==2))
-			res += 5 * x->small_intervals;
-		if (abs(transitions[i]==3))
-			res += 2 * x->small_intervals;
-		if (abs(transitions[i]==4))
-			res += 2 * x->small_intervals;
-		if (abs(transitions[i]==5))
-			res += 1 * x->small_intervals;
-		if (abs(transitions[i]==6))
-			res += 1 * x->small_intervals;
-		if (abs(transitions[i]>11))
-			res -= 2 * x->small_intervals;
-		if (abs(transitions[i]>15))
-			res -= 5 * x->small_intervals;
-
-	}
-	if (DEBUG_VERBOSE)
-		post("res after transitions %i", res);
-
-	// TODO: too many near limits?
-	
-	// is a complete chord?
-	// does this voicing have all 5 notes?
-	// first build a table for comparision
-	for (i=0; i<4; i++)
-	{
-		chord_notes[i] = (x->target_notes[i]) % 12;
-		chord_notes_ok[i] = 0;
-	}
-	for (i=0; i<x->voices; i++)
-	{
-		tmp = notes[i] % 12;
-		for (j=0; j<4; j++)
-		{
-			if (chord_notes[j] == tmp)
-				chord_notes_ok[j]++;
-		}
-	}
-	// now in chord_notes_ok i have the number of times each note is present
-	if (chord_notes_ok[0] == 0)
-	{
-		// no fundamental! this is bad!!
-		res -= 10;
-	}
-	if ((chord_notes_ok[0] != 0) &&
-		(chord_notes_ok[2] != 0) &&
-		(chord_notes_ok[3] != 0) && 
-		(chord_notes_ok[4] != 0))
-	{
-		// complete chord! this is good
-		res += 10;
-	}
-	for (j=0; j<4; j++)
-	{
-		res -= 2^chord_notes_ok[j];
-	}
-	res += 2*x->voices;
-
-	// penalize too many basses
-	tmp = 0;
-	for (i=0; i<x->voices; i++)
-	{
-		if (notes[i]<48)
-			tmp++;
-	}
-	switch (tmp)
-	{
-	case 0: res -= 5; break;
-	case 1: res += 10; break;
-	case 2: res -= 10; break;
-	case 3: res -= 20; break;
-	case 4: res -= 30; break;
-	}
-
-	// now wideness	
-	min = notes[0];
-	max = notes[x->voices-1];
-	distance = max - min;
-	wideness = (float) (((float)distance) / ((float)12));
-	ftmp = fabs(wideness - x->wideness);
-	res -= ftmp * 5;
-	
-	if (DEBUG_VERBOSE)
-		post("fitness is %i", res);
-
-		// free memory
-	free(transitions);
-	free(directions); 
-	free(notes);
-	for (i=0; i<x->voices; i++)
-	{
-		free(intervals[i]);
-	}
-	free(intervals);
-
-	return res;
-}
-
-void new_genotype(t_harmonizer *x, int *mammy, int *daddy, int *kid)
-{
-	int i, split;
-	double rnd;
-	// crossover
-	rnd = rand()/((double)RAND_MAX + 1);
-	split = rnd * x->voices;
-	for (i=0; i<split; i++)
-	{
-		kid[i]=mammy[i];
-	}
-	for (i=split; i<x->voices; i++)
-	{
-		kid[i]=daddy[i];
-	}
-
-	//  mutation
-	for (i=0; i<x->voices; i++)
-	{
-		rnd = rand()/((double)RAND_MAX + 1);
-		if (rnd < DEF_PROB_MUTATION)
-		{
-			rnd = rand()/((double)RAND_MAX + 1) * POSSIBLE_NOTES;
-			kid[i]=x->target_notes[(int)rnd];
-		}
-	}
-}
-
-typedef struct fitness_list_element_t 
-{
-	int index;
-	int fitness;
-} fitness_list_element;
-
-#define FITNESS_LIST_COMPARATOR(e1, e2) (e1.fitness - e2.fitness)
-
-void generate_voicing(t_harmonizer *x)
-{
-	fitness_list_element fitness_evaluations[MAX_POPULATION];
-	int i, generation, mum, dad, winner;
-	double rnd;
-	//t_atom lista[VOICES];
-	t_atom *lista;
-	int *winner_notes;
-
-	lista = malloc(sizeof(t_atom)*x->voices);
-	winner_notes = malloc(sizeof(int)*x->voices);
-
-	// inizialize tables of notes
-	build_possible_notes_table(x);
-	// inizialize population
-	harmonizer_init_pop(x);
-	// GA code
-	for (generation=0; generation<GENERATIONS; generation++)
-	{
-		// i compute all the fitness
-		for (i=0; i<MAX_POPULATION; i++)
-		{
-			fitness_evaluations[i].index=i;
-			fitness_evaluations[i].fitness = fitness(x, x->population[i]);
-		}
-		// i sort the array
-		SGLIB_ARRAY_SINGLE_QUICK_SORT(fitness_list_element, fitness_evaluations, MAX_POPULATION, FITNESS_LIST_COMPARATOR)
-
-		// i kill half population
-		// and use the survivors to create new genotypes
-		for (i=0; i<(MAX_POPULATION/2); i++)
-		{
-			// create a new genotype
-			// parents chosen randomly
-			rnd = rand()/((double)RAND_MAX + 1);
-			mum = MAX_POPULATION/2 + rnd*MAX_POPULATION/2;
-			rnd = rand()/((double)RAND_MAX + 1);
-			dad = MAX_POPULATION/2 + rnd*MAX_POPULATION/2;
-			new_genotype(x, x->population[mum], x->population[dad], x->population[i]);
-		}
-		// repeat the process
-	}
-	// finally look for the winner
-	// i compute all the fitness
-	for (i=0; i<MAX_POPULATION; i++)
-	{
-		fitness_evaluations[i].index=i;
-		fitness_evaluations[i].fitness = fitness(x, x->population[i]);
-	}
-	// i sort the array
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(fitness_list_element, fitness_evaluations, MAX_POPULATION, FITNESS_LIST_COMPARATOR)
-	
-	winner = fitness_evaluations[MAX_POPULATION-1].index;
-
-	if (DEBUG)
-		post("winner fitness = %i", fitness_evaluations[MAX_POPULATION-1].fitness);
-
-	for (i=0;i<x->voices;i++)
-	{
-		winner_notes[i] = x->population[winner][i];
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(int, winner_notes, x->voices, SGLIB_NUMERIC_COMPARATOR)
-
-	for (i=0;i<x->voices;i++)
-	{
-		SETFLOAT(lista+i, winner_notes[i]);
-	}
-
-	// send output array to outlet
-	outlet_anything(x->l_out,
-                     gensym("list") ,
-					 x->voices, 
-					 lista);
-	free(lista);
-	free(winner_notes);
-}
-
-// if i want another voicing i can send a bang
-static void harmonizer_bang(t_harmonizer *x) {
-	generate_voicing(x);
-}
-
-// called when i send a list (with midi values)
-void set_current_voices(t_harmonizer *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;
-	int *input_voices;
-	
-	if (argc<x->voices)
-	{
-		error("insufficient notes sent!");
-		return;
-	}
-	input_voices = malloc(sizeof(int)*x->voices);
-	// fill input array with actual data sent to inlet
-	for (i=0;i<x->voices;i++)
-	{
-		input_voices[i] = atom_getint(argv++);
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(int, input_voices, x->voices, SGLIB_NUMERIC_COMPARATOR)
-	for (i=0;i<x->voices;i++)
-	{
-		x->current_voices[i] = input_voices[i];
-	}
-	
-	generate_voicing(x);
-	free(input_voices);
-
-
-}
-// set current chord
-void set_current(t_harmonizer *x, t_symbol *s) {
-	x->current_chord.mode = string2mode(s->s_name);
-	x->current_chord.note = string2note(s->s_name);
-	if (DEBUG)
-		post("harmonizer: set_current %s",s->s_name); 
-}
-
-// set target chord
-void set_target(t_harmonizer *x, t_symbol *s) {
-	x->target_chord.mode = string2mode(s->s_name);
-	x->target_chord.note = string2note(s->s_name);
-	if (DEBUG)
-		post("harmonizer: set_target %s",s->s_name); 
-}
-
-//how any octaves should this chord be?
-void set_wideness(t_harmonizer *x, t_floatarg f)
-{
-	if (f>=0)
-		x->wideness = f;
-}
-
-// which note should the center note have ?
-void set_center_note(t_harmonizer *x, t_floatarg f)
-{
-	if ((f>=LOWER_POSSIBLE_NOTE)&&(f<120))
-		x->center_note = (int) f;
-}
-
-// which note should the center note have ?
-void set_i_like_parallelism(t_harmonizer *x, t_floatarg f)
-{
-	float newval = f;
-	if (newval<-1)
-		newval = -1;
-	if (newval>1)
-		newval = 1;
-	x->i_like_parallelism = newval;
-}
-
-// which note should the center note have ?
-void set_small_intervals(t_harmonizer *x, t_floatarg f)
-{
-	float newval = f;
-	if (newval<-1)
-		newval = -1;
-	if (newval>1)
-		newval = 1;
-	x->small_intervals = newval;
-}
-
-void set_voices(t_harmonizer *x, t_floatarg f)
-{
-	int newval = (int)  f;
-	if (newval<1)
-	{
-		error("number of voices must be > 0 !");
-		return;
-	}
-	x->voices = newval;
-	harmonizer_free(x);
-	harmonizer_allocate(x);
-}
-
-void print_help(t_harmonizer *x)
-{
-	post("");
-	post("harmonizer is an external that builds voicing");
-	post("takes chords name and outputs a list of midi notes");
-	post("available commands:");
-	post("current symbol: sets the current chord name (which chordwe are in)");
-	post("target symbol: sets the target chord name (which chord we want to go to)");
-	post("voices: sets the number of voices");
-	post("wideness float: now many octaves wide should the next chord be? must be > than 0");
-	post("set_center_note int: sets the desired center chord note, min 24 max 100");
-	post("i_like_parallelism float: do I want parallelism? from -1 (I don't want them) to 1 (I like them), 0 means I don't care, default = -1");
-	post("small_intervals float: do I want small intervals? from -1 (I don't want them) to 1 (I like them), 0 means I don't care, default = 1");
-	post("this externalis part of the frank framework");
-	post("authors: davide morelli, david casals");
-
-}
-
-void *harmonizer_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_harmonizer *x = (t_harmonizer *)pd_new(harmonizer_class);
-	x->l_out = outlet_new(&x->x_obj, gensym("list"));
-/*
-	for (i=0; i<BUFFER_LENGHT; i++)
-	{
-		x->last[i] = harmonizer_note2gene(1,0,0,1);
-	}
-	*/
-	srand(time(&a));
-	x->center_note = DEF_CENTER_NOTE;
-	x->wideness = DEF_WIDENESS;
-	x->i_like_parallelism = -1; // by default we don't like them!
-	x->small_intervals = 1; //by default we want small intervals
-	x->voices = VOICES;
-	if (argc>0) 
-	{
-		x->voices = atom_getintarg(0, argc, argv);
-	}
-	harmonizer_allocate(x);
-    return (x);
-}
-
-void harmonizer_setup(void)
-{
-    harmonizer_class = class_new(gensym("harmonizer"), (t_newmethod)harmonizer_new,
-        (t_method)harmonizer_free, sizeof(t_harmonizer), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(harmonizer_class, (t_method)harmonizer_bang);
-	class_addmethod(harmonizer_class, (t_method)print_help, gensym("help"),0, 0);
-	class_addmethod(harmonizer_class, (t_method)set_current, gensym("current"),A_SYMBOL, 0);
-	class_addmethod(harmonizer_class, (t_method)set_target, gensym("target"),A_SYMBOL, 0);
-//	class_addmethod(harmonizer_class, (t_method)harmonizer_fitness1_set, gensym("fitness1"), A_DEFFLOAT, 0);
-	class_addlist(harmonizer_class, (t_method)set_current_voices);
-	class_addmethod(harmonizer_class, (t_method)set_wideness, gensym("wideness"), A_DEFFLOAT, 0);
-	class_addmethod(harmonizer_class, (t_method)set_center_note, gensym("center_note"), A_DEFFLOAT, 0);
-	class_addmethod(harmonizer_class, (t_method)set_i_like_parallelism, gensym("i_like_parallelism"), A_DEFFLOAT, 0);
-	class_addmethod(harmonizer_class, (t_method)set_small_intervals, gensym("small_intervals"), A_DEFFLOAT, 0);
-	// set number of voices
-	class_addmethod(harmonizer_class, (t_method)set_voices, gensym("voices"), A_DEFFLOAT, 0);
-	
-
-}
diff --git a/externals/frankenstein/harmonizer.vcproj b/externals/frankenstein/harmonizer.vcproj
deleted file mode 100755
index b6e7bb392..000000000
--- a/externals/frankenstein/harmonizer.vcproj
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="harmonizer"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:harmonizer_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/harmonizer.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="harmonizer.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-			<File
-				RelativePath="sglib.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/makefile.darwin b/externals/frankenstein/makefile.darwin
deleted file mode 100755
index 571f88de0..000000000
--- a/externals/frankenstein/makefile.darwin
+++ /dev/null
@@ -1,39 +0,0 @@
-current: pd_darwin
-
-clean: ; rm -f *.pd_linux *.o *.pd_darwin
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: voicing_analyzer.pd_darwin chord_melo.pd_darwin harmonizer.pd_darwin chords_memory.pd_darwin rhythms_memory.pd_darwin GArhythm.pd_darwin test.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-
-# where are the PD header files?
-# leave it blank if it is a system directory (like /usr/local/include), 
-# 	since gcc 3.2 complains about it
-#PDPATH=/Applications/PdOLD.app/Contents/Resources/src/
-#PDPATH=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-
-# where is the PD executable?
-#PD=/Applications/PdOLD.app/Contents/Resources/bin/pd
-PDPATH=/Volumes/Student/Programmi/Pd-0.40-2.app/Contents/Resources/src/
-PD=/Volumes/Student/Programmi/Pd-0.40-2.app/Contents/Resources/bin/pd
-#PD=/usr/local/lib/pd/bin/pd
-#PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/bin/pd
-#PD=/Users/davidemorelli/Desktop/robaDavide/Pd-0.38-3.app/Contents/Resources/src/
-
-
-DARWININCLUDE =  -I../../src -I$(PDPATH)
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWININCLUDE) -c $*.c common.c
-	cc -bundle  -bundle_loader $(PD) -flat_namespace -o $*.pd_darwin $*.o common.o
-#	cc -bundle -undefined suppress -flat_namespace -o $*.pd_darwin
-#	rm -f $*.o
-
-# $(FANNLIB)
diff --git a/externals/frankenstein/makefile.linux b/externals/frankenstein/makefile.linux
deleted file mode 100644
index 3f3ecf61e..000000000
--- a/externals/frankenstein/makefile.linux
+++ /dev/null
@@ -1,103 +0,0 @@
-# the ANN-EXTERNAL-makefile
-# everything is GnuGPL that should come with the ann.tgz
-# NO WARRANTIES FOR ANYTHING
-# et cetera
-# (l) forum::für::umläute 2001
-
-# make sure that the "m_pd.h" is somehow available either by putting it into this
-# directory, by adding it's path to the INCLUDE-path or by putting it into an
-# already included path, e.g. "/usr/local/include/"
-# download fann libraries from http://fann.sourceforge.net
-# and install from source
-# make sure that fann.h is available
-
-#these are the user adjustables : adjust them to fit into your system
-# PD will install to $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR), which is /usr/local/lib/pd
-# by default
-DESTDIR =
-INSTALL_PREFIX = /usr/local
-PDLIBDIR = /lib/pd
-
-# the *.dll-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(LIBRARY_DIR)
-LIBRARY_DIR=/extra
-# the reference-files go into $(DESTDIR)$(INSTALLL_PREFIX)$(PDLIBDIR)$(REFERENCE_DIR)
-#REFERENCE_DIR=/doc/5.reference/ann
-REFERENCE_DIR=/extra/help-ann
-
-#these were the user adjustables
-#---------------------------------
-
-
-TARGETS = rhythms_memory.c \
-	chords_memory.c   \
-	harmonizer.c    \
-	GArhythm.c \
-	chord_melo.c \
-	ritmo1.c \
-	voicing_analyzer.c \
-	themes_memory.c
-
-# ----------------------- LINUX ----------------------------
-.SUFFIXES: .pd_linux
-
-
-LINUXOBJECTS = $(TARGETS:%=%.o)
-ARCH = $(shell uname --machine)
-
-PD_DIR = $(DESTDIR)$(INSTALL_PREFIX)$(PDLIBDIR)
-PD_INSTALLDIR_LIB = $(PD_DIR)$(LIBRARY_DIR)
-PD_INSTALLDIR_REF = $(PD_DIR)$(REFERENCE_DIR)
-
-ifeq (${ARCH},alpha)
-AFLAGS = -mieee	 -mcpu=ev56
-endif
-
-
-STRIP=strip
-STRIPFLAGS=--strip-unneeded
-
-
-LINCLUDE =
-
-OPTIMIZE_FLAGS = -O2 -O6 -funroll-loops -march=pentium3
-DEFS = -DPD
-
-#CFLAGS = -O2 -g -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS)
-CFLAGS = $(OPTIMIZE_FLAGS) -fomit-frame-pointer -fPIC -Wall $(LINCLUDE) $(UCFLAGS) $(AFLAGS) $(DEFS)
-
-LDFLAGS = -Wl,--export-dynamic -shared
-LIBS = -lc -lm
-
-# here come the targets
-
-all: $(TARGETS:%.c=%.pd_linux)
-
-%.pd_linux: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) $(LDFLAGS) -o "$*.pd_linux" "$*.c" common.c $(LIBS)
-	$(STRIP) $(STRIPFLAGS) "$*.pd_linux"
-
-
-frankenstein: $(TARGETS:%.c=%.o)
-	$(CC) $(CFLAGS) $(INCLUDE) -o frankenstein.o -c frankenstein.c
-	$(CC) $(LDFLAGS) -o frankenstein.pd_linux *.o $(LIBS)
-	$(STRIP) $(STRIPFLAGS) frankenstein.pd_linux
-
-%.o: %.c
-	$(CC) $(CFLAGS) $(INCLUDE) -o "$*.o" common.o -c "$*.c" common.c
-
-
-
-everything: clean all install distclean
-
-distclean:
-	-rm *.o *.pd_linux *~
-
-clean:
-	-rm *.o *.pd_linux
-
-install: installdocs
-	install -m 644 ann*.pd_linux $(PD_INSTALLDIR_LIB)
-
-installdocs:
-	install -d $(PD_INSTALLDIR_REF)
-	install -m644 ../examples/* $(PD_INSTALLDIR_REF)
diff --git a/externals/frankenstein/manager.pd b/externals/frankenstein/manager.pd
deleted file mode 100644
index f2a7ff633..000000000
--- a/externals/frankenstein/manager.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#N canvas 494 138 557 435 12;
-#X obj 136 186 select 0;
-#X obj 124 266 random 2;
-#X obj 137 211 t a a a;
-#X obj 137 235 bang;
-#X obj 140 130 inlet;
-#X obj 133 304 outlet;
-#X msg 250 143 0;
-#X connect 0 0 2 0;
-#X connect 1 0 5 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 6 0 0 0;
diff --git a/externals/frankenstein/patches/GA2005.pd b/externals/frankenstein/patches/GA2005.pd
deleted file mode 100644
index 3736be04f..000000000
--- a/externals/frankenstein/patches/GA2005.pd
+++ /dev/null
@@ -1,1089 +0,0 @@
-#N canvas 73 243 788 379 12;
-#X obj 148 148 organist;
-#X obj 248 149 percussionist;
-#X obj 248 114 tgl 20 0 empty ONOFF toggle 0 -6 0 8 -258699 -1 -1 0
-1;
-#X obj 137 206 dac~;
-#X obj 135 181 +~;
-#X obj 165 180 +~;
-#X symbolatom 270 234 20 0 0 0 current - current_chord;
-#X symbolatom 271 253 20 0 0 0 next - next_chord;
-#N canvas 9 0 1011 707 sequencer 1;
-#X obj 27 7 cnv 15 600 450 empty empty tables 20 6 0 14 -262131 -66577
-0;
-#N canvas 0 0 450 300 graph7 0;
-#X array novelty-array 300 float 1;
-#A 0 0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.949997
-0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.949996
-0.937497 0.924999 0.924999 0.924999 0.924999 0.924999 0.924999 0.924999
-0.924999 0.924999 0.924999 0.924999 0.924999 0.924999 0.599996 0.249993
-0.924998 0.924998 0.924998 0.924998 0.924998 0.924998 0.924998 0.924998
-0.924998 0.924998 0.924998 0.924998 0.899998 0.899998 0.849998 0.774997
-0.649996 0.574995 0.399994 0.374994 0.349994 0.374994 0.399994 0.424994
-0.749997 0.924998 0.924998 0.924998 0.924998 0.924998 0.937498 0.949998
-0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998
-0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.924998 0.924998
-0.924998 0.874998 0.724997 0.524995 0.399994 0.324993 0.299993 0.324993
-0.499995 0.574995 0.824997 0.899998 0.899998 0.899998 0.899998 0.899998
-0.899998 0.899998 0.899998 0.899998 0.899998 0.899998 0.874998 0.699996
-0.599995 0.499995 0.424994 0.349994 0.274993 0.249993 0.224993 0.199992
-0.149992 0.124992 0.149992 0.174992 0.249993 0.349994 0.449994 0.549995
-0.699996 0.299993 0.174992 0.0499912 0.0749914 0.0749914 0.0999916
-0.0999916 0.0999916 0.0999916 0.0999916 0.174992 0.274993 0.549995
-0.749997 0.724997 0.574995 0.374994 0.274993 0.199993 0.174992 0.149992
-0.149992 0.149992 0.174992 0.249993 0.299993 0.399994 0.474995 0.574995
-0.599996 0.649996 0.699997 0.749997 0.824998 0.849998 0.749997 0.649996
-0.549995 0.549995 0.549995 0.549995 0.574996 0.649996 0.649996 0.724997
-0.724997 0.749997 0.774997 0.774997 0.649996 0.574996 0.524995 0.449995
-0.449995 0.474995 0.487495 0.524995 0.599996 0.624996 0.724997 0.774997
-0.774997 0.799998 0.799998 0.824998 0.824998 0.849998 0.849998 0.849998
-0.849998 0.849998 0.849998 0.849998 0.849998 0.849998 0.874998 0.874998
-0.899998 0.899998 0.924999 0.924999 0.899998 0.899998 0.899998 0.874998
-0.874998 0.874998 0.874998 0.849998 0.849998 0.849998 0.849997 0.837497
-0.824996 0.824996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996 0.824996
-0.824996 0.824996 0.812496 0.799996 0.799996 0.799996 0.799996 0.799996
-0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996 0.799996
-0.874997 0.874997 0.874997 0.874997 0.874997 0.899997 0.874997;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 364 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array aderenza-array 300 float 1;
-#A 0 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998
-0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998 0.949998
-0.937498 0.924998 0.912498 0.899998 0.899998 0.899998 0.899998 0.899998
-0.899998 0.899998 0.899998 0.899998 0.893748 0.887498 0.881248 0.874998
-0.849998 0.824998 0.795831 0.741664 0.716664 0.691664 0.666664 0.666664
-0.666664 0.666664 0.666664 0.666664 0.666664 0.641664 0.641664 0.641664
-0.616664 0.616664 0.616664 0.616664 0.616664 0.591664 0.591664 0.591664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.591664 0.591664 0.591664 0.616664
-0.616664 0.616664 0.666664 0.691664 0.691664 0.691664 0.716664 0.716664
-0.716664 0.716664 0.716664 0.716664 0.716664 0.716664 0.716664 0.716664
-0.716664 0.716664 0.716664 0.716664 0.716664 0.716664 0.616664 0.466664
-0.466664 0.466664 0.466664 0.466664 0.466664 0.466664 0.466664 0.466664
-0.466664 0.391664 0.391664 0.391664 0.391664 0.391664 0.441664 0.491664
-0.941664 0.941664 0.941664 0.941664 0.941664 0.941664 0.941664 0.941664
-0.941664 0.941664 0.0916629 0.0416629 0.0416629 0.0416629 0.0416629
-0.0416629 0.0416629 0.0416629 0.0416629 0.0416629 0.0416629 0.0416629
-0.0416629 0.0416629 0.0416629 0.0416629 0.0416629 0.0666629 0.0666629
-0.0666629 0.0666629 0.0666629 0.0666629 0.0666629 0.0916629 0.116663
-0.166663 0.191663 0.216663 0.266663 0.316663 0.341663 0.441664 0.516664
-0.541664 0.716664 0.716664 0.716664 0.716664 0.691664 0.691664 0.666664
-0.641664 0.616664 0.591664 0.591664 0.591664 0.591664 0.591664 0.591664
-0.591664 0.591664 0.591664 0.591664 0.591664 0.591664 0.591664 0.591664
-0.541664 0.541664 0.554164 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664 0.566664
-0.566664 0.572914 0.579164 0.585414 0.591664 0.591664 0.591664 0.591664
-0.591664 0.591664 0.599997 0.60833 0.616664 0.641664 0.641664 0.641664
-0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664
-0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664 0.641664
-0.641664 0.641664 0.654164 0.666664 0.666664 0.691664 0.691664 0.691664
-0.691664 0.691664 0.691664 0.691664 0.691664 0.691664 0.691664 0.691664
-0.691664 0.691664 0.691664 0.683331 0.674997 0.666664 0.666664 0.666664
-0.666664 0.641664 0.641664 0.616664 0.616664 0.616664 0.616664 0.51107
-0.51107;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 93 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array variazione-array 300 float 1;
-#A 0 0.274999 0.349999 0.349999 0.324999 0.324999 0.312499 0.299999
-0.299999 0.299999 0.287499 0.274999 0.274999 0.274999 0.274999 0.271874
-0.268749 0.265624 0.262499 0.259374 0.256249 0.253124 0.249999 0.241666
-0.233333 0.225 0.225 0.225 0.225 0.225 0.225 0.225 0.225 0.225 0.225
-0.225 0.225 0.225 0.225 0.225 0.23125 0.237499 0.243749 0.249999 0.249999
-0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999
-0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999 0.249999
-0.249999 0.249999 0.249999 0.249999 0.225 0.225 0.225 0.225 0.225 0.2
-0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2
-0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.225 0.2375 0.249999 0.249999
-0.274999 0.299999 0.299999 0.324999 0.349999 0.362499 0.374999 0.399999
-0.399999 0.399999 0.424999 0.449999 0.949997 0.949997 0.949997 0.949997
-0.949997 0.949997 0.949997 0.949997 0.949997 0.949997 0.749998 0.724998
-0.724998 0.724998 0.724998 0.724998 0.724998 0.724998 0.724998 0.724998
-0.699998 0.674998 0.649998 0.624998 0.624998 0.599998 0.587498 0.574998
-0.549998 0.537498 0.499999 0.474999 0.449999 0.424999 0.424999 0.374999
-0.374999 0.366666 0.358332 0.349999 0.349999 0.324999 0.324999 0.299999
-0.274999 0.274999 0.274999 0.274999 0.249999 0.249999 0.249999 0.249999
-0.225 0.2 0.1875 0.175 0.1625 0.15 0.1375 0.125 0.125 0.125 0.125 0.125
-0.125 0.1125 0.1 0.1 0.1 0.1 0.1 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
-0.125 0.125 0.125 0.125 0.116667 0.108333 0.1 0.1 0.1 0.1 0.1 0.0750001
-0.0750001 0.0750001 0.0750001 0.0750001 0.0750001 0.0750001 0.0750001
-0.0750001 0.0750001 0.0750001 0.0750001 0.0750001 0.0250001 0 0;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 147 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array riempimento-array 300 float 1;
-#A 0 -2.98023e-008 0.0499999 0.0499999 0.0499999 0.0749999 0.0749999
-0.0749999 0.0749999 0.0749999 0.0874999 0.0999999 0.10625 0.13125 0.15625
-0.20625 0.23125 0.25625 0.30625 0.33125 0.38125 0.38125 0.43125 0.45625
-0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625
-0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625 0.45625
-0.45625 0.45625 0.45625 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125
-0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.43125
-0.43125 0.43125 0.43125 0.43125 0.43125 0.43125 0.40625 0.40625 0.38125
-0.38125 0.35625 0.33125 0.30625 0.29375 0.28125 0.25625 0.25625 0.20625
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125 0.18125
-0.18125 0.18125 0.18125 0.18125 0.18125 0.956249 0.956249 0.956249
-0.906249 0.881249 0.881249 0.881249 0.881249 0.881249 0.89375 0.90625
-0.90625 0.90625 0.90625 0.90625 0.88125 0.88125 0.88125 0.88125 0.88125
-0.88125 0.88125 0.88125 0.85625 0.85625 0.85625 0.83125 0.83125 0.80625
-0.78125 0.75625 0.73125 0.70625 0.70625 0.68125 0.65625 0.65625 0.65625
-0.63125 0.63125 0.63125 0.63125 0.60625 0.60625 0.60625 0.58125 0.58125
-0.58125 0.56875 0.55625 0.53125 0.45625 0.45625 0.43125 0.41875 0.40625
-0.40625 0.40625 0.39375 0.38125 0.35625 0.35625 0.33125 0.33125 0.30625
-0.30625 0.28125 0.25625 0.23125 0.20625 0.18125 0.15625 0.13125 0.10625
-0.0812502 0.0812502 0.0812502 0.0812502 0.0812502 0.0812502 0.0812502
-0.0812502 -0.0187497 -0.0187497 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503 0.0312503
-0.0312503 0.0312503 0.0312503 0.0312503 0.0562503 0.0562503 0.0562503
-0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503
-0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503 0.0562503
-0.0562503 0.0562503 0.0687503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503
-0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0812503 0.0337096
-0.0337096 0.0337096 0.0337096;
-#X coords 0 1 299 0 600 40 1;
-#X restore 27 40 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array reinsert-src-array 300 float 1;
-#A 0 9 9 9 9 9 9 9 9 9 9 9 8.95 8.9 8.85 8.8 8.75 8.5 8.375 8.25 8.125
-8 7.7 7.4 7.1 6.8 6.5 6.16667 5.83333 5.5 5.375 5.25 5.16667 5.08333
-4.41667 4.41667 4.41667 4.41667 4.41667 4.41667 4.41667 4.41667 4.16667
-3.91667 3.66667 3.41667 3.41667 3.16667 3.16667 3.16667 3.16667 3.16667
-3.16667 3.16667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.79167
-2.91667 2.91667 2.91667 2.91667 2.91667 3.16667 3.16667 3.16667 3.16667
-3.41667 3.41667 3.41667 3.41667 3.66667 3.66667 3.66667 3.66667 3.66667
-3.66667 3.66667 3.91667 4.16667 4.16667 4.16667 4.16667 4.16667 4.16667
-4.16667 4.16667 4.04167 3.66667 3.41667 1.41667 0.91667 0.66667 0.66667
-0.66667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667
-0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667
-0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667 0.41667
-0.41667 0.41667 0.41667 0.66667 1.16667 1.66667 2.16667 2.66667 2.91667
-3.16667 3.66667 3.91667 4.41667 4.66667 4.91667 4.91667 4.91667 4.91667
-4.16667 3.41667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667 2.91667
-2.95238 2.9881 3.02381 3.05953 3.09524 3.13095 3.16667 3.20238 3.2381
-3.27381 3.30953 3.34524 3.38096 3.41667 3.41667 3.41667 3.41667 3.41667
-3.41667 3.41667 3.41667 3.51667 3.61667 3.71667 3.81667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667 3.91667
-3.91667 3.91667 3.91667 3.91667 3.91667 3.83334 3.75 3.66667 3.56667
-3.46667 3.36667 3.26667 3.16667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667 2.66667
-2.66667 2.66667 2.66667 2.66667 2.66667 2.66667;
-#X coords 0 10 299 0 600 40 1;
-#X restore 28 202 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array reinsert-last-array 300 float 1;
-#A 0 1 1 1 1 1 1 1 1.25 1.25 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5
-1.5 1.5 2 2.25 2.25 2.5 2.75 2.75 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
-3.08333 3.16667 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25
-3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.375 3.5 3.58333
-3.66667 3.75 3.875 4 4.08333 4.16667 4.25 4.375 4.5 4.5 4.5 4.5 4.5
-4.5 4.5 4.5 4.5 4.5 4.5 4.625 4.75 4.83333 4.91667 5 5.25 5.5 5.5 5.5
-5.5 5.25 5 4.75 4.25 4 3.75 3.5 3.25 2.75 2 1.75 1.25 1 1 1 1 1 1 1
-1 1 1 1 0.5 0.5 0.75 1 1 1.5 1.75 2 2.25 2.5 2.75 3 3.25 3.5 3.5 3.75
-4.25 5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5
-5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5
-5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.5 5.375 5.25 5.08333 4.91667
-4.75 4.625 4.5 4.5 4.5 4.25 4 4 4 4 4 4 4 4 3.875 3.75 3.5 3.41667
-3.33333 3.25 3 2.75 2.5 2.25 2 2 2 2 2 1.95833 1.91667 1.875 1.83333
-1.79167 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75
-1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75
-1.75 1.6875 1.625 1.5625 1.5 1.42857 1.35714 1.28571 1.21429 1.14286
-1.07143 1 0.964286 0.928571 0.892857 0.857143 0.857143 0.857143 0.857143
-0.857143 0.857143 0.857143 0.857143 0.857143 0.857143 0.857143 0.857143
-0.857143 0.857143 0.857143 0.857143 0.857143 0.857143 0.834415 0.811688
-0.788961 0.766234 0.743506 0.720779 0.698052 0.675325 0.652597 0.62987
-0.607143 0.607143 0.607143 0.607143 0.607143 0.607143 0.607143 0.607143
-0.607143 0;
-#X coords 0 10 299 0 600 40 1;
-#X restore 26 258 graph;
-#N canvas 216 127 812 645 cursor 0;
-#X obj 250 31 r bar;
-#X obj 251 58 * 2;
-#X floatatom 314 45 5 0 0 0 - - -;
-#X msg 250 105 \; position pos \$1 5;
-#X floatatom 96 100 5 0 0 0 - - -;
-#X obj 61 67 inlet;
-#X obj 160 92 outlet;
-#X msg 160 69 set \$1;
-#X msg 177 180 \; position label \$1;
-#X obj 61 125 s bar-position;
-#X obj 252 81 + 27;
-#X obj 177 158 makefilename bar_%d;
-#X connect 0 0 1 0;
-#X connect 0 0 7 0;
-#X connect 0 0 11 0;
-#X connect 1 0 10 0;
-#X connect 2 0 10 1;
-#X connect 4 0 9 0;
-#X connect 5 0 9 0;
-#X connect 7 0 6 0;
-#X connect 10 0 3 0;
-#X connect 11 0 8 0;
-#X restore 22 499 pd cursor;
-#N canvas 121 55 858 625 reading-tables 0;
-#X obj 446 314 s novelty;
-#X obj 437 268 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 514 76 s reinit;
-#X obj 45 424 s reinsert_src;
-#X obj 44 345 s reinsert_last;
-#X obj 47 98 s aderenza;
-#X obj 469 162 s riempimento;
-#X obj 456 240 s variazione;
-#X obj 41 178 s prob_crossover;
-#X obj 43 257 s prob_mutation;
-#X obj 337 16 r bar;
-#X obj 469 139 tabread riempimento-array;
-#X obj 456 288 tabread novelty-array;
-#X obj 450 116 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 463 216 tabread variazione-array;
-#X obj 445 193 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 41 51 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X obj 61 75 tabread aderenza-array;
-#X obj 516 31 select 8;
-#X msg 515 53 1;
-#X obj 40 128 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 60 152 tabread crossover-array;
-#X obj 37 210 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 55 234 tabread mutation-array;
-#X obj 65 323 tabread reinsert-src-array;
-#X floatatom 18 323 5 0 0 0 - - -;
-#X floatatom 17 396 5 0 0 0 - - -;
-#X obj 64 396 tabread reinsert-last-array;
-#X obj 442 341 vsl 15 40 60 120 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 463 360 tabread tempo-array;
-#X obj 451 387 s tempo;
-#X msg 523 396 \; tempo-array const 80;
-#X msg 472 476 \; crossover-array const 0.9;
-#X msg 472 434 \; mutation-array const 0.025;
-#X obj 183 456 vsl 15 40 60 120 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 204 476 tabread velocity-array;
-#X obj 192 502 s velocity;
-#X msg 511 523 \; velocity-array const 80;
-#X msg 35 527 \; reinsert-src-array const 1;
-#X msg 264 533 \; reinsert-last-array const 1;
-#N canvas 0 0 450 300 graph7 0;
-#X array crossover-array 300 float 1;
-#A 0 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9;
-#X coords 0 1 299 0.8 600 40 1;
-#X restore 609 38 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array mutation-array 300 float 1;
-#A 0 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025
-0.025;
-#X coords 0 0.1 299 0 600 40 1;
-#X restore 609 79 graph;
-#X obj 731 151 select 300;
-#X msg 730 173 0;
-#X obj 729 196 s ONOFF-set;
-#X connect 1 0 0 0;
-#X connect 10 0 18 0;
-#X connect 10 0 11 0;
-#X connect 10 0 14 0;
-#X connect 10 0 12 0;
-#X connect 10 0 17 0;
-#X connect 10 0 21 0;
-#X connect 10 0 23 0;
-#X connect 10 0 24 0;
-#X connect 10 0 27 0;
-#X connect 10 0 29 0;
-#X connect 10 0 35 0;
-#X connect 10 0 42 0;
-#X connect 11 0 6 0;
-#X connect 12 0 0 0;
-#X connect 13 0 6 0;
-#X connect 14 0 7 0;
-#X connect 15 0 7 0;
-#X connect 16 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 19 0;
-#X connect 19 0 2 0;
-#X connect 20 0 8 0;
-#X connect 21 0 8 0;
-#X connect 22 0 9 0;
-#X connect 23 0 9 0;
-#X connect 24 0 4 0;
-#X connect 25 0 4 0;
-#X connect 26 0 3 0;
-#X connect 27 0 3 0;
-#X connect 28 0 30 0;
-#X connect 29 0 30 0;
-#X connect 34 0 36 0;
-#X connect 35 0 36 0;
-#X connect 42 0 43 0;
-#X connect 43 0 44 0;
-#X restore 355 501 pd reading-tables;
-#X obj 29 467 hsl 600 30 0 300 0 0 empty empty position 0 -5 0 8 -261689
--1 -1 39534 1;
-#X obj 332 539 cnv 15 300 30 empty next_chord_canvas D minor/major 7th
-20 12 2 25 -225271 -66577 0;
-#X obj 26 539 cnv 15 300 30 empty current_chord_canvas G major 7th
-20 12 2 25 -225271 -66577 0;
-#N canvas 0 0 831 365 setting-chords 0;
-#X obj 72 60 r current_chord;
-#X msg 71 85 \; current_chord_canvas label \$1;
-#X obj 72 139 r next_chord;
-#X msg 71 164 \; next_chord_canvas label \$1;
-#X obj 385 26 loadbang;
-#X msg 370 222 \; current_chord_canvas color 6 2;
-#X msg 370 257 \; next_chord_canvas color 6 2;
-#X msg 390 69 \; current_chord_canvas vis_size 300 30;
-#X msg 390 104 \; next_chord_canvas vis_size 300 30;
-#X msg 378 145 \; current_chord_canvas label_font 2 25;
-#X msg 378 181 \; next_chord_canvas label_font 2 25;
-#X connect 0 0 1 0;
-#X connect 2 0 3 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 4 0 9 0;
-#X connect 4 0 10 0;
-#X connect 4 0 7 0;
-#X connect 4 0 8 0;
-#X restore 215 501 pd setting-chords;
-#N canvas 0 0 818 492 writing-tables 0;
-#X obj 437 268 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 599 77 s reinit;
-#X obj 337 16 r bar;
-#X obj 450 116 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 445 193 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 44 33 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X obj 601 32 select 8;
-#X msg 600 54 1;
-#X obj 42 110 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 34 187 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X floatatom 37 306 5 0 0 0 - - -;
-#X floatatom 38 380 5 0 0 0 - - -;
-#X obj 61 75 tabwrite aderenza-array;
-#X obj 60 152 tabwrite crossover-array;
-#X obj 51 235 tabwrite mutation-array;
-#X obj 65 323 tabwrite reinsert-src-array;
-#X obj 64 396 tabwrite reinsert-last-array;
-#X obj 469 139 tabwrite riempimento-array;
-#X obj 464 216 tabwrite variazione-array;
-#X obj 455 289 tabwrite novelty-array;
-#X obj 442 324 vsl 15 40 60 120 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X msg 462 387 \; tempo-array const 80;
-#X obj 463 349 tabwrite tempo-array;
-#X connect 0 0 19 0;
-#X connect 2 0 12 1;
-#X connect 2 0 13 1;
-#X connect 2 0 14 1;
-#X connect 2 0 15 1;
-#X connect 2 0 16 1;
-#X connect 2 0 17 1;
-#X connect 2 0 18 1;
-#X connect 2 0 19 1;
-#X connect 2 0 22 1;
-#X connect 3 0 17 0;
-#X connect 4 0 18 0;
-#X connect 5 0 12 0;
-#X connect 6 0 7 0;
-#X connect 7 0 1 0;
-#X connect 8 0 13 0;
-#X connect 9 0 14 0;
-#X connect 10 0 15 0;
-#X connect 11 0 16 0;
-#X connect 20 0 22 0;
-#X restore 493 501 pd writing-tables;
-#N canvas 0 0 450 300 graph7 0;
-#X array tempo-array 300 float 1;
-#A 0 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
-65 65 65 65 65 65 65 65 65.2143 65.4286 65.6429 65.8571 66.0714 66.2857
-66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 66.5 68 68 68
-68 68 68 68 68.75 69.5 71 71 72.5 74 74 75.5 75.5 77 77 78.5 78.5 80
-80 81.5 81.5 83 84.5 86 87.5 87.5 89 89 89 90.5 90.5 92 92 93.5 93.5
-93.5 93.5 95 95 96.5 98 99.5 101 101 102.5 104 104 104 104 104 104
-104 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5
-105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5 105.5
-105.5 105.5 105.5 105.5 105.5 105.5 105.5 104 102.5 102.5 102.5 102.5
-102.5 101 99.5 98 97.25 95 93.5 92 90.5 89.75 87.5 87.5 87.5 85.5 85
-83 83 81.5 81.5 80 78.5 78.5 77 77 75.5 75.5 75.5 75.5 74 72.5 72.5
-72.5 72.5 71 71 69.5 69.5 69.5 69.5 69.5 69.5 69.5 69.5 69.5 68 68
-68 68 66.5 66.5 65.75 65 65 65 65 65 65 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5
-63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 63.5 62.725
-62.425 62.125 62.7273;
-#X coords 0 120 299 60 600 40 1;
-#X restore 28 311 graph;
-#N canvas 0 0 450 300 graph7 0;
-#X array velocity-array 300 float 1;
-#A 0 62.1875 62.9375 64.0625 65.1875 65.9375 66.6875 67.4375 67.9829
-68.5284 69.0739 69.6193 70.1648 70.7102 71.2557 71.8011 72.3466 72.892
-73.4375 73.6421 73.8466 74.0511 74.2557 74.4602 74.6648 74.8693 75.0739
-75.2784 75.483 75.6875 75.7708 75.8541 75.9375 76.0208 76.1042 76.1875
-76.2708 76.3542 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375 76.4375
-76.4375 76.4375 76.4375 76.4375 77 77 77 77 77 77 77 77 77 77 77.25
-77.5 77.75 78.3125 78.875 79.4375 80 80 80 80.75 80.75 80.75 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5
-81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 81.5 80 80 79.25 79.25 78.5
-77.75 77.75 77 76.25 76.25 75.5 75.5 75.5 74.75 74.75 74.75 74 74 73.25
-72.5 72.5 72.5 71.75 71.75 71 71 71 71 71 70.25 70.25 69.5 69.5 68.75
-68.75 68 68 68 68 67.25 67 66.75 66.5 66.5 66.5 66.5 65.375 65.375
-64.625 64.25 63.875 63.875 63.625 63.375 63.125 63.125 63.125 63.125
-63.125 63.125 63.125 63.125 63.125 63.125 63.125 63.125 63.125 63.125
-63.125 63.125 63.125 62.75 62.75 62.75 62.75 62.75 62.75 62.75 62.5
-62.25 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 61.625 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25 61.25
-61.25 64.5 64.5;
-#X coords 0 90 299 60 600 40 1;
-#X restore 28 419 graph;
-#X text 356 563 next;
-#X text 257 563 current -->;
-#X text 635 104 <-- similarity;
-#X text 635 52 <-- density;
-#X obj 650 261 cnv 15 200 240 empty empty rhythm 20 12 0 14 -228992
--66577 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed1 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 650 298 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed2 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 332 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed3 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 368 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed4 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 404 graph;
-#X obj 636 537 vsl 15 30 0 1 0 0 empty novelty novelty 0 -8 0 8 -225280
--1 -1 2682 1;
-#X obj 649 449 hradio 50 1 0 4 empty beat-quarters empty 0 -6 0 8 -228992
--1 -1 0;
-#X obj 498 592 tgl 50 0 ONOFF ONOFF-set toggle 0 -6 0 8 -258699 -1
--1 0 1;
-#X obj 649 162 cnv 15 200 100 empty empty input_rhythm 20 12 0 14 -262131
--66577 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array played1 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 649 200 graph;
-#X obj 9 95 vsl 15 40 0 1 0 0 aderenza empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 10 42 vsl 15 40 0 1 0 0 riempimento empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 10 148 vsl 15 40 0 5 0 0 reinsert-src empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 9 203 vsl 15 40 0 10 0 0 reinsert-last empty empty 0 -8 0 8
--261681 -1 -1 0 1;
-#X obj 7 260 vsl 15 40 0 10 0 0 reinsert-last empty empty 0 -8 0 8
--261681 -1 -1 0 1;
-#X obj 8 312 vsl 15 40 60 120 0 0 tempo empty empty 0 -8 0 8 -261681
--1 -1 0 1;
-#X obj 650 145 cnv 15 1 300 empty beat-pos 0 0 -10 1 10 -1 -1 0;
-#N canvas 0 111 828 661 cursor2 0;
-#X floatatom 314 45 5 0 0 0 - - -;
-#X obj 177 158 makefilename %d;
-#X msg 177 180 \; beat-pos label \$1;
-#X obj 251 58 * 13;
-#X obj 241 16 r beat-position;
-#X msg 249 105 \; beat-pos pos \$1 145;
-#X obj 252 81 + 650;
-#X connect 0 0 6 1;
-#X connect 1 0 2 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 0 1 0;
-#X connect 6 0 5 0;
-#X restore 104 501 pd cursor2;
-#X obj 645 429 hradio 13 1 0 16 empty beat-position empty 0 -6 0 8
--228992 -1 -1 0;
-#X obj 752 21 tgl 20 0 v1 empty toggle_v1 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 821 21 tgl 20 0 v2 empty toggle_v2 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 751 59 tgl 20 0 v3 empty toggle_v3 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 820 59 tgl 20 0 v4 empty toggle_v4 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 781 91 tgl 20 0 v5 empty toggle_v5 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 423 5 cnv 15 3 450 empty position bar_198 5 20 0 8 -24198 -258699
-0;
-#N canvas 36 0 769 690 effects-automation 0;
-#X obj 15 20 cnv 15 600 600 empty empty effects 20 12 0 14 -225271
--66577 0;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-dry-vol-array 300 float 1;
-#A 0 0.4 0.433333 0.466667 0.5 0.51 0.52 0.53 0.54 0.55 0.5625 0.575
-0.583333 0.591667 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.575 0.55 0.575
-0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575 0.575
-0.584375 0.59375 0.603125 0.6125 0.621875 0.63125 0.640625 0.65 0.6575
-0.665 0.6725 0.68 0.6875 0.695 0.7025 0.71 0.725 0.725 0.725 0.74 0.755
-0.77 0.785 0.8 0.8125 0.825 0.8375 0.85 0.858334 0.866667 0.875 0.925
-0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.925
-0.925 0.925 0.925 0.925 0.925 0.925 0.925 0.9 0.875 0.85 0.825 0.8
-0.775 0.75 0.725 0.7 0.66 0.57 0.5575 0.545 0.52 0.495 0.495 0.495
-0.495 0.49 0.485 0.48 0.475 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47
-0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.47
-0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.48875 0.5075 0.52625 0.571429
-0.600595 0.629762 0.658929 0.688095 0.717262 0.746429 0.777679 0.808929
-0.840179 0.871429 0.896429 0.921429 0.921429 0.939286 0.957143 0.975
-0.977778 0.980556 0.983333 0.986111 0.988889 0.991667 0.994444 0.997222
-1 0.984091 0.968182 0.952273 0.936364 0.920455 0.904546 0.888637 0.872728
-0.856818 0.840909 0.825 0.79375 0.7625 0.73125 0.7 0.65625 0.6125 0.56875
-0.56875 0.559375 0.55 0.540625 0.53125 0.521875 0.5125 0.503125 0.49375
-0.484375 0.475 0.465625 0.45625 0.446875 0.4375 0.428125 0.41875 0.41875
-0.41875 0.41875 0.41875 0.41875 0.41875 0.41875 0.5 0.5 0.5 0.5 0.521875
-0.54375 0.565625 0.5875 0.609375 0.63125 0.653125 0.675 0.704167 0.733333
-0.7625 0.791667 0.820834 0.85 0.866667 0.883333 0.9 0.9 0.9 0.9 0.9
-0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.875 0.841667 0.808333 0.775 0.755
-0.735 0.715 0.695 0.675 0.655 0.635 0.615 0.595 0.575 0.5625 0.55 0.5375
-0.5375 0.5225 0.5075 0.4925 0.4775 0.4625 0.4475 0.4325 0.4175 0.4025
-0.3875 0.382812 0.378125 0.373437 0.36875 0.364062 0.359375 0.354687
-0.35 0.35 0.3375 0.325 0.3125 0.3 0.288889 0.277778 0.266667 0.266667
-0.258333 0.25 0.241667 0.241667 0.241667 0.241667 0.241667 0.241667
-0.241667 0.241667 0.241667 0.241667 0.241667;
-#X coords 0 1 299 0 600 40 1;
-#X restore 15 56 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-wet-vol-array 300 float 1;
-#A 0 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.9 0.89 0.88 0.87 0.86
-0.85 0.85 0.85 0.85 0.85 0.85 0.85 0.85 0.855 0.86 0.825 0.825 0.825
-0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825 0.825
-0.81875 0.8125 0.80625 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0.8
-0.8 0.8 0.8 0.775 0.75 0.7 0.6625 0.625 0.6 0.5625 0.525 0.5 0.5 0.5
-0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
-0.5375 0.575 0.591667 0.608333 0.625 0.65 0.675 0.7 0.775 0.8 0.825
-0.85 0.9 0.925 0.95 0.975 0.9875 1 1.025 1.05 1.05 1.05 1.05625 1.0625
-1.06875 1.075 1.075 1.075 1.075 1.075 1.075 1.075 1.075 1.075 1.075
-1.075 1.075 1.075 1.07083 1.06667 1.0625 1.05833 1.05417 1.05 1.04167
-1.03333 1.025 1.01667 1.00833 1 0.9625 0.925 0.9125 0.9 0.8875 0.869643
-0.851786 0.833929 0.816072 0.798215 0.780357 0.7625 0.745834 0.729167
-0.7125 0.70625 0.7 0.675001 0.673751 0.672501 0.671251 0.670001 0.668751
-0.667501 0.666251 0.665001 0.663751 0.662501 0.661251 0.660001 0.658751
-0.657501 0.65625 0.655 0.65375 0.6525 0.65125 0.65 0.660715 0.671429
-0.683929 0.696429 0.713095 0.729762 0.746429 0.783929 0.821429 0.853572
-0.885714 0.917857 0.95 0.982143 1.01429 1.04643 1.05268 1.05893 1.06518
-1.07143 1.08393 1.09643 1.10893 1.12143 1.12143 1.12143 1.12143 1.06444
-1.06444 1.06444 1.05535 1.04626 1.03717 1.02808 1.01899 1.0099 1.00081
-0.991717 0.982626 0.973535 0.964445 0.943611 0.922778 0.901944 0.881111
-0.860278 0.839445 0.801944 0.764444 0.739444 0.714444 0.689444 0.664445
-0.639445 0.614444 0.589444 0.589444 0.589444 0.589444 0.589444 0.589444
-0.589444 0.589444 0.589445 0.592222 0.595 0.597778 0.600556 0.603333
-0.606111 0.608889 0.611667 0.614444 0.626944 0.639444 0.676944 0.689444
-0.701944 0.720694 0.739444 0.758194 0.776944 0.776944 0.776944 0.801944
-0.826945 0.843611 0.860278 0.876944 0.893611 0.910278 0.926944 0.943611
-0.960278 0.976944 0.993611 1.01028 1.02694 1.04194 1.05694 1.07194
-1.08694 1.10194 1.11623 1.13052 1.1448 1.15909 1.17337 1.18766 1.20194
-1.22194 1.24194 1.26194 1.28194 1.30194 1.30909 1.31623 1.32337 1.33052
-1.33766 1.3448 1.35194 1.36194 1.37194 1.38194 1.39194 1.40194;
-#X coords 0 1 299 0 600 40 1;
-#X restore 15 111 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-freq-l-array 300 float 1;
-#A 0 10846 10846 10846 10970.7 11095.3 11220 11968 12716 13090 13464
-13838 13838 13838 13090 12342 10846 9350 8041 6732 6732 6732 6732 6732
-6732 6732 7199.5 7667 8134.5 8602 10472 11220 7106 2992 2618 2867.33
-3116.67 3366 3864.67 4363.33 4862 5360.67 5859.33 6358 7355.33 8352.67
-9350 9948.4 10546.8 11145.2 11743.6 11968 9911 7854 5236 3553 1870
-1745.33 1620.67 1496 2108 2720 3332 3944 4556 5168 5780 6392 7004 7616
-8228 8789 9350 9911 10472 11033 11594 10621.6 9649.2 8676.8 7704.4
-6732 5610 4488 4039.2 3590.4 3141.6 2692.8 2244 2468.4 2692.8 2917.2
-3141.6 3366 4363.33 5360.67 6358 7355.33 8352.67 9350 10172.8 10995.6
-11818.4 12641.2 13464 11968 11113.1 10258.3 9403.43 8548.57 7693.71
-6838.86 5984 5440 4896 4352 3808 3264 2720 2176 1632 1088 544 0 374
-748 1122 1496 1870 2244 2618 2992 3366 3740 4755.14 5770.29 6785.43
-7800.57 8815.71 9830.86 10846 11126.5 11407 11687.5 11594 11407 11220
-10472 9724 8976 8228 7554.8 6881.6 6208.4 5535.2 4862 4737.33 4612.67
-4488 4363.33 4238.67 4114 3989.33 3864.67 3740 4274.29 4808.57 5342.86
-5877.14 6411.43 6945.71 7480 8041 8602 9163 9724 10285 10846 11407
-11968 11594 11220 10846 10472 9350 8228 7106 5984 5859.33 5734.67 5610
-6099.07 6588.15 7077.23 7566.31 8055.38 8544.46 9033.54 9522.61 10011.7
-10500.8 10989.8 11478.9 11968 12416.8 12865.6 13314.4 13763.2 14212
-12435.5 10659 8882.5 7106 5984 6329.23 6674.46 7019.69 7364.92 7710.16
-9350 9424.8 9499.6 9574.4 9649.2 9724 10098 10472 10846 11095.3 11344.7
-11594 11469.3 11344.7 11220 11070.4 10920.8 10771.2 10621.6 10472 10472
-10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472
-10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472 10472
-10472 10472 10472 10472 10659 10846 11344.7 11843.3 12342 12342 12342
-12342 12342 12061.5 11781 11500.5 11220 10846 10472 10098 9350 8602
-8134.5 7667 7199.5 6732 5610 5049 4488 3740 2992 2244 1496 748 374
-0 0;
-#X coords 0 15000 299 40 600 40 1;
-#X restore 14 167 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-freq-r-array 300 float 1;
-#A 0 0 9350 9350 9350 9350 9649.2 9948.4 10247.6 10546.8 10846 11220
-12155 13090 11968 10659 9350 8415 7480 7199.5 6919 6638.5 6358 6919
-7480 8041 8602 9256.5 9911 10565.5 11220 10222.7 9225.33 8228 7106
-7106 7106 7854 8602 9350 10098 10846 11594 12342 13090 13838 12903
-11968 11095.3 10222.7 9350 9237.8 9125.6 9013.4 8901.2 8789 8676.8
-8564.6 8452.4 8340.2 8228 8377.6 8527.2 8676.8 8826.4 8976 9873.6 10771.2
-11668.8 12566.4 13464 14399 15334 13651 11968 9724 10098 10846 11594
-11968 12342 12716 13838 13838 14212 14586 14960 14212 13464 11968 11095.3
-10222.7 9350 8851.33 8352.67 7854 7480 7106 6732 6358 6171 5984 5797
-5610 5610 5610 5610 5610 5984 6358 6732 7106 7480 7854 8228 8882.5
-9537 10191.5 10846 11145.2 11444.4 11743.6 12042.8 12342 12716 13090
-13090 13090 13090 12529 11968 10846 9724 8602 8352.67 8103.33 7854
-7687.78 7521.56 7355.33 7189.11 7022.89 6856.67 6690.44 6524.22 6358
-7106 7854 7854 7854 7854 8078.4 8302.8 8527.2 8751.6 8976 9038.33 9100.67
-9163 9225.33 9287.67 9350 9256.5 9163 9069.5 8976 8882.5 8789 8695.5
-8602 8508.5 8415 8321.5 8228 8153.2 8078.4 8003.6 7928.8 7854 8352.67
-8851.33 9350 9848.67 10347.3 10846 11070.4 11294.8 11519.2 11743.6
-11968 9724 9350 10098 9350 8352.67 7355.33 6358 5984 5610 5610 5610
-5610 5610 5797 5984 6171 6358 6732 7106 7667 8228 8851.33 9474.67 10098
-10472 10846 11220 11594 12155 12716 12965.3 13214.7 13464 13464 13464
-13464 13464 13464 13464 13464 13464 13464 13214.7 12965.3 12716 10098
-9724 9350 8976 8976 8976 8976 8602 8415 8228 7480 7480 7480 7480 7480
-7480 7480 7480 7480 7480 7293 7106 6919 6732 6657.2 6582.4 6507.6 6432.8
-6358 6358 6358 6171 5984 5984 5797 5610 4862 4737.33 4612.67 4488 4114
-4114 4114 4114 4114 4114 3927 2244 2297.43 2350.86 2404.29 2457.71
-2511.14 2564.57 2618 2618 2618 2618 2618 2618 2431 2244 2119.33 1994.67
-1870 1496;
-#X coords 0 15000 299 40 600 40 1;
-#X restore 15 223 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array filter-q-array 300 float 1;
-#A 0 86.6246 86.6246 86.6246 86.6246 82.4996 78.3746 74.2496 74.2496
-74.2496 71.7746 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997
-69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 69.2997 70.5371
-71.7746 73.0121 74.2496 71.7747 69.2997 66.8247 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.0403 63.7309 63.4216 63.1122 62.8028
-62.4934 62.1841 61.8747 61.256 60.6372 60.0185 59.3997 59.3997 59.3997
-59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997
-59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997
-59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997 59.3997
-59.6747 59.9497 60.2247 60.4997 60.7747 61.0497 61.3247 61.5997 61.8747
-61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747
-61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747 61.8747
-61.8747 61.8747 61.8747 62.3697 62.8647 63.3597 63.8547 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 76.7246 81.6746 84.1496
-83.1596 82.1696 81.1796 80.1896 79.1996 78.2715 77.3434 76.4153 75.4871
-74.559 73.6309 72.7028 71.7746 69.9184 68.0622 66.2059 64.3497 62.4934
-60.6372 58.781 56.9248 55.6873 54.4498 53.2123 51.9748 50.7373 49.4998
-48.2623 47.0248 45.7873 44.5498 43.3123 42.0748 40.8373 39.5998 38.3623
-37.1248 37.3998 37.6748 37.9498 38.2248 38.4998 38.7748 71.7747 71.7747
-71.7747 71.7747 71.7747 71.7747 71.7747 71.7747 71.7747 71.7747 71.7747
-71.7747 71.7747 71.7747 71.7747 71.7747 72.1282 72.4818 72.8354 73.1889
-73.5425 73.8961 74.2496 74.6032 74.9568 75.3103 75.6639 76.0175 76.371
-76.7246 76.3711 76.0175 75.6639 75.3103 74.9568 74.6032 74.2496 73.2596
-72.2696 71.2796 70.2896 69.2996 68.3096 67.3196 66.3297 65.3397 64.3497
-64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497 64.3497
-64.3497 64.3497 64.3497 65.1747 65.9997 66.8247 66.8247 66.8247 66.8247
-66.8247 66.8247 66.8247 66.8247 66.8247 66.2059 65.5872 64.9684 64.3497
-63.1122 61.8747 60.6372 59.3997 57.5435 55.6872 53.831 51.9747 48.2623
-44.5498 42.0748 42.0748 0;
-#X coords 0 100 299 1 600 40 1;
-#X restore 14 278 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array delay-dry-vol-array 300 float 1;
-#A 0 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986
-0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.924986 0.922486
-0.919986 0.917486 0.914986 0.912486 0.909986 0.907486 0.904986 0.902486
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986 0.899986
-0.899986 0.899986 0.899986 0.899986 0.899986;
-#X coords 0 1 299 0 600 40 1;
-#X restore 14 335 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array delay-wet-vol-array 300 float 1;
-#A 0 0.0166666 0.0166666 0.0166666 0.0416666 0.0416666 0.0416666 0.0416666
-0.0416666 0.0416666 0.0499999 0.0583333 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666 0.0666666
-0.0666666 0.0666666 0.0708333 0.0708333 0.0708333 0.0708333 0.0708333
-0.0833333 0.0958333 0.0916666 0.0916666 0.0916666 0.0916666 0.125 0.135417
-0.145833 0.15625 0.166667 0.177083 0.1875 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917 0.197917
-0.197917 0.197917 0.197917 0.18125 0.164584 0.147917 0.13125 0.114584
-0.097917 0.0895837 0.0812503 0.072917 0.0645837 0.0562503 0.0562503
-0.0562503 0.0562503 0.0562503 0.0673614 0.0673614 0.0673614 0.0673614
-0.0673614 0.0673614 0.0673614 0.0673614 0.0673614 0.0673614 0.0673614
-0.0673614 0.0673614 0.0673614 0.107467 0.113717 0.119967 0.126217 0.132467
-0.138717 0.144967 0.151217 0.157468 0.165801 0.174134 0.182468 0.190801
-0.199134 0.207467 0.215801 0.224134 0.232467 0.240801 0.249134 0.257468
-0.267467 0.267467 0.267467 0.267467 0.267467 0.267467 0.267467 0.267467
-0.292468 0.317468 0.342468 0.352468 0.362468 0.372468 0.382468 0.382468
-0.382468 0.382468 0.382468 0.382468 0.382468 0.382468 0.382468 0.382468
-0.382468 0.382468 0.384551 0.386635 0.388718 0.390801 0.392885 0.394968
-0.397051 0.399135 0.401218 0.403301 0.405385 0.432468 0.432468 0.457468
-0.464611 0.464611 0.464611 0.464611 0.464611 0.464611 0.464611 0.464611
-0.464611 0.464611 0.464611 0.464611 0.469611 0.474611 0.479611 0.484611
-0.489611 0.494611 0.499611 0.504611 0.509611 0.514611;
-#X coords 0 1 299 0 600 40 1;
-#X restore 15 391 graph;
-#N canvas 0 0 450 300 graph8 0;
-#X array delay-feedback-array 300 float 1;
-#A 0 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002 0.125002
-0.137502 0.150002 0.150002 0.150002 0.150002 0.162503 0.175003 0.175003
-0.175003 0.175003 0.175003 0.175003 0.175003 0.200003 0.200003 0.225004
-0.225004 0.250004 0.258337 0.266671 0.275004 0.287505 0.300005 0.312505
-0.325005 0.333339 0.341672 0.350006 0.375006;
-#X coords 0 1 299 0 600 40 1;
-#X restore 14 447 graph;
-#N canvas 111 41 703 397 reading-tables 0;
-#X obj 302 16 r bar;
-#X obj 41 51 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X obj 47 98 s filter-dry-vol;
-#X obj 57 148 s filter-wet-vol;
-#X obj 72 177 tabread filter-freq-l-array;
-#X obj 71 124 tabread filter-wet-vol-array;
-#X obj 61 75 tabread filter-dry-vol-array;
-#X obj 58 201 s filter-freq-l;
-#X obj 81 226 tabread filter-freq-r-array;
-#X obj 67 250 s filter-freq-r;
-#X obj 351 81 tabread delay-dry-vol-array;
-#X obj 338 103 s delay-dry-vol;
-#X obj 359 123 tabread delay-wet-vol-array;
-#X obj 346 145 s delay-wet-vol;
-#X obj 364 166 tabread delay-feedback-array;
-#X obj 260 332 s delay-l-mul;
-#X obj 350 189 s delay-feedback;
-#X obj 389 332 s delay-r-mul;
-#X obj 339 268 loadbang;
-#X msg 294 298 2;
-#X msg 389 298 3;
-#X connect 0 0 6 0;
-#X connect 0 0 5 0;
-#X connect 0 0 4 0;
-#X connect 0 0 8 0;
-#X connect 0 0 10 0;
-#X connect 0 0 12 0;
-#X connect 0 0 14 0;
-#X connect 1 0 2 0;
-#X connect 4 0 7 0;
-#X connect 5 0 3 0;
-#X connect 6 0 2 0;
-#X connect 8 0 9 0;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 14 0 16 0;
-#X connect 18 0 19 0;
-#X connect 18 0 20 0;
-#X connect 19 0 15 0;
-#X connect 20 0 17 0;
-#X restore 20 620 pd reading-tables;
-#X restore 24 607 pd effects-automation;
-#N canvas 123 63 702 364 instruments-automation 0;
-#X obj 121 67 vsl 15 128 0.1 100 1 0 empty empty transport 0 -8 0 8
--262144 -1 -1 0 1;
-#X obj 202 69 vsl 15 128 0.1 100 1 0 empty empty duration 0 -8 0 8
--262144 -1 -1 0 1;
-#X obj 296 102 hsl 128 15 -50 50 0 0 empty empty pan -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 391 180 hradio 15 1 0 3 empty empty instrument 0 -6 0 8 -262144
--1 -1 0;
-#N canvas 57 58 804 573 enroute 0;
-#X obj 267 67 inlet;
-#X obj 24 410 s instr-2-transport;
-#X obj 75 433 s instr-2-duration;
-#X obj 125 454 s instr-2-pan;
-#X obj 225 410 s instr-3-transport;
-#X obj 276 433 s instr-3-duration;
-#X obj 326 454 s instr-3-pan;
-#X obj 426 405 s instr-4-transport;
-#X obj 477 428 s instr-4-duration;
-#X obj 527 449 s instr-4-pan;
-#X obj 454 64 inlet;
-#X obj 270 181 route 0 1 2;
-#X obj 274 129 int 0;
-#X obj 273 155 pack f f;
-#X obj 269 96 t b f;
-#X obj 160 67 inlet;
-#X obj 163 181 route 0 1 2;
-#X obj 167 129 int 0;
-#X obj 166 155 pack f f;
-#X obj 162 96 t b f;
-#X obj 52 65 inlet;
-#X obj 55 179 route 0 1 2;
-#X obj 59 127 int 0;
-#X obj 58 153 pack f f;
-#X obj 54 94 t b f;
-#X connect 0 0 14 0;
-#X connect 10 0 12 1;
-#X connect 10 0 17 1;
-#X connect 10 0 22 1;
-#X connect 11 0 3 0;
-#X connect 11 1 6 0;
-#X connect 11 2 9 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 12 0;
-#X connect 14 1 13 1;
-#X connect 15 0 19 0;
-#X connect 16 0 2 0;
-#X connect 16 1 5 0;
-#X connect 16 2 8 0;
-#X connect 17 0 18 0;
-#X connect 18 0 16 0;
-#X connect 19 0 17 0;
-#X connect 19 1 18 1;
-#X connect 20 0 24 0;
-#X connect 21 0 1 0;
-#X connect 21 1 4 0;
-#X connect 21 2 7 0;
-#X connect 22 0 23 0;
-#X connect 23 0 21 0;
-#X connect 24 0 22 0;
-#X connect 24 1 23 1;
-#X restore 164 236 pd enroute;
-#X floatatom 106 202 5 0 0 0 - - -;
-#X floatatom 167 203 5 0 0 0 - - -;
-#X connect 0 0 4 0;
-#X connect 0 0 5 0;
-#X connect 1 0 4 1;
-#X connect 1 0 6 0;
-#X connect 2 0 4 2;
-#X connect 3 0 4 3;
-#X restore 214 603 pd instruments-automation;
-#X obj 268 50 cnv 15 2 400 empty empty solo 20 12 0 14 -258699 -66577
-0;
-#N canvas 0 0 450 300 graph1 0;
-#X array played3 16 float 0;
-#X coords 0 1.5 15 -0.5 200 20 1;
-#X restore 650 236 graph;
-#X connect 7 0 9 0;
-#X connect 9 0 7 0;
-#X restore 255 65 pd sequencer;
-#N canvas 296 372 546 320 count-bars 0;
-#X obj 55 230 int 0;
-#X obj 104 230 + 1;
-#X obj 43 45 bang;
-#X msg 177 90 0;
-#X obj 329 64 r bar-position;
-#X obj 55 254 s bar;
-#X obj 56 191 spigot;
-#X obj 41 21 inlet bang;
-#X obj 110 40 inlet toggle;
-#X obj 178 66 inlet reset;
-#X obj 320 27 inlet set-position;
-#X connect 0 0 1 0;
-#X connect 0 0 5 0;
-#X connect 1 0 0 1;
-#X connect 2 0 6 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 2 0;
-#X connect 8 0 6 1;
-#X connect 9 0 3 0;
-#X connect 10 0 0 0;
-#X restore 381 193 pd count-bars;
-#X obj 499 168 hsl 128 15 0 300 0 0 empty empty position -2 -6 0 8
--261681 -1 -1 0 1;
-#X obj 402 169 tgl 15 0 empty empty toggle 0 -6 0 8 -261681 -1 -1 1
-1;
-#X obj 450 168 bng 15 250 50 0 empty empty rewind 0 -6 0 8 -261681
--1 -1;
-#X text 364 65 <-- open ME !;
-#X obj 597 193 loadbang;
-#X msg 598 215 1;
-#X obj 53 105 vsl 15 128 0 1 0 0 sax-vol-in empty sax-vol-in 0 -8 0
-8 -262144 -1 -1 0 1;
-#X obj 156 91 adc~ 8;
-#X connect 0 0 4 0;
-#X connect 0 1 5 0;
-#X connect 0 2 6 0;
-#X connect 0 3 7 0;
-#X connect 1 0 4 1;
-#X connect 1 1 5 1;
-#X connect 1 2 0 0;
-#X connect 1 2 9 0;
-#X connect 2 0 1 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 1;
-#X connect 10 0 9 3;
-#X connect 11 0 9 1;
-#X connect 12 0 9 2;
-#X connect 14 0 15 0;
-#X connect 15 0 11 0;
-#X connect 15 0 12 0;
-#X connect 17 0 0 1;
diff --git a/externals/frankenstein/patches/SHOWME.pd b/externals/frankenstein/patches/SHOWME.pd
deleted file mode 100644
index 539fabb2e..000000000
--- a/externals/frankenstein/patches/SHOWME.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#N canvas 203 60 777 510 12;
-#X obj 572 56 chord_melo_test2;
-#X obj 531 85 tabwrite src;
-#X obj 644 87 tabwrite dest;
-#N canvas 0 0 450 300 graph25 0;
-#X array src 16 float 1;
-#A 0 55 59 62 60 52 50 48 47 48 55 57 59 60 55 52 48;
-#X array dest 16 float 1;
-#A 0 41 67 72 57 55 53 46 44 55 64 40 72 76 62 42 60;
-#X coords 0 127 15 0 400 250 1;
-#X restore 75 32 graph;
-#X obj 572 38 tgl 15 0 empty empty START 0 -6 0 8 -258699 -1 -1 1 1
-;
-#X floatatom 550 138 5 0 0 0 - - -;
-#X floatatom 596 138 5 0 0 0 - - -;
-#X floatatom 648 137 5 0 0 0 - - -;
-#X obj 591 279 tgl 15 0 toggleSRC empty src 0 -6 0 8 -262144 -1 -1
-1 1;
-#X obj 627 279 tgl 15 0 toggleOUT empty out 0 -6 0 8 -262144 -1 -1
-0 1;
-#X connect 0 0 1 0;
-#X connect 0 0 5 0;
-#X connect 0 1 2 0;
-#X connect 0 1 6 0;
-#X connect 0 2 1 1;
-#X connect 0 2 2 1;
-#X connect 0 2 7 0;
-#X connect 4 0 0 0;
diff --git a/externals/frankenstein/patches/bay.orc b/externals/frankenstein/patches/bay.orc
deleted file mode 100755
index e754d3118..000000000
--- a/externals/frankenstein/patches/bay.orc
+++ /dev/null
@@ -1,418 +0,0 @@
-; ================================================================
-; Header
-; ================================================================
-sr=44100
-kr=882
-ksmps=50
-nchnls=2
-
-; ================================================================
-; Globals
-; ================================================================
-zakinit 10,10
-
-; Global variable for the reverb unit
-ga1 init 0
-
-; ================================================================
-; Tables
-; ================================================================
-; Waveform for the string-pad
-iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25,  .0, .1,  .1, .1
-
-; Senoid required by chorus
-isine ftgen 2, 0, 4096, 10, 1
-
-
-; ================================================================
-; Instruments
-; ================================================================
-
-
-instr 1	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz1"
-kpos invalue "pos1"
-kamp  invalue "amp1"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 2	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz2"
-kpos invalue "pos2"
-kamp  invalue "amp2"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 3	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
- ; ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz3"
-kpos invalue "pos3"
-kamp  invalue "amp3"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-instr 4	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz4"
-kpos invalue "pos4"
-kamp  invalue "amp4"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-
-
-
-; strumento senza invalue
-
-instr 9	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-  ihz  = p4
-  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-  ipos = p6
-  iamp = ampdb(idb)
-
-; modified by dmorelli
-
-;kpos invalue "pos1"
-;kamp  invalue "amp1"
-;kctrl = kamp*70
-;kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, ihz, 1            ; audio oscillator
-  acel1   oscil   kctrl, ihz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, ihz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  ippan =       ipos*1.570796325  ; half of PI (radians of 90o angle)
-  ipleft        =       cos(ippan)        ; half sign "down"
-  ipright       =       sin(ippan)        ; half sign "up"
-  asig1 = asig*ipleft;
-  asig2 = asig*ipright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; ================================================================
-; EFFECTS
-; ================================================================
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
-; I made some of its parameters accesible trhough score
-instr 10	;Chorus
-  ; Read input from zak
-  a1     zar     1
-  a2     zar     2
-  idlyml=p4      ;delay in milliseconds
-  k1             oscili          idlyml/p5, 1, 2
-  ar1l           vdelay3 a1, idlyml/5+k1, 900    ;delayed sound 1
-  ar1r           vdelay3 a2, idlyml/5+k1, 900    ;delayed sound 1
-  k2             oscili          idlyml/p5, .995, 2
-  ar2l           vdelay3 a1, idlyml/5+k2, 700    ;delayed sound 2
-  ar2r           vdelay3 a2, idlyml/5+k2, 700    ;delayed sound 2
-  k3             oscili          idlyml/p5, 1.05, 2
-  ar3l           vdelay3 a1, idlyml/5+k3, 700    ;delayed sound 3
-  ar3r           vdelay3 a2, idlyml/5+k3, 700    ;delayed sound 3
-  k4             oscili          idlyml/p5, 1, 2
-  ar4l           vdelay3 a1, idlyml/5+k4, 900    ;delayed sound 4
-  ar4r           vdelay3 a2, idlyml/5+k4, 900    ;delayed sound 4
-  aoutl          =               (a1+ar1l+ar2l+ar3l+ar4l)*.5
-  aoutr          =               (a2+ar1r+ar2r+ar3r+ar4r)*.5
-
-  ; To the output mixer
-  zawm            aoutl, 5
-  zawm            aoutr, 6
-  ; and also to the reverb unit
-  ga1 = ga1 + (aoutl+aoutr)*.5
-endin
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Reverb
-; 8 delay line FDN reverb, with feedback matrix based upon 
-; physical modeling scattering junction of 8 lossless waveguides
-; of equal characteristic impedance. Based on Julius O. Smith III, 
-; "A New Approach to Digital Reverberation using Closed Waveguide
-; Networks," Proceedings of the International Computer Music 
-; Conference 1985, p. 47-53 (also available as a seperate
-; publication from CCRMA), as well as some more recent papers by
-; Smith and others.
-;
-; Coded by Sean Costello, October 1999
-instr 25	;Reverb
-  ; Note: ga1 is the global input to the reverb.
-  afilt1 init 0
-  afilt2 init 0
-  afilt3 init 0
-  afilt4 init 0
-  afilt5 init 0
-  afilt6 init 0
-  afilt7 init 0
-  afilt8 init 0
-  idel1 = (2473.000/sr)
-  idel2 = (2767.000/sr)
-  idel3 = (3217.000/sr)
-  idel4 = (3557.000/sr)
-  idel5 = (3907.000/sr)
-  idel6 = (4127.000/sr)
-  idel7 = (2143.000/sr)
-  idel8 = (1933.000/sr)
-  
-  
-  igain = p4      ; gain of reverb. Adjust empirically
-                  ; for desired reverb time. .6 gives
-                  ; a good small "live" room sound, .8
-                  ; a small hall, .9 a large hall,
-                  ; .99 an enormous stone cavern.
-  
-  ipitchmod = p5  ; amount of random pitch modulation
-                  ; for the delay lines. 1 is the "normal"
-                  ; amount, but this may be too high for
-                  ; held pitches such as piano tones.
-                  ; Adjust to taste.
-  
-  itone = p6      ; Cutoff frequency of lowpass filters
-                  ; in feedback loops of delay lines,
-                  ; in Hz. Lower cutoff frequencies results
-                  ; in a sound with more high-frequency
-                  ; damping.
-  
-  ; k1-k8 are used to add random pitch modulation to the
-  ; delay lines. Helps eliminate metallic overtones
-  ; in the reverb sound.
-  k1      randi   .001, 3.1, .06
-  k2      randi   .0011, 3.5, .9
-  k3      randi   .0017, 1.11, .7
-  k4      randi   .0006, 3.973, .3
-  k5      randi   .001, 2.341, .63
-  k6      randi   .0011, 1.897, .7
-  k7      randi   .0017, 0.891, .9
-  k8      randi   .0006, 3.221, .44
-  ; apj is used to calculate "resultant junction pressure" for 
-  ; the scattering junction of 8 lossless waveguides
-  ; of equal characteristic impedance. If you wish to
-  ; add more delay lines, simply add them to the following 
-  ; equation, and replace the .25 by 2/N, where N is the 
-  ; number of delay lines.
-  apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
-  
-  
-  adum1   delayr  1
-  adel1   deltapi idel1 + k1 * ipitchmod
-          delayw  ga1 + apj - afilt1
-  
-  adum2   delayr  1
-  adel2   deltapi idel2 + k2 * ipitchmod
-          delayw  ga1 + apj - afilt2
-  
-  adum3   delayr  1
-  adel3   deltapi idel3 + k3 * ipitchmod
-          delayw  ga1 + apj - afilt3
-  
-  adum4   delayr  1
-  adel4   deltapi idel4 + k4 * ipitchmod
-          delayw  ga1 + apj - afilt4
-  
-  adum5   delayr  1
-  adel5   deltapi idel5 + k5 * ipitchmod
-          delayw  ga1 + apj - afilt5
-  
-  adum6   delayr  1
-  adel6   deltapi idel6 + k6 * ipitchmod
-          delayw  ga1 + apj - afilt6
-  
-  adum7   delayr  1
-  adel7   deltapi idel7 + k7 * ipitchmod
-          delayw  ga1 + apj - afilt7
-  
-  adum8   delayr  1
-  adel8   deltapi idel8 + k8 * ipitchmod
-          delayw  ga1 + apj - afilt8
-  
-  ; 1st order lowpass filters in feedback
-  ; loops of delay lines.
-  afilt1  tone    adel1 * igain, itone
-  afilt2  tone    adel2 * igain, itone
-  afilt3  tone    adel3 * igain, itone
-  afilt4  tone    adel4 * igain, itone
-  afilt5  tone    adel5 * igain, itone
-  afilt6  tone    adel6 * igain, itone
-  afilt7  tone    adel7 * igain, itone
-  afilt8  tone    adel8 * igain, itone
-  
-  ; The outputs of the delay lines are summed
-  ; and sent to the stereo outputs. This could
-  ; easily be modified for a 4 or 8-channel 
-  ; sound system.
-  aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
-  aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
-  ;outs    aout1, aout2
-  ; To the output mixer
-  zawm aout1, 5
-  zawm aout2, 6
-  ga1 = 0
-endin
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Output mixer
-; It applies a bass enhancement, compression and fadeout
-; to the whole piece,
-instr 30	;Mixer
-  ; Read input from zak
-  a1  zar 5
-  a2  zar 6
-  ; Bass enhancement
-  al1 butterlp a1, 100
-  al2 butterlp a2, 100
-  a1 = al1*1.5 +a1
-  a2 = al2*1.5 +a2 
-
-  ; Global amplitude shape
-  ; It applies a gain of p4 to the whole piece, and creates a
-  ; fadeout the last p5 seconds
-  kenv   linseg  p4, p3-p5, p4, p5, 0 
-  a1=a1*kenv
-  a2=a2*kenv 
-  
-  ; Compression
-  a1 dam a1, 5000, 0.5, 1, 0.2, 0.1  
-  a2 dam a2, 5000, 0.5, 1, 0.2, 0.1  
-  
-  outs a1, a2
-  zacl 0, 10
-endin
-
diff --git a/externals/frankenstein/patches/feb05/bay.orc b/externals/frankenstein/patches/feb05/bay.orc
deleted file mode 100755
index 78edb681b..000000000
--- a/externals/frankenstein/patches/feb05/bay.orc
+++ /dev/null
@@ -1,463 +0,0 @@
-; ================================================================
-; Header
-; ================================================================
-sr=44100
-kr=882
-ksmps=50
-nchnls=2
-
-; ================================================================
-; Globals
-; ================================================================
-zakinit 10,10
-
-; Global variable for the reverb unit
-ga1 init 0
-
-; ================================================================
-; Tables
-; ================================================================
-; Waveform for the string-pad
-iwave ftgen 1, 0, 4096, 10, 1, .5, .33, .25,  .0, .1,  .1, .1
-
-; Senoid required by chorus
-isine ftgen 2, 0, 4096, 10, 1
-
-
-; ================================================================
-; Instruments
-; ================================================================
-
-
-instr 1	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz1"
-kpos invalue "pos1"
-kamp  invalue "amp1"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 2	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz2"
-kpos invalue "pos2"
-kamp  invalue "amp2"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 3	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
- ; ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz3"
-kpos invalue "pos3"
-kamp  invalue "amp3"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-instr 4	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz4"
-kpos invalue "pos4"
-kamp  invalue "amp4"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-instr 5	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-;  ihz  = p4
-;  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-;  ipos = p6
-;  iamp = ampdb(idb)
-
-; modified by dmorelli
-khz	invalue	"hz5"
-kpos invalue "pos5"
-kamp  invalue "amp5"
-kctrl = kamp*70
-kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-;  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, khz, 1            ; audio oscillator
-  acel1   oscil   kctrl, khz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, khz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  kppan =       kpos*1.570796325  ; half of PI (radians of 90o angle)
-  kpleft        =       cos(kppan)        ; half sign "down"
-  kpright       =       sin(kppan)        ; half sign "up"
-  asig1 = asig*kpleft;
-  asig2 = asig*kpright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; live input per reverbero
-
-instr 8	;live input
-  asig1,asig2	ins
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-
-; strumento senza invalue
-
-instr 9	;String pad
-; String-pad borrwoed from the piece "Dorian Gray",
-; http://akozar.spymac.net/music/ Modified to fit my needs
-
-  ihz  = p4
-  idb  = p5/127 * 70    ; rescale MIDI velocity to 70db
-  ipos = p6
-  iamp = ampdb(idb)
-
-; modified by dmorelli
-
-;kpos invalue "pos1"
-;kamp  invalue "amp1"
-;kctrl = kamp*70
-;kctrl =	ampdb(kctrl)
-  ; Slow attack and release
-  kctrl   linseg  0, p3/4, iamp, p3/2, 0  
-  ; Slight chorus effect
-  afund   oscil   kctrl, ihz, 1            ; audio oscillator
-  acel1   oscil   kctrl, ihz - .1, 1       ; audio oscillator - flat
-  acel2   oscil   kctrl, ihz + .1, 1       ; audio oscillator - sharp
-  asig    =   afund + acel1 + acel2
-
-  ; Cut-off high frequencies depending on midi-velocity
-  ; (larger velocity implies more brighter sound)
-  asig butterlp asig, (p5-60)*40+900
- 
-  ; Panning
-  ippan =       ipos*1.570796325  ; half of PI (radians of 90o angle)
-  ipleft        =       cos(ippan)        ; half sign "down"
-  ipright       =       sin(ippan)        ; half sign "up"
-  asig1 = asig*ipleft;
-  asig2 = asig*ipright;
-  ; To the chorus effect, through zak channels 1 and 2
-  zawm asig1, 1
-  zawm asig2, 2
-endin
-
-; ================================================================
-; EFFECTS
-; ================================================================
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Chorus effect, borrowed from http://www.jlpublishing.com/Csound.htm
-; I made some of its parameters accesible trhough score
-instr 10	;Chorus
-  ; Read input from zak
-  a1     zar     1
-  a2     zar     2
-  idlyml=p4      ;delay in milliseconds
-  k1             oscili          idlyml/p5, 1, 2
-  ar1l           vdelay3 a1, idlyml/5+k1, 900    ;delayed sound 1
-  ar1r           vdelay3 a2, idlyml/5+k1, 900    ;delayed sound 1
-  k2             oscili          idlyml/p5, .995, 2
-  ar2l           vdelay3 a1, idlyml/5+k2, 700    ;delayed sound 2
-  ar2r           vdelay3 a2, idlyml/5+k2, 700    ;delayed sound 2
-  k3             oscili          idlyml/p5, 1.05, 2
-  ar3l           vdelay3 a1, idlyml/5+k3, 700    ;delayed sound 3
-  ar3r           vdelay3 a2, idlyml/5+k3, 700    ;delayed sound 3
-  k4             oscili          idlyml/p5, 1, 2
-  ar4l           vdelay3 a1, idlyml/5+k4, 900    ;delayed sound 4
-  ar4r           vdelay3 a2, idlyml/5+k4, 900    ;delayed sound 4
-  aoutl          =               (a1+ar1l+ar2l+ar3l+ar4l)*.5
-  aoutr          =               (a2+ar1r+ar2r+ar3r+ar4r)*.5
-
-  ; To the output mixer
-  zawm            aoutl, 5
-  zawm            aoutr, 6
-  ; and also to the reverb unit
-  ga1 = ga1 + (aoutl+aoutr)*.5
-endin
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Reverb
-; 8 delay line FDN reverb, with feedback matrix based upon 
-; physical modeling scattering junction of 8 lossless waveguides
-; of equal characteristic impedance. Based on Julius O. Smith III, 
-; "A New Approach to Digital Reverberation using Closed Waveguide
-; Networks," Proceedings of the International Computer Music 
-; Conference 1985, p. 47-53 (also available as a seperate
-; publication from CCRMA), as well as some more recent papers by
-; Smith and others.
-;
-; Coded by Sean Costello, October 1999
-instr 25	;Reverb
-  ; Note: ga1 is the global input to the reverb.
-  afilt1 init 0
-  afilt2 init 0
-  afilt3 init 0
-  afilt4 init 0
-  afilt5 init 0
-  afilt6 init 0
-  afilt7 init 0
-  afilt8 init 0
-  idel1 = (2473.000/sr)
-  idel2 = (2767.000/sr)
-  idel3 = (3217.000/sr)
-  idel4 = (3557.000/sr)
-  idel5 = (3907.000/sr)
-  idel6 = (4127.000/sr)
-  idel7 = (2143.000/sr)
-  idel8 = (1933.000/sr)
-  
-  
-  igain = p4      ; gain of reverb. Adjust empirically
-                  ; for desired reverb time. .6 gives
-                  ; a good small "live" room sound, .8
-                  ; a small hall, .9 a large hall,
-                  ; .99 an enormous stone cavern.
-  
-  ipitchmod = p5  ; amount of random pitch modulation
-                  ; for the delay lines. 1 is the "normal"
-                  ; amount, but this may be too high for
-                  ; held pitches such as piano tones.
-                  ; Adjust to taste.
-  
-  itone = p6      ; Cutoff frequency of lowpass filters
-                  ; in feedback loops of delay lines,
-                  ; in Hz. Lower cutoff frequencies results
-                  ; in a sound with more high-frequency
-                  ; damping.
-  
-  ; k1-k8 are used to add random pitch modulation to the
-  ; delay lines. Helps eliminate metallic overtones
-  ; in the reverb sound.
-  k1      randi   .001, 3.1, .06
-  k2      randi   .0011, 3.5, .9
-  k3      randi   .0017, 1.11, .7
-  k4      randi   .0006, 3.973, .3
-  k5      randi   .001, 2.341, .63
-  k6      randi   .0011, 1.897, .7
-  k7      randi   .0017, 0.891, .9
-  k8      randi   .0006, 3.221, .44
-  ; apj is used to calculate "resultant junction pressure" for 
-  ; the scattering junction of 8 lossless waveguides
-  ; of equal characteristic impedance. If you wish to
-  ; add more delay lines, simply add them to the following 
-  ; equation, and replace the .25 by 2/N, where N is the 
-  ; number of delay lines.
-  apj = .25 * (afilt1 + afilt2 + afilt3 + afilt4 + afilt5 + afilt6 + afilt7 + afilt8)
-  
-  
-  adum1   delayr  1
-  adel1   deltapi idel1 + k1 * ipitchmod
-          delayw  ga1 + apj - afilt1
-  
-  adum2   delayr  1
-  adel2   deltapi idel2 + k2 * ipitchmod
-          delayw  ga1 + apj - afilt2
-  
-  adum3   delayr  1
-  adel3   deltapi idel3 + k3 * ipitchmod
-          delayw  ga1 + apj - afilt3
-  
-  adum4   delayr  1
-  adel4   deltapi idel4 + k4 * ipitchmod
-          delayw  ga1 + apj - afilt4
-  
-  adum5   delayr  1
-  adel5   deltapi idel5 + k5 * ipitchmod
-          delayw  ga1 + apj - afilt5
-  
-  adum6   delayr  1
-  adel6   deltapi idel6 + k6 * ipitchmod
-          delayw  ga1 + apj - afilt6
-  
-  adum7   delayr  1
-  adel7   deltapi idel7 + k7 * ipitchmod
-          delayw  ga1 + apj - afilt7
-  
-  adum8   delayr  1
-  adel8   deltapi idel8 + k8 * ipitchmod
-          delayw  ga1 + apj - afilt8
-  
-  ; 1st order lowpass filters in feedback
-  ; loops of delay lines.
-  afilt1  tone    adel1 * igain, itone
-  afilt2  tone    adel2 * igain, itone
-  afilt3  tone    adel3 * igain, itone
-  afilt4  tone    adel4 * igain, itone
-  afilt5  tone    adel5 * igain, itone
-  afilt6  tone    adel6 * igain, itone
-  afilt7  tone    adel7 * igain, itone
-  afilt8  tone    adel8 * igain, itone
-  
-  ; The outputs of the delay lines are summed
-  ; and sent to the stereo outputs. This could
-  ; easily be modified for a 4 or 8-channel 
-  ; sound system.
-  aout1 = (afilt1 + afilt3 + afilt5 + afilt7)
-  aout2 = (afilt2 + afilt4 + afilt6 + afilt8)
-  ;outs    aout1, aout2
-  ; To the output mixer
-  zawm aout1, 5
-  zawm aout2, 6
-  ga1 = 0
-endin
-
-
-; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-; Output mixer
-; It applies a bass enhancement, compression and fadeout
-; to the whole piece,
-instr 30	;Mixer
-  ; Read input from zak
-  a1  zar 5
-  a2  zar 6
-  ; Bass enhancement
-  al1 butterlp a1, 100
-  al2 butterlp a2, 100
-  a1 = al1*1.5 +a1
-  a2 = al2*1.5 +a2 
-
-  ; Global amplitude shape
-  ; It applies a gain of p4 to the whole piece, and creates a
-  ; fadeout the last p5 seconds
-  kenv   linseg  p4, p3-p5, p4, p5, 0 
-  a1=a1*kenv
-  a2=a2*kenv 
-  
-  ; Compression
-  a1 dam a1, 5000, 0.5, 1, 0.2, 0.1  
-  a2 dam a2, 5000, 0.5, 1, 0.2, 0.1  
-  
-  outs a1, a2
-  zacl 0, 10
-endin
-
diff --git a/externals/frankenstein/patches/feb05/bay.pd b/externals/frankenstein/patches/feb05/bay.pd
deleted file mode 100644
index 2927cd738..000000000
--- a/externals/frankenstein/patches/feb05/bay.pd
+++ /dev/null
@@ -1,250 +0,0 @@
-#N canvas 253 22 999 737 10;
-#X symbolatom 157 205 18 0 0 2 next_chord - -;
-#N canvas 39 349 535 332 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 762 65 pd readme;
-#X obj 121 329 harmonizer;
-#X msg 52 286 current \$1;
-#X msg 158 283 target \$1;
-#X obj 52 262 symbol;
-#X obj 52 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 246 369 unpack f f f f f;
-#X obj 127 108 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 127 132 set \$1;
-#N canvas 527 22 738 448 midi 1;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X obj 271 66 chord 120;
-#X connect 1 0 9 0;
-#X connect 1 1 9 1;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 7 0;
-#X connect 6 0 5 0;
-#X connect 7 0 0 0;
-#X connect 9 2 3 1;
-#X connect 9 2 5 1;
-#X connect 9 2 8 0;
-#X connect 9 2 4 0;
-#X restore 512 135 pd midi;
-#N canvas 547 120 674 372 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 145 105 read test.graph;
-#X msg 175 135 init 1;
-#X msg 115 77 write /Users/dc/Desktop/Orme.linux/TESTING/bel0205a.graph
-;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 429 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 28 404 bang;
-#X obj 439 580 mtof;
-#X obj 488 579 mtof;
-#X obj 573 583 mtof;
-#X obj 109 431 print;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X msg 718 588 event i 10 0 17000 10 30;
-#X msg 718 611 event i 30 0 17000 2 30;
-#X msg 719 564 event i 25 0 17000 0.98 0.8 20000;
-#X obj 648 539 loadbang;
-#X msg 443 610 event i 9 0 10 \$1 80 0.5;
-#X obj 531 582 mtof;
-#X obj 617 584 mtof;
-#X obj 580 54 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 22 486 r novelty;
-#X obj 599 121 int 0;
-#X obj 646 120 + 1;
-#X obj 600 171 tabread tab-novelty;
-#X obj 600 194 s novelty;
-#X obj 685 119 table tab-novelty;
-#X obj 600 147 % 10;
-#X obj 462 63 t b b;
-#X msg 645 504 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
-#X obj 203 97 symbol;
-#X msg 203 125 tonality \$1;
-#X obj 203 73 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X obj 307 94 symbol;
-#X obj 307 70 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X msg 307 122 modulation \$1;
-#X obj 445 189 print sequence;
-#X msg 235 15 search 9 1 5 0.9;
-#X obj 76 576 outlet;
-#X obj 145 576 outlet;
-#X obj 220 579 outlet;
-#X obj 283 579 outlet;
-#X obj 349 581 outlet;
-#X obj 606 15 loadbang;
-#X msg 613 41 1;
-#X obj 580 73 metro 10000;
-#N canvas 0 22 458 308 bar 0;
-#X obj 133 152 outlet;
-#X obj 114 25 r bar;
-#X obj 112 54 int 0;
-#X obj 172 52 + 1;
-#X obj 111 81 % 2;
-#X obj 115 122 select 0;
-#X obj 36 182 s nets;
-#X msg 36 155 realbar 1;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 0 4 0;
-#X connect 3 0 2 1;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
-#X connect 5 0 7 0;
-#X connect 7 0 6 0;
-#X restore 466 28 pd bar;
-#X obj 40 13 r novita;
-#X obj 94 157 chords_memory /Users/dc/Desktop/Orme.linux/TESTING/bel0205a.graph
-;
-#N canvas 0 22 450 300 graph2 0;
-#X array notes 6 float 3;
-#A 0 1 24 48 52 76 88;
-#X coords 0 127 5 1 200 127 1;
-#X restore 753 181 graph;
-#X msg 525 363 \; notes 1 2 \$1;
-#X msg 555 332 \; notes 2 3 \$1;
-#X msg 603 393 \; notes 3 4 \$1;
-#X floatatom 762 402 0 0 0 3 - - -;
-#X floatatom 717 323 0 0 99 1 index - -;
-#X msg 842 350 set another_table;
-#X text 714 402 value;
-#X obj 762 375 tabread notes;
-#X msg 804 325 set notes;
-#X msg 502 393 \; notes 0 1 \$1;
-#X msg 646 361 \; notes 4 5 \$1;
-#X connect 2 0 15 0;
-#X connect 2 0 27 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 24 0;
-#X connect 15 0 59 0;
-#X connect 15 0 80 0;
-#X connect 15 1 9 1;
-#X connect 15 1 25 0;
-#X connect 15 1 60 0;
-#X connect 15 1 71 0;
-#X connect 15 2 10 1;
-#X connect 15 2 37 0;
-#X connect 15 2 61 0;
-#X connect 15 2 72 0;
-#X connect 15 3 11 1;
-#X connect 15 3 26 0;
-#X connect 15 3 62 0;
-#X connect 15 3 73 0;
-#X connect 15 4 12 1;
-#X connect 15 4 38 0;
-#X connect 15 4 63 0;
-#X connect 15 4 81 0;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 69 0;
-#X connect 19 0 69 0;
-#X connect 20 0 69 0;
-#X connect 21 0 28 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 24 0 36 0;
-#X connect 25 0 36 0;
-#X connect 26 0 36 0;
-#X connect 28 0 29 0;
-#X connect 29 0 69 0;
-#X connect 30 0 28 1;
-#X connect 30 0 31 0;
-#X connect 35 0 34 0;
-#X connect 35 0 32 0;
-#X connect 35 0 33 0;
-#X connect 35 0 48 0;
-#X connect 37 0 36 0;
-#X connect 38 0 36 0;
-#X connect 39 0 66 0;
-#X connect 41 0 42 0;
-#X connect 41 0 46 0;
-#X connect 42 0 41 1;
-#X connect 43 0 44 0;
-#X connect 46 0 43 0;
-#X connect 47 0 21 0;
-#X connect 47 1 41 0;
-#X connect 49 0 50 0;
-#X connect 50 0 69 0;
-#X connect 51 0 49 0;
-#X connect 52 0 69 0;
-#X connect 54 0 56 0;
-#X connect 55 0 54 0;
-#X connect 56 0 69 0;
-#X connect 58 0 69 0;
-#X connect 64 0 65 0;
-#X connect 65 0 39 0;
-#X connect 67 0 47 0;
-#X connect 68 0 30 0;
-#X connect 69 0 0 0;
-#X connect 69 0 5 1;
-#X connect 69 0 22 0;
-#X connect 69 0 49 1;
-#X connect 69 0 16 0;
-#X connect 69 0 54 1;
-#X connect 69 1 53 0;
-#X connect 69 2 57 0;
-#X connect 75 0 78 0;
-#X connect 76 0 78 0;
-#X connect 78 0 74 0;
-#X connect 79 0 78 0;
diff --git a/externals/frankenstein/patches/feb05/bay.sco b/externals/frankenstein/patches/feb05/bay.sco
deleted file mode 100755
index 06d43e18a..000000000
--- a/externals/frankenstein/patches/feb05/bay.sco
+++ /dev/null
@@ -1,3 +0,0 @@
-f0 100000
-
-; EOF
\ No newline at end of file
diff --git a/externals/frankenstein/patches/feb05/bel0205a.graph b/externals/frankenstein/patches/feb05/bel0205a.graph
deleted file mode 100644
index d842b0b8312dc63632c11251ef4a84925ba251c9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 168100
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

diff --git a/externals/frankenstein/patches/feb05/belfast0205.graph b/externals/frankenstein/patches/feb05/belfast0205.graph
deleted file mode 100644
index cc5472fe961b06d59da2b19ed9c9e5f568005ece..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 168100
zcmeIu0Sy2E48kz{oBnM;(kWP)+)NpIok2B9fB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
iAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyP$%%;B{j1E

diff --git a/externals/frankenstein/patches/feb05/davidcsoundtest2.pd b/externals/frankenstein/patches/feb05/davidcsoundtest2.pd
deleted file mode 100644
index eef236a53..000000000
--- a/externals/frankenstein/patches/feb05/davidcsoundtest2.pd
+++ /dev/null
@@ -1,609 +0,0 @@
-#N canvas 439 190 404 363 10;
-#N canvas 0 25 815 569 bay 0;
-#X obj 12 83 loadbang;
-#N canvas 0 22 763 340 ascoltaHits 0;
-#X obj 161 223 outlet;
-#X obj 146 33 r 1-hit;
-#X obj 147 54 bang;
-#X msg 147 83 60;
-#X obj 198 57 bang;
-#X obj 197 36 r 2-hit;
-#X msg 198 86 72;
-#X obj 254 57 bang;
-#X msg 254 86 48;
-#X obj 253 36 r 3-hit;
-#X obj 303 60 bang;
-#X msg 303 89 67;
-#X obj 303 39 r 4-hit;
-#X obj 359 60 bang;
-#X obj 422 60 bang;
-#X obj 422 39 r 6-hit;
-#X obj 359 39 r 5-hit;
-#X msg 359 89 76;
-#X msg 422 89 36;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 0 0;
-#X connect 9 0 7 0;
-#X connect 10 0 11 0;
-#X connect 11 0 0 0;
-#X connect 12 0 10 0;
-#X connect 13 0 17 0;
-#X connect 14 0 18 0;
-#X connect 15 0 14 0;
-#X connect 16 0 13 0;
-#X connect 17 0 0 0;
-#X connect 18 0 0 0;
-#X restore 428 102 pd ascoltaHits;
-#X obj 430 164 mtof;
-#N canvas 0 22 466 316 chords 0;
-#X obj 132 43 inlet;
-#X obj 131 240 outlet;
-#X obj 262 31 loadbang;
-#X obj 260 74 metro 20000;
-#X obj 257 115 int 0;
-#X obj 303 117 + 1;
-#X obj 257 136 % 2;
-#X obj 246 162 select 0 1;
-#X obj 131 214 + 0;
-#X msg 243 182 0;
-#X msg 270 184 7;
-#X msg 260 54 1;
-#X connect 0 0 8 0;
-#X connect 2 0 11 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 1;
-#X connect 6 0 7 0;
-#X connect 7 0 9 0;
-#X connect 7 1 10 0;
-#X connect 8 0 1 0;
-#X connect 9 0 8 1;
-#X connect 10 0 8 1;
-#X connect 11 0 3 0;
-#X restore 430 131 pd chords;
-#N canvas 0 22 940 672 ascolta-valori 0;
-#X obj 135 554 outlet;
-#X obj 28 146 line;
-#X msg 27 123 \$1 100;
-#X msg 27 175 control amp1 \$1;
-#X obj 146 100 line;
-#X msg 145 77 \$1 100;
-#X obj 144 26 + 1;
-#X obj 143 51 / 2;
-#X obj 265 143 line;
-#X msg 264 119 \$1 100;
-#X obj 382 135 line;
-#X msg 381 112 \$1 100;
-#X obj 380 61 + 1;
-#X obj 379 86 / 2;
-#X msg 264 171 control amp2 \$1;
-#X obj 297 304 line;
-#X msg 296 281 \$1 100;
-#X obj 414 288 line;
-#X msg 413 265 \$1 100;
-#X obj 412 214 + 1;
-#X obj 411 239 / 2;
-#X obj 533 331 line;
-#X msg 532 307 \$1 100;
-#X obj 650 323 line;
-#X msg 649 300 \$1 100;
-#X obj 648 249 + 1;
-#X obj 647 274 / 2;
-#X msg 296 324 control amp3 \$1;
-#X msg 531 359 control amp4 \$1;
-#N canvas 0 22 678 338 graph16 0;
-#X array vol 100 float 3;
-#A 0 0.382146 0.444444 0.527258 0.5757 0.610071 0.636731 0.658514 0.676931
-0.692884 0.706956 0.719544 0.730931 0.741327 0.75089 0.759744 0.767987
-0.775698 0.782941 0.78977 0.796229 0.802357 0.808187 0.813745 0.819055
-0.82414 0.829017 0.833703 0.838212 0.842557 0.84675 0.8508 0.854718
-0.858511 0.862187 0.865754 0.869217 0.872583 0.875856 0.879043 0.882146
-0.885171 0.888121 0.891 0.893811 0.896558 0.899243 0.901869 0.904438
-0.906954 0.909417 0.911831 0.914197 0.916517 0.918792 0.921026 0.923218
-0.925371 0.927485 0.929563 0.931605 0.933613 0.935588 0.937531 0.939443
-0.941324 0.943177 0.945001 0.946797 0.948567 0.950311 0.952031 0.953725
-0.955396 0.957044 0.95867 0.960273 0.961856 0.963418 0.964959 0.966481
-0.967984 0.969468 0.970934 0.972382 0.973813 0.975227 0.976624 0.978006
-0.979371 0.980721 0.982056 0.983376 0.984682 0.985974 0.987252 0.988516
-0.989767 0.991005 0.99223 1.0615;
-#X coords 0 1 99 0 200 140 1;
-#X restore 532 24 graph;
-#X obj 26 101 tabread vol;
-#X obj 28 76 * 100;
-#X obj 265 97 tabread vol;
-#X obj 262 75 * 100;
-#X obj 28 48 clip 0 1;
-#X obj 262 40 clip 0 1;
-#X obj 307 264 tabread vol;
-#X obj 307 242 * 100;
-#X obj 308 222 clip 0 1;
-#X obj 534 284 tabread vol;
-#X obj 534 262 * 100;
-#X obj 535 242 clip 0 1;
-#X msg 149 129 control pos1 \$1;
-#X msg 385 164 control pos2 \$1;
-#X msg 417 317 control pos3 \$1;
-#X msg 653 352 control pos4 \$1;
-#X obj 434 493 line;
-#X msg 433 469 \$1 100;
-#X obj 551 485 line;
-#X msg 550 462 \$1 100;
-#X obj 549 411 + 1;
-#X obj 548 436 / 2;
-#X obj 435 446 tabread vol;
-#X obj 435 424 * 100;
-#X obj 436 404 clip 0 1;
-#X msg 432 521 control amp5 \$1;
-#X msg 553 514 control pos5 \$1;
-#X obj 28 13 r 1-velo;
-#X obj 145 6 r 1-x;
-#X obj 264 17 r 2-velo;
-#X obj 296 202 r 3-velo;
-#X obj 412 194 r 3-x;
-#X obj 528 216 r 4-velo;
-#X obj 649 229 r 4-x;
-#X obj 429 378 r 5-velo;
-#X obj 550 391 r 5-x;
-#X obj 382 40 r 2-x;
-#X obj 839 58 + 1;
-#X obj 761 97 log;
-#X obj 803 59 int 1;
-#X obj 759 119 / 4.65;
-#X obj 807 83 t f f;
-#X obj 785 33 metro 10;
-#X obj 785 14 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 763 183 tabwrite vol;
-#X msg 848 32 1;
-#X obj 758 141 + 0.8;
-#X obj 757 160 / 1.8;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X connect 4 0 42 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 5 0;
-#X connect 8 0 14 0;
-#X connect 9 0 8 0;
-#X connect 10 0 43 0;
-#X connect 11 0 10 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 0 0;
-#X connect 15 0 27 0;
-#X connect 16 0 15 0;
-#X connect 17 0 44 0;
-#X connect 18 0 17 0;
-#X connect 19 0 20 0;
-#X connect 20 0 18 0;
-#X connect 21 0 28 0;
-#X connect 22 0 21 0;
-#X connect 23 0 45 0;
-#X connect 24 0 23 0;
-#X connect 25 0 26 0;
-#X connect 26 0 24 0;
-#X connect 27 0 0 0;
-#X connect 28 0 0 0;
-#X connect 30 0 2 0;
-#X connect 31 0 30 0;
-#X connect 32 0 9 0;
-#X connect 33 0 32 0;
-#X connect 34 0 31 0;
-#X connect 35 0 33 0;
-#X connect 36 0 16 0;
-#X connect 37 0 36 0;
-#X connect 38 0 37 0;
-#X connect 39 0 22 0;
-#X connect 40 0 39 0;
-#X connect 41 0 40 0;
-#X connect 42 0 0 0;
-#X connect 43 0 0 0;
-#X connect 44 0 0 0;
-#X connect 45 0 0 0;
-#X connect 46 0 55 0;
-#X connect 47 0 46 0;
-#X connect 48 0 56 0;
-#X connect 49 0 48 0;
-#X connect 50 0 51 0;
-#X connect 51 0 49 0;
-#X connect 52 0 47 0;
-#X connect 53 0 52 0;
-#X connect 54 0 53 0;
-#X connect 55 0 0 0;
-#X connect 56 0 0 0;
-#X connect 57 0 34 0;
-#X connect 58 0 6 0;
-#X connect 59 0 35 0;
-#X connect 60 0 38 0;
-#X connect 61 0 19 0;
-#X connect 62 0 41 0;
-#X connect 63 0 25 0;
-#X connect 64 0 54 0;
-#X connect 65 0 50 0;
-#X connect 66 0 12 0;
-#X connect 67 0 69 1;
-#X connect 68 0 70 0;
-#X connect 69 0 67 0;
-#X connect 69 0 71 0;
-#X connect 70 0 76 0;
-#X connect 71 0 68 0;
-#X connect 71 1 74 1;
-#X connect 72 0 69 0;
-#X connect 73 0 72 0;
-#X connect 75 0 69 0;
-#X connect 76 0 77 0;
-#X connect 77 0 74 0;
-#X restore 592 84 pd ascolta-valori;
-#X obj 567 118 bay --------;
-#X obj 367 279 catch~ mainL;
-#X obj 491 281 catch~ mainR;
-#X obj 376 318 *~ 0.01;
-#X obj 467 319 *~ 0.01;
-#X obj 701 211 vsl 15 128 0 0.8 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 317 1;
-#X floatatom 700 346 5 0 0 0 - - -;
-#X obj 750 195 loadbang;
-#X msg 750 216 0.02;
-#X obj 265 365 csound~ 2 2;
-#X obj 332 137 r csound;
-#X msg 156 24 i9 0 8 400 90 0.3;
-#X msg 23 159 i30 0 17000 2 30;
-#X msg 23 136 i10 0 17000 10 30;
-#X msg 24 112 i25 0 17000 0.98 0.8 20000;
-#X msg 1 182 bang \; csound bin /usr/local/bin/csound \; csound orc
-bay.orc \; csound sco bay.sco \; csound csound -dm0 \; csound bang
-\; pd dsp 1;
-#X msg 267 58 i9 0 8 450 90 0.3;
-#X msg 293 20 i9 0 8 500 90 0.3;
-#X obj 255 392 /~ 32767;
-#X obj 324 391 /~ 32767;
-#N canvas 77 25 718 506 note---- 0;
-#X obj 95 284 outlet;
-#X obj 95 222 mtof;
-#X obj 202 211 mtof;
-#X obj 309 220 mtof;
-#X obj 412 221 mtof;
-#X obj 120 133 inlet;
-#X obj 195 140 inlet;
-#X obj 310 163 inlet;
-#X obj 414 170 inlet;
-#X obj 533 224 mtof;
-#X obj 535 173 inlet;
-#X obj 204 283 outlet;
-#X obj 303 284 outlet;
-#X obj 408 280 outlet;
-#X obj 539 274 outlet;
-#X connect 1 0 0 0;
-#X connect 2 0 11 0;
-#X connect 3 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 3 0;
-#X connect 8 0 4 0;
-#X connect 9 0 14 0;
-#X connect 10 0 9 0;
-#X restore 567 142 pd note----;
-#X obj 324 411 /~ 1.5;
-#X obj 255 412 /~ 1.5;
-#X obj 235 450 outlet~;
-#X obj 328 446 outlet~;
-#X msg 404 197 i9 0 14 \$1 90 0.3;
-#X obj 408 242 inlet~;
-#X obj 479 243 inlet~;
-#X connect 0 0 20 0;
-#X connect 0 0 17 0;
-#X connect 0 0 18 0;
-#X connect 0 0 19 0;
-#X connect 1 0 3 0;
-#X connect 2 0 30 0;
-#X connect 3 0 2 0;
-#X connect 5 0 25 0;
-#X connect 5 1 25 1;
-#X connect 5 2 25 2;
-#X connect 5 3 25 3;
-#X connect 5 4 25 4;
-#X connect 6 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 14 0;
-#X connect 9 0 14 1;
-#X connect 10 0 9 1;
-#X connect 10 0 8 1;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 13 0 10 0;
-#X connect 14 0 23 0;
-#X connect 14 1 24 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 17 0 14 0;
-#X connect 18 0 14 0;
-#X connect 19 0 14 0;
-#X connect 21 0 14 0;
-#X connect 22 0 14 0;
-#X connect 23 0 27 0;
-#X connect 24 0 26 0;
-#X connect 25 0 30 0;
-#X connect 25 1 30 0;
-#X connect 25 2 30 0;
-#X connect 25 3 30 0;
-#X connect 25 4 30 0;
-#X connect 26 0 29 0;
-#X connect 27 0 28 0;
-#X connect 30 0 14 0;
-#X connect 31 0 8 0;
-#X connect 32 0 9 0;
-#X restore 48 180 pd bay;
-#N canvas 0 22 892 581 beats 0;
-#X obj 361 183 metro;
-#N canvas 1 23 466 316 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 425 154 pd msecs;
-#X obj 424 80 loadbang;
-#X obj 361 160 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 1
-1;
-#N canvas 0 22 490 340 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 7;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-1;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 empty empty 1/4 0 -6 0 8 -262144 -1 -1
-1;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 3;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 373 244 graph;
-#X floatatom 447 179 5 0 0 0 - - -;
-#X obj 373 221 delay;
-#X obj 408 200 / 2;
-#X text 37 224 this delay is to center the quantization;
-#X obj 426 130 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--258699 -1 -1 50 256;
-#X obj 460 101 s sampleinit;
-#X obj 272 104 loadbang;
-#X obj 442 417 s beat;
-#X obj 446 201 s beatmsec;
-#X obj 392 478 s nets;
-#X obj 561 210 s nets;
-#X msg 425 101 50;
-#X msg 562 186 beatmsec \$1;
-#X msg 390 454 beat \$1;
-#X msg 295 135 1;
-#X obj 538 427 bang;
-#X obj 537 400 select 0;
-#X obj 558 457 s bar;
-#X obj 628 451 s nets;
-#X msg 626 427 bar 1;
-#X connect 0 0 6 0;
-#X connect 1 0 0 1;
-#X connect 1 0 5 0;
-#X connect 1 0 7 0;
-#X connect 1 0 13 0;
-#X connect 1 0 17 0;
-#X connect 2 0 16 0;
-#X connect 2 0 10 0;
-#X connect 3 0 0 0;
-#X connect 4 0 12 0;
-#X connect 4 0 18 0;
-#X connect 4 0 21 0;
-#X connect 6 0 4 0;
-#X connect 7 0 6 1;
-#X connect 9 0 1 0;
-#X connect 11 0 19 0;
-#X connect 16 0 9 0;
-#X connect 17 0 15 0;
-#X connect 18 0 14 0;
-#X connect 19 0 3 0;
-#X connect 20 0 22 0;
-#X connect 20 0 24 0;
-#X connect 21 0 20 0;
-#X connect 24 0 23 0;
-#X restore 7 6 pd beats;
-#X obj 39 312 dac~;
-#X obj 39 262 +~;
-#X obj 91 262 +~;
-#N canvas 0 94 786 462 normalizza-volumi 0;
-#N canvas 0 22 450 300 graph16 0;
-#X array \$0-norm-array 100 float 3;
-#A 0 0.154758 0.190473 0.211901 0.226187 0.247616 0.269044 0.297616
-0.319044 0.33333 0.347616 0.361902 0.369044 0.38333 0.390473 0.404759
-0.419045 0.43333 0.447616 0.45714 0.466664 0.476188 0.483331 0.497616
-0.504759 0.519045 0.519045 0.526188 0.533331 0.547617 0.547617 0.554759
-0.561902 0.566664 0.571426 0.576188 0.576188 0.576188 0.583331 0.583331
-0.583331 0.590474 0.590474 0.590474 0.597617 0.597617 0.60476 0.60476
-0.60476 0.60476 0.60476 0.611903 0.611903 0.611903 0.611903 0.611903
-0.619045 0.619045 0.623807 0.628569 0.633331 0.633331 0.633331 0.638093
-0.642855 0.647617 0.647617 0.647617 0.65476 0.658331 0.661903 0.665474
-0.669046 0.669046 0.669046 0.672617 0.676189 0.67976 0.683331 0.683331
-0.683331 0.683331 0.686903 0.690474 0.694046 0.697617 0.701189 0.70476
-0.708331 0.711903 0.711903 0.711903 0.711903 0.711903 0.719046 0.726189
-0.726189 0.726189 0.726189 0.733332 0.733332;
-#X coords 0 1 99 0 200 140 1;
-#X restore 531 154 graph;
-#X obj 37 133 tabread \$0-norm-array;
-#X obj 37 155 s 1-loop-vol;
-#X obj 135 218 tabread \$0-norm-array;
-#X obj 48 290 tabread \$0-norm-array;
-#X obj 104 392 tabread \$0-norm-array;
-#X obj 277 370 tabread \$0-norm-array;
-#X obj 133 238 s 2-loop-vol;
-#X obj 47 306 s 3-loop-vol;
-#X obj 104 413 s 4-loop-vol;
-#X obj 274 397 s 5-loop-vol;
-#X obj 379 88 i 0;
-#X obj 408 88 + 1;
-#X obj 378 67 metro 10;
-#X obj 377 46 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 380 113 expr 1+$f1;
-#X obj 340 146 tabwrite \$0-norm-array;
-#X msg 481 58 0;
-#X obj 279 309 r 5-velo;
-#X obj 104 335 r 4-velo;
-#X obj 51 235 r 3-velo;
-#X obj 138 162 r 2-velo;
-#X obj 38 78 r 1-velo;
-#X obj 281 332 clip 0 1;
-#X obj 279 350 * 100;
-#X obj 106 352 clip 0 1;
-#X obj 104 370 * 100;
-#X obj 51 253 clip 0 1;
-#X obj 49 271 * 100;
-#X obj 138 181 clip 0 1;
-#X obj 136 199 * 100;
-#X obj 40 96 clip 0 1;
-#X obj 38 114 * 100;
-#X connect 1 0 2 0;
-#X connect 3 0 7 0;
-#X connect 4 0 8 0;
-#X connect 5 0 9 0;
-#X connect 6 0 10 0;
-#X connect 11 0 12 0;
-#X connect 11 0 15 0;
-#X connect 12 0 11 1;
-#X connect 13 0 11 0;
-#X connect 14 0 13 0;
-#X connect 15 0 16 0;
-#X connect 17 0 11 1;
-#X connect 18 0 23 0;
-#X connect 19 0 25 0;
-#X connect 20 0 27 0;
-#X connect 21 0 29 0;
-#X connect 22 0 31 0;
-#X connect 23 0 24 0;
-#X connect 24 0 6 0;
-#X connect 25 0 26 0;
-#X connect 26 0 5 0;
-#X connect 27 0 28 0;
-#X connect 28 0 4 0;
-#X connect 29 0 30 0;
-#X connect 30 0 3 0;
-#X connect 31 0 32 0;
-#X connect 32 0 1 0;
-#X restore 7 26 pd normalizza-volumi;
-#N canvas 0 22 454 304 normalizza-pan 0;
-#X obj 56 26 r 1-x;
-#X obj 55 92 s 1-pan;
-#X obj 61 50 + 4;
-#X obj 58 72 / 8;
-#X obj 126 50 + 4;
-#X obj 123 72 / 8;
-#X obj 190 50 + 4;
-#X obj 187 72 / 8;
-#X obj 256 47 + 4;
-#X obj 253 69 / 8;
-#X obj 330 48 + 4;
-#X obj 327 70 / 8;
-#X obj 121 26 r 2-x;
-#X obj 120 92 s 2-pan;
-#X obj 185 26 r 3-x;
-#X obj 184 92 s 3-pan;
-#X obj 251 23 r 4-x;
-#X obj 249 89 s 4-pan;
-#X obj 325 24 r 5-x;
-#X obj 324 90 s 5-pan;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 5 0;
-#X connect 5 0 13 0;
-#X connect 6 0 7 0;
-#X connect 7 0 15 0;
-#X connect 8 0 9 0;
-#X connect 9 0 17 0;
-#X connect 10 0 11 0;
-#X connect 11 0 19 0;
-#X connect 12 0 4 0;
-#X connect 14 0 6 0;
-#X connect 16 0 8 0;
-#X connect 18 0 10 0;
-#X restore 7 46 pd normalizza-pan;
-#X obj 158 63 vsl 15 128 0.01 1 1 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8262 1;
-#X obj 39 235 *~ 0.5;
-#X obj 91 236 *~ 0.5;
-#X obj 90 88 loadbang;
-#X floatatom 156 196 5 0 0 0 - - -;
-#X obj 245 63 vsl 15 128 0.1 3 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8321 1;
-#X floatatom 243 196 5 0 0 0 - - -;
-#X obj 39 288 *~ 1;
-#X obj 91 287 *~ 1;
-#X obj 180 88 loadbang;
-#X text 265 159 volume generale;
-#X text 74 156 volume bay;
-#X msg 197 115 2;
-#X msg 108 112 0.2;
-#X connect 0 0 8 0;
-#X connect 0 1 9 0;
-#X connect 3 0 14 0;
-#X connect 4 0 15 0;
-#X connect 7 0 8 1;
-#X connect 7 0 9 1;
-#X connect 7 0 11 0;
-#X connect 8 0 3 0;
-#X connect 9 0 4 0;
-#X connect 10 0 20 0;
-#X connect 12 0 13 0;
-#X connect 12 0 14 1;
-#X connect 12 0 15 1;
-#X connect 14 0 2 0;
-#X connect 15 0 2 1;
-#X connect 16 0 19 0;
-#X connect 19 0 12 0;
-#X connect 20 0 7 0;
diff --git a/externals/frankenstein/patches/feb05/test2.graph b/externals/frankenstein/patches/feb05/test2.graph
deleted file mode 100755
index 87112ae1c20a07955dd6c5d541d2e78da7d7e193..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 58564
zcmeI)+j7Dn5CBl?|9^Dtv<z{QF~uw~3r8PvL16a)@jBk_x39<j_g1!lhyU2r8g*~G
z+OmAP|MTd2Tw~d8Wqr2RU6<uJvz5Wtxg6Puat?u+XXsw;wY=_?S+PD-N^A)bAV7cs
z0RkBX?iqs?GXVkw2uvg3UHCLZEl~mwf%jMZ`!!p7J<^K-CNQGFwb#V8ql=gi<7XJ5
zqzwZ50y)=G&ZzfC!y^a~7+K)_E7$owjy!&HBd`>(x|SODdkUCqJ#}-o{rNc&9YJ(^
zJ;v4VNqVSilRzGU4A-eVn&(9Nddyyzo)e*72oNAZfB=Db0nhRArdlLGAh*D=PqdC)
zRonktBe%5Za|s-o+qp8GJ6hvB_xQ_xEP=9~%XX~nWJ7?!JOanwpUvYWQvw7C<P&Ip
zo!a*qp*5O(-XbP&4S~qD7TH$2&S!gXkGFpfBK?i^K!5-N0t5&UAV7cs0RjXF5FkK+
z0D)%#pUggcI3hrR009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXgn;j2BNVkkfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
p0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6Rufp0Js07C!(

diff --git a/externals/frankenstein/patches/organist.pd b/externals/frankenstein/patches/organist.pd
deleted file mode 100644
index cbf0925f2..000000000
--- a/externals/frankenstein/patches/organist.pd
+++ /dev/null
@@ -1,328 +0,0 @@
-#N canvas 14 34 955 709 12;
-#X symbolatom 731 341 18 0 0 2 next_chord - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 762 56 pd readme;
-#X obj 121 329 harmonizer;
-#X msg 44 298 current \$1;
-#X msg 158 283 target \$1;
-#X obj 44 274 symbol;
-#X obj 44 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 245 347 unpack f f f f f;
-#X obj 153 97 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 153 121 set \$1;
-#N canvas 0 0 718 428 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 423 135 pd midi;
-#N canvas 0 0 466 316 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 175 135 init 1;
-#X msg 115 77 write strani;
-#X msg 145 105 read strani;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 340 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 49 348 bang;
-#X obj 63 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 48 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 507 1;
-#X floatatom 13 112 5 0 0 0 - - -;
-#X obj 178 571 csoundapi~ bay.orc;
-#X msg 463 545 event i 10 0 17000 10 30;
-#X msg 463 568 event i 30 0 17000 2 30;
-#X msg 464 521 event i 25 0 17000 0.98 0.8 20000;
-#X obj 466 497 loadbang;
-#X obj 13 32 r novelty;
-#X obj 462 63 t b b;
-#X obj 220 96 symbol;
-#X msg 220 124 tonality \$1;
-#X obj 220 72 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X text 529 392 this transposes of a + minor 3rd;
-#X obj 458 361 loadbang;
-#X msg 459 386 3;
-#X symbolatom 575 339 18 0 0 2 curr_chord - -;
-#X obj 42 218 symbol;
-#X obj 42 194 t s b;
-#X obj 29 606 outlet~;
-#X obj 106 609 outlet~;
-#X obj 578 358 outlet;
-#X obj 733 360 outlet;
-#N canvas 0 0 812 538 prepare_voice 0;
-#X obj 48 57 inlet;
-#X obj 392 55 inlet;
-#X obj 46 422 outlet;
-#X obj 52 95 + 0;
-#X obj 49 184 mtof;
-#X obj 52 129 t f b;
-#X obj 50 154 int 60;
-#X text 399 138 this adds a 1 chord delay;
-#X obj 115 55 inlet;
-#X obj 113 420 outlet;
-#X obj 119 93 + 0;
-#X obj 116 179 mtof;
-#X obj 119 127 t f b;
-#X obj 117 152 int 60;
-#X obj 176 52 inlet;
-#X obj 174 417 outlet;
-#X obj 180 90 + 0;
-#X obj 177 179 mtof;
-#X obj 180 124 t f b;
-#X obj 178 149 int 60;
-#X obj 242 54 inlet;
-#X obj 240 419 outlet;
-#X obj 246 92 + 0;
-#X obj 243 181 mtof;
-#X obj 246 126 t f b;
-#X obj 244 151 int 60;
-#X obj 307 54 inlet;
-#X obj 305 419 outlet;
-#X obj 311 92 + 0;
-#X obj 308 181 mtof;
-#X obj 311 126 t f b;
-#X obj 309 151 int 60;
-#X text 383 38 semitones;
-#X obj 47 313 spigot;
-#X obj 505 268 loadbang;
-#X msg 506 291 1;
-#X obj 63 290 r v1;
-#X obj 119 313 spigot;
-#X obj 180 314 spigot;
-#X obj 247 313 spigot;
-#X obj 312 313 spigot;
-#X obj 135 290 r v2;
-#X obj 196 291 r v3;
-#X obj 263 291 r v4;
-#X obj 328 290 r v5;
-#X connect 0 0 3 0;
-#X connect 1 0 3 1;
-#X connect 1 0 28 1;
-#X connect 1 0 22 1;
-#X connect 1 0 10 1;
-#X connect 1 0 16 1;
-#X connect 3 0 5 0;
-#X connect 4 0 33 0;
-#X connect 5 0 6 1;
-#X connect 5 1 6 0;
-#X connect 6 0 4 0;
-#X connect 8 0 10 0;
-#X connect 10 0 12 0;
-#X connect 11 0 37 0;
-#X connect 12 0 13 1;
-#X connect 12 1 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 16 0;
-#X connect 16 0 18 0;
-#X connect 17 0 38 0;
-#X connect 18 0 19 1;
-#X connect 18 1 19 0;
-#X connect 19 0 17 0;
-#X connect 20 0 22 0;
-#X connect 22 0 24 0;
-#X connect 23 0 39 0;
-#X connect 24 0 25 1;
-#X connect 24 1 25 0;
-#X connect 25 0 23 0;
-#X connect 26 0 28 0;
-#X connect 28 0 30 0;
-#X connect 29 0 40 0;
-#X connect 30 0 31 1;
-#X connect 30 1 31 0;
-#X connect 31 0 29 0;
-#X connect 33 0 2 0;
-#X connect 34 0 35 0;
-#X connect 35 0 33 1;
-#X connect 35 0 37 1;
-#X connect 35 0 38 1;
-#X connect 35 0 39 1;
-#X connect 35 0 40 1;
-#X connect 36 0 33 1;
-#X connect 37 0 9 0;
-#X connect 38 0 15 0;
-#X connect 39 0 21 0;
-#X connect 40 0 27 0;
-#X connect 41 0 37 1;
-#X connect 42 0 38 1;
-#X connect 43 0 39 1;
-#X connect 44 0 40 1;
-#X restore 237 387 pd prepare_voice;
-#X obj 45 415 tgl 20 0 v1 empty toggle_v1 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 44 446 tgl 20 0 v2 empty toggle_v2 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 476 tgl 20 0 v3 empty toggle_v3 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 507 tgl 20 0 v4 empty toggle_v4 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 40 537 tgl 20 0 v5 empty toggle_v5 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 7 376 loadbang;
-#X msg 8 399 1;
-#X obj 83 169 chords_memory strani;
-#X obj 595 20 inlet;
-#X obj 595 43 bang;
-#X obj 596 64 int 0;
-#X obj 647 65 + 1;
-#X obj 598 86 % 2;
-#X obj 462 40 sel 0;
-#X obj 326 431 r msec-beat;
-#X obj 326 474 / 1000;
-#X obj 326 452 * 32;
-#X obj 327 495 + 2;
-#X obj 174 499 pack f f f;
-#X obj 429 456 r velocity;
-#X floatatom 417 491 5 0 0 0 - - -;
-#X msg 171 522 event i 9 0 \$2 \$1 \$3 0.5;
-#X obj 27 585 *~ 0.9;
-#X obj 105 587 *~ 0.9;
-#X msg 461 421 -2;
-#X obj 714 438 catch~ sax;
-#X obj 784 137 inlet~;
-#X connect 2 0 15 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 50 0;
-#X connect 15 1 9 1;
-#X connect 15 1 50 1;
-#X connect 15 2 10 1;
-#X connect 15 2 50 2;
-#X connect 15 3 11 1;
-#X connect 15 3 50 3;
-#X connect 15 4 12 1;
-#X connect 15 4 50 4;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 58 0;
-#X connect 19 0 58 0;
-#X connect 20 0 58 0;
-#X connect 21 0 24 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 24 0 25 0;
-#X connect 25 0 58 0;
-#X connect 26 0 24 1;
-#X connect 26 0 27 0;
-#X connect 28 0 73 0;
-#X connect 28 1 74 0;
-#X connect 29 0 28 0;
-#X connect 30 0 28 0;
-#X connect 31 0 28 0;
-#X connect 32 0 31 0;
-#X connect 32 0 29 0;
-#X connect 32 0 30 0;
-#X connect 33 0 26 0;
-#X connect 34 0 21 0;
-#X connect 35 0 36 0;
-#X connect 36 0 58 0;
-#X connect 37 0 35 0;
-#X connect 38 0 58 0;
-#X connect 42 0 50 5;
-#X connect 44 0 43 0;
-#X connect 44 0 48 0;
-#X connect 45 0 44 1;
-#X connect 45 1 44 0;
-#X connect 50 0 69 0;
-#X connect 50 1 69 0;
-#X connect 50 2 69 0;
-#X connect 50 3 69 0;
-#X connect 50 4 69 0;
-#X connect 56 0 57 0;
-#X connect 57 0 51 0;
-#X connect 57 0 52 0;
-#X connect 57 0 53 0;
-#X connect 57 0 54 0;
-#X connect 57 0 55 0;
-#X connect 58 0 0 0;
-#X connect 58 0 5 1;
-#X connect 58 0 22 0;
-#X connect 58 0 35 1;
-#X connect 58 0 16 0;
-#X connect 58 0 45 0;
-#X connect 58 0 49 0;
-#X connect 58 1 39 0;
-#X connect 59 0 60 0;
-#X connect 60 0 61 0;
-#X connect 61 0 62 0;
-#X connect 61 0 63 0;
-#X connect 62 0 61 1;
-#X connect 63 0 64 0;
-#X connect 64 0 34 0;
-#X connect 65 0 67 0;
-#X connect 66 0 68 0;
-#X connect 67 0 66 0;
-#X connect 68 0 69 1;
-#X connect 69 0 72 0;
-#X connect 70 0 69 2;
-#X connect 70 0 71 0;
-#X connect 72 0 28 0;
-#X connect 73 0 46 0;
-#X connect 74 0 47 0;
-#X connect 75 0 50 5;
-#X connect 76 0 28 0;
-#X connect 77 0 28 0;
diff --git a/externals/frankenstein/patches/percussionist.pd b/externals/frankenstein/patches/percussionist.pd
deleted file mode 100644
index e497fa3d0..000000000
--- a/externals/frankenstein/patches/percussionist.pd
+++ /dev/null
@@ -1,782 +0,0 @@
-#N canvas 0 2 1011 709 12;
-#N canvas 4 65 458 308 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X obj 156 112 *~ 0.5;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X connect 0 0 7 0;
-#X connect 0 0 8 0;
-#X connect 2 0 6 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 5 0;
-#X restore 53 459 pd perc;
-#X obj 54 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 361 183 metro;
-#N canvas 1 23 474 324 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 425 154 pd msecs;
-#X obj 424 80 loadbang;
-#X msg 425 101 60;
-#X obj 361 160 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#N canvas 0 0 494 344 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 8;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 beat-quarters empty 1/4 0 -6 0 8 -262144
--1 -1 2;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 0;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 381 242 graph;
-#X floatatom 447 179 5 0 0 0 - - -;
-#X obj 475 424 t a a;
-#X obj 470 450 bang;
-#X obj 373 221 delay;
-#X obj 408 200 / 2;
-#N canvas 65 11 823 709 instr_bass 0;
-#X obj 72 43 inlet;
-#X obj 249 569 throw~ mainL;
-#X obj 355 563 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 238 34 inlet;
-#X obj 223 299 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 253 322 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 223 276 r channel1;
-#X obj 136 382 sampleplayer 1;
-#X msg 250 356 samples/BD01.WAV;
-#X obj 401 522 outlet~;
-#X obj 96 214 r sampleinit;
-#X floatatom 62 338 5 0 0 0 - - -;
-#X text 57 320 length;
-#X floatatom 63 361 5 0 0 0 - - -;
-#X text 56 379 volume;
-#X floatatom 110 338 5 0 0 0 - - -;
-#X floatatom 159 338 5 0 0 0 - - -;
-#X text 159 318 pitch;
-#X text 111 319 start;
-#X obj 250 413 s lastload;
-#X msg 100 290 1;
-#X msg 62 290 440;
-#X msg 137 290 100;
-#X obj 337 509 *~ 0;
-#X obj 520 119 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 12700 1;
-#X obj 504 46 loadbang;
-#X obj 509 350 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 577 382 pd varia;
-#X obj 637 358 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 583 435 5 0 0 0 - - -;
-#X msg 509 373 0.005;
-#X obj 542 462 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 610 494 pd varia;
-#X obj 670 470 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 619 546 5 0 0 0 - - -;
-#X obj 609 521 * 20;
-#X msg 542 485 0.025;
-#X obj 300 460 bp~ 100 20;
-#X obj 576 409 * 100;
-#X obj 81 104 tabread proposed1;
-#X msg 506 70 1;
-#X connect 0 0 3 0;
-#X connect 3 0 42 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 10 4;
-#X connect 8 0 10 5;
-#X connect 9 0 7 0;
-#X connect 10 0 26 0;
-#X connect 10 1 22 0;
-#X connect 11 0 10 6;
-#X connect 13 0 11 0;
-#X connect 13 0 24 0;
-#X connect 13 0 23 0;
-#X connect 13 0 25 0;
-#X connect 14 0 10 1;
-#X connect 16 0 10 0;
-#X connect 18 0 10 2;
-#X connect 19 0 10 3;
-#X connect 23 0 18 0;
-#X connect 24 0 14 0;
-#X connect 25 0 19 0;
-#X connect 26 0 1 0;
-#X connect 26 0 2 0;
-#X connect 26 0 12 0;
-#X connect 27 0 26 1;
-#X connect 28 0 43 0;
-#X connect 29 0 33 0;
-#X connect 30 0 41 0;
-#X connect 31 0 30 1;
-#X connect 33 0 30 0;
-#X connect 34 0 39 0;
-#X connect 35 0 38 0;
-#X connect 36 0 35 1;
-#X connect 38 0 37 0;
-#X connect 38 0 40 2;
-#X connect 39 0 35 0;
-#X connect 41 0 32 0;
-#X connect 41 0 40 1;
-#X connect 42 0 4 0;
-#X connect 43 0 27 0;
-#X restore 325 431 pd instr_bass;
-#N canvas 24 76 835 489 instr_high 0;
-#X obj 72 43 inlet;
-#X obj 162 297 throw~ mainL;
-#X obj 286 294 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 81 104 tabread proposed2;
-#X obj 204 216 tom1;
-#X obj 288 122 r instr-2-transport;
-#X obj 337 145 r instr-2-duration;
-#X obj 387 166 r instr-2-pan;
-#X connect 0 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 1 0;
-#X connect 6 1 2 0;
-#X connect 7 0 6 1;
-#X connect 8 0 6 2;
-#X connect 9 0 6 3;
-#X restore 325 454 pd instr_high;
-#N canvas 73 67 623 593 metro 0;
-#X obj 163 263 throw~ mainL;
-#X obj 186 232 throw~ mainR;
-#X obj 83 33 inlet;
-#N canvas 4 65 466 316 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X obj 156 113 *~ 0.1;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X restore 83 149 pd perc;
-#X obj 116 317 outlet~;
-#X obj 326 104 bang;
-#N canvas 4 65 470 320 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X obj 156 113 *~ 0.1;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X restore 327 166 pd perc;
-#X obj 230 79 sel 0;
-#X obj 229 57 % 16;
-#X obj 83 84 sel 0;
-#X obj 83 61 % 2;
-#X obj 103 185 *~ 0.5;
-#X obj 348 202 *~ 0.9;
-#X connect 2 0 8 0;
-#X connect 2 0 10 0;
-#X connect 3 0 11 0;
-#X connect 5 0 6 0;
-#X connect 6 0 12 0;
-#X connect 7 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 3 0;
-#X connect 10 0 9 0;
-#X connect 11 0 4 0;
-#X connect 12 0 4 0;
-#X restore 700 453 pd metro;
-#N canvas 23 68 819 360 capture 0;
-#X obj 713 29 inlet;
-#X obj 148 224 int;
-#X msg 58 204 1;
-#X obj 68 179 t a a;
-#X obj 101 200 bang;
-#X obj 43 247 tabwrite played1;
-#X obj 59 145 inlet;
-#X obj 305 227 int;
-#X msg 215 207 1;
-#X obj 225 182 t a a;
-#X obj 258 203 bang;
-#X obj 216 148 inlet;
-#X obj 458 227 int;
-#X msg 368 207 1;
-#X obj 378 182 t a a;
-#X obj 411 203 bang;
-#X obj 369 148 inlet;
-#X obj 607 227 int;
-#X msg 517 207 1;
-#X obj 527 182 t a a;
-#X obj 560 203 bang;
-#X obj 518 148 inlet;
-#X obj 200 250 tabwrite played2;
-#X obj 354 250 tabwrite played3;
-#X obj 502 250 tabwrite played4;
-#X connect 0 0 1 1;
-#X connect 0 0 7 1;
-#X connect 0 0 12 1;
-#X connect 0 0 17 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 3 1 4 0;
-#X connect 4 0 1 0;
-#X connect 6 0 3 0;
-#X connect 7 0 22 1;
-#X connect 8 0 22 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 0;
-#X connect 10 0 7 0;
-#X connect 11 0 9 0;
-#X connect 12 0 23 1;
-#X connect 13 0 23 0;
-#X connect 14 0 13 0;
-#X connect 14 1 15 0;
-#X connect 15 0 12 0;
-#X connect 16 0 14 0;
-#X connect 17 0 24 1;
-#X connect 18 0 24 0;
-#X connect 19 0 18 0;
-#X connect 19 1 20 0;
-#X connect 20 0 17 0;
-#X connect 21 0 19 0;
-#X restore 135 484 pd capture;
-#X text 37 224 this delay is to center the quantization;
-#X obj 426 130 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -258699 -1 -1 65 256;
-#X text 29 30 test1: detect rhythmic pattern and proposes a counterpoint
-;
-#X obj 476 397 select 0;
-#N canvas 0 0 454 304 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 variazione \$1;
-#X msg 135 74 riempimento \$1;
-#X msg 231 133 aderenza \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 698 378 pd valori;
-#X obj 678 220 vsl 15 128 0 1 0 0 empty empty variazione 0 -8 0 8 -262144
--1 -1 3810 1;
-#X obj 730 226 vsl 15 128 0 1 0 0 empty empty riempimento 0 -8 0 8
--262144 -1 -1 952 1;
-#X obj 788 239 vsl 15 128 0 1 0 0 empty empty aderenza 0 -8 0 8 -262144
--1 -1 12065 1;
-#N canvas 0 4 458 308 ritmino 0;
-#X obj 216 31 inlet;
-#X obj 201 268 outlet;
-#X obj 48 131 select 0;
-#X obj 131 135 select 3;
-#X obj 211 136 select 6;
-#X obj 200 238 bang;
-#X obj 307 133 select 8;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 0 0 6 0;
-#X connect 2 0 5 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 0;
-#X restore 58 412 pd ritmino;
-#X floatatom 665 357 5 0 0 0 - - -;
-#X floatatom 719 359 5 0 0 0 - - -;
-#X floatatom 786 371 5 0 0 0 - - -;
-#X obj 460 101 s sampleinit;
-#X obj 59 507 *~ 1;
-#X obj 22 431 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 1270 1;
-#X obj 19 351 loadbang;
-#X obj 285 385 t a a a a a a a;
-#N canvas 25 156 815 345 instr3 0;
-#X obj 72 43 inlet;
-#X obj 219 312 throw~ mainL;
-#X obj 342 303 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 81 104 tabread proposed3;
-#X obj 221 210 chat;
-#X obj 387 166 r instr-3-pan;
-#X obj 337 145 r instr-3-duration;
-#X obj 288 122 r instr-3-transport;
-#X obj 340 276 *~ 0.5;
-#X obj 223 282 *~ 0.5;
-#X connect 0 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 11 0;
-#X connect 6 1 10 0;
-#X connect 7 0 6 3;
-#X connect 8 0 6 2;
-#X connect 9 0 6 1;
-#X connect 10 0 2 0;
-#X connect 11 0 1 0;
-#X restore 325 479 pd instr3;
-#N canvas 59 112 795 353 instr4 0;
-#X obj 72 43 inlet;
-#X obj 242 306 throw~ mainL;
-#X obj 365 304 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 81 104 tabread proposed4;
-#X obj 241 200 ohat;
-#X obj 384 165 r instr-4-pan;
-#X obj 336 145 r instr-4-duration;
-#X obj 287 122 r instr-4-transport;
-#X obj 360 270 *~ 0.7;
-#X obj 242 276 *~ 0.7;
-#X connect 0 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 11 0;
-#X connect 6 1 10 0;
-#X connect 7 0 6 3;
-#X connect 8 0 6 2;
-#X connect 9 0 6 1;
-#X connect 10 0 2 0;
-#X connect 11 0 1 0;
-#X restore 325 503 pd instr4;
-#X obj 72 590 *~;
-#X obj 265 608 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 2340 1;
-#X obj 104 588 *~;
-#X obj 297 608 loadbang;
-#X obj 840 155 loadbang;
-#X obj 850 243 loadbang;
-#X msg 851 263 0.8;
-#N canvas 186 160 510 360 varia2 0;
-#X obj 244 46 inlet;
-#X obj 94 275 outlet;
-#X obj 84 172 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 60 53 inlet;
-#X obj 226 230 table varia2;
-#X obj 47 236 tabread varia2;
-#X obj 45 201 * 100;
-#X obj 53 121 phasor~ 0.01;
-#X connect 0 0 3 0;
-#X connect 2 0 7 0;
-#X connect 3 0 2 0;
-#X connect 4 0 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 6 0;
-#X connect 8 0 2 0;
-#X restore 851 203 pd varia2;
-#X msg 839 178 0.01;
-#X obj 918 182 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X msg 21 375 0.1;
-#N canvas 0 69 643 318 tables 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array src1 16 float 1;
-#A 0 0.75 0 0 0.25 0 0 1 0 1 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 387 22 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 385 73 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 96 68 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 385 123 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 96 168 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 384 175 graph;
-#X text 145 242 the output has been put in the sequencer window;
-#X restore 148 157 pd tables;
-#X obj 380 599 GArhythm src1 src2 src3 src4 proposed1 proposed2 proposed3
-proposed4;
-#N canvas 0 0 454 304 avg_rhythms 0;
-#X obj 41 76 bang;
-#X obj 46 104 ritmo1 played1 src1;
-#X obj 45 125 ritmo1 played2 src2;
-#X obj 46 146 ritmo1 played3 src3;
-#X obj 45 165 ritmo1 played4 src4;
-#X obj 116 44 inlet;
-#X connect 0 0 1 0;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 5 0 0 0;
-#X restore 510 452 pd avg_rhythms;
-#N canvas 481 60 510 360 audio2bang 0;
-#X obj 54 38 inlet~;
-#X obj 75 273 outlet;
-#X obj 176 277 outlet;
-#X obj 261 276 outlet;
-#X obj 354 280 outlet;
-#X obj 43 277 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 294 100 learn 0;
-#X msg 216 101 learn 1;
-#X msg 156 75 debounce \$1;
-#X obj 157 29 r msec-beat;
-#X obj 115 39 / 2;
-#X msg 299 76 write percs.txt;
-#X msg 301 51 read percs.txt;
-#X obj 303 15 loadbang;
-#X text 90 239 a bass;
-#X text 205 240 unknown;
-#X obj 54 142 bonk~;
-#X obj 40 194 print;
-#X obj 158 179 route 0 1 2;
-#X connect 0 0 16 0;
-#X connect 6 0 16 0;
-#X connect 7 0 16 0;
-#X connect 9 0 10 0;
-#X connect 10 0 8 0;
-#X connect 11 0 16 0;
-#X connect 12 0 16 0;
-#X connect 16 1 5 0;
-#X connect 16 1 17 0;
-#X connect 16 1 1 0;
-#X connect 18 0 1 0;
-#X connect 18 1 3 0;
-#X connect 18 2 3 0;
-#X restore 128 328 pd audio2bang;
-#X obj 67 628 outlet~;
-#X obj 132 629 outlet~;
-#X obj 372 55 inlet;
-#X obj 577 408 outlet;
-#X obj 675 76 r variazione;
-#X obj 706 117 r riempimento;
-#X obj 830 75 r aderenza;
-#N canvas 0 0 648 568 messages 0;
-#X obj 117 252 outlet;
-#X msg 105 174 reinit;
-#X obj 106 131 r reinit;
-#X obj 106 153 bang;
-#X msg 205 177 reinsert_src \$1;
-#X msg 356 171 reinsert_last \$1;
-#X msg 41 159 help;
-#X msg 234 94 prob_crossover \$1;
-#X msg 384 95 prob_mutation \$1;
-#X obj 204 153 r reinsert_src;
-#X obj 357 147 r reinsert_last;
-#X obj 234 70 r prob_crossover;
-#X obj 385 70 r prob_mutation;
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 4 0;
-#X connect 10 0 5 0;
-#X connect 11 0 7 0;
-#X connect 12 0 8 0;
-#X restore 498 546 pd messages;
-#X obj 211 105 r tempo;
-#X obj 440 201 s msec-beat;
-#X obj 549 386 s beat-position;
-#X obj 705 493 dac~ 3;
-#X msg 299 632 0.6;
-#N canvas 201 53 711 575 effetti 0;
-#X obj 66 54 inlet~;
-#X obj 34 460 outlet~;
-#X obj 85 308 delay~;
-#X obj 101 97 filter~;
-#X obj 372 45 inlet~;
-#X obj 250 478 outlet~;
-#X obj 303 309 delay~;
-#X obj 367 101 filter~;
-#X obj 66 202 *~;
-#X obj 43 225 +~;
-#X obj 338 286 r msec-beat;
-#X obj 117 283 r msec-beat;
-#X obj 564 116 loadbang;
-#X msg 532 149 2;
-#X msg 568 156 3;
-#X obj 35 200 *~;
-#X obj 328 216 *~;
-#X obj 305 239 +~;
-#X obj 297 214 *~;
-#X obj 57 401 *~;
-#X obj 34 424 +~;
-#X obj 26 399 *~;
-#X obj 270 425 *~;
-#X obj 247 448 +~;
-#X obj 239 423 *~;
-#X obj 161 258 int;
-#X obj 161 234 r delay-l-mul;
-#X obj 405 235 r delay-r-mul;
-#X obj 406 260 int;
-#X obj 549 247 r delay-feedback;
-#X obj 549 269 clip 0 0.9;
-#X msg 611 156 0.12;
-#X obj 185 18 r filter-dry-vol;
-#X obj 336 14 r filter-wet-vol;
-#X obj 131 379 r delay-dry-vol;
-#X obj 341 379 r delay-wet-vol;
-#X obj 200 44 r filter-freq-l;
-#X obj 435 35 r filter-freq-r;
-#X obj 277 67 r filter-q;
-#X connect 0 0 3 0;
-#X connect 0 0 15 0;
-#X connect 2 0 19 0;
-#X connect 3 0 8 0;
-#X connect 4 0 7 0;
-#X connect 4 0 18 0;
-#X connect 6 0 22 0;
-#X connect 7 0 16 0;
-#X connect 8 0 9 1;
-#X connect 9 0 2 0;
-#X connect 9 0 21 0;
-#X connect 10 0 6 1;
-#X connect 11 0 2 1;
-#X connect 12 0 31 0;
-#X connect 12 0 14 0;
-#X connect 12 0 13 0;
-#X connect 13 0 2 2;
-#X connect 14 0 6 2;
-#X connect 15 0 9 0;
-#X connect 16 0 17 1;
-#X connect 17 0 6 0;
-#X connect 17 0 24 0;
-#X connect 18 0 17 0;
-#X connect 19 0 20 1;
-#X connect 20 0 1 0;
-#X connect 21 0 20 0;
-#X connect 22 0 23 1;
-#X connect 23 0 5 0;
-#X connect 24 0 23 0;
-#X connect 25 0 2 2;
-#X connect 26 0 25 0;
-#X connect 27 0 28 0;
-#X connect 28 0 6 2;
-#X connect 29 0 30 0;
-#X connect 30 0 6 3;
-#X connect 30 0 2 3;
-#X connect 31 0 6 3;
-#X connect 31 0 2 3;
-#X connect 32 0 15 1;
-#X connect 32 0 18 1;
-#X connect 33 0 16 1;
-#X connect 33 0 8 1;
-#X connect 34 0 21 1;
-#X connect 34 0 24 1;
-#X connect 35 0 19 1;
-#X connect 35 0 22 1;
-#X connect 36 0 3 1;
-#X connect 37 0 7 1;
-#X connect 38 0 7 2;
-#X connect 38 0 3 2;
-#X restore 110 542 pd effetti;
-#X obj 106 521 catch~ mainL;
-#X obj 205 520 catch~ mainR;
-#X obj 127 295 throw~ mainL;
-#X obj 226 295 throw~ mainR;
-#X obj 93 257 adc~ 7;
-#X connect 0 0 30 0;
-#X connect 0 0 50 0;
-#X connect 1 0 0 0;
-#X connect 2 0 11 0;
-#X connect 3 0 2 1;
-#X connect 3 0 8 0;
-#X connect 3 0 12 0;
-#X connect 3 0 60 0;
-#X connect 4 0 5 0;
-#X connect 4 0 29 0;
-#X connect 5 0 18 0;
-#X connect 6 0 2 0;
-#X connect 7 0 20 0;
-#X connect 7 0 33 0;
-#X connect 7 0 61 0;
-#X connect 9 0 10 0;
-#X connect 9 1 49 0;
-#X connect 10 0 48 0;
-#X connect 11 0 7 0;
-#X connect 12 0 11 1;
-#X connect 15 0 62 0;
-#X connect 18 0 3 0;
-#X connect 20 0 9 0;
-#X connect 20 0 54 0;
-#X connect 21 0 48 0;
-#X connect 22 0 21 0;
-#X connect 22 0 26 0;
-#X connect 23 0 21 1;
-#X connect 23 0 27 0;
-#X connect 24 0 21 2;
-#X connect 24 0 28 0;
-#X connect 25 0 1 0;
-#X connect 30 0 36 0;
-#X connect 31 0 30 1;
-#X connect 32 0 46 0;
-#X connect 33 0 15 0;
-#X connect 33 1 16 4;
-#X connect 33 3 13 0;
-#X connect 33 4 14 0;
-#X connect 33 5 34 0;
-#X connect 33 6 35 0;
-#X connect 36 0 51 0;
-#X connect 37 0 36 1;
-#X connect 37 0 38 1;
-#X connect 38 0 52 0;
-#X connect 39 0 63 0;
-#X connect 40 0 44 0;
-#X connect 41 0 42 0;
-#X connect 42 0 24 0;
-#X connect 43 0 23 0;
-#X connect 44 0 43 0;
-#X connect 45 0 43 1;
-#X connect 46 0 31 0;
-#X connect 50 0 16 0;
-#X connect 50 1 16 1;
-#X connect 50 2 16 2;
-#X connect 50 3 16 3;
-#X connect 53 0 6 0;
-#X connect 55 0 22 0;
-#X connect 56 0 23 0;
-#X connect 57 0 24 0;
-#X connect 58 0 48 0;
-#X connect 59 0 18 0;
-#X connect 63 0 37 0;
-#X connect 64 0 36 0;
-#X connect 64 1 38 0;
-#X connect 65 0 64 0;
-#X connect 66 0 64 1;
-#X connect 69 0 50 0;
-#X connect 69 0 67 0;
-#X connect 69 0 68 0;
diff --git a/externals/frankenstein/patches/sampleplayer.pd b/externals/frankenstein/patches/sampleplayer.pd
deleted file mode 100644
index adf6c9d84..000000000
--- a/externals/frankenstein/patches/sampleplayer.pd
+++ /dev/null
@@ -1,80 +0,0 @@
-#N canvas -35 33 1009 703 12;
-#X obj 476 599 outlet~;
-#X obj 504 481 line~;
-#X obj 402 281 line~;
-#X obj 476 548 *~;
-#X msg 424 142 bang;
-#X obj 425 192 delay 5;
-#X text 477 142 <-- play the sample;
-#X text 349 223 sound off;
-#X msg 393 245 0 5;
-#X msg 612 32 1 \, 4.41e+008 1e+007 \;;
-#X msg 428 244 1 5;
-#X text 617 9 set line to play sample;
-#X obj 476 574 *~ 1;
-#X obj 394 42 table \$1-sampletable;
-#X obj 476 520 tabread4~ \$1-sampletable;
-#X obj 712 257 openpanel;
-#X obj 712 416 soundfiler;
-#X msg 712 230 bang;
-#X text 756 230 read file;
-#X obj 712 283 t s b;
-#X obj 751 318 symbol \$1-sampletable;
-#X msg 712 387 read -resize \$1 \$2;
-#X obj 712 356 pack s s;
-#X obj 713 196 inlet;
-#X obj 400 92 inlet;
-#X obj 103 139 inlet;
-#X obj 760 68 inlet;
-#X obj 658 196 symbol;
-#X obj 689 499 outlet;
-#X obj 172 141 inlet;
-#X obj 278 191 delay 10000;
-#X obj 492 418 pack 0 0;
-#X obj 551 388 * 4.41e+008;
-#X msg 492 283 bang;
-#X msg 501 449 \$1 \, \$2 1e+007 \;;
-#X obj 492 336 int 1;
-#X obj 250 142 inlet;
-#X obj 304 140 inlet;
-#X obj 551 336 float 1;
-#X obj 602 298 / 100;
-#X connect 1 0 14 0;
-#X connect 2 0 3 1;
-#X connect 3 0 12 0;
-#X connect 4 0 5 0;
-#X connect 4 0 8 0;
-#X connect 4 0 30 0;
-#X connect 5 0 9 0;
-#X connect 5 0 10 0;
-#X connect 5 0 33 0;
-#X connect 8 0 2 0;
-#X connect 10 0 2 0;
-#X connect 12 0 0 0;
-#X connect 14 0 3 0;
-#X connect 15 0 19 0;
-#X connect 15 0 28 0;
-#X connect 17 0 15 0;
-#X connect 19 0 22 0;
-#X connect 19 1 20 0;
-#X connect 20 0 22 1;
-#X connect 21 0 16 0;
-#X connect 22 0 21 0;
-#X connect 23 0 17 0;
-#X connect 24 0 4 0;
-#X connect 25 0 12 1;
-#X connect 26 0 27 0;
-#X connect 27 0 19 0;
-#X connect 27 0 28 0;
-#X connect 29 0 30 1;
-#X connect 30 0 8 0;
-#X connect 31 0 34 0;
-#X connect 32 0 31 1;
-#X connect 33 0 35 0;
-#X connect 33 0 38 0;
-#X connect 34 0 1 0;
-#X connect 35 0 31 0;
-#X connect 36 0 35 1;
-#X connect 37 0 39 0;
-#X connect 38 0 32 0;
-#X connect 39 0 38 0;
diff --git a/externals/frankenstein/patches/test-GArhythm.pd b/externals/frankenstein/patches/test-GArhythm.pd
deleted file mode 100644
index 200736e64..000000000
--- a/externals/frankenstein/patches/test-GArhythm.pd
+++ /dev/null
@@ -1,999 +0,0 @@
-#N canvas 0 0 1011 709 12;
-#X obj 22 629 dac~;
-#N canvas 4 65 458 308 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X obj 156 112 *~ 0.5;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X connect 0 0 7 0;
-#X connect 0 0 8 0;
-#X connect 2 0 6 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 5 0;
-#X restore 53 459 pd perc;
-#X obj 54 441 bng 15 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 361 183 metro;
-#N canvas 1 23 466 316 msecs 0;
-#X obj 58 19 inlet;
-#X obj 61 209 outlet;
-#X obj 57 147 /;
-#X obj 57 100 bang;
-#X obj 73 79 t f f;
-#X obj 57 174 / 4;
-#X msg 57 122 60000;
-#X connect 0 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 3 0;
-#X connect 4 1 2 1;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X restore 425 154 pd msecs;
-#X obj 424 80 loadbang;
-#X msg 425 101 60;
-#X obj 361 160 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#N canvas 0 0 490 340 graph2 0;
-#X obj 122 9 inlet;
-#X obj 362 255 outlet;
-#X obj 171 33 int;
-#X obj 204 31 + 1;
-#X obj 185 57 % 4;
-#X obj 168 78 sel 0;
-#X obj 168 105 bng 15 250 50 0 empty empty beat 0 -6 0 8 -262144 -1
--1;
-#X obj 263 86 sel 0;
-#X obj 264 108 bng 15 250 50 0 empty empty bar 0 -6 0 8 -262144 -1
--1;
-#X obj 262 63 % 16;
-#X obj 69 278 hradio 10 1 0 16 empty empty empty 0 -6 0 8 -262144 -1
--1 0;
-#X obj 70 64 / 2;
-#X obj 71 87 int;
-#X obj 72 111 hradio 10 1 0 2 empty empty 1/8 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 342 78 int;
-#X obj 73 220 hradio 10 1 0 4 empty empty 1/4 0 -6 0 8 -262144 -1 -1
-0;
-#X obj 341 55 / 4;
-#X obj 70 167 hradio 10 1 0 4 empty empty 1/16 0 -6 0 8 -262144 -1
--1 0;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 2 1;
-#X connect 3 0 4 0;
-#X connect 3 0 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 17 0;
-#X connect 4 0 11 0;
-#X connect 5 0 6 0;
-#X connect 7 0 8 0;
-#X connect 9 0 7 0;
-#X connect 9 0 10 0;
-#X connect 9 0 16 0;
-#X connect 9 0 1 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 14 0 15 0;
-#X connect 16 0 14 0;
-#X coords 0 1 100 -1 200 140 1;
-#X restore 381 242 graph;
-#X floatatom 447 179 5 0 0 0 - - -;
-#X obj 475 424 t a a;
-#X obj 470 450 bang;
-#X obj 373 221 delay;
-#X obj 408 200 / 2;
-#N canvas 65 11 799 687 instr_bass 0;
-#X obj 72 43 inlet;
-#X obj 249 569 throw~ mainL;
-#X obj 355 563 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 238 34 inlet;
-#X obj 223 299 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 253 322 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 223 276 r channel1;
-#X obj 136 382 sampleplayer 1;
-#X msg 250 356 samples/BD01.WAV;
-#X obj 401 522 outlet~;
-#X obj 96 214 r sampleinit;
-#X floatatom 62 338 5 0 0 0 - - -;
-#X text 57 320 length;
-#X floatatom 63 361 5 0 0 0 - - -;
-#X text 56 379 volume;
-#X floatatom 110 338 5 0 0 0 - - -;
-#X floatatom 159 338 5 0 0 0 - - -;
-#X text 159 318 pitch;
-#X text 111 319 start;
-#X obj 250 413 s lastload;
-#X msg 100 290 1;
-#X msg 62 290 440;
-#X msg 137 290 100;
-#X obj 337 509 *~ 0;
-#X obj 520 119 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 7620 1;
-#X obj 504 46 loadbang;
-#X obj 509 350 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 577 382 pd varia;
-#X obj 637 358 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 583 435 5 0 0 0 - - -;
-#X msg 509 373 0.005;
-#X obj 542 462 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 610 494 pd varia;
-#X obj 670 470 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 619 546 5 0 0 0 - - -;
-#X obj 609 521 * 20;
-#X msg 542 485 0.025;
-#X obj 300 460 bp~ 100 20;
-#X obj 576 409 * 100;
-#X msg 506 70 0.6;
-#X obj 81 104 tabread proposed1;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 10 4;
-#X connect 8 0 10 5;
-#X connect 9 0 7 0;
-#X connect 10 0 26 0;
-#X connect 10 1 22 0;
-#X connect 11 0 10 6;
-#X connect 13 0 11 0;
-#X connect 13 0 24 0;
-#X connect 13 0 23 0;
-#X connect 13 0 25 0;
-#X connect 14 0 10 1;
-#X connect 16 0 10 0;
-#X connect 18 0 10 2;
-#X connect 19 0 10 3;
-#X connect 23 0 18 0;
-#X connect 24 0 14 0;
-#X connect 25 0 19 0;
-#X connect 26 0 1 0;
-#X connect 26 0 2 0;
-#X connect 26 0 12 0;
-#X connect 27 0 26 1;
-#X connect 28 0 42 0;
-#X connect 29 0 33 0;
-#X connect 30 0 41 0;
-#X connect 31 0 30 1;
-#X connect 33 0 30 0;
-#X connect 34 0 39 0;
-#X connect 35 0 38 0;
-#X connect 36 0 35 1;
-#X connect 38 0 37 0;
-#X connect 38 0 40 2;
-#X connect 39 0 35 0;
-#X connect 41 0 32 0;
-#X connect 41 0 40 1;
-#X connect 42 0 27 0;
-#X connect 43 0 4 0;
-#X restore 325 431 pd instr_bass;
-#N canvas 65 11 787 675 instr_high 0;
-#X obj 72 43 inlet;
-#X obj 150 594 throw~ mainL;
-#X obj 274 591 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 260 44 inlet;
-#X obj 229 309 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 259 332 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 378 570 outlet~;
-#X obj 106 227 r sampleinit;
-#X floatatom 68 348 5 0 0 0 - - -;
-#X text 63 330 length;
-#X floatatom 69 371 5 0 0 0 - - -;
-#X text 62 389 volume;
-#X floatatom 116 348 5 0 0 0 - - -;
-#X floatatom 165 348 5 0 0 0 - - -;
-#X text 165 328 pitch;
-#X text 117 329 start;
-#X obj 249 420 s lastload;
-#X msg 106 300 1;
-#X msg 68 300 440;
-#X obj 142 392 sampleplayer 2;
-#X obj 229 286 r channel2;
-#X msg 143 300 100;
-#X msg 256 366 samples/SD01.WAV;
-#X obj 250 525 *~ 0;
-#X obj 523 151 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 5080 1;
-#X obj 504 46 loadbang;
-#X obj 475 365 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 543 397 pd varia;
-#X obj 603 373 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X obj 266 477 bp~ 100 20;
-#X floatatom 549 450 5 0 0 0 - - -;
-#X obj 542 424 * 8000;
-#X msg 475 388 0.005;
-#X obj 508 477 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 576 509 pd varia;
-#X obj 636 485 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 585 561 5 0 0 0 - - -;
-#X obj 575 536 * 20;
-#X msg 508 500 0.025;
-#X msg 506 70 0.4;
-#X obj 81 104 tabread proposed2;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 22 4;
-#X connect 8 0 22 5;
-#X connect 10 0 25 0;
-#X connect 10 0 21 0;
-#X connect 10 0 20 0;
-#X connect 10 0 24 0;
-#X connect 11 0 22 1;
-#X connect 13 0 22 0;
-#X connect 15 0 22 2;
-#X connect 16 0 22 3;
-#X connect 20 0 15 0;
-#X connect 21 0 11 0;
-#X connect 22 0 26 0;
-#X connect 22 1 19 0;
-#X connect 23 0 7 0;
-#X connect 24 0 16 0;
-#X connect 25 0 22 6;
-#X connect 26 0 9 0;
-#X connect 26 0 1 0;
-#X connect 26 0 2 0;
-#X connect 27 0 26 1;
-#X connect 28 0 42 0;
-#X connect 29 0 35 0;
-#X connect 30 0 34 0;
-#X connect 31 0 30 1;
-#X connect 34 0 32 1;
-#X connect 34 0 33 0;
-#X connect 35 0 30 0;
-#X connect 36 0 41 0;
-#X connect 37 0 40 0;
-#X connect 38 0 37 1;
-#X connect 40 0 32 2;
-#X connect 40 0 39 0;
-#X connect 41 0 37 0;
-#X connect 42 0 27 0;
-#X connect 43 0 4 0;
-#X restore 325 454 pd instr_high;
-#N canvas 48 52 595 565 metro 0;
-#X obj 64 231 throw~ mainL;
-#X obj 186 232 throw~ mainR;
-#X obj 83 33 inlet;
-#X obj 82 87 bang;
-#N canvas 4 65 458 308 perc 0;
-#X obj 351 17 inlet;
-#X obj 158 250 outlet~;
-#X obj 168 45 noise~;
-#X obj 180 190 line 0 50;
-#X obj 158 216 *~;
-#X msg 310 137 0 50;
-#X msg 262 96 1 10;
-#X obj 316 90 delay 50;
-#X obj 156 113 *~ 0.1;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 2 0 8 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X restore 83 149 pd perc;
-#X obj 103 185 *~ 0.3;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
-#X restore 325 410 pd metro;
-#X obj 118 514 catch~ mainL;
-#X obj 118 536 catch~ mainR;
-#N canvas 23 68 811 352 capture 0;
-#X obj 713 29 inlet;
-#X obj 148 224 int;
-#X msg 58 204 1;
-#X obj 68 179 t a a;
-#X obj 101 200 bang;
-#X obj 43 247 tabwrite played1;
-#X obj 59 145 inlet;
-#X obj 305 227 int;
-#X msg 215 207 1;
-#X obj 225 182 t a a;
-#X obj 258 203 bang;
-#X obj 216 148 inlet;
-#X obj 458 227 int;
-#X msg 368 207 1;
-#X obj 378 182 t a a;
-#X obj 411 203 bang;
-#X obj 369 148 inlet;
-#X obj 607 227 int;
-#X msg 517 207 1;
-#X obj 527 182 t a a;
-#X obj 560 203 bang;
-#X obj 518 148 inlet;
-#X obj 200 250 tabwrite played2;
-#X obj 354 250 tabwrite played3;
-#X obj 502 250 tabwrite played4;
-#X connect 0 0 1 1;
-#X connect 0 0 7 1;
-#X connect 0 0 12 1;
-#X connect 0 0 17 1;
-#X connect 1 0 5 1;
-#X connect 2 0 5 0;
-#X connect 3 0 2 0;
-#X connect 3 1 4 0;
-#X connect 4 0 1 0;
-#X connect 6 0 3 0;
-#X connect 7 0 22 1;
-#X connect 8 0 22 0;
-#X connect 9 0 8 0;
-#X connect 9 1 10 0;
-#X connect 10 0 7 0;
-#X connect 11 0 9 0;
-#X connect 12 0 23 1;
-#X connect 13 0 23 0;
-#X connect 14 0 13 0;
-#X connect 14 1 15 0;
-#X connect 15 0 12 0;
-#X connect 16 0 14 0;
-#X connect 17 0 24 1;
-#X connect 18 0 24 0;
-#X connect 19 0 18 0;
-#X connect 19 1 20 0;
-#X connect 20 0 17 0;
-#X connect 21 0 19 0;
-#X restore 135 484 pd capture;
-#X text 37 224 this delay is to center the quantization;
-#X obj 426 130 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -258699 -1 -1 60 256;
-#X text 29 30 test1: detect rhythmic pattern and proposes a counterpoint
-;
-#X obj 476 397 select 0;
-#N canvas 0 0 454 304 valori 0;
-#X obj 57 40 inlet;
-#X obj 136 42 inlet;
-#X obj 229 42 inlet;
-#X obj 58 215 outlet;
-#X msg 60 112 variazione \$1;
-#X msg 135 74 riempimento \$1;
-#X msg 231 133 aderenza \$1;
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X restore 698 378 pd valori;
-#X obj 678 220 vsl 15 128 0 1 0 0 empty empty variazione 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 730 226 vsl 15 128 0 1 0 0 empty empty riempimento 0 -8 0 8
--262144 -1 -1 0 1;
-#X obj 788 239 vsl 15 128 0 1 0 0 empty empty aderenza 0 -8 0 8 -262144
--1 -1 10160 1;
-#N canvas 0 4 458 308 ritmino 0;
-#X obj 216 31 inlet;
-#X obj 201 268 outlet;
-#X obj 48 131 select 0;
-#X obj 131 135 select 3;
-#X obj 211 136 select 6;
-#X obj 200 238 bang;
-#X obj 307 133 select 8;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 0 0 6 0;
-#X connect 2 0 5 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 0;
-#X restore 58 412 pd ritmino;
-#X floatatom 665 357 5 0 0 0 - - -;
-#X floatatom 719 359 5 0 0 0 - - -;
-#X floatatom 786 371 5 0 0 0 - - -;
-#X obj 460 101 s sampleinit;
-#X obj 59 507 *~ 1;
-#X obj 22 431 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 1270 1;
-#X obj 19 351 loadbang;
-#X obj 285 385 t a a a a a a a;
-#N canvas 65 11 783 671 instr3 0;
-#X obj 72 43 inlet;
-#X obj 242 561 throw~ mainL;
-#X obj 366 558 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 260 44 inlet;
-#X obj 229 309 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 259 332 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 470 537 outlet~;
-#X obj 106 227 r sampleinit;
-#X floatatom 68 348 5 0 0 0 - - -;
-#X text 63 330 length;
-#X floatatom 69 371 5 0 0 0 - - -;
-#X text 62 389 volume;
-#X floatatom 116 348 5 0 0 0 - - -;
-#X floatatom 165 348 5 0 0 0 - - -;
-#X text 165 328 pitch;
-#X text 117 329 start;
-#X obj 249 420 s lastload;
-#X msg 106 300 1;
-#X msg 68 300 440;
-#X obj 229 286 r channel2;
-#X msg 143 300 100;
-#X obj 287 502 *~ 0;
-#X obj 523 151 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 5080 1;
-#X obj 504 46 loadbang;
-#X msg 256 366 samples/claps.WAV;
-#X obj 142 392 sampleplayer 3;
-#X obj 288 461 bp~ 100 20;
-#X obj 513 339 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 581 371 pd varia;
-#X obj 641 347 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 587 424 5 0 0 0 - - -;
-#X obj 580 398 * 8000;
-#X msg 513 362 0.005;
-#X obj 546 451 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 614 483 pd varia;
-#X obj 674 459 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 623 535 5 0 0 0 - - -;
-#X obj 613 510 * 20;
-#X msg 546 474 0.025;
-#X msg 506 70 0.4;
-#X obj 81 104 tabread proposed3;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 28 4;
-#X connect 8 0 28 5;
-#X connect 10 0 27 0;
-#X connect 10 0 21 0;
-#X connect 10 0 20 0;
-#X connect 10 0 23 0;
-#X connect 11 0 28 1;
-#X connect 13 0 28 0;
-#X connect 15 0 28 2;
-#X connect 16 0 28 3;
-#X connect 20 0 15 0;
-#X connect 21 0 11 0;
-#X connect 22 0 7 0;
-#X connect 23 0 16 0;
-#X connect 24 0 9 0;
-#X connect 24 0 1 0;
-#X connect 24 0 2 0;
-#X connect 25 0 24 1;
-#X connect 26 0 42 0;
-#X connect 27 0 28 6;
-#X connect 28 0 24 0;
-#X connect 28 1 19 0;
-#X connect 30 0 35 0;
-#X connect 31 0 34 0;
-#X connect 32 0 31 1;
-#X connect 34 0 33 0;
-#X connect 34 0 29 1;
-#X connect 35 0 31 0;
-#X connect 36 0 41 0;
-#X connect 37 0 40 0;
-#X connect 38 0 37 1;
-#X connect 40 0 39 0;
-#X connect 40 0 29 2;
-#X connect 41 0 37 0;
-#X connect 42 0 25 0;
-#X connect 43 0 4 0;
-#X restore 325 479 pd instr3;
-#N canvas 65 11 775 663 instr4 0;
-#X obj 72 43 inlet;
-#X obj 242 561 throw~ mainL;
-#X obj 366 558 throw~ mainR;
-#X obj 81 80 int;
-#X obj 45 132 select 1;
-#X obj 146 179 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 260 44 inlet;
-#X obj 229 309 bng 25 250 50 0 empty empty play 30 10 0 8 -258699 -241291
--1;
-#X obj 259 332 bng 25 250 50 0 empty empty load 30 10 0 8 -258699 -241291
--1;
-#X obj 470 537 outlet~;
-#X obj 106 227 r sampleinit;
-#X floatatom 68 348 5 0 0 0 - - -;
-#X text 63 330 length;
-#X floatatom 69 371 5 0 0 0 - - -;
-#X text 62 389 volume;
-#X floatatom 116 348 5 0 0 0 - - -;
-#X floatatom 165 348 5 0 0 0 - - -;
-#X text 165 328 pitch;
-#X text 117 329 start;
-#X obj 249 420 s lastload;
-#X msg 106 300 1;
-#X msg 68 300 440;
-#X obj 229 286 r channel2;
-#X msg 143 300 100;
-#X obj 294 505 *~ 0;
-#X obj 523 151 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 7620 1;
-#X obj 504 46 loadbang;
-#X obj 142 392 sampleplayer 4;
-#X msg 255 365 samples/SHAKE1.WAV;
-#X obj 529 338 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 597 370 pd varia;
-#X obj 657 346 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 603 423 5 0 0 0 - - -;
-#X obj 596 397 * 8000;
-#X msg 529 361 0.005;
-#X obj 562 450 loadbang;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 630 482 pd varia;
-#X obj 690 458 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X floatatom 639 534 5 0 0 0 - - -;
-#X obj 629 509 * 20;
-#X msg 562 473 0.025;
-#X obj 316 454 bp~ 100 20;
-#X msg 506 70 0.6;
-#X obj 81 104 tabread proposed4;
-#X connect 0 0 3 0;
-#X connect 3 0 43 0;
-#X connect 4 0 5 0;
-#X connect 4 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 27 4;
-#X connect 8 0 27 5;
-#X connect 10 0 28 0;
-#X connect 10 0 21 0;
-#X connect 10 0 20 0;
-#X connect 10 0 23 0;
-#X connect 11 0 27 1;
-#X connect 13 0 27 0;
-#X connect 15 0 27 2;
-#X connect 16 0 27 3;
-#X connect 20 0 15 0;
-#X connect 21 0 11 0;
-#X connect 22 0 7 0;
-#X connect 23 0 16 0;
-#X connect 24 0 9 0;
-#X connect 24 0 1 0;
-#X connect 24 0 2 0;
-#X connect 25 0 24 1;
-#X connect 26 0 42 0;
-#X connect 27 0 24 0;
-#X connect 27 1 19 0;
-#X connect 28 0 27 6;
-#X connect 29 0 34 0;
-#X connect 30 0 33 0;
-#X connect 31 0 30 1;
-#X connect 33 0 32 0;
-#X connect 33 0 41 1;
-#X connect 34 0 30 0;
-#X connect 35 0 40 0;
-#X connect 36 0 39 0;
-#X connect 37 0 36 1;
-#X connect 39 0 38 0;
-#X connect 39 0 41 2;
-#X connect 40 0 36 0;
-#X connect 42 0 25 0;
-#X connect 43 0 4 0;
-#X restore 325 503 pd instr4;
-#X obj 72 590 *~;
-#X obj 158 565 vsl 15 40 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 3120 1;
-#X obj 104 588 *~;
-#X obj 190 565 loadbang;
-#X obj 109 72 loadbang;
-#X msg 109 95 0.001;
-#X obj 178 130 + 1;
-#X obj 812 155 loadbang;
-#X obj 177 154 * 50;
-#X obj 891 341 loadbang;
-#X msg 848 244 0.8;
-#N canvas 263 354 478 328 varia 0;
-#X obj 244 46 inlet;
-#X obj 135 193 outlet;
-#X obj 137 94 osc~ 0.001;
-#X obj 137 119 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 136 168 / 2;
-#X obj 131 48 inlet;
-#X obj 137 142 + 1;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 5 0;
-#X restore 177 104 pd varia;
-#N canvas 186 160 510 360 varia2 0;
-#X obj 244 46 inlet;
-#X obj 94 275 outlet;
-#X obj 84 172 snapshot~;
-#X obj 244 110 metro 100;
-#X obj 60 53 inlet;
-#X obj 226 230 table varia2;
-#X obj 47 236 tabread varia2;
-#X obj 45 201 * 100;
-#X obj 53 121 phasor~ 0.01;
-#X connect 0 0 3 0;
-#X connect 2 0 7 0;
-#X connect 3 0 2 0;
-#X connect 4 0 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 6 0;
-#X connect 8 0 2 0;
-#X restore 823 203 pd varia2;
-#X msg 811 178 0.01;
-#X obj 237 80 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0 1
-;
-#X obj 890 182 tgl 15 0 empty empty empty 0 -6 0 8 -258699 -1 -1 0
-1;
-#X msg 21 375 0.1;
-#X msg 192 588 0.8;
-#N canvas 26 13 993 549 tables 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array played1 16 float 1;
-#A 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 101 20 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src1 16 float 1;
-#A 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 494 25 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed1 16 float 1;
-#A 0 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 483 257 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 482 307 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 482 354 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array proposed4 16 float 1;
-#A 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 482 401 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 100 68 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src2 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 492 76 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 97 117 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src3 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 492 126 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array played4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 96 168 graph;
-#N canvas 0 0 450 300 graph1 0;
-#X array src4 16 float 1;
-#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1.5 15 -0.5 200 40 1;
-#X restore 491 178 graph;
-#X restore 303 104 pd tables;
-#X obj 380 599 GArhythm src1 src2 src3 src4 proposed1 proposed2 proposed3
-proposed4;
-#N canvas 0 0 454 304 avg_rhythms 0;
-#X obj 41 76 bang;
-#X obj 46 104 ritmo1 played1 src1;
-#X obj 45 125 ritmo1 played2 src2;
-#X obj 46 146 ritmo1 played3 src3;
-#X obj 45 165 ritmo1 played4 src4;
-#X obj 116 44 inlet;
-#X connect 0 0 1 0;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 0 0 4 0;
-#X connect 5 0 0 0;
-#X restore 510 452 pd avg_rhythms;
-#N canvas 0 0 458 308 audio2bang 0;
-#X obj 54 38 inlet~;
-#X obj 53 61 bonk~ 64;
-#X obj 69 117 outlet;
-#X obj 155 42 inlet~;
-#X obj 154 65 bonk~ 64;
-#X obj 170 121 outlet;
-#X obj 240 41 inlet~;
-#X obj 239 64 bonk~ 64;
-#X obj 255 120 outlet;
-#X obj 333 45 inlet~;
-#X obj 332 68 bonk~ 64;
-#X obj 348 124 outlet;
-#X connect 0 0 1 0;
-#X connect 1 1 2 0;
-#X connect 3 0 4 0;
-#X connect 4 1 5 0;
-#X connect 6 0 7 0;
-#X connect 7 1 8 0;
-#X connect 9 0 10 0;
-#X connect 10 1 11 0;
-#X restore 128 328 pd audio2bang;
-#X obj 67 628 outlet~;
-#X obj 132 629 outlet~;
-#X obj 372 55 inlet;
-#X obj 90 295 adc~ 1;
-#X obj 141 296 adc~ 2;
-#X obj 194 296 adc~ 3;
-#X obj 247 295 adc~ 4;
-#X msg 450 512 reinit;
-#X msg 490 560 reinsert_src \$1;
-#X msg 642 562 reinsert_last \$1;
-#X floatatom 492 540 5 0 0 0 - - -;
-#X floatatom 645 539 5 0 0 0 - - -;
-#X msg 578 503 help;
-#X msg 658 511 prob_crossover \$1;
-#X msg 808 512 prob_mutation \$1;
-#X obj 659 475 vsl 10 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X obj 809 474 vsl 10 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 0 1;
-#X msg 659 453 0.9;
-#X msg 810 451 0.025;
-#X floatatom 672 490 5 0 0 0 - - -;
-#X floatatom 824 491 5 0 0 0 - - -;
-#X connect 1 0 33 0;
-#X connect 1 0 60 0;
-#X connect 2 0 1 0;
-#X connect 3 0 12 0;
-#X connect 4 0 3 1;
-#X connect 4 0 9 0;
-#X connect 4 0 13 0;
-#X connect 5 0 6 0;
-#X connect 5 0 32 0;
-#X connect 6 0 21 0;
-#X connect 7 0 3 0;
-#X connect 8 0 23 0;
-#X connect 8 0 36 0;
-#X connect 10 0 11 0;
-#X connect 10 1 59 0;
-#X connect 11 0 58 0;
-#X connect 12 0 8 0;
-#X connect 13 0 12 1;
-#X connect 17 0 39 0;
-#X connect 18 0 41 0;
-#X connect 21 0 4 0;
-#X connect 23 0 10 0;
-#X connect 24 0 58 0;
-#X connect 25 0 24 0;
-#X connect 25 0 29 0;
-#X connect 26 0 24 1;
-#X connect 26 0 30 0;
-#X connect 27 0 24 2;
-#X connect 27 0 31 0;
-#X connect 28 0 2 0;
-#X connect 33 0 39 0;
-#X connect 34 0 33 1;
-#X connect 35 0 55 0;
-#X connect 36 0 28 0;
-#X connect 36 1 19 4;
-#X connect 36 2 16 0;
-#X connect 36 3 14 0;
-#X connect 36 4 15 0;
-#X connect 36 5 37 0;
-#X connect 36 6 38 0;
-#X connect 39 0 0 0;
-#X connect 39 0 61 0;
-#X connect 40 0 39 1;
-#X connect 40 0 41 1;
-#X connect 41 0 0 1;
-#X connect 41 0 62 0;
-#X connect 42 0 56 0;
-#X connect 43 0 44 0;
-#X connect 44 0 50 0;
-#X connect 45 0 47 0;
-#X connect 46 0 52 0;
-#X connect 47 0 21 0;
-#X connect 48 0 49 0;
-#X connect 48 0 79 0;
-#X connect 48 0 78 0;
-#X connect 49 0 27 0;
-#X connect 50 0 45 0;
-#X connect 51 0 26 0;
-#X connect 52 0 51 0;
-#X connect 53 0 50 1;
-#X connect 54 0 51 1;
-#X connect 55 0 34 0;
-#X connect 56 0 40 0;
-#X connect 60 0 19 0;
-#X connect 60 1 19 1;
-#X connect 60 2 19 2;
-#X connect 60 3 19 3;
-#X connect 63 0 7 0;
-#X connect 64 0 60 0;
-#X connect 65 0 60 1;
-#X connect 66 0 60 2;
-#X connect 67 0 60 3;
-#X connect 68 0 58 0;
-#X connect 69 0 58 0;
-#X connect 70 0 58 0;
-#X connect 71 0 69 0;
-#X connect 72 0 70 0;
-#X connect 73 0 58 0;
-#X connect 74 0 58 0;
-#X connect 75 0 58 0;
-#X connect 76 0 74 0;
-#X connect 76 0 80 0;
-#X connect 77 0 75 0;
-#X connect 77 0 81 0;
-#X connect 78 0 76 0;
-#X connect 79 0 77 0;
diff --git a/externals/frankenstein/patches/test-harmonizer2.pd b/externals/frankenstein/patches/test-harmonizer2.pd
deleted file mode 100644
index ced728122..000000000
--- a/externals/frankenstein/patches/test-harmonizer2.pd
+++ /dev/null
@@ -1,313 +0,0 @@
-#N canvas 14 34 915 687 12;
-#X symbolatom 731 341 18 0 0 2 next_chord - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 607 47 pd readme;
-#X obj 121 329 harmonizer;
-#X msg 44 298 current \$1;
-#X msg 158 283 target \$1;
-#X obj 44 274 symbol;
-#X obj 44 254 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 245 347 unpack f f f f f;
-#X obj 153 97 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 153 121 set \$1;
-#N canvas 0 0 718 428 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 423 135 pd midi;
-#N canvas 0 0 466 316 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 175 135 init 1;
-#X msg 115 77 write strani;
-#X msg 145 105 read strani;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 340 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 49 348 bang;
-#X obj 190 607 dac~;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 2900 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X obj 178 571 csoundapi~ bay.orc;
-#X msg 463 545 event i 10 0 17000 10 30;
-#X msg 463 568 event i 30 0 17000 2 30;
-#X msg 464 521 event i 25 0 17000 0.98 0.8 20000;
-#X obj 466 497 loadbang;
-#X msg 171 522 event i 9 0 10 \$1 80 0.5;
-#X obj 462 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 462 41 metro 7000;
-#X obj 13 32 r novelty;
-#X obj 599 121 int 0;
-#X obj 646 120 + 1;
-#X obj 600 171 tabread tab-novelty;
-#X obj 600 194 s novelty;
-#X obj 685 119 table tab-novelty;
-#X obj 600 147 % 10;
-#X obj 462 63 t b b;
-#X msg 463 457 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
-#X obj 220 96 symbol;
-#X msg 220 124 tonality \$1;
-#X obj 220 72 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X text 529 392 this transposes of a + minor 3rd;
-#X obj 458 348 loadbang;
-#X msg 457 395 3;
-#X symbolatom 575 339 18 0 0 2 curr_chord - -;
-#X obj 42 218 symbol;
-#X obj 42 194 t s b;
-#X obj 64 604 outlet~;
-#X obj 124 605 outlet~;
-#X obj 578 358 outlet;
-#X obj 733 360 outlet;
-#N canvas 0 0 812 538 prepare_voice 0;
-#X obj 48 57 inlet;
-#X obj 392 55 inlet;
-#X obj 46 422 outlet;
-#X obj 52 95 + 0;
-#X obj 49 184 mtof;
-#X obj 52 129 t f b;
-#X obj 50 154 int 60;
-#X text 399 138 this adds a 1 chord delay;
-#X obj 115 55 inlet;
-#X obj 113 420 outlet;
-#X obj 119 93 + 0;
-#X obj 116 179 mtof;
-#X obj 119 127 t f b;
-#X obj 117 152 int 60;
-#X obj 176 52 inlet;
-#X obj 174 417 outlet;
-#X obj 180 90 + 0;
-#X obj 177 179 mtof;
-#X obj 180 124 t f b;
-#X obj 178 149 int 60;
-#X obj 242 54 inlet;
-#X obj 240 419 outlet;
-#X obj 246 92 + 0;
-#X obj 243 181 mtof;
-#X obj 246 126 t f b;
-#X obj 244 151 int 60;
-#X obj 307 54 inlet;
-#X obj 305 419 outlet;
-#X obj 311 92 + 0;
-#X obj 308 181 mtof;
-#X obj 311 126 t f b;
-#X obj 309 151 int 60;
-#X text 383 38 semitones;
-#X obj 47 313 spigot;
-#X obj 505 268 loadbang;
-#X msg 506 291 1;
-#X obj 63 290 r v1;
-#X obj 119 313 spigot;
-#X obj 180 314 spigot;
-#X obj 247 313 spigot;
-#X obj 312 313 spigot;
-#X obj 135 290 r v2;
-#X obj 196 291 r v3;
-#X obj 263 291 r v4;
-#X obj 328 290 r v5;
-#X connect 0 0 3 0;
-#X connect 1 0 3 1;
-#X connect 1 0 28 1;
-#X connect 1 0 22 1;
-#X connect 1 0 10 1;
-#X connect 1 0 16 1;
-#X connect 3 0 5 0;
-#X connect 4 0 33 0;
-#X connect 5 0 6 1;
-#X connect 5 1 6 0;
-#X connect 6 0 4 0;
-#X connect 8 0 10 0;
-#X connect 10 0 12 0;
-#X connect 11 0 37 0;
-#X connect 12 0 13 1;
-#X connect 12 1 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 16 0;
-#X connect 16 0 18 0;
-#X connect 17 0 38 0;
-#X connect 18 0 19 1;
-#X connect 18 1 19 0;
-#X connect 19 0 17 0;
-#X connect 20 0 22 0;
-#X connect 22 0 24 0;
-#X connect 23 0 39 0;
-#X connect 24 0 25 1;
-#X connect 24 1 25 0;
-#X connect 25 0 23 0;
-#X connect 26 0 28 0;
-#X connect 28 0 30 0;
-#X connect 29 0 40 0;
-#X connect 30 0 31 1;
-#X connect 30 1 31 0;
-#X connect 31 0 29 0;
-#X connect 33 0 2 0;
-#X connect 34 0 35 0;
-#X connect 35 0 33 1;
-#X connect 35 0 37 1;
-#X connect 35 0 38 1;
-#X connect 35 0 39 1;
-#X connect 35 0 40 1;
-#X connect 36 0 33 1;
-#X connect 37 0 9 0;
-#X connect 38 0 15 0;
-#X connect 39 0 21 0;
-#X connect 40 0 27 0;
-#X connect 41 0 37 1;
-#X connect 42 0 38 1;
-#X connect 43 0 39 1;
-#X connect 44 0 40 1;
-#X restore 237 387 pd prepare_voice;
-#X obj 45 415 tgl 20 0 v1 empty toggle_v1 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 44 446 tgl 20 0 v2 empty toggle_v2 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 476 tgl 20 0 v3 empty toggle_v3 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 43 507 tgl 20 0 v4 empty toggle_v4 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 40 537 tgl 20 0 v5 empty toggle_v5 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 7 376 loadbang;
-#X msg 8 399 1;
-#X obj 83 169 chords_memory strani;
-#X connect 2 0 15 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 61 0;
-#X connect 15 1 9 1;
-#X connect 15 1 61 1;
-#X connect 15 2 10 1;
-#X connect 15 2 61 2;
-#X connect 15 3 11 1;
-#X connect 15 3 61 3;
-#X connect 15 4 12 1;
-#X connect 15 4 61 4;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 69 0;
-#X connect 19 0 69 0;
-#X connect 20 0 69 0;
-#X connect 21 0 25 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 25 0 26 0;
-#X connect 26 0 69 0;
-#X connect 27 0 25 1;
-#X connect 27 0 28 0;
-#X connect 29 0 24 0;
-#X connect 29 0 57 0;
-#X connect 29 1 24 1;
-#X connect 29 1 58 0;
-#X connect 30 0 29 0;
-#X connect 31 0 29 0;
-#X connect 32 0 29 0;
-#X connect 33 0 32 0;
-#X connect 33 0 30 0;
-#X connect 33 0 31 0;
-#X connect 33 0 45 0;
-#X connect 34 0 29 0;
-#X connect 35 0 36 0;
-#X connect 36 0 44 0;
-#X connect 37 0 27 0;
-#X connect 38 0 39 0;
-#X connect 38 0 43 0;
-#X connect 39 0 38 1;
-#X connect 40 0 41 0;
-#X connect 43 0 40 0;
-#X connect 44 0 21 0;
-#X connect 44 1 38 0;
-#X connect 46 0 47 0;
-#X connect 47 0 69 0;
-#X connect 48 0 46 0;
-#X connect 49 0 69 0;
-#X connect 53 0 61 5;
-#X connect 55 0 54 0;
-#X connect 55 0 59 0;
-#X connect 56 0 55 1;
-#X connect 56 1 55 0;
-#X connect 61 0 34 0;
-#X connect 61 1 34 0;
-#X connect 61 2 34 0;
-#X connect 61 3 34 0;
-#X connect 61 4 34 0;
-#X connect 67 0 68 0;
-#X connect 68 0 62 0;
-#X connect 68 0 63 0;
-#X connect 68 0 64 0;
-#X connect 68 0 65 0;
-#X connect 68 0 66 0;
-#X connect 69 0 0 0;
-#X connect 69 0 5 1;
-#X connect 69 0 22 0;
-#X connect 69 0 46 1;
-#X connect 69 0 16 0;
-#X connect 69 0 56 0;
-#X connect 69 0 60 0;
-#X connect 69 1 50 0;
diff --git a/externals/frankenstein/patches/test.graph b/externals/frankenstein/patches/test.graph
deleted file mode 100755
index 0c18d7eee49592812d9fc0f3fb8dd90a8fb369f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 57604
zcmeI*?QX&#6aY}%_WsYjC5AL9?Lb?QkF!52rI*Wrvf>sEKOz1+!XrLCdCVO@Iqk2w
z^vv(`5W6GKh^29NCwobNzzYKFUT63B{Qih945X?A2s9ONy*K677y$wV2oNAZAQ7l}
zKUOn#(veI-i(FzGUzuDSCNP3PoX;cVD#!N)tXJ>bIg<bZ0t5&UAV7csfz<^1*(tZl
zq)jWU%_99JK%lOGm8-6==<^BGx@KbB_&A@O9uXiwpj5z0SSqC+0RjXF5FkK+009E?
z3v8dz&`)3U|37J8*UxCl<dXv1_1ot)ah%n0=_ehvO@IJ_76Mkk7RuTnK!5-N0t8kU
zSnr;zw8v?^wB*|CDUDZJ?^-s_9#bIyuJD-slJ#Domvx|*JoY|b6Cgl<009C72oNAZ
z;3;6&VkQtEK!5-N0__BPyz?mk&cAj}Gqkjg_4X|7*U`5={#QSZpo9Pc0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfWWu{{x&x5*vXs#0RjXF5FkK+009C72oNAZ;4Xpw-X-fV
zqr0rdAwYmY2-Y~WfB*pk1PBlyK!5;&>jFNb;ksds2zGomROgFnp3FC<dPIN#fl>j#
z14^aTBS2sb0jt^=<0MN01PBlyK!5-N0t5)yznKFB2oNAZfB*pk1PBlyK!5-N0+j`R
E0nX9@QUCw|

diff --git a/externals/frankenstein/rhythms_memory.c b/externals/frankenstein/rhythms_memory.c
deleted file mode 100644
index 75ea5a402..000000000
--- a/externals/frankenstein/rhythms_memory.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/* 
-rhythms_memory
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-uses graphs to store rhythms
-
-TODO:
-  * memory save/load to file (?)
-  * output rhythms in the form of list of floats (easy)
-  * add velo (?)
-  * input rhythms from a list (second inlet) (easy)
-  * let it create variations on known rhythms (?)
-  * let it merge rhythms (?)
-
-*/
-
-#include "m_pd.h"
-
-#include "common.h"
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-
-static t_class *rhythms_memory_class;
-
-typedef struct event event;
-typedef struct event
-{
-	unsigned short int voice;
-	double when;
-	event *next;
-};
-
-typedef struct _rhythms_memory
-{
-    t_object x_obj; // myself
-	// 3 outlets:
-	// bangs_out plays the wanted rhythmsin realtime
-	// list_out outputs the wanted rhythm as a list of floats
-	// info_out outputs info on the last recognized rhythm
-	t_outlet *bangs_out, *list_out, *info_out;
-	t_rhythm_event *curr_seq;
-	int seq_initialized;
-	// the memory
-	t_rhythm_memory_representation *rhythms_memory;
-	// measure length
-	double measure_start_time;
-	double measure_length;
-	// input rhythm's events
-	event *events;
-	// output rhythm's events
-	unsigned short int next_main_rhythm_out;
-	unsigned short int next_sub_rhythm_out;
-	event *events_out;
-	t_clock *x_clock;
-    double x_deltime;
-	double last_event_out_time;
-	
-} t_rhythms_memory;
-
-void rhythms_memory_free(t_rhythms_memory *x)
-{
-	if (x->curr_seq)
-		freeBeats(x->curr_seq);	
-	if (x->rhythms_memory)
-		rhythm_memory_free(x->rhythms_memory);
-
-	clock_free(x->x_clock);
-}
-
-// called when a new measure starts
-void start_measure(t_rhythms_memory *x)
-{
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_start_time = clock_getlogicaltime();
-	x->last_event_out_time = 0;
-}
-
-// called when a new event occours
-void add_event(t_rhythms_memory *x, unsigned short int voice)
-{
-	event *newEvent, *currEvent, *lastEvent;
-	double when;
-	when = clock_gettimesince(x->measure_start_time);
-	newEvent = (event *) malloc(sizeof(event));
-	newEvent->when = when;
-	newEvent->voice = voice;
-	newEvent->next = 0;
-	currEvent = x->events;
-	if (currEvent)
-	{
-		// this is not the first event
-		while(currEvent)
-		{
-			lastEvent = currEvent;
-			currEvent = currEvent->next;
-		}
-		lastEvent->next = newEvent;
-	} else
-	{
-		// this is the first event
-		x->events = newEvent;
-	}
-	post("event added");
-}
-
-// called when a measure ends
-void end_measure(t_rhythms_memory *x)
-{
-	float fduration;
-	event *currEvent, *lastEvent;
-	unsigned short int is_it_a_new_rhythm;
-	unsigned short int id, subid;
-	float root_closeness, sub_closeness;
-	int counter;
-	t_atom *lista;
-	// these 2 are for output rhythm
-	int rhythm_found;
-	t_rhythm_event *wanted_rhythm;
-	t_rhythm_event *curr_rhythm;
-	event *lastOutEvent;
-
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_length = clock_gettimesince(x->measure_start_time);
-	// now that i know the exact length of the current measure
-	// i can process the rhythm in the current measure
-	// and evaluate it
-	currEvent = x->events;
-	// this is not the first event
-	// now I translate events in rhythm
-	counter = 0;
-	while(currEvent)
-	{
-		fduration = (float) (((float) currEvent->when) / ((float) x->measure_length));
-		if (x->seq_initialized)
-		{
-			concatenateBeat(x->curr_seq, currEvent->voice, fduration, 1);
-		} else
-		{
-			setFirstBeat(&(x->curr_seq), currEvent->voice, fduration, 1);
-			x->seq_initialized = 1;
-		}
-		currEvent = currEvent->next;
-		counter++;
-	}
-	
-	// delete events after having evaluated them
-	currEvent = x->events;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events = 0;
-
-	if (x->curr_seq)
-	{
-		// now I evaluate this rhythm with the memory
-		rhythm_memory_evaluate(x->rhythms_memory, x->curr_seq, &is_it_a_new_rhythm,
-								&id, &subid, &root_closeness, &sub_closeness);
-		// tell out the answer
-		// allocate space for the list
-		lista = (t_atom *) malloc(sizeof(t_atom) * 5);
-		SETFLOAT(lista, (float) is_it_a_new_rhythm);
-		SETFLOAT(lista+1, (float) id);
-		SETFLOAT(lista+2, (float) subid);
-		SETFLOAT(lista+3, (float) root_closeness);
-		SETFLOAT(lista+4, (float) sub_closeness);
-		outlet_anything(x->info_out,
-						gensym("list") ,
-						5, 
-						lista);
-		free(lista);
-		// rhythm_memory_evaluate freed the memory for the rhythm if needed
-		x->seq_initialized = 0;
-		x->curr_seq = 0;
-	}
-
-	// I free the list of events_out (if present)
-	currEvent = x->events_out;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events_out = 0;
-	// i set up the list of events_out
-	// for the wanted rhythm
-	if (x->next_main_rhythm_out)
-	{
-		wanted_rhythm = 0;
-		// ask the memory for the wanted rhythm
-		rhythm_found = rhythm_memory_get_rhythm(x->rhythms_memory, // the memory
-								&wanted_rhythm, // a pointer to the returned rhythm
-								// the id of the main rhythm wanted
-								x->next_main_rhythm_out, 
-								// the sub-id of the sub-rhythm wanted
-								x->next_sub_rhythm_out);
-		if (rhythm_found==0)
-		{
-			post("rhythms_memory: rhythm %i %i was not found ", x->next_main_rhythm_out, x->next_sub_rhythm_out);
-			return;
-		}
-
-		if (wanted_rhythm==0)
-		{
-			error("rhythms_memory: wanted_rhythm should not be null! ");
-			return;
-		}
-
-		// now I setup the events_out list
-		// for each event in wanted_rhythm
-		// allocate and link an element of elements_out
-		curr_rhythm = wanted_rhythm;
-		lastOutEvent = 0;
-		while (curr_rhythm)
-		{
-			event *newEvent;
-			newEvent = malloc(sizeof(event));
-			newEvent->next = 0;
-			newEvent->voice = curr_rhythm->voice;
-			newEvent->when = (double) (duration2float(curr_rhythm->start) * x->measure_length);
-			post("DEBUG: add event in moment: %f", newEvent->when);
-			if (x->events_out)
-			{
-				// this is not the first event
-				// assign the next
-				lastOutEvent->next = newEvent;
-			} else
-			{
-				// this is the first event
-				x->events_out = newEvent;
-			}
-			// change the last pointer
-			lastOutEvent = newEvent;
-			curr_rhythm = curr_rhythm->next;
-		}
-
-		// also setup the timer for the first event
-		if (x->events_out)
-		{
-			// setup the clock
-			clock_delay(x->x_clock, x->events_out->when);
-			// remember when next event will occour
-			x->last_event_out_time = x->events_out->when;
-			// remember the curr event
-			lastOutEvent = x->events_out;
-			//reassign next event
-			x->events_out = x->events_out->next;
-			// free old event
-			free(lastOutEvent);
-		}
-		x->next_main_rhythm_out = 0;
-
-	}
-
-	// also start the new measure!
-	start_measure(x);
-
-	
-}
-
-// this function is called  by pd
-// when the timer bangs
-static void rhythms_tick(t_rhythms_memory *x)
-{
-	event *lastOutEvent;
-    // here i must:
-	// take the next element in x->events_out
-	// and compute when I'll need to schedule next event
-	// (next_event - curr_event)
-	// set the next element as the current one
-	// and free the memory allocated for the old curr event
-	// set up the timer	
-	post("DEBUG: eveng bang");
-	// first of all trigger the bang!
-	outlet_bang(x->bangs_out);
-	//then do the stuff
-	if (x->events_out)
-	{
-		// setup the clock
-		clock_delay(x->x_clock, x->events_out->when - x->last_event_out_time);
-		// remember when next event will occour
-		x->last_event_out_time = x->events_out->when ;
-		// remember the curr event
-		lastOutEvent = x->events_out;
-		//reassign next event
-		x->events_out = x->events_out->next;
-		// free old event
-		free(lastOutEvent);
-	}
-}
-
-// the user wants me to play a rhythm in the next measure
-// the user MUST pass 2 args: main_rhythm and sub_rhythm wanted
-static void ask_rhythm(t_rhythms_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
-	if (argc<2)
-	{
-		error("this method needs at least 2 floats: main_rhythm and sub_rhythm wanted");
-		return;
-	}
-	//argv++;
-	x->next_main_rhythm_out = atom_getfloat(argv++);
-	x->next_sub_rhythm_out = atom_getfloat(argv);
-	post("DEBUG: asked rhythm %i %i", x->next_main_rhythm_out, x->next_sub_rhythm_out); 
-	// i have nothing left to do:
-	// when this measure will end a list of events_out will be set
-	// from the current values of x->next_main_rhythm_out and x->next_sub_rhythm_out
-}
-
-// add this rhythm to the memory
-static void add_rhythm(t_rhythms_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-}
-
-// creates a variation of a given rhythm (in memory)
-// with a given degree of closeness
-static void variation(t_rhythms_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-
-	// get the rhythm
-
-	// using the transitions table create a new one
-
-	// add it to the memory?
-
-	// output to the list outlet?
-
-	// set it as the next played rhythm
-}
-
-static void rhythms_memory_bang(t_rhythms_memory *x) {
-
-	// generate a random value
-	float rnd;
-	t_rhythm_event *events;
-	t_duration dur;
-
-	rnd = rand()/((double)RAND_MAX + 1);
-	dur = float2duration(rnd);
-
-	post("random value=%f duration.numerator=%i duration.denominator=%i", rnd, dur.numerator, dur.denominator);
-
-	if (x->seq_initialized)
-	{
-		concatenateBeat(x->curr_seq, 0, rnd, 1);
-	} else
-	{
-		setFirstBeat(&(x->curr_seq), 0, rnd, 1);
-		x->seq_initialized = 1;
-	}
-
-	// print the sequence
-	events = x->curr_seq;
-	while(events)
-	{
-		post("event: numerator=%i, denominator=%i", events->duration.numerator, events->duration.denominator);
-		events=events->next;
-	}
-	
-}
-
-void *rhythms_memory_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_rhythms_memory *x = (t_rhythms_memory *)pd_new(rhythms_memory_class);
-	// first is for bangs (to let this external play in realtime
-	//x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->bangs_out = outlet_new(&x->x_obj, gensym("bang"));
-	// this outputs lists of events
-	x->list_out = outlet_new(&x->x_obj, gensym("symbol"));
-	// this outputs info on the last detected rhythm
-	x->info_out = outlet_new(&x->x_obj, gensym("symbol"));
-
-	// inlet for rhythms in the form of lists
-	inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("list"), gensym("rhythm_in"));
-
-	x->x_clock = clock_new(x, (t_method)rhythms_tick);
-	x->seq_initialized = 0;
-
-	rhythm_memory_create(&(x->rhythms_memory));
-	start_measure(x);
-
-    return (x);
-}
-
-// debugging function
-void init(t_rhythms_memory *x)
-{
-	if (x->curr_seq)
-		freeBeats(x->curr_seq);	
-	if (x->rhythms_memory)
-		rhythm_memory_free(x->rhythms_memory);
-	x->seq_initialized = 0;
-	rhythm_memory_create(&(x->rhythms_memory));
-}
-
-// debugging function
-void crash(t_rhythms_memory *x)
-{
-	int *a;
-	a = malloc(sizeof(int));
-	a[99999999999] = 1;
-}
-
-
-void rhythms_memory_setup(void)
-{
-    rhythms_memory_class = class_new(gensym("rhythms_memory"), (t_newmethod)rhythms_memory_new,
-        (t_method)rhythms_memory_free, sizeof(t_rhythms_memory), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(rhythms_memory_class, (t_method)rhythms_memory_bang);
-	class_addmethod(rhythms_memory_class, (t_method)end_measure, gensym("measure"), 0);
-	class_doaddfloat(rhythms_memory_class, (t_method)add_event);
-	class_addmethod(rhythms_memory_class, (t_method)crash, gensym("crash"), 0);
-	// the user asks for a rhythm
-	class_addmethod(rhythms_memory_class, (t_method)ask_rhythm, gensym("rhythm_out"),
-        A_GIMME, 0);
-	// adds a rhythm passing it as a list of floats
-	class_addmethod(rhythms_memory_class, (t_method)add_rhythm, gensym("rhythm_in"),
-        A_GIMME, 0);
-	// builds a variation of a given rhythm
-	class_addmethod(rhythms_memory_class, (t_method)variation, gensym("variation"),
-        A_GIMME, 0);
-	class_addmethod(rhythms_memory_class, (t_method)init, gensym("init"), 0);
-}
-
-
diff --git a/externals/frankenstein/rhythms_memory.vcproj b/externals/frankenstein/rhythms_memory.vcproj
deleted file mode 100755
index a7505539d..000000000
--- a/externals/frankenstein/rhythms_memory.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="rhythms_memory"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:rhythms_memory_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/rhythms_memory.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="rhythms_memory.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/ritmo1.c b/externals/frankenstein/ritmo1.c
deleted file mode 100644
index e7e994add..000000000
--- a/externals/frankenstein/ritmo1.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* 
-ritmo1
-try to extract the current pattern
-*/
-#include "m_pd.h"
-
-#define BUFFER_LENGHT 16
-
-static t_class *ritmo1_class;
-
-typedef struct _ritmo1
-{
-    t_object x_obj; // myself
-    t_symbol *x_arrayname_src; // where i read the current pattern
-    t_symbol *x_arrayname_dest; // where i put the computed pattern
-	t_float *buf1;
-//	t_float *buf2;
-//	t_float *buf3;
-} t_ritmo1;
-
-void ritmo1_allocate_buffers(t_ritmo1 *x)
-{
-	x->buf1 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf2 = (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-//	x->buf3 =  (t_float *)getbytes(BUFFER_LENGHT * sizeof(t_float));
-}
-
-void ritmo1_free(t_ritmo1 *x)
-{
-	freebytes(x->buf1, sizeof(x->buf1));
-//	freebytes(x->buf2, sizeof(x->buf2));	
-//	freebytes(x->buf3, sizeof(x->buf3));
-}
-
-static void ritmo1_bang(t_ritmo1 *x) {
-
-	int i, vecsize;
-	t_garray *arysrc;
-	t_garray *arydest;
-	t_float *vecsrc;
-	t_float *vecdest;
-
-	if (!(arysrc = (t_garray *)pd_findbyclass(x->x_arrayname_src, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_src->s_name);
-	}
-    else if (!garray_getfloatarray(arysrc, &vecsize, &vecsrc))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src->s_name);
-	}
-	  else 	if (!(arydest = (t_garray *)pd_findbyclass(x->x_arrayname_dest, garray_class)))
-	{
-        pd_error(x, "%s: no such array", x->x_arrayname_dest->s_name);
-	}
-    else if (!garray_getfloatarray(arydest, &vecsize, &vecdest))
-	{
-		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_dest->s_name);
-	}
-	else // I got arrays and data
-	{
-		// step 1: compute the pattern
-		// and write it in vecdest
-		for (i=0; i<16; i++)
-		{
-	//		vecdest[i] = (x->buf1[i] + x->buf2[i] + x->buf3[i] + vecsrc[i])/4;
-			vecdest[i] = (x->buf1[i] + vecsrc[i])/2;
-		}
-		// redraw the arrays
-		garray_redraw(arysrc);
-		garray_redraw(arydest);
-
-		// step 2: cycle buffers
-	//	x->buf3 = x->buf2;
-	//	x->buf2 = x->buf1;
-	//	x->buf1 = x->buf3;
-		// fill the first buffer with src data
-		for (i=0; i<16; i++)
-		{
-			x->buf1[i] = vecsrc[i];
-			vecsrc[i]=0;
-		}
-	}
-}
-
-static void ritmo1_src(t_ritmo1 *x, t_symbol *s) {
-    x->x_arrayname_src = s;
-}
-
-static void ritmo1_dest(t_ritmo1 *x, t_symbol *s) {
-    x->x_arrayname_dest = s;
-}
-
-static void *ritmo1_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_ritmo1 *x = (t_ritmo1 *)pd_new(ritmo1_class);
-	ritmo1_allocate_buffers(x);
-	if (argc>0) 
-	{
-		x->x_arrayname_src = atom_getsymbolarg(0, argc, argv);
-	} 
-	if (argc>1) 
-	{
-		x->x_arrayname_dest = atom_getsymbolarg(1, argc, argv);
-	}
-    return (x);
-}
-
-void ritmo1_setup(void)
-{
-    ritmo1_class = class_new(gensym("ritmo1"), (t_newmethod)ritmo1_new,
-        (t_method)ritmo1_free, sizeof(t_ritmo1), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(ritmo1_class, (t_method)ritmo1_bang);
-    class_addmethod(ritmo1_class, (t_method)ritmo1_src, gensym("src"),A_SYMBOL, 0);
-    class_addmethod(ritmo1_class, (t_method)ritmo1_dest, gensym("dest"),A_SYMBOL, 0);
-}
-
-
diff --git a/externals/frankenstein/sglib.h b/externals/frankenstein/sglib.h
deleted file mode 100644
index 6c88a32ab..000000000
--- a/externals/frankenstein/sglib.h
+++ /dev/null
@@ -1,1947 +0,0 @@
-/* 
-
-  This is SGLIB version 1.0.3
-
-  (C) by Marian Vittek, Bratislava, http://www.xref-tech.com/sglib, 2003-5
-
-  License Conditions: You can use a verbatim copy (including this
-  copyright notice) of sglib freely in any project, commercial or not.
-  You can also use derivative forms freely under terms of Open Source
-  Software license or under terms of GNU Public License.  If you need
-  to use a derivative form in a commercial project, or you need sglib
-  under any other license conditions, contact the author.
-
-*/
-
-
-#ifndef _SGLIB__h_
-#define _SGLIB__h_
-
-/* the assert is used exclusively to write unexpected error messages */
-#include <assert.h>
-
-
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-/* -                            LEVEL - 0  INTERFACE                          - */
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------------ STATIC ARRAYS ------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-/* 
-
-  Basic algorithms  for sorting arrays. Multiple  depending arrays can
-  be rearranged using user defined 'elem_exchangers'
-
-*/
-
-/*               HEAP - SORT  (level 0)           */
-
-#define SGLIB_ARRAY_SINGLE_HEAP_SORT(type, a, max, comparator) {\
-  SGLIB_ARRAY_HEAP_SORT(type, a, max, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-
-#define SGLIB_ARRAY_HEAP_SORT(type, a, max, comparator, elem_exchanger) {\
-  int   _k_;\
-  for(_k_=(max)/2; _k_>=0; _k_--) {\
-    SGLIB___ARRAY_HEAP_DOWN(type, a, _k_, max, comparator, elem_exchanger);\
-  }\
-  for(_k_=(max)-1; _k_>=0; _k_--) {\
-    elem_exchanger(type, a, 0, _k_);\
-    SGLIB___ARRAY_HEAP_DOWN(type, a, 0, _k_, comparator, elem_exchanger);\
-  }\
-}
-
-#define SGLIB___ARRAY_HEAP_DOWN(type, a, ind, max, comparator, elem_exchanger) {\
-  type  _t_;\
-  int   _m_, _l_, _r_, _i_;\
-  _i_ = (ind);\
-  _m_ = _i_;\
-  do {\
-    _i_ = _m_;          \
-    _l_ = 2*_i_+1;\
-    _r_ = _l_+1;\
-    if (_l_ < (max)){\
-      if (comparator(((a)[_m_]), ((a)[_l_])) < 0) _m_ = _l_;\
-      if (_r_ < (max)) {\
-        if (comparator(((a)[_m_]), ((a)[_r_])) < 0) _m_ = _r_;\
-      }\
-    }\
-    if (_m_ != _i_) {\
-     elem_exchanger(type, a, _i_, _m_);\
-    }\
-  } while (_m_ != _i_);\
-}
-
-
-/*             QUICK - SORT   (level 0)          */
-
-#define SGLIB_ARRAY_SINGLE_QUICK_SORT(type, a, max, comparator) {\
-  SGLIB_ARRAY_QUICK_SORT(type, a, max, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-
-#define SGLIB_ARRAY_QUICK_SORT(type, a, max, comparator, elem_exchanger) {\
-  int   _i_, _j_, _p_, _stacki_, _start_, _end_;\
-  /* can sort up to 2^64 elements */\
-  int   _startStack_[64]; \
-  int   _endStack_[64];\
-  type  _tmp_;\
-  _startStack_[0] = 0;\
-  _endStack_[0] = (max);\
-  _stacki_ = 1;\
-  while (_stacki_ > 0) {\
-    _stacki_ --;\
-    _start_ = _startStack_[_stacki_];\
-    _end_ = _endStack_[_stacki_];\
-    while (_end_ - _start_ > 2) {\
-      _p_ = _start_;\
-      _i_ = _start_ + 1;\
-      _j_ = _end_ - 1;\
-      while (_i_<_j_) {\
-        for(; _i_<=_j_ && comparator(((a)[_i_]),((a)[_p_]))<=0; _i_++) ;\
-        if (_i_ > _j_) {\
-          /* all remaining elements lesseq than pivot */\
-          elem_exchanger(type, a, _j_, _p_);\
-          _i_ = _j_;\
-        } else {\
-          for(; _i_<=_j_ && comparator(((a)[_j_]),((a)[_p_]))>=0; _j_--) ;\
-          if (_i_ > _j_) {\
-            /* all remaining elements greater than pivot */\
-            elem_exchanger(type, a, _j_, _p_);\
-            _i_ = _j_;\
-          } else if (_i_ < _j_) {\
-            elem_exchanger(type, a, _i_, _j_);\
-            if (_i_+2 < _j_) {_i_++; _j_--;}\
-            else if (_i_+1 < _j_) _i_++;\
-          }\
-        }\
-      }\
-      /* O.K. i==j and pivot is on a[i] == a[j] */\
-      /* handle recursive calls without recursion */\
-      if (_i_-_start_ > 1 && _end_-_j_ > 1) {\
-        /* two recursive calls, use array-stack */\
-        if (_i_-_start_ < _end_-_j_-1) {\
-          _startStack_[_stacki_] = _j_+1;\
-          _endStack_[_stacki_] = _end_;\
-          _stacki_ ++;\
-          _end_ = _i_;\
-        } else {\
-          _startStack_[_stacki_] = _start_;\
-          _endStack_[_stacki_] = _i_;\
-          _stacki_ ++;\
-          _start_ = _j_+1;\
-        }\
-      } else {\
-        if (_i_-_start_ > 1) {\
-          _end_ = _i_;\
-        } else {\
-          _start_ = _j_+1;\
-        }\
-      }\
-    }\
-    if (_end_ - _start_ == 2) {\
-      if (comparator(((a)[_start_]),((a)[_end_-1])) > 0) {\
-        elem_exchanger(type, a, _start_, _end_-1);\
-      }\
-    }\
-  }\
-}
-
-/*             BINARY SEARCH (level 0)          */
-
-#define SGLIB_ARRAY_BINARY_SEARCH(type, a, start_index, end_index, key, comparator, found, result_index) {\
-  int _kk_, _cc_, _ii_, _jj_, _ff_;\
-  _ii_ = (start_index); \
-  _jj_ = (end_index);\
-  _ff_ = 0;\
-  while (_ii_ <= _jj_ && _ff_==0) {\
-    _kk_ = (_jj_+_ii_)/2;\
-    _cc_ = comparator(((a)[_kk_]), (key));\
-    if (_cc_ == 0) {\
-      (result_index) = _kk_;    \
-      _ff_ = 1;\
-    } else if (_cc_ < 0) {\
-      _ii_ = _kk_+1;\
-    } else {\
-      _jj_ = _kk_-1;\
-    }\
-  }\
-  if (_ff_ == 0) {\
-    /* not found, but set its resulting place in the array */\
-    (result_index) = _jj_+1;\
-  }\
-  (found) = _ff_;\
-}
-
-/* -------------------------------- queue (in an array) ------------------ */
-/* queue is a quadruple (a,i,j,dim) such that:                             */
-/*  a is the array storing values                                          */
-/*  i is the index of the first used element in the array                  */
-/*  j is the index of the first free element in the array                  */
-/*  dim is the size of the array a                                         */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! */
-
-#define SGLIB_QUEUE_INIT(type, a, i, j) { i = j = 0; }
-#define SGLIB_QUEUE_IS_EMPTY(type, a, i, j) ((i)==(j))
-#define SGLIB_QUEUE_IS_FULL(type, a, i, j, dim) ((i)==((j)+1)%(dim))
-#define SGLIB_QUEUE_FIRST_ELEMENT(type, a, i, j) (a[i])
-#define SGLIB_QUEUE_ADD_NEXT(type, a, i, j, dim) {\
-  if (SGLIB_QUEUE_IS_FULL(type, a, i, j, dim)) assert(0 && "the queue is full");\
-  (j) = ((j)+1) % (dim);\
-}
-#define SGLIB_QUEUE_ADD(type, a, elem, i, j, dim) {\
-  a[j] = (elem);\
-  SGLIB_QUEUE_ADD_NEXT(type, a, i, j, dim);\
-}
-#define SGLIB_QUEUE_DELETE_FIRST(type, a, i, j, dim) {\
-  if (SGLIB_QUEUE_IS_EMPTY(type, a, i, j)) assert(0 && "the queue is empty");\
-  (i) = ((i)+1) % (dim);\
-}
-#define SGLIB_QUEUE_DELETE(type, a, i, j, dim) {\
-  SGLIB_QUEUE_DELETE_FIRST(type, a, i, j, dim);\
-}
-
-/* ----------------- priority queue (heap) (in an array) -------------------- */
-/* heap is a triple (a,i,dim) such that:                                      */
-/*  a is the array storing values                                             */
-/*  i is the index of the first free element in the array                     */
-/*  dim is the size of the array a                                            */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!!    */
-
-#define SGLIB_HEAP_INIT(type, a, i) { i = 0; }
-#define SGLIB_HEAP_IS_EMPTY(type, a, i) ((i)==0)
-#define SGLIB_HEAP_IS_FULL(type, a, i, dim) ((i)==(dim))
-#define SGLIB_HEAP_FIRST_ELEMENT(type, a, i) (a[0])
-#define SGLIB_HEAP_ADD_NEXT(type, a, i, dim, comparator, elem_exchanger) {\
-  int _i_;\
-  if (SGLIB_HEAP_IS_FULL(type, a, i, dim)) assert(0 && "the heap is full");\
-  _i_ = (i)++;\
-  while (_i_ > 0 && comparator(a[_i_/2], a[_i_]) < 0) {\
-    elem_exchanger(type, a, (_i_/2), _i_);\
-    _i_ = _i_/2;\
-  }\
-}
-#define SGLIB_HEAP_ADD(type, a, elem, i, dim, comparator) {\
-  if (SGLIB_HEAP_IS_FULL(type, a, i, dim)) assert(0 && "the heap is full");\
-  a[i] = (elem);\
-  SGLIB_HEAP_ADD_NEXT(type, a, i, dim, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-#define SGLIB_HEAP_DELETE_FIRST(type, a, i, dim, comparator, elem_exchanger) {\
-  if (SGLIB_HEAP_IS_EMPTY(type, a, i)) assert(0 && "the heap is empty");\
-  (i)--;\
-  a[0] = a[i];\
-  SGLIB___ARRAY_HEAP_DOWN(type, a, 0, i, comparator, elem_exchanger);\
-}
-#define SGLIB_HEAP_DELETE(type, a, i, dim, comparator) {\
-  SGLIB_HEAP_DELETE_FIRST(type, a, i, dim, comparator, SGLIB_ARRAY_ELEMENTS_EXCHANGER);\
-}
-
-
-/* ----------------- hashed table of pointers (in an array) -------------------- */
-
-/*
-
-  This hashed table is storing pointers to objects (not containers).
-  In this table there is a one-to-one mapping between 'objects' stored
-  in the table and indexes where they are placed. Each index is
-  pointing to exactly one 'object' and each 'object' stored in the
-  table occurs on exactly one index.  Once an object is stored in the
-  table, it can be represented via its index.
-
-  In case of collision while adding an object the index shifted 
-  by SGLIB_HASH_TAB_SHIFT_CONSTANT (constant can be redefined)
-
-  You can NOT delete an element from such hash table. The only
-  justification (I can see) for this data structure is an exchange
-  file format, having an index table at the beginning and then
-  refering objects via indexes.
-
-  !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! 
-
-*/
-
-#define SGLIB_HASH_TAB_INIT(type, table, dim) {\
-  int _i_;\
-  for(_i_ = 0; _i_ < (dim); _i_++) (table)[_i_] = NULL;\
-}
-
-#define SGLIB_HASH_TAB_ADD_IF_NOT_MEMBER(type, table, dim, elem, hash_function, comparator, member){\
-  unsigned _pos_;\
-  type     *_elem_;\
-  SGLIB_HASH_TAB_FIND_MEMBER(type, table, dim, elem, _pos_, _elem_);\
-  (member) = (table)[_pos_];\
-  if (_elem_ == NULL) {\
-    if ((table)[_pos_] != NULL) assert(0 && "the hash table is full");\
-    (table)[_pos_] = (elem);\
-  }\
-}
-
-#define SGLIB_HASH_TAB_FIND_MEMBER(type, table, dim, elem, hash_function, comparator, resultIndex, resultMember) {\
-  unsigned _i_;\
-  int      _count_;\
-  type     *_e_;\
-  _count = 0;\
-  _i_ = hash_function(elem);\
-  _i_ %= (dim);\
-  while ((_e_=(table)[_i_])!=NULL && comparator(_e_, (elem))!=0 && _count_<(dim)) {\
-    _count_ ++;\
-    _i_ = (_i_ + SGLIB_HASH_TAB_SHIFT_CONSTANT) % (dim);\
-  }\
-  (resultIndex) = _i_;\
-  if (_count_ < (dim)) (resultMember) = _e_;\
-  else (resultMember) = NULL;\
-}
-
-#define SGLIB_HASH_TAB_IS_MEMBER(type, table, dim, elem, hash_function, resultIndex) {\
-  unsigned _i_;\
-  int      _c_;\
-  type     *_e_;\
-  _count = 0;\
-  _i_ = hash_function(elem);\
-  _i_ %= (dim);\
-  while ((_e_=(table)[_i_])!=NULL && _e_!=(elem) && _c_<(dim)) {\
-    _c_ ++;\
-    _i_ = (_i_ + SGLIB_HASH_TAB_SHIFT_CONSTANT) % (dim);\
-  }\
-  if (_e_==(elem)) (resultIndex) = _i_;\
-  else (resultIndex) = -1;\
-}
-
-#define SGLIB_HASH_TAB_MAP_ON_ELEMENTS(type, table, dim, iteratedIndex, iteratedVariable, command) {\
-  unsigned  iteratedIndex;\
-  type      *iteratedVariable;\
-  for(iteratedIndex=0; iteratedIndex < (dim); iteratedIndex++) {\
-    iteratedVariable = (table)[iteratedIndex];\
-    if (iteratedVariable != NULL) {command;}\
-  }\
-}
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------- DYNAMIC DATA STRUCTURES -------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-/* ------------------------------------ lists (level 0) --------------------- */
-
-#define SGLIB_LIST_ADD(type, list, elem, next) {\
-  (elem)->next = (list);\
-  (list) = (elem);\
-}
-
-#define SGLIB_LIST_CONCAT(type, first, second, next) {\
-  if ((first)==NULL) {\
-    (first) = (second);\
-  } else {\
-    type *_p_;\
-    for(_p_ = (first); _p_->next!=NULL; _p_=_p_->next) ;\
-    _p_->next = (second);\
-  }\
-}
-
-#define SGLIB_LIST_DELETE(type, list, elem, next) {\
-  type **_p_;\
-  for(_p_ = &(list); *_p_!=NULL && *_p_!=(elem); _p_= &(*_p_)->next) ;\
-  assert(*_p_!=NULL && "element is not member of the container, use DELETE_IF_MEMBER instead"!=NULL);\
-  *_p_ = (*_p_)->next;\
-}
-
-#define SGLIB_LIST_ADD_IF_NOT_MEMBER(type, list, elem, comparator, next, member) {\
-  type *_p_;\
-  for(_p_ = (list); _p_!=NULL && comparator(_p_, (elem)) != 0; _p_= _p_->next) ;\
-  (member) = _p_;\
-  if (_p_ == NULL) {\
-    SGLIB_LIST_ADD(type, list, elem, next);\
-  }\
-}
-
-#define SGLIB_LIST_DELETE_IF_MEMBER(type, list, elem, comparator, next, member) {\
-  type **_p_;\
-  for(_p_ = &(list); *_p_!=NULL && comparator((*_p_), (elem)) != 0; _p_= &(*_p_)->next) ;\
-  (member) = *_p_;\
-  if (*_p_ != NULL) {\
-    *_p_ = (*_p_)->next;\
-  }\
-}
-
-#define SGLIB_LIST_IS_MEMBER(type, list, elem, next, result) {\
-  type *_p_;\
-  for(_p_ = (list); _p_!=NULL && _p_ != (elem); _p_= _p_->next) ;\
-  (result) = (_p_!=NULL);\
-}
-
-#define SGLIB_LIST_FIND_MEMBER(type, list, elem, comparator, next, member) {\
-  type *_p_;\
-  for(_p_ = (list); _p_!=NULL && comparator(_p_, (elem)) != 0; _p_= _p_->next) ;\
-  (member) = _p_;\
-}
-
-#define SGLIB_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, next, command) {\
-  type *_ne_;\
-  type *iteratedVariable;\
-  (iteratedVariable) = (list); \
-  while ((iteratedVariable)!=NULL) {\
-    _ne_ = (iteratedVariable)->next;\
-    {command;};\
-    (iteratedVariable) = _ne_;\
-  }\
-}
-
-#define SGLIB_LIST_LEN(type, list, next, result) {\
-  type *_ce_;\
-  (result) = 0;\
-  SGLIB_LIST_MAP_ON_ELEMENTS(type, list, _ce_, next, (result)++);\
-}
-
-#define SGLIB_LIST_REVERSE(type, list, next) {\
-  type *_list_,*_tmp_,*_res_;\
-  _list_ = (list);\
-  _res_ = NULL;\
-  while (_list_!=NULL) {\
-    _tmp_ = _list_->next; _list_->next = _res_;\
-    _res_ = _list_;   _list_ = _tmp_;\
-  }\
-  (list) = _res_;\
-}
-
-#define SGLIB_LIST_SORT(type, list, comparator, next) {\
-  /* a non-recursive merge sort on lists */\
-  type *_r_;\
-  type *_a_, *_b_, *_todo_, *_t_, **_restail_;\
-  int _i_, _n_, _contFlag_;\
-  _r_ = (list);\
-  _contFlag_ = 1;\
-  for(_n_ = 1; _contFlag_; _n_ = _n_+_n_) {\
-    _todo_ = _r_; _r_ = NULL; _restail_ = &_r_; _contFlag_ =0;\
-    while (_todo_!=NULL) {\
-      _a_ = _todo_;\
-      for(_i_ = 1, _t_ = _a_;  _i_ < _n_ && _t_!=NULL;  _i_++, _t_ = _t_->next) ;\
-      if (_t_ ==NULL) {\
-        *_restail_ = _a_;\
-        break;\
-      }\
-      _b_ = _t_->next; _t_->next=NULL;\
-      for(_i_ =1, _t_ = _b_;  _i_<_n_ && _t_!=NULL;  _i_++, _t_ = _t_->next) ;\
-      if (_t_ ==NULL) {\
-        _todo_ =NULL;\
-      } else {\
-        _todo_ = _t_->next; _t_->next=NULL;\
-      }\
-      /* merge */\
-      while (_a_!=NULL && _b_!=NULL) {\
-        if (comparator(_a_, _b_) < 0) {\
-          *_restail_ = _a_;  _restail_ = &(_a_->next); _a_ = _a_->next;\
-        } else {\
-          *_restail_ = _b_;  _restail_ = &(_b_->next); _b_ = _b_->next;\
-        }\
-      }\
-      if (_a_!=NULL) *_restail_ = _a_;\
-      else *_restail_ = _b_;\
-      while (*_restail_!=NULL) _restail_ = &((*_restail_)->next);\
-      _contFlag_ =1;\
-    }\
-  }\
-  (list) = _r_;\
-}
-
-/* --------------------------------- sorted list (level 0) --------------------- */
-/*
-  All operations suppose that the list is sorted and they preserve
-  this property.
-*/
-
-
-#define SGLIB_SORTED_LIST_ADD(type, list, elem, comparator, next) {\
-  type **_e_;\
-  int  _cmpres_;\
-  SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, _cmpres_, _e_);\
-  (elem)->next = *_e_;\
-  *_e_ = (elem);\
-}
-
-#define SGLIB_SORTED_LIST_ADD_IF_NOT_MEMBER(type, list, elem, comparator, next, member) {\
-  type **_e_;\
-  int _cmp_res_;\
-  SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, _cmp_res_, _e_);\
-  if (_cmp_res_ != 0) {\
-    (elem)->next = *_e_;\
-    *_e_ = (elem);\
-    (member) = NULL;\
-  } else {\
-    (member) = *_e_;\
-  }\
-}
-
-#define SGLIB_SORTED_LIST_DELETE(type, list, elem, next) {\
-  SGLIB_LIST_DELETE(type, list, elem, next);\
-}
-
-#define SGLIB_SORTED_LIST_DELETE_IF_MEMBER(type, list, elem, comparator, next, member) {\
-  type **_e_;\
-  int _cmp_res_;\
-  SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, _cmp_res_, _e_);\
-  if (_cmp_res_ == 0) {\
-    (member) = *_e_;\
-    *_e_ = (*_e_)->next;\
-  } else {\
-    (member) = NULL;\
-  }\
-}
-
-#define SGLIB_SORTED_LIST_FIND_MEMBER(type, list, elem, comparator, next, member) {\
-  type *_p_;\
-  int _cmpres_;\
-  for(_p_ = (list); _p_!=NULL && (_cmpres_=comparator(_p_, (elem))) < 0; _p_=_p_->next) ;\
-  if (_cmpres_ != 0) (member) = NULL;\
-  else (member) = _p_;\
-}
-
-#define SGLIB_SORTED_LIST_IS_MEMBER(type, list, elem, comparator, next, result) {\
-  type *_p_;\
-  int _cmpres_;\
-  for(_p_ = (list); _p_!=NULL && (_cmpres_=comparator(_p_, (elem))) < 0; _p_=_p_->next) ;\
-  while (_p_ != NULL && _p_ != (elem) && (_cmpres_ = comparator(_p_, (elem))) == 0) _p_=_p_->next;\
-  (result) = (_p_ == (elem));\
-}
-
-#define SGLIB_SORTED_LIST_FIND_MEMBER_OR_PLACE(type, list, elem, comparator, next, comparator_result, member_ptr) {\
-  for((member_ptr) = &(list); \
-      *(member_ptr)!=NULL && ((comparator_result)=comparator((*member_ptr), (elem))) < 0; \
-      (member_ptr) = &(*(member_ptr))->next) ;\
-  if (*(member_ptr) == NULL) (comparator_result) = -1;\
-}
-
-#define SGLIB_SORTED_LIST_LEN(type, list, next, result) {\
-  SGLIB_LIST_LEN(type, list, next, result);\
-}
-
-#define SGLIB_SORTED_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, next, command) {\
-  SGLIB_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, next, command);\
-}
-
-
-/* ------------------------------- double linked list (level 0) ------------------------- */
-/*
-  Lists with back pointer to previous element. Those lists implements deletion
-  of an element in a constant time.
-*/
-
-#define SGLIB___DL_LIST_CREATE_SINGLETON(type, list, elem, previous, next) {\
-  (list) = (elem);\
-  (list)->next = (list)->previous = NULL;\
-}
-
-#define SGLIB_DL_LIST_ADD_AFTER(type, place, elem, previous, next) {\
-  if ((place) == NULL) {\
-    SGLIB___DL_LIST_CREATE_SINGLETON(type, place, elem, previous, next);\
-  } else {\
-    (elem)->next = (place)->next;\
-    (elem)->previous = (place);\
-    (place)->next = (elem);\
-    if ((elem)->next != NULL) (elem)->next->previous = (elem);\
-  }\
-}
-
-#define SGLIB_DL_LIST_ADD_BEFORE(type, place, elem, previous, next) {\
-  if ((place) == NULL) {\
-    SGLIB___DL_LIST_CREATE_SINGLETON(type, place, elem, previous, next);\
-  } else {\
-    (elem)->next = (place);\
-    (elem)->previous = (place)->previous;\
-    (place)->previous = (elem);\
-    if ((elem)->previous != NULL) (elem)->previous->next = (elem);\
-  }\
-}
-
-#define SGLIB_DL_LIST_ADD(type, list, elem, previous, next) {\
-  SGLIB_DL_LIST_ADD_BEFORE(type, list, elem, previous, next)\
-}
-
-#define SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, the_add_operation) {\
-  type *_dlp_;\
-  for(_dlp_ = (list); _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->previous) ;\
-  if (_dlp_ == NULL && (list) != NULL) {\
-    for(_dlp_ = (list)->next; _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->next) ;\
-  }\
-  (member) = _dlp_;\
-  if (_dlp_ == NULL) {\
-    the_add_operation(type, list, elem, previous, next);\
-  }\
-}
-
-#define SGLIB_DL_LIST_ADD_BEFORE_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, SGLIB_DL_LIST_ADD_BEFORE);\
-}
-
-#define SGLIB_DL_LIST_ADD_AFTER_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, SGLIB_DL_LIST_ADD_AFTER);\
-}
-
-#define SGLIB_DL_LIST_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  SGLIB___DL_LIST_GENERIC_ADD_IF_NOT_MEMBER(type, list, elem, comparator, previous, next, member, SGLIB_DL_LIST_ADD);\
-}
-
-#define SGLIB_DL_LIST_CONCAT(type, first, second, previous, next) {\
-  if ((first)==NULL) {\
-    (first) = (second);\
-  } else if ((second)!=NULL) {\
-    type *_dlp_;\
-    for(_dlp_ = (first); _dlp_->next!=NULL; _dlp_=_dlp_->next) ;\
-    SGLIB_DL_LIST_ADD_AFTER(type, _dlp_, second, previous, next);\
-  }\
-}
-
-#define SGLIB_DL_LIST_DELETE(type, list, elem, previous, next) {\
-  type *_l_;\
-  _l_ = (list);\
-  if (_l_ == (elem)) {\
-    if ((elem)->previous != NULL) _l_ = (elem)->previous;\
-    else _l_ = (elem)->next;\
-  }\
-  if ((elem)->next != NULL) (elem)->next->previous = (elem)->previous;\
-  if ((elem)->previous != NULL) (elem)->previous->next = (elem)->next;\
-  (list) = _l_;\
-}
-
-#define SGLIB_DL_LIST_DELETE_IF_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  type *_dlp_;\
-  for(_dlp_ = (list); _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->previous) ;\
-  if (_dlp_ == NULL && (list) != NULL) {\
-    for(_dlp_ = (list)->next; _dlp_!=NULL && comparator(_dlp_, (elem)) != 0; _dlp_= _dlp_->next) ;\
-  }\
-  (member) = _dlp_;\
-  if (_dlp_ != NULL) {\
-    SGLIB_DL_LIST_DELETE(type, list, _dlp_, previous, next);\
-  }\
-}
-
-#define SGLIB_DL_LIST_IS_MEMBER(type, list, elem, previous, next, result) {\
-  type *_dlp_;\
-  SGLIB_LIST_IS_MEMBER(type, list, elem, previous, result);\
-  if (result == 0 && (list) != NULL) {\
-    _dlp_ = (list)->next;\
-    SGLIB_LIST_IS_MEMBER(type, _dlp_, elem, next, result);\
-  }\
-}
-
-#define SGLIB_DL_LIST_FIND_MEMBER(type, list, elem, comparator, previous, next, member) {\
-  type *_dlp_;\
-  SGLIB_LIST_FIND_MEMBER(type, list, elem, comparator, previous, member);\
-  if ((member) == NULL && (list) != NULL) {\
-    _dlp_ = (list)->next;\
-    SGLIB_LIST_FIND_MEMBER(type, _dlp_, elem, comparator, next, member);\
-  }\
-}
-
-#define SGLIB_DL_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, previous, next, command) {\
-  type *_dl_;\
-  type *iteratedVariable;\
-  if ((list)!=NULL) {\
-    _dl_ = (list)->next;\
-    SGLIB_LIST_MAP_ON_ELEMENTS(type, list, iteratedVariable, previous, command);\
-    SGLIB_LIST_MAP_ON_ELEMENTS(type, _dl_, iteratedVariable, next, command);\
-  }\
-}
-
-#define SGLIB_DL_LIST_SORT(type, list, comparator, previous, next) {\
-  type *_dll_, *_dlp_, *_dlt_;\
-  _dll_ = (list);\
-  if (_dll_ != NULL) {\
-    for(; _dll_->previous!=NULL; _dll_=_dll_->previous) ;\
-    SGLIB_LIST_SORT(type, _dll_, comparator, next);\
-    SGLIB___DL_LIST_CREATE_FROM_LIST(type, _dll_, previous, next);\
-    (list) = _dll_;\
-  }\
-}
-
-#define SGLIB_DL_LIST_GET_FIRST(type, list, previous, next, result) {\
-  type *_dll_;\
-  _dll_ = (list);\
-  if (_dll_ != NULL) {\
-    for(; _dll_->previous!=NULL; _dll_=_dll_->previous) ;\
-  }\
-  (result) = _dll_;\
-}
-
-#define SGLIB_DL_LIST_GET_LAST(type, list, previous, next, result) {\
-  type *_dll_;\
-  _dll_ = (list);\
-  if (_dll_ != NULL) {\
-    for(; _dll_->next!=NULL; _dll_=_dll_->next) ;\
-  }\
-  (result) = _dll_;\
-}
-
-#define SGLIB_DL_LIST_LEN(type, list, previous, next, result) {\
-  type *_dl_;\
-  int _r1_, _r2_;\
-  if ((list)==NULL) {\
-    (result) = 0;\
-  } else {\
-    SGLIB_LIST_LEN(type, list, previous, _r1_);\
-    _dl_ = (list)->next;\
-    SGLIB_LIST_LEN(type, _dl_, next, _r2_);\
-    (result) = _r1_ + _r2_;\
-  }\
-}
-
-#define SGLIB_DL_LIST_REVERSE(type, list, previous, next) {\
-  type *_list_,*_nlist_,*_dlp_,*_dln_;\
-  _list_ = (list);\
-  if (_list_!=NULL) {\
-    _nlist_ = _list_->next;\
-    while (_list_!=NULL) {\
-      _dln_ = _list_->next; \
-      _dlp_ = _list_->previous; \
-      _list_->next = _dlp_;\
-      _list_->previous = _dln_;\
-      _list_ = _dlp_;\
-    }\
-    while (_nlist_!=NULL) {\
-      _dln_ = _nlist_->next; \
-      _dlp_ = _nlist_->previous; \
-      _nlist_->next = _dlp_;\
-      _nlist_->previous = _dln_;\
-      _nlist_ = _dln_;\
-    }\
-  }\
-}
-
-#define SGLIB___DL_LIST_CREATE_FROM_LIST(type, list, previous, next) {\
-  type *_dlp_, *_dlt_;\
-  _dlp_ = NULL;\
-  for(_dlt_ = (list); _dlt_!=NULL; _dlt_ = _dlt_->next) {\
-    _dlt_->previous = _dlp_;\
-    _dlp_ = _dlt_;\
-  }\
-}
-
-
-/* ------------------------------- binary tree traversal (level 0) -------------------- */
-
-
-#define SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, iteratedVariable, order, left, right, command) {\
-  /* this is non-recursive implementation of tree traversal */\
-  /* it maintains the path to the current node in the array '_path_' */\
-  /* the _path_[0] contains the root of the tree; */\
-  /* the _path_[_pathi_] contains the _current_element_ */\
-  /* the macro does not use the _current_element_ after execution of command */\
-  /* command can destroy it, it can free the element for example */\
-  type *_path_[SGLIB_MAX_TREE_DEEP];\
-  type *_right_[SGLIB_MAX_TREE_DEEP];\
-  char _pass_[SGLIB_MAX_TREE_DEEP];\
-  type *_cn_;\
-  int _pathi_;\
-  type *iteratedVariable;\
-  _cn_ = (tree);\
-  _pathi_ = 0;\
-  while (_cn_!=NULL) {\
-    /* push down to leftmost innermost element */\
-    while(_cn_!=NULL) {\
-      _path_[_pathi_] = _cn_;\
-      _right_[_pathi_] = _cn_->right;\
-      _pass_[_pathi_] = 0;\
-      _cn_ = _cn_->left;\
-      if (order == 0) {\
-        iteratedVariable = _path_[_pathi_];\
-        {command;}\
-      }\
-      _pathi_ ++;\
-      if (_pathi_ >= SGLIB_MAX_TREE_DEEP) assert(0 && "the binary_tree is too deep");\
-    }\
-    do {\
-      _pathi_ --;\
-      if ((order==1 && _pass_[_pathi_] == 0)\
-          || (order == 2 && (_pass_[_pathi_] == 1 || _right_[_pathi_]==NULL))) {\
-        iteratedVariable = _path_[_pathi_];\
-        {command;}\
-      }\
-      _pass_[_pathi_] ++;\
-    } while (_pathi_>0 && _right_[_pathi_]==NULL) ;\
-    _cn_ = _right_[_pathi_];\
-    _right_[_pathi_] = NULL;\
-    _pathi_ ++;\
-  }\
-}
-
-#define SGLIB_BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, left, right, command) {\
-  SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, 1, left, right, command);\
-}
-
-#define SGLIB_BIN_TREE_MAP_ON_ELEMENTS_PREORDER(type, tree, _current_element_, left, right, command) {\
-  SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, 0, left, right, command);\
-}
-
-#define SGLIB_BIN_TREE_MAP_ON_ELEMENTS_POSTORDER(type, tree, _current_element_, left, right, command) {\
-  SGLIB___BIN_TREE_MAP_ON_ELEMENTS(type, tree, _current_element_, 2, left, right, command);\
-}
-
-#define SGLIB___BIN_TREE_FIND_MEMBER(type, tree, elem, left, right, comparator, res) {\
-  type *_s_;\
-  int _c_;\
-  _s_ = (tree);\
-  while (_s_!=NULL) {\
-    _c_ = comparator((elem), _s_);\
-    if (_c_ < 0) _s_ = _s_->left;\
-    else if (_c_ > 0) _s_ = _s_->right;\
-    else break;\
-  }\
-  (res) = _s_;\
-}
-
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-/* -                             LEVEL - 1  INTERFACE                         - */
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------------ STATIC ARRAYS ------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-/* ----------------------------- array sorting (level 1) ---------------------- */
-
-#define SGLIB_DEFINE_ARRAY_SORTING_PROTOTYPES(type, comparator) \
- extern void sglib_##type##_array_quick_sort(type *a, int max);\
- extern void sglib_##type##_array_heap_sort(type *a, int max);\
-
-
-#define SGLIB_DEFINE_ARRAY_SORTING_FUNCTIONS(type, comparator) \
- void sglib_##type##_array_quick_sort(type *a, int max) {\
-   SGLIB_ARRAY_SINGLE_QUICK_SORT(type, a, max, comparator);\
- }\
- void sglib_##type##_array_heap_sort(type *a, int max) {\
-   SGLIB_ARRAY_SINGLE_HEAP_SORT(type, a, max, comparator);\
- }\
-
-
-/* ----------------------------- array queue (level 1) ------------------- */
-/* sglib's queue is stored in a fixed sized array                          */
-/* queue_type MUST be a structure containing fields:                       */
-/*  afield is the array storing elem_type                                  */
-/*  ifield is the index of the first element in the queue                  */
-/*  jfield is the index of the first free element after the queue          */
-/*  dim is the size of the array afield                                    */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! */
-
-
-#define SGLIB_DEFINE_QUEUE_PROTOTYPES(queue_type, elem_type, afield, ifield, jfield, dim) \
- extern void sglib_##queue_type##_init(queue_type *q); \
- extern int sglib_##queue_type##_is_empty(queue_type *q); \
- extern int sglib_##queue_type##_is_full(queue_type *q); \
- extern elem_type sglib_##queue_type##_first_element(queue_type *q); \
- extern elem_type *sglib_##queue_type##_first_element_ptr(queue_type *q); \
- extern void sglib_##queue_type##_add_next(queue_type *q); \
- extern void sglib_##queue_type##_add(queue_type *q, elem_type elem); \
- extern void sglib_##queue_type##_delete_first(queue_type *q); \
- extern void sglib_##queue_type##_delete(queue_type *q);
-
-
-#define SGLIB_DEFINE_QUEUE_FUNCTIONS(queue_type, elem_type, afield, ifield, jfield, dim) \
- void sglib_##queue_type##_init(queue_type *q) {\
-  SGLIB_QUEUE_INIT(elem_type, q->afield, q->ifield, q->jfield);\
- }\
- int sglib_##queue_type##_is_empty(queue_type *q) {\
-  return(SGLIB_QUEUE_IS_EMPTY(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- int sglib_##queue_type##_is_full(queue_type *q) {\
-  return(SGLIB_QUEUE_IS_FULL(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- elem_type sglib_##queue_type##_first_element(queue_type *q) {\
-  return(SGLIB_QUEUE_FIRST_ELEMENT(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- elem_type *sglib_##queue_type##_first_element_ptr(queue_type *q) {\
-  return(& SGLIB_QUEUE_FIRST_ELEMENT(elem_type, q->afield, q->ifield, q->jfield));\
- }\
- void sglib_##queue_type##_add_next(queue_type *q) {\
-  SGLIB_QUEUE_ADD_NEXT(elem_type, q->afield, q->ifield, q->jfield, dim);\
- }\
- void sglib_##queue_type##_add(queue_type *q, elem_type elem) {\
-  SGLIB_QUEUE_ADD(elem_type, q->afield, elem, q->ifield, q->jfield, dim);\
- }\
- void sglib_##queue_type##_delete_first(queue_type *q) {\
-  SGLIB_QUEUE_DELETE_FIRST(elem_type, q->afield, q->ifield, q->jfield, dim);\
- }\
- void sglib_##queue_type##_delete(queue_type *q) {\
-  SGLIB_QUEUE_DELETE_FIRST(elem_type, q->afield, q->ifield, q->jfield, dim);\
- }
-
-
-/* ------------------------ array heap (level 1) ------------------------- */
-/* sglib's heap is a priority queue implemented in a fixed sized array     */
-/* heap_type MUST be a structure containing fields:                        */
-/*  afield is the array of size dim storing elem_type                      */
-/*  ifield is the index of the first free element after the queue          */
-/* !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! */
-
-
-#define SGLIB_DEFINE_HEAP_PROTOTYPES(heap_type, elem_type, afield, ifield, dim, comparator, elem_exchanger) \
- extern void sglib_##heap_type##_init(heap_type *q); \
- extern int sglib_##heap_type##_is_empty(heap_type *q); \
- extern int sglib_##heap_type##_is_full(heap_type *q); \
- extern elem_type sglib_##heap_type##_first_element(heap_type *q); \
- extern elem_type *sglib_##heap_type##_first_element_ptr(heap_type *q); \
- extern void sglib_##heap_type##_add_next(heap_type *q); \
- extern void sglib_##heap_type##_add(heap_type *q, elem_type elem); \
- extern void sglib_##heap_type##_delete_first(heap_type *q); \
- extern void sglib_##heap_type##_delete(heap_type *q)
-
-#define SGLIB_DEFINE_HEAP_FUNCTIONS(heap_type, elem_type, afield, ifield, dim, comparator, elem_exchanger) \
- void sglib_##heap_type##_init(heap_type *q) {\
-  SGLIB_HEAP_INIT(elem_type, q->afield, q->ifield);\
- }\
- int sglib_##heap_type##_is_empty(heap_type *q) {\
-  return(SGLIB_HEAP_IS_EMPTY(elem_type, q->afield, q->ifield));\
- }\
- int sglib_##heap_type##_is_full(heap_type *q) {\
-  return(SGLIB_HEAP_IS_FULL(elem_type, q->afield, q->ifield));\
- }\
- elem_type sglib_##heap_type##_first_element(heap_type *q) {\
-  return(SGLIB_HEAP_FIRST_ELEMENT(elem_type, q->afield, q->ifield));\
- }\
- elem_type *sglib_##heap_type##_first_element_ptr(heap_type *q) {\
-  return(& SGLIB_HEAP_FIRST_ELEMENT(elem_type, q->afield, q->ifield));\
- }\
- void sglib_##heap_type##_add_next(heap_type *q) {\
-  SGLIB_HEAP_ADD_NEXT(elem_type, q->afield, q->ifield, dim, comparator, elem_exchanger);\
- }\
- void sglib_##heap_type##_add(heap_type *q, elem_type elem) {\
-  SGLIB_HEAP_ADD(elem_type, q->afield, elem, q->ifield, dim, comparator, elem_exchanger);\
- }\
- void sglib_##heap_type##_delete_first(heap_type *q) {\
-  SGLIB_HEAP_DELETE_FIRST(elem_type, q->afield, q->ifield, dim, comparator, elem_exchanger);\
- }\
- void sglib_##heap_type##_delete(heap_type *q) {\
-  SGLIB_HEAP_DELETE_FIRST(elem_type, q->afield, q->ifield, dim, comparator, elem_exchanger);\
- }
-
-
-/* ------------------------ hashed table  (level 1) ------------------------- */
-/*
- 
-  sglib's hash table is an array storing directly pointers to objects (not containers).
-  In this table there is a one-to-one mapping between 'objects' stored
-  in the table and indexes where they are placed. Each index is
-  pointing to exactly one 'object' and each 'object' stored in the
-  table occurs on exactly one index.  Once an object is stored in the
-  table, it can be represented via its index.
-
-  type          - is the type of elements
-  dim           - is the size of the hash array
-  hash_function - is a hashing function mapping type* to unsigned
-  comparator    - is a comparator on elements
-
-  !!!!!!! This data structure is NOT documented, do not use it !!!!!!!!!! 
-*/
-
-#define SGLIB_DEFINE_HASHED_TABLE_PROTOTYPES(type, dim, hash_function, comparator) \
-  struct sglib_hashed_##type##_iterator {\
-    int currentIndex;\
-    int (*subcomparator)(type *, type *);\
-    type *equalto;\
-  };\
-  extern void sglib_hashed_##type##_init(type *table[dim]);\
-  extern int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member);\
-  extern int sglib_hashed_##type##_is_member(type *table[dim], type *elem);\
-  extern type * sglib_hashed_##type##_find_member(type *table[dim], type *elem);\
-  extern type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]); \
-  extern type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto); \
-  extern type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it); \
-  extern type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it);
-
-#define SGLIB_DEFINE_HASHED_TABLE_FUNCTIONS(type, dim, hash_function, comparator) \
-  struct sglib_hashed_##type##_iterator {\
-    int currentIndex;\
-    type **table;\
-    int (*subcomparator)(type *, type *);\
-    type *equalto;\
-  };\
-  void sglib_hashed_##type##_init(type *table[dim]) {\
-    SGLIB_HASH_TAB_INIT(type, table, dim);\
-  }\
-  int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member) {\
-    SGLIB_HASH_TAB_ADD_IF_NOT_MEMBER(type, table, dim, elem, hash_function, comparator, *member);\
-  }\
-  int sglib_hashed_##type##_is_member(type *table[dim], type *elem) {\
-    int ind;\
-    SGLIB_HASH_TAB_IS_MEMBER(type, table, dim, elem, hash_function, ind);\
-    return(ind != -1);\
-  }\
-  type * sglib_hashed_##type##_find_member(type *table[dim], type *elem) {\
-    type *mmb;\
-    int ind;\
-    SGLIB_HASH_TAB_FIND_MEMBER(type, table, dim, elem, hash_function, comparator, ind, mmb);\
-    return(mmb);\
-  }\
-  type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto) {\
-    int i;\
-    it->table = table;\
-    it->subcomparator = subcomparator;\
-    it->equalto = equalto;\
-    for(i=0; i<(dim) && table[i]==NULL; i++) ;\
-    it->currentIndex = i;\
-    if (i<(dim)) return(table[i]);\
-    return(NULL);\
-  }\
-  type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]) {\
-    sglib_hashed_##type##_it_init_on_equal(it, table, NULL, NULL);\
-  }\
-  type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it) {\
-    return(table[it->currentIndex]);\
-  }\
-  type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it) {\
-    i=it->currentIndex;\
-    if (i<(dim)) {\
-      for(i++; i<(dim) && table[i]==NULL; i++) ;\
-    }\
-    it->currentIndex = i;\
-    if (i<(dim)) return(table[i]);\
-    return(NULL);\
-  }
-
-
-/* ------------------- hashed container (only for level 1)  -------------------- */
-/* 
-  hashed container is a table of given fixed size containing another
-  (dynamic) base container in each cell. Once an object should be
-  inserted into the hashed container, a hash function is used to
-  determine the cell where the object belongs and the object is
-  inserted into the base container stored in this cell. Usually the
-  base container is simply a list or a sorted list, but it can be a
-  red-black tree as well.
-
-  parameters:
-  type - the type of the container stored in each cell.
-  dim  - the size of the hashed array
-  hash_function - the hashing function hashing 'type *' to unsigned.  
-
-*/
-
-#define SGLIB_DEFINE_HASHED_CONTAINER_PROTOTYPES(type, dim, hash_function) \
-  struct sglib_hashed_##type##_iterator {\
-    struct sglib_##type##_iterator containerIt;\
-    type **table;\
-    int currentIndex;\
-    int (*subcomparator)(type *, type *);\
-    type *equalto;\
-  };\
-  extern void sglib_hashed_##type##_init(type *table[dim]);\
-  extern void sglib_hashed_##type##_add(type *table[dim], type *elem);\
-  extern int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member);\
-  extern void sglib_hashed_##type##_delete(type *table[dim], type *elem);\
-  extern int sglib_hashed_##type##_delete_if_member(type *table[dim], type *elem, type **memb);\
-  extern int sglib_hashed_##type##_is_member(type *table[dim], type *elem);\
-  extern type * sglib_hashed_##type##_find_member(type *table[dim], type *elem);\
-  extern type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]); \
-  extern type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto); \
-  extern type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it); \
-  extern type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it);
-
-#define SGLIB_DEFINE_HASHED_CONTAINER_FUNCTIONS(type, dim, hash_function) \
-  /*extern unsigned hash_function(type *elem);*/\
-  void sglib_hashed_##type##_init(type *table[dim]) {\
-    unsigned i;\
-    for(i=0; i<(dim); i++) table[i] = NULL;\
-  }\
-  void sglib_hashed_##type##_add(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    sglib_##type##_add(&(table)[i], elem);\
-  }\
-  int sglib_hashed_##type##_add_if_not_member(type *table[dim], type *elem, type **member) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_add_if_not_member(&(table)[i], elem, member));\
-  }\
-  void sglib_hashed_##type##_delete(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    sglib_##type##_delete(&(table)[i], elem);\
-  }\
-  int sglib_hashed_##type##_delete_if_member(type *table[dim], type *elem, type **memb) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_delete_if_member(&(table)[i], elem, memb));\
-  }\
-  int sglib_hashed_##type##_is_member(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_is_member((table)[i], elem));\
-  }\
-  type * sglib_hashed_##type##_find_member(type *table[dim], type *elem) {\
-    unsigned i;\
-    i = ((unsigned)hash_function(elem)) % (dim);\
-    return(sglib_##type##_find_member((table)[i], elem));\
-  }\
-  type *sglib_hashed_##type##_it_init_on_equal(struct sglib_hashed_##type##_iterator *it, type *table[dim], int (*subcomparator)(type *, type *), type *equalto) {\
-    type *e;\
-    it->table = table;\
-    it->currentIndex = 0;\
-    it->subcomparator = subcomparator;\
-    it->equalto = equalto;\
-    e = sglib_##type##_it_init_on_equal(&it->containerIt, table[it->currentIndex], it->subcomparator, it->equalto);\
-    if (e==NULL) e = sglib_hashed_##type##_it_next(it);\
-    return(e);\
-  }\
-  type *sglib_hashed_##type##_it_init(struct sglib_hashed_##type##_iterator *it, type *table[dim]) {\
-	return(sglib_hashed_##type##_it_init_on_equal(it, table, NULL, NULL));\
-  }\
-  type *sglib_hashed_##type##_it_current(struct sglib_hashed_##type##_iterator *it) {\
-    return(sglib_##type##_it_current(&it->containerIt));\
-  }\
-  type *sglib_hashed_##type##_it_next(struct sglib_hashed_##type##_iterator *it) {\
-    type *e;\
-    e = sglib_##type##_it_next(&it->containerIt);\
-    while (e==NULL && (++(it->currentIndex))<(dim)) {\
-      e = sglib_##type##_it_init_on_equal(&it->containerIt, it->table[it->currentIndex], it->subcomparator, it->equalto);\
-    }\
-    return(e);\
-  }
-
-
-
-/* ---------------------------------------------------------------------------- */
-/* ------------------------- DYNAMIC DATA STRUCTURES -------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-
-/* ------------------------------------ list (level 1) -------------------------------- */
-
-#define SGLIB_DEFINE_LIST_PROTOTYPES(type, comparator, next) \
- struct sglib_##type##_iterator {\
-   type *currentelem;\
-   type *nextelem;\
-   int (*subcomparator)(type *, type *);\
-   type *equalto;\
- };\
- extern void sglib_##type##_add(type **list, type *elem);\
- extern int sglib_##type##_add_if_not_member(type **list, type *elem, type **member);\
- extern void sglib_##type##_concat(type **first, type *second);\
- extern void sglib_##type##_delete(type **list, type *elem);\
- extern int sglib_##type##_delete_if_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_is_member(type *list, type *elem);\
- extern type *sglib_##type##_find_member(type *list, type *elem);\
- extern void sglib_##type##_sort(type **list);\
- extern int sglib_##type##_len(type *list);\
- extern void sglib_##type##_reverse(type **list);\
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it);
-
-
-#define SGLIB_DEFINE_LIST_FUNCTIONS(type, comparator, next) \
- int sglib_##type##_is_member(type *list, type *elem) {\
-   int result;\
-   SGLIB_LIST_IS_MEMBER(type, list, elem, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_find_member(type *list, type *elem) {\
-   type *result;\
-   SGLIB_LIST_FIND_MEMBER(type, list, elem, comparator, next, result);\
-   return(result);\
- }\
- int sglib_##type##_add_if_not_member(type **list, type *elem, type **member) {\
-   SGLIB_LIST_ADD_IF_NOT_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member==NULL);\
- }\
- void sglib_##type##_add(type **list, type *elem) {\
-   SGLIB_LIST_ADD(type, *list, elem, next);\
- }\
- void sglib_##type##_concat(type **first, type *second) {\
-   SGLIB_LIST_CONCAT(type, *first, second, next);\
- }\
- void sglib_##type##_delete(type **list, type *elem) {\
-   SGLIB_LIST_DELETE(type, *list, elem, next);\
- }\
- int sglib_##type##_delete_if_member(type **list, type *elem, type **member) {\
-   SGLIB_LIST_DELETE_IF_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member!=NULL);\
- }\
- void sglib_##type##_sort(type **list) { \
-   SGLIB_LIST_SORT(type, *list, comparator, next);\
- }\
- int sglib_##type##_len(type *list) {\
-   int res;\
-   SGLIB_LIST_LEN(type, list, next, res);\
-   return(res);\
- }\
- void sglib_##type##_reverse(type **list) {\
-   SGLIB_LIST_REVERSE(type, *list, next);\
- }\
- \
- type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto) {\
-   it->subcomparator = subcomparator;\
-   it->equalto = equalto;\
-   it->nextelem = list;\
-   return(sglib_##type##_it_next(it));\
- }\
- type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list) {\
-   return(sglib_##type##_it_init_on_equal(it, list, NULL, NULL));\
- }\
- type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-   return(it->currentelem);\
- }\
- type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-   type *ce, *eq;\
-   int  (*scp)(type *, type *);\
-   ce = it->nextelem;\
-   it->nextelem = NULL;\
-   if (it->subcomparator != NULL) {\
-	 eq = it->equalto; \
-     scp = it->subcomparator;\
-     while (ce!=NULL && scp(ce, eq)!=0) ce = ce->next;\
-   }\
-   it->currentelem = ce;\
-   if (ce != NULL) it->nextelem = ce->next;\
-   return(ce);\
- }
-
-/* ----------------------------- sorted list (level 1) ----------------------------------- */
-
-
-#define SGLIB_DEFINE_SORTED_LIST_PROTOTYPES(type, comparator, next) \
- struct sglib_##type##_iterator {\
-   type *currentelem;\
-   type *nextelem;\
-   int (*subcomparator)(type *, type *);\
-   type *equalto;\
- };\
- extern void sglib_##type##_add(type **list, type *elem);\
- extern int sglib_##type##_add_if_not_member(type **list, type *elem, type **member);\
- extern void sglib_##type##_delete(type **list, type *elem);\
- extern int sglib_##type##_delete_if_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_is_member(type *list, type *elem);\
- extern type *sglib_##type##_find_member(type *list, type *elem);\
- extern int sglib_##type##_len(type *list);\
- extern void sglib_##type##_sort(type **list);\
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it);
-
-
-#define SGLIB_DEFINE_SORTED_LIST_FUNCTIONS(type, comparator, next) \
- int sglib_##type##_is_member(type *list, type *elem) {\
-   int result;\
-   SGLIB_SORTED_LIST_IS_MEMBER(type, list, elem, comparator, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_find_member(type *list, type *elem) {\
-   type *result;\
-   SGLIB_SORTED_LIST_FIND_MEMBER(type, list, elem, comparator, next, result);\
-   return(result);\
- }\
- int sglib_##type##_add_if_not_member(type **list, type *elem, type **member) {\
-   SGLIB_SORTED_LIST_ADD_IF_NOT_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member==NULL);\
- }\
- void sglib_##type##_add(type **list, type *elem) {\
-   SGLIB_SORTED_LIST_ADD(type, *list, elem, comparator, next);\
- }\
- void sglib_##type##_delete(type **list, type *elem) {\
-   SGLIB_SORTED_LIST_DELETE(type, *list, elem, next);\
- }\
- int sglib_##type##_delete_if_member(type **list, type *elem, type **member) {\
-   SGLIB_SORTED_LIST_DELETE_IF_MEMBER(type, *list, elem, comparator, next, *member);\
-   return(*member!=NULL);\
- }\
- int sglib_##type##_len(type *list) {\
-   int res;\
-   SGLIB_SORTED_LIST_LEN(type, list, next, res);\
-   return(res);\
- }\
- void sglib_##type##_sort(type **list) { \
-   SGLIB_LIST_SORT(type, *list, comparator, next);\
- }\
- \
- type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto) {\
-   it->subcomparator = subcomparator;\
-   it->equalto = equalto;\
-   it->nextelem = list;\
-   return(sglib_##type##_it_next(it));\
- }\
- type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list) {\
-   return(sglib_##type##_it_init_on_equal(it, list, NULL, NULL));\
- }\
- type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-   return(it->currentelem);\
- }\
- type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-   type *ce, *eq;\
-   int  (*scp)(type *, type *);\
-   int  c;\
-   ce = it->nextelem;\
-   it->nextelem = NULL;\
-   if (it->subcomparator != NULL) {\
-	 eq = it->equalto; \
-     scp = it->subcomparator;\
-     while (ce!=NULL && (c=scp(ce, eq)) < 0) ce = ce->next;\
-     if (ce != NULL && c > 0) ce = NULL;\
-   }\
-   it->currentelem = ce;\
-   if (ce != NULL) it->nextelem = ce->next;\
-   return(ce);\
- }
-
-
-/* ----------------------------- double linked list (level 1) ------------------------------ */
-
-
-#define SGLIB_DEFINE_DL_LIST_PROTOTYPES(type, comparator, previous, next) \
- struct sglib_##type##_iterator {\
-   type *currentelem;\
-   type *prevelem;\
-   type *nextelem;\
-   int (*subcomparator)(type *, type *);\
-   type *equalto;\
- };\
- extern void sglib_##type##_add(type **list, type *elem);\
- extern void sglib_##type##_add_before(type **list, type *elem);\
- extern void sglib_##type##_add_after(type **list, type *elem);\
- extern int sglib_##type##_add_if_not_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_add_before_if_not_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_add_after_if_not_member(type **list, type *elem, type **member);\
- extern void sglib_##type##_concat(type **first, type *second);\
- extern void sglib_##type##_delete(type **list, type *elem);\
- extern int sglib_##type##_delete_if_member(type **list, type *elem, type **member);\
- extern int sglib_##type##_is_member(type *list, type *elem);\
- extern type *sglib_##type##_find_member(type *list, type *elem);\
- extern type *sglib_##type##_get_first(type *list);\
- extern type *sglib_##type##_get_last(type *list);\
- extern void sglib_##type##_sort(type **list);\
- extern int sglib_##type##_len(type *list);\
- extern void sglib_##type##_reverse(type **list);\
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it);
-
-
-#define SGLIB_DEFINE_DL_LIST_FUNCTIONS(type, comparator, previous, next) \
- void sglib_##type##_add(type **list, type *elem) {\
-  SGLIB_DL_LIST_ADD(type, *list, elem, previous, next);\
- }\
- void sglib_##type##_add_after(type **list, type *elem) {\
-  SGLIB_DL_LIST_ADD_AFTER(type, *list, elem, previous, next);\
- }\
- void sglib_##type##_add_before(type **list, type *elem) {\
-  SGLIB_DL_LIST_ADD_BEFORE(type, *list, elem, previous, next);\
- }\
- int sglib_##type##_add_if_not_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_ADD_IF_NOT_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member==NULL);\
- }\
- int sglib_##type##_add_after_if_not_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_ADD_AFTER_IF_NOT_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member==NULL);\
- }\
- int sglib_##type##_add_before_if_not_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_ADD_BEFORE_IF_NOT_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member==NULL);\
- }\
- void sglib_##type##_concat(type **first, type *second) {\
-   SGLIB_DL_LIST_CONCAT(type, *first, second, previous, next);\
- }\
- void sglib_##type##_delete(type **list, type *elem) {\
-  SGLIB_DL_LIST_DELETE(type, *list, elem, previous, next);\
- }\
- int sglib_##type##_delete_if_member(type **list, type *elem, type **member) {\
-  SGLIB_DL_LIST_DELETE_IF_MEMBER(type, *list, elem, comparator, previous, next, *member);\
-  return(*member!=NULL);\
- }\
- int sglib_##type##_is_member(type *list, type *elem) {\
-   int result;\
-   SGLIB_DL_LIST_IS_MEMBER(type, list, elem, previous, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_find_member(type *list, type *elem) {\
-   type *result;\
-   SGLIB_DL_LIST_FIND_MEMBER(type, list, elem, comparator, previous, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_get_first(type *list) {\
-   type *result;\
-   SGLIB_DL_LIST_GET_FIRST(type, list, previous, next, result);\
-   return(result);\
- }\
- type *sglib_##type##_get_last(type *list) {\
-   type *result;\
-   SGLIB_DL_LIST_GET_LAST(type, list, previous, next, result);\
-   return(result);\
- }\
- void sglib_##type##_sort(type **list) {\
-   SGLIB_DL_LIST_SORT(type, *list, comparator, previous, next);\
- }\
- int sglib_##type##_len(type *list) {\
-   int res;\
-   SGLIB_DL_LIST_LEN(type, list, previous, next, res);\
-   return(res);\
- }\
- void sglib_##type##_reverse(type **list) {\
-   SGLIB_DL_LIST_REVERSE(type, *list, previous, next);\
- }\
- \
- type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *list, int (*subcomparator)(type *, type *), type *equalto) {\
-   it->subcomparator = subcomparator;\
-   it->equalto = equalto;\
-   it->prevelem = list;\
-   it->nextelem = list;\
-   if (list != NULL) it->nextelem = list->next;\
-   return(sglib_##type##_it_next(it));\
- }\
- type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *list) {\
-   return(sglib_##type##_it_init_on_equal(it, list, NULL, NULL));\
- }\
- type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-   return(it->currentelem);\
- }\
- type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-   type *ce, *eq;\
-   int  (*scp)(type *, type *);\
-   ce = it->prevelem;\
-   it->prevelem = NULL;\
-   if (it->subcomparator != NULL) {\
-	 eq = it->equalto; \
-     scp = it->subcomparator;\
-     while (ce!=NULL && scp(eq, ce)!=0) ce = ce->previous;\
-   }\
-   if (ce != NULL) {\
-     it->prevelem = ce->previous;\
-   } else {\
-     ce = it->nextelem;\
-     it->nextelem = NULL;\
-     if (it->subcomparator != NULL) {\
-	   eq = it->equalto; \
-       scp = it->subcomparator;\
-       while (ce!=NULL && scp(ce, eq)!=0) ce = ce->next;\
-     }\
-     if (ce != NULL) it->nextelem = ce->next;\
-   }\
-   it->currentelem = ce;\
-   return(ce);\
- }
-
-
-/* --------------------------------- red-black trees (level 1) -------------------------------- */
-
-/*
-
-This  implementation requires  pointers  to left  and  right sons  (no
-parent  pointer  is needed)  and  one  bit  of additional  information
-storing the color of  the node. The implementation follows discrepancy
-fixing rules from:
-http://www.cis.ohio-state.edu/~gurari/course/cis680/cis680Ch11.html
-
-*/
-
-#define SGLIB___RBTREE_FIX_INSERTION_DISCREPANCY(type, tree, leftt, rightt, bits, RED, BLACK) {\
-  type *t, *tl, *a, *b, *c, *ar, *bl, *br, *cl, *cr;\
-  t = *tree;\
-  tl = t->leftt;\
-  if (t->rightt!=NULL && SGLIB___GET_VALUE(t->rightt->bits)==RED) {\
-    if (SGLIB___GET_VALUE(tl->bits)==RED) {\
-      if ((tl->leftt!=NULL && SGLIB___GET_VALUE(tl->leftt->bits)==RED) \
-          || (tl->rightt!=NULL && SGLIB___GET_VALUE(tl->rightt->bits)==RED)) {\
-        SGLIB___SET_VALUE(t->leftt->bits,BLACK);\
-        SGLIB___SET_VALUE(t->rightt->bits,BLACK);\
-        SGLIB___SET_VALUE(t->bits,RED);\
-      }\
-    }\
-  } else {\
-    if (SGLIB___GET_VALUE(tl->bits)==RED) {\
-      if (tl->leftt!=NULL && SGLIB___GET_VALUE(tl->leftt->bits)==RED) {\
-        a = t; b = tl; c = tl->leftt;\
-        br = b->rightt;\
-        a->leftt = br;\
-        b->leftt = c; b->rightt = a;\
-        SGLIB___SET_VALUE(a->bits,RED);\
-        SGLIB___SET_VALUE(b->bits,BLACK);\
-        *tree = b;\
-      } else if (tl->rightt!=NULL && SGLIB___GET_VALUE(tl->rightt->bits)==RED) {\
-        a = t; b = tl; ar=a->rightt;\
-        bl=b->leftt; c=b->rightt;\
-        cl=c->leftt; cr=c->rightt;\
-        b->rightt = cl;\
-        a->leftt = cr;\
-        c->leftt = b;\
-        c->rightt = a;\
-        SGLIB___SET_VALUE(c->bits,BLACK);\
-        SGLIB___SET_VALUE(a->bits,RED);\
-        *tree = c;\
-      }\
-    }\
-  }\
-}
-
-#define SGLIB___RBTREE_FIX_DELETION_DISCREPANCY(type, tree, leftt, rightt, bits, RED, BLACK, res) {\
-  type  *t, *a, *b, *c, *d, *ar, *bl, *br, *cl, *cr, *dl, *dr;\
-  t = a = *tree;\
-  assert(t!=NULL);\
-  ar = a->rightt;\
-  b = t->leftt;\
-  if (b==NULL) {\
-    assert(SGLIB___GET_VALUE(t->bits)==RED);\
-    SGLIB___SET_VALUE(t->bits,BLACK);\
-    res = 0;\
-  } else {\
-    bl = b->leftt;\
-    br = b->rightt;\
-    if (SGLIB___GET_VALUE(b->bits)==RED) {\
-      if (br==NULL) {\
-        *tree = b;\
-        SGLIB___SET_VALUE(b->bits,BLACK);\
-        b->rightt = a;\
-        a->leftt = br;\
-        res = 0;\
-      } else {\
-        c = br;\
-        assert(c!=NULL && SGLIB___GET_VALUE(c->bits)==BLACK);\
-        cl = c->leftt;\
-        cr = c->rightt;\
-        if ((cl==NULL||SGLIB___GET_VALUE(cl->bits)==BLACK) && (cr==NULL||SGLIB___GET_VALUE(cr->bits)==BLACK)) {\
-          *tree = b;\
-          b->rightt = a;\
-          SGLIB___SET_VALUE(b->bits,BLACK);\
-          a->leftt = c;\
-          SGLIB___SET_VALUE(c->bits,RED);\
-          res = 0;\
-        } else if (cl!=NULL && SGLIB___GET_VALUE(cl->bits)==RED) {\
-          if (cr!=NULL && SGLIB___GET_VALUE(cr->bits)==RED) {\
-            d = cr;\
-            dl = d->leftt;\
-            dr = d->rightt;\
-            *tree = d;\
-            SGLIB___SET_VALUE(d->bits,BLACK);\
-            d->leftt = b;\
-            c->rightt = dl;\
-            d->rightt = a;\
-            a->leftt = dr;\
-            res = 0;\
-          } else {\
-            *tree = c;\
-            c->leftt = b;\
-            c->rightt = a;\
-            b->leftt = bl;\
-            b->rightt = cl;\
-            a->leftt = cr;\
-            SGLIB___SET_VALUE(cl->bits,BLACK);\
-            res = 0;\
-          }\
-        } else if (cr!=NULL && SGLIB___GET_VALUE(cr->bits)==RED) {\
-          assert(cl==NULL || SGLIB___GET_VALUE(cl->bits)==BLACK);\
-          d = cr;\
-          dl = d->leftt;\
-          dr = d->rightt;\
-          *tree = d;\
-          SGLIB___SET_VALUE(d->bits,BLACK);\
-          d->leftt = b;\
-          c->rightt = dl;\
-          d->rightt = a;\
-          a->leftt = dr;\
-          res = 0;\
-        } else {\
-          assert(0);\
-          res = 0;\
-        }\
-      }\
-    } else {\
-      if ((bl==NULL || SGLIB___GET_VALUE(bl->bits)==BLACK) && (br==NULL || SGLIB___GET_VALUE(br->bits)==BLACK)) {\
-        res = (SGLIB___GET_VALUE(a->bits)==BLACK);\
-        SGLIB___SET_VALUE(a->bits,BLACK);\
-        SGLIB___SET_VALUE(b->bits,RED);\
-      } else if (bl!=NULL && SGLIB___GET_VALUE(bl->bits)==RED) {\
-        if (br==NULL || SGLIB___GET_VALUE(br->bits)==BLACK) {\
-          *tree = b;\
-          SGLIB___SET_VALUE(b->bits,SGLIB___GET_VALUE(a->bits));\
-          SGLIB___SET_VALUE(a->bits,BLACK);\
-          b->rightt = a;\
-          a->leftt = br;\
-          SGLIB___SET_VALUE(bl->bits,BLACK);\
-          res = 0;\
-        } else {\
-          assert(bl!=NULL);\
-          assert(br!=NULL);\
-          assert(SGLIB___GET_VALUE(bl->bits)==RED);\
-          assert(SGLIB___GET_VALUE(br->bits)==RED);\
-          c = br;\
-          cl = c->leftt;\
-          cr = c->rightt;\
-          *tree = c;\
-          SGLIB___SET_VALUE(c->bits,SGLIB___GET_VALUE(a->bits));\
-          SGLIB___SET_VALUE(a->bits,BLACK);\
-          c->leftt = b;\
-          c->rightt = a;\
-          b->rightt = cl;\
-          a->leftt = cr;\
-          res = 0;\
-        }\
-      } else {\
-        assert(br!=NULL && SGLIB___GET_VALUE(br->bits)==RED);\
-        c = br;\
-        cl = c->leftt;\
-        cr = c->rightt;\
-        *tree = c;\
-        SGLIB___SET_VALUE(c->bits,SGLIB___GET_VALUE(a->bits));\
-        SGLIB___SET_VALUE(a->bits,BLACK);\
-        c->leftt = b;\
-        c->rightt = a;\
-        b->rightt = cl;\
-        a->leftt = cr;\
-        res = 0;\
-      }\
-    }\
-  }\
-}
-
-
-#define SGLIB_DEFINE_RBTREE_FUNCTIONS_GENERAL(type, left, right, bits, comparator, RED, BLACK) \
-static void sglib___##type##_fix_left_insertion_discrepancy(type **tree) {\
-  SGLIB___RBTREE_FIX_INSERTION_DISCREPANCY(type, tree, left, right, bits, RED, BLACK);\
-}\
-\
-static void sglib___##type##_fix_right_insertion_discrepancy(type **tree) {\
-  SGLIB___RBTREE_FIX_INSERTION_DISCREPANCY(type, tree, right, left, bits, RED, BLACK);\
-}\
-\
-static int sglib___##type##_fix_left_deletion_discrepancy(type **tree) {\
-  int       res;\
-  SGLIB___RBTREE_FIX_DELETION_DISCREPANCY(type, tree, right, left, bits, RED, BLACK, res);\
-  return(res);\
-}\
-\
-static int sglib___##type##_fix_right_deletion_discrepancy(type **tree) {\
-  int       res;\
-  SGLIB___RBTREE_FIX_DELETION_DISCREPANCY(type, tree, left, right, bits, RED, BLACK, res);\
-  return(res);\
-}\
-\
-static void sglib___##type##_add_recursive(type **tree, type *elem) {\
-  int cmp;\
-  type *t;\
-  t = *tree;\
-  if (t == NULL) {\
-    SGLIB___SET_VALUE(elem->bits,RED);\
-    *tree =elem;\
-  } else {\
-    cmp = comparator(elem, t);\
-    if (cmp < 0 || (cmp==0 && elem<t)) {\
-      sglib___##type##_add_recursive(&t->left, elem);\
-      if (SGLIB___GET_VALUE(t->bits)==BLACK) sglib___##type##_fix_left_insertion_discrepancy(tree);\
-    } else {\
-      sglib___##type##_add_recursive(&t->right, elem);\
-      if (SGLIB___GET_VALUE(t->bits)==BLACK) sglib___##type##_fix_right_insertion_discrepancy(tree);\
-    }\
-  }\
-}\
-\
-static int sglib___##type##_delete_rightmost_leaf(type **tree, type **theLeaf) {\
-  type  *t;\
-  int       res, deepDecreased;\
-  t = *tree;\
-  res = 0;\
-  assert(t!=NULL);\
-  if (t->right == NULL) {\
-    *theLeaf = t;\
-    if (t->left!=NULL) {\
-      if (SGLIB___GET_VALUE(t->bits)==BLACK && SGLIB___GET_VALUE(t->left->bits)==BLACK) res = 1;\
-      SGLIB___SET_VALUE(t->left->bits,BLACK);\
-      *tree = t->left;\
-    } else {\
-      *tree = NULL;\
-      res = (SGLIB___GET_VALUE(t->bits)==BLACK);\
-    }\
-  } else {\
-    deepDecreased = sglib___##type##_delete_rightmost_leaf(&t->right, theLeaf);\
-    if (deepDecreased) res = sglib___##type##_fix_right_deletion_discrepancy(tree);\
-  }\
-  return(res);\
-}\
-\
-int sglib___##type##_delete_recursive(type **tree, type *elem) {\
-  type  *t, *theLeaf;\
-  int       cmp, res, deepDecreased;\
-  t = *tree;\
-  res = 0;\
-  if (t==NULL) {\
-    assert(0 && "The element to delete not found in the tree,  use 'delete_if_member'"!=NULL);\
-  } else {\
-    cmp = comparator(elem, t);\
-    if (cmp < 0 || (cmp==0 && elem<t)) {\
-      deepDecreased = sglib___##type##_delete_recursive(&t->left, elem);\
-      if (deepDecreased) {\
-        res = sglib___##type##_fix_left_deletion_discrepancy(tree);\
-      }\
-    } else if (cmp > 0  || (cmp==0 && elem>t)) {\
-      deepDecreased = sglib___##type##_delete_recursive(&t->right, elem);\
-      if (deepDecreased) {\
-        res = sglib___##type##_fix_right_deletion_discrepancy(tree);\
-      }\
-    } else {\
-      assert(elem==t && "Deleting an element which is non member of the tree, use 'delete_if_member'"!=NULL);\
-      if (t->left == NULL) {\
-        if (t->right == NULL) {\
-          /* a leaf, delete, it; */\
-          *tree = NULL;\
-          res = (SGLIB___GET_VALUE(t->bits)==BLACK);\
-        } else {\
-          if (SGLIB___GET_VALUE(t->bits)==0 && SGLIB___GET_VALUE(t->right->bits)==0) res = 1;\
-          SGLIB___SET_VALUE(t->right->bits,BLACK);\
-          *tree = t->right;\
-        }\
-      } else {\
-        /* propagate deletion until righmost leaf of left subtree */\
-        deepDecreased = sglib___##type##_delete_rightmost_leaf(&t->left, &theLeaf);\
-        theLeaf->left = t->left;\
-        theLeaf->right = t->right;\
-        SGLIB___SET_VALUE(theLeaf->bits,SGLIB___GET_VALUE(t->bits));\
-        *tree = theLeaf;\
-        if (deepDecreased) res = sglib___##type##_fix_left_deletion_discrepancy(tree);\
-      }\
-    }\
-  }\
-  return(res);\
-}\
-\
-void sglib_##type##_add(type **tree, type *elem) {\
-  elem->left = elem->right = NULL;\
-  sglib___##type##_add_recursive(tree, elem);\
-  SGLIB___SET_VALUE((*tree)->bits,BLACK);\
-}\
-\
-void sglib_##type##_delete(type **tree, type *elem) {\
-  sglib___##type##_delete_recursive(tree, elem);\
-  if (*tree!=NULL) SGLIB___SET_VALUE((*tree)->bits,BLACK);\
-}\
-\
-type *sglib_##type##_find_member(type *t, type *elem) {\
-  type *res;\
-  SGLIB___BIN_TREE_FIND_MEMBER(type, t, elem, left, right, comparator, res);\
-  return(res);\
-}\
-\
-int sglib_##type##_is_member(type *t, type *elem) {\
-  int       cmp;\
-  while (t!=NULL) {\
-    cmp = comparator(elem, t);\
-    if (cmp < 0 || (cmp==0 && elem<t)) {\
-      t = t->left;\
-    } else if (cmp > 0 || (cmp==0 && elem>t)) {\
-      t = t->right;\
-    } else {\
-      assert(t == elem);\
-      return(1);\
-    }\
-  }\
-  return(0);\
-}\
-\
-int sglib_##type##_delete_if_member(type **tree, type *elem, type **memb) {\
-  if ((*memb=sglib_##type##_find_member(*tree, elem))!=NULL) {\
-    sglib_##type##_delete(tree, *memb);\
-    return(1);\
-  } else {\
-    return(0);\
-  }\
-}\
-int sglib_##type##_add_if_not_member(type **tree, type *elem, type **memb) {\
-  if ((*memb=sglib_##type##_find_member(*tree, elem))==NULL) {\
-    sglib_##type##_add(tree, elem);\
-    return(1);\
-  } else {\
-    return(0);\
-  }\
-}\
-int sglib_##type##_len(type *t) {\
-    int   n;\
-    type  *e;\
-    n = 0;\
-    SGLIB_BIN_TREE_MAP_ON_ELEMENTS(type, t, e, left, right, n++);\
-    return(n);\
-}\
-\
-void sglib__##type##_it_compute_current_elem(struct sglib_##type##_iterator *it) {\
-    int   i,j,cmp;\
-    type  *s, *eqt;\
-    int   (*subcomparator)(type *, type *);\
-    eqt = it->equalto;\
-    subcomparator = it->subcomparator;\
-    it->currentelem = NULL;\
-    while(it->pathi > 0 && it->currentelem==NULL) {\
-        i = it->pathi-1;\
-        if (i >= 0) {\
-            if (it->pass[i] >= 2) {\
-                /* goto up */\
-                it->pathi --;\
-            } else {\
-              if (it->pass[i] == 0) {\
-                  /* goto left */\
-                s = it->path[i]->left;\
-              } else {\
-                /* goto right */\
-                s = it->path[i]->right;\
-              }\
-              if (eqt != NULL) {\
-                if (subcomparator == NULL) {\
-                  SGLIB___BIN_TREE_FIND_MEMBER(type, s, eqt, left, right, comparator, s);\
-                } else {\
-                  SGLIB___BIN_TREE_FIND_MEMBER(type, s, eqt, left, right, subcomparator, s);\
-                }\
-              }\
-              if  (s != NULL) {\
-                j = i+1;\
-                it->path[j] = s;\
-                it->pass[j] = 0;\
-                it->pathi ++;\
-              }\
-              it->pass[i] ++;\
-            }\
-        }\
-        if (it->pathi>0 && it->order == it->pass[it->pathi-1]) {\
-            it->currentelem = it->path[it->pathi-1];\
-        }\
-    }\
-}\
-type *sglib__##type##_it_init(struct sglib_##type##_iterator *it, type *tree, int order, int (*subcomparator)(type *, type *), type *equalto) {\
-    type *t;\
-    assert(it!=NULL);\
-    it->order = order;\
-    it->equalto = equalto;\
-    it->subcomparator = subcomparator;\
-    if (equalto == NULL) {  \
-        t = tree;\
-    } else {\
-        if (subcomparator == NULL) {\
-          SGLIB___BIN_TREE_FIND_MEMBER(type, tree, equalto, left, right, comparator, t);\
-        } else {\
-          SGLIB___BIN_TREE_FIND_MEMBER(type, tree, equalto, left, right, subcomparator, t);\
-        }\
-    }\
-    if (t == NULL) {\
-        it->pathi = 0;\
-        it->currentelem = NULL;\
-    } else {\
-        it->pathi = 1;\
-        it->pass[0] = 0;\
-        it->path[0] = t;\
-        if (order == 0) {\
-            it->currentelem = t;\
-        } else {\
-            sglib__##type##_it_compute_current_elem(it);\
-        }\
-    }\
-    return(it->currentelem);\
-}\
-type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 2, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_preorder(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 0, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_inorder(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 1, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_postorder(struct sglib_##type##_iterator *it, type *tree) {\
-  return(sglib__##type##_it_init(it, tree, 2, NULL, NULL));\
-}\
-type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *tree, int (*subcomparator)(type *, type *), type *equalto) {\
-  return(sglib__##type##_it_init(it, tree, 1, subcomparator, equalto));\
-}\
-type *sglib_##type##_it_current(struct sglib_##type##_iterator *it) {\
-  return(it->currentelem);\
-}\
-type *sglib_##type##_it_next(struct sglib_##type##_iterator *it) {\
-  sglib__##type##_it_compute_current_elem(it);\
-  return(it->currentelem);\
-}\
-\
-static void sglib___##type##_consistency_check_recursive(type *t, int *pathdeep, int cdeep) {\
-  if (t==NULL) {\
-    if (*pathdeep < 0) *pathdeep = cdeep;\
-    else assert(*pathdeep == cdeep);\
-  } else {\
-    if (t->left!=NULL) assert(comparator(t->left, t) <= 0);\
-    if (t->right!=NULL) assert(comparator(t, t->right) <= 0);\
-    if (SGLIB___GET_VALUE(t->bits) == RED) {\
-      assert(t->left == NULL || SGLIB___GET_VALUE(t->left->bits)==BLACK);\
-      assert(t->right == NULL || SGLIB___GET_VALUE(t->right->bits)==BLACK);\
-      sglib___##type##_consistency_check_recursive(t->left, pathdeep, cdeep);\
-      sglib___##type##_consistency_check_recursive(t->right, pathdeep, cdeep);\
-    } else {\
-      sglib___##type##_consistency_check_recursive(t->left, pathdeep, cdeep+1);\
-      sglib___##type##_consistency_check_recursive(t->right, pathdeep, cdeep+1);\
-    }\
-  }\
-}\
-\
-void sglib___##type##_consistency_check(type *t) {\
-  int pathDeep;\
-  assert(t==NULL || SGLIB___GET_VALUE(t->bits) == BLACK);\
-  pathDeep = -1;\
-  sglib___##type##_consistency_check_recursive(t, &pathDeep, 0);\
-}
-
-
-#define SGLIB_DEFINE_RBTREE_PROTOTYPES(type, left, right, colorbit, comparator) \
- struct sglib_##type##_iterator {\
-    type *currentelem;\
-    char pass[SGLIB_MAX_TREE_DEEP];\
-    type *path[SGLIB_MAX_TREE_DEEP];\
-    short int pathi;\
-    short int order;\
-    type *equalto;\
-    int (*subcomparator)(type *, type *);\
- };\
- extern void sglib___##type##_consistency_check(type *t); \
- extern void sglib_##type##_add(type **tree, type *elem); \
- extern int sglib_##type##_add_if_not_member(type **tree, type *elem, type **memb); \
- extern void sglib_##type##_delete(type **tree, type *elem); \
- extern int sglib_##type##_delete_if_member(type **tree, type *elem, type **memb); \
- extern int sglib_##type##_is_member(type *t, type *elem); \
- extern type *sglib_##type##_find_member(type *t, type *elem); \
- extern int sglib_##type##_len(type *t); \
- extern type *sglib_##type##_it_init(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_preorder(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_inorder(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_postorder(struct sglib_##type##_iterator *it, type *tree); \
- extern type *sglib_##type##_it_init_on_equal(struct sglib_##type##_iterator *it, type *tree, int (*subcomparator)(type *, type *), type *equalto); \
- extern type *sglib_##type##_it_current(struct sglib_##type##_iterator *it); \
- extern type *sglib_##type##_it_next(struct sglib_##type##_iterator *it); \
-
-
-#define SGLIB_DEFINE_RBTREE_FUNCTIONS(type, left, right, colorbit, comparator) \
-  SGLIB_DEFINE_RBTREE_FUNCTIONS_GENERAL(type, left, right, colorbit, comparator, 1, 0)
-
-
-
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-/* -                          SUPPLEMENTARY DEFINITIONS                       - */
-/* ---------------------------------------------------------------------------- */
-/* ---------------------------------------------------------------------------- */
-
-
-#define SGLIB___GET_VALUE(x) (x)
-#define SGLIB___SET_VALUE(x, value) {(x) = (value);}
-#define SGLIB_ARRAY_ELEMENTS_EXCHANGER(type, a, i, j) {type _sgl_aee_tmp_; _sgl_aee_tmp_=(a)[(i)]; (a)[(i)]=(a)[(j)]; (a)[(j)]= _sgl_aee_tmp_;}
-
-
-#define SGLIB_NUMERIC_COMPARATOR(x, y) ((int)((x) - (y)))
-#define SGLIB_REVERSE_NUMERIC_COMPARATOR(x, y) ((int)((y) - (x)))
-
-#ifndef SGLIB_MAX_TREE_DEEP
-#define SGLIB_MAX_TREE_DEEP 128
-#endif
-
-#ifndef SGLIB_HASH_TAB_SHIFT_CONSTANT
-#define SGLIB_HASH_TAB_SHIFT_CONSTANT 16381   /* should be a prime */
-/* #define SGLIB_HASH_TAB_SHIFT_CONSTANT 536870912  for large tables */
-#endif
-
-#endif /* _SGLIB__h_ */
diff --git a/externals/frankenstein/test-chords_graph.pd b/externals/frankenstein/test-chords_graph.pd
deleted file mode 100644
index 639eac866..000000000
--- a/externals/frankenstein/test-chords_graph.pd
+++ /dev/null
@@ -1,46 +0,0 @@
-#N canvas 241 61 710 346 12;
-#X msg 63 130 write test.graph;
-#X msg 93 158 read test.graph;
-#X obj 389 33 notein;
-#X obj 389 68 chord 59;
-#X msg 293 151 add \$1;
-#X obj 71 255 chords_graph;
-#X obj 293 123 symbol;
-#X obj 294 96 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 285 234 next 1;
-#X obj 366 165 symbol;
-#X obj 367 138 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 366 193 set \$1;
-#X msg 123 188 init 1;
-#X symbolatom 71 281 20 0 0 0 - - -;
-#X symbolatom 429 103 25 0 0 0 - - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 385 252 pd readme;
-#X connect 0 0 5 0;
-#X connect 1 0 5 0;
-#X connect 2 0 3 0;
-#X connect 2 1 3 1;
-#X connect 3 2 6 1;
-#X connect 3 2 9 1;
-#X connect 3 2 14 0;
-#X connect 4 0 5 0;
-#X connect 5 0 13 0;
-#X connect 6 0 4 0;
-#X connect 7 0 6 0;
-#X connect 8 0 5 0;
-#X connect 9 0 11 0;
-#X connect 10 0 9 0;
-#X connect 11 0 5 0;
-#X connect 12 0 5 0;
diff --git a/externals/frankenstein/test-harmonizer.pd b/externals/frankenstein/test-harmonizer.pd
deleted file mode 100644
index 1818262ff..000000000
--- a/externals/frankenstein/test-harmonizer.pd
+++ /dev/null
@@ -1,197 +0,0 @@
-#N canvas 328 37 714 655 12;
-#X symbolatom 179 191 20 0 0 0 - - -;
-#N canvas 39 349 531 328 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 496 48 pd readme;
-#X obj 121 316 harmonizer;
-#X msg 52 273 current \$1;
-#X msg 158 270 target \$1;
-#X obj 52 249 symbol;
-#X obj 52 229 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 248 symbol;
-#X obj 289 248 int 36;
-#X obj 355 249 int 60;
-#X obj 426 247 int 67;
-#X obj 494 246 int 76;
-#X obj 566 249 int 84;
-#X obj 335 276 pack f f f f f;
-#X obj 358 220 t b b b b b;
-#X obj 246 356 unpack f f f f f;
-#X obj 135 105 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 135 133 set \$1;
-#N canvas 0 0 706 416 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 326 134 pd midi;
-#N canvas 0 0 454 304 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 115 77 write test.graph;
-#X msg 145 105 read test.graph;
-#X msg 175 135 init 1;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 243 133 pd fileIO;
-#X obj 100 81 t b b;
-#X obj 157 215 t b a;
-#X obj 28 391 bang;
-#X symbolatom 256 35 20 0 0 0 - - -;
-#X obj 256 11 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 203 407 mtof;
-#X obj 203 431 sig~;
-#X obj 204 457 osc~ 440;
-#X obj 280 405 mtof;
-#X obj 280 429 sig~;
-#X obj 281 455 osc~ 440;
-#X obj 338 509 mtof;
-#X obj 338 533 sig~;
-#X obj 339 559 osc~ 440;
-#X obj 375 403 mtof;
-#X obj 375 427 sig~;
-#X obj 376 453 osc~ 440;
-#X obj 425 509 mtof;
-#X obj 424 532 sig~;
-#X obj 425 558 osc~ 440;
-#X obj 186 491 throw~ audio;
-#X obj 284 482 throw~ audio;
-#X obj 391 483 throw~ audio;
-#X obj 337 586 throw~ audio;
-#X obj 439 588 throw~ audio;
-#X obj 99 533 catch~ audio;
-#X obj 99 585 dac~;
-#X obj 99 558 *~ 0.2;
-#X obj 109 418 print;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X obj 83 169 chords_memory test.graph;
-#X obj 471 355 voicing_analyzer;
-#X floatatom 470 390 5 0 0 0 - - -;
-#X floatatom 506 411 5 0 0 0 - - -;
-#X floatatom 539 393 5 0 0 0 - - -;
-#X floatatom 587 412 5 0 0 0 - - -;
-#X msg 461 152 i_like_parallelism \$1;
-#X obj 463 132 hsl 128 15 -1 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 6500 1;
-#X obj 436 85 hsl 128 15 0 8 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 11700 1;
-#X msg 434 106 wideness \$1;
-#X obj 270 76 hsl 128 15 -1 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 268 96 small_intervals \$1;
-#X connect 2 0 15 0;
-#X connect 2 0 49 0;
-#X connect 2 0 55 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X connect 6 0 5 0;
-#X connect 7 0 4 0;
-#X connect 8 0 13 0;
-#X connect 9 0 13 1;
-#X connect 10 0 13 2;
-#X connect 11 0 13 3;
-#X connect 12 0 13 4;
-#X connect 13 0 2 0;
-#X connect 14 0 8 0;
-#X connect 14 1 9 0;
-#X connect 14 2 10 0;
-#X connect 14 3 11 0;
-#X connect 14 4 12 0;
-#X connect 15 0 8 1;
-#X connect 15 0 23 0;
-#X connect 15 0 26 0;
-#X connect 15 1 9 1;
-#X connect 15 1 29 0;
-#X connect 15 2 10 1;
-#X connect 15 2 32 0;
-#X connect 15 3 11 1;
-#X connect 15 3 35 0;
-#X connect 15 4 12 1;
-#X connect 15 4 38 0;
-#X connect 16 0 18 0;
-#X connect 17 0 21 0;
-#X connect 18 0 54 0;
-#X connect 19 0 54 0;
-#X connect 20 0 54 0;
-#X connect 21 0 50 0;
-#X connect 21 1 16 0;
-#X connect 22 0 14 0;
-#X connect 22 1 7 0;
-#X connect 23 0 5 0;
-#X connect 24 0 5 1;
-#X connect 24 0 16 0;
-#X connect 24 0 7 0;
-#X connect 25 0 24 0;
-#X connect 26 0 27 0;
-#X connect 27 0 28 0;
-#X connect 28 0 41 0;
-#X connect 29 0 30 0;
-#X connect 30 0 31 0;
-#X connect 31 0 42 0;
-#X connect 32 0 33 0;
-#X connect 33 0 34 0;
-#X connect 34 0 44 0;
-#X connect 35 0 36 0;
-#X connect 36 0 37 0;
-#X connect 37 0 43 0;
-#X connect 38 0 39 0;
-#X connect 39 0 40 0;
-#X connect 40 0 45 0;
-#X connect 46 0 48 0;
-#X connect 48 0 47 0;
-#X connect 48 0 47 1;
-#X connect 50 0 51 0;
-#X connect 51 0 54 0;
-#X connect 52 0 50 1;
-#X connect 52 0 53 0;
-#X connect 54 0 0 0;
-#X connect 54 0 5 1;
-#X connect 54 0 16 1;
-#X connect 54 0 22 0;
-#X connect 55 0 56 0;
-#X connect 55 1 57 0;
-#X connect 55 2 58 0;
-#X connect 55 3 59 0;
-#X connect 60 0 2 0;
-#X connect 61 0 60 0;
-#X connect 62 0 63 0;
-#X connect 63 0 2 0;
-#X connect 64 0 65 0;
-#X connect 65 0 2 0;
diff --git a/externals/frankenstein/test-harmonizer2.pd b/externals/frankenstein/test-harmonizer2.pd
deleted file mode 100644
index 099e12738..000000000
--- a/externals/frankenstein/test-harmonizer2.pd
+++ /dev/null
@@ -1,585 +0,0 @@
-#N canvas 194 23 947 709 10;
-#X symbolatom 157 205 18 0 0 2 next_chord - -;
-#N canvas 39 349 535 332 readme 0;
-#X text 59 31 howto populate the graph: play the chord \, when the
-output of [chord] is ok bang the "add" message. bang it each time you
-change chord \, it will store the transitions;
-#X text 56 120 howto ask for the next chord: play the chord \, bang
-the "set" message \, this will set the current chord without adding
-it to the graph's memory \, now bang the next 1 message. this chord_graph
-will respond with the chord you played most of the times after the
-current chord. you can send "next x" where x is from 0 to 1 \, 0 =
-max novelty \, 1= min novelty;
-#X text 56 259 you can save graph state sending the write message;
-#X restore 607 47 pd readme;
-#X msg 52 286 current \$1;
-#X msg 158 283 target \$1;
-#X obj 52 262 symbol;
-#X obj 52 242 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 157 261 symbol;
-#X obj 289 261 int 36;
-#X obj 355 262 int 60;
-#X obj 426 260 int 67;
-#X obj 494 259 int 76;
-#X obj 566 262 int 84;
-#X obj 335 289 pack f f f f f;
-#X obj 358 233 t b b b b b;
-#X obj 264 329 unpack f f f f f;
-#X obj 127 108 symbol;
-#X obj 98 43 bng 15 250 50 0 empty empty change_chord 0 -6 0 8 -262144
--1 -1;
-#X msg 127 132 set \$1;
-#N canvas 0 22 714 424 midi 0;
-#X obj 141 253 outlet;
-#X obj 271 31 notein;
-#X obj 271 66 chord 59;
-#X msg 175 149 add \$1;
-#X obj 175 121 symbol;
-#X obj 176 94 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 248 163 symbol;
-#X obj 249 136 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 248 191 set \$1;
-#X symbolatom 311 101 25 0 0 0 - - -;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 2 4 1;
-#X connect 2 2 6 1;
-#X connect 2 2 9 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 0;
-#X connect 8 0 0 0;
-#X restore 512 135 pd midi;
-#N canvas 0 22 462 312 fileIO 0;
-#X obj 143 225 outlet;
-#X msg 115 77 write test.graph;
-#X msg 145 105 read test.graph;
-#X msg 175 135 init 1;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X restore 429 134 pd fileIO;
-#X obj 100 73 t b b;
-#X obj 157 228 t b a;
-#X obj 63 359 bang;
-#X obj 221 380 mtof;
-#X obj 270 379 mtof;
-#X obj 355 383 mtof;
-#X obj 67 504 print;
-#X obj 74 111 f 1;
-#X msg 59 135 next \$1;
-#X obj 63 70 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -262144 -1
--1 0 1;
-#X floatatom 32 112 5 0 0 0 - - -;
-#X obj 527 400 loadbang;
-#X obj 313 382 mtof;
-#X obj 399 384 mtof;
-#X obj 462 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 462 41 metro 7000;
-#X obj 13 32 r novelty;
-#X obj 599 121 int 0;
-#X obj 646 120 + 1;
-#X obj 600 171 tabread tab-novelty;
-#X obj 600 194 s novelty;
-#X obj 685 119 table tab-novelty;
-#X obj 600 147 % 10;
-#X obj 462 63 t b b;
-#X msg 489 365 \; tab-novelty 0 1 1 0.8 0.7 0.3 0.5 0.9 0.1 0 0.2;
-#X obj 203 97 symbol;
-#X msg 203 125 tonality \$1;
-#X obj 203 73 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X obj 19 160 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X symbolatom 305 204 15 0 0 2 tonality - -;
-#X obj 307 94 symbol;
-#X obj 307 70 bng 15 250 50 0 empty empty change 0 -6 0 8 -262144 -1
--1;
-#X msg 307 122 modulation \$1;
-#X obj 445 189 print sequence;
-#X msg 235 15 search 9 1 5 0.9;
-#X msg 262 407 i9 0 10 \$1 80 0.5;
-#X msg 502 440 i25 0 17000 0.98 0.8 20000;
-#X msg 500 464 i10 0 17000 10 30;
-#X msg 500 487 i30 0 17000 2 30;
-#X obj 172 422 print;
-#X obj 265 445 s csound;
-#N canvas 0 25 807 561 bay 0;
-#X obj 12 83 loadbang;
-#N canvas 0 22 759 336 ascoltaHits 0;
-#X obj 161 223 outlet;
-#X obj 146 33 r 1-hit;
-#X obj 147 54 bang;
-#X msg 147 83 60;
-#X obj 198 57 bang;
-#X obj 197 36 r 2-hit;
-#X msg 198 86 72;
-#X obj 254 57 bang;
-#X msg 254 86 48;
-#X obj 253 36 r 3-hit;
-#X obj 303 60 bang;
-#X msg 303 89 67;
-#X obj 303 39 r 4-hit;
-#X obj 359 60 bang;
-#X obj 422 60 bang;
-#X obj 422 39 r 6-hit;
-#X obj 359 39 r 5-hit;
-#X msg 359 89 76;
-#X msg 422 89 36;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 0 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 7 0 8 0;
-#X connect 8 0 0 0;
-#X connect 9 0 7 0;
-#X connect 10 0 11 0;
-#X connect 11 0 0 0;
-#X connect 12 0 10 0;
-#X connect 13 0 17 0;
-#X connect 14 0 18 0;
-#X connect 15 0 14 0;
-#X connect 16 0 13 0;
-#X connect 17 0 0 0;
-#X connect 18 0 0 0;
-#X restore 428 102 pd ascoltaHits;
-#X obj 430 164 mtof;
-#N canvas 0 22 462 312 chords 0;
-#X obj 132 43 inlet;
-#X obj 131 240 outlet;
-#X obj 262 31 loadbang;
-#X obj 260 74 metro 20000;
-#X obj 257 115 int 0;
-#X obj 303 117 + 1;
-#X obj 257 136 % 2;
-#X obj 246 162 select 0 1;
-#X obj 131 214 + 0;
-#X msg 243 182 0;
-#X msg 270 184 7;
-#X msg 260 54 1;
-#X connect 0 0 8 0;
-#X connect 2 0 11 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 4 0 6 0;
-#X connect 5 0 4 1;
-#X connect 6 0 7 0;
-#X connect 7 0 9 0;
-#X connect 7 1 10 0;
-#X connect 8 0 1 0;
-#X connect 9 0 8 1;
-#X connect 10 0 8 1;
-#X connect 11 0 3 0;
-#X restore 430 131 pd chords;
-#N canvas 0 22 940 672 ascolta-valori 0;
-#X obj 135 554 outlet;
-#X obj 28 146 line;
-#X msg 27 123 \$1 100;
-#X msg 27 175 control amp1 \$1;
-#X obj 146 100 line;
-#X msg 145 77 \$1 100;
-#X obj 144 26 + 1;
-#X obj 143 51 / 2;
-#X obj 265 143 line;
-#X msg 264 119 \$1 100;
-#X obj 382 135 line;
-#X msg 381 112 \$1 100;
-#X obj 380 61 + 1;
-#X obj 379 86 / 2;
-#X msg 264 171 control amp2 \$1;
-#X obj 297 304 line;
-#X msg 296 281 \$1 100;
-#X obj 414 288 line;
-#X msg 413 265 \$1 100;
-#X obj 412 214 + 1;
-#X obj 411 239 / 2;
-#X obj 533 331 line;
-#X msg 532 307 \$1 100;
-#X obj 650 323 line;
-#X msg 649 300 \$1 100;
-#X obj 648 249 + 1;
-#X obj 647 274 / 2;
-#X msg 296 324 control amp3 \$1;
-#X msg 531 359 control amp4 \$1;
-#N canvas 0 22 678 338 graph16 0;
-#X array vol 100 float 3;
-#A 0 0.382146 0.444444 0.527258 0.5757 0.610071 0.636731 0.658514 0.676931
-0.692884 0.706956 0.719544 0.730931 0.741327 0.75089 0.759744 0.767987
-0.775698 0.782941 0.78977 0.796229 0.802357 0.808187 0.813745 0.819055
-0.82414 0.829017 0.833703 0.838212 0.842557 0.84675 0.8508 0.854718
-0.858511 0.862187 0.865754 0.869217 0.872583 0.875856 0.879043 0.882146
-0.885171 0.888121 0.891 0.893811 0.896558 0.899243 0.901869 0.904438
-0.906954 0.909417 0.911831 0.914197 0.916517 0.918792 0.921026 0.923218
-0.925371 0.927485 0.929563 0.931605 0.933613 0.935588 0.937531 0.939443
-0.941324 0.943177 0.945001 0.946797 0.948567 0.950311 0.952031 0.953725
-0.955396 0.957044 0.95867 0.960273 0.961856 0.963418 0.964959 0.966481
-0.967984 0.969468 0.970934 0.972382 0.973813 0.975227 0.976624 0.978006
-0.979371 0.980721 0.982056 0.983376 0.984682 0.985974 0.987252 0.988516
-0.989767 0.991005 0.99223 1.0615;
-#X coords 0 1 99 0 200 140 1;
-#X restore 532 24 graph;
-#X obj 26 101 tabread vol;
-#X obj 28 76 * 100;
-#X obj 265 97 tabread vol;
-#X obj 262 75 * 100;
-#X obj 28 48 clip 0 1;
-#X obj 262 40 clip 0 1;
-#X obj 307 264 tabread vol;
-#X obj 307 242 * 100;
-#X obj 308 222 clip 0 1;
-#X obj 534 284 tabread vol;
-#X obj 534 262 * 100;
-#X obj 535 242 clip 0 1;
-#X msg 149 129 control pos1 \$1;
-#X msg 385 164 control pos2 \$1;
-#X msg 417 317 control pos3 \$1;
-#X msg 653 352 control pos4 \$1;
-#X obj 434 493 line;
-#X msg 433 469 \$1 100;
-#X obj 551 485 line;
-#X msg 550 462 \$1 100;
-#X obj 549 411 + 1;
-#X obj 548 436 / 2;
-#X obj 435 446 tabread vol;
-#X obj 435 424 * 100;
-#X obj 436 404 clip 0 1;
-#X msg 432 521 control amp5 \$1;
-#X msg 553 514 control pos5 \$1;
-#X obj 28 13 r 1-velo;
-#X obj 145 6 r 1-x;
-#X obj 264 17 r 2-velo;
-#X obj 296 202 r 3-velo;
-#X obj 412 194 r 3-x;
-#X obj 528 216 r 4-velo;
-#X obj 649 229 r 4-x;
-#X obj 429 378 r 5-velo;
-#X obj 550 391 r 5-x;
-#X obj 382 40 r 2-x;
-#X obj 839 58 + 1;
-#X obj 761 97 log;
-#X obj 803 59 int 1;
-#X obj 759 119 / 4.65;
-#X obj 807 83 t f f;
-#X obj 785 33 metro 10;
-#X obj 785 14 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 763 183 tabwrite vol;
-#X msg 848 32 1;
-#X obj 758 141 + 0.8;
-#X obj 757 160 / 1.8;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 3 0 0 0;
-#X connect 4 0 42 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 5 0;
-#X connect 8 0 14 0;
-#X connect 9 0 8 0;
-#X connect 10 0 43 0;
-#X connect 11 0 10 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 0 0;
-#X connect 15 0 27 0;
-#X connect 16 0 15 0;
-#X connect 17 0 44 0;
-#X connect 18 0 17 0;
-#X connect 19 0 20 0;
-#X connect 20 0 18 0;
-#X connect 21 0 28 0;
-#X connect 22 0 21 0;
-#X connect 23 0 45 0;
-#X connect 24 0 23 0;
-#X connect 25 0 26 0;
-#X connect 26 0 24 0;
-#X connect 27 0 0 0;
-#X connect 28 0 0 0;
-#X connect 30 0 2 0;
-#X connect 31 0 30 0;
-#X connect 32 0 9 0;
-#X connect 33 0 32 0;
-#X connect 34 0 31 0;
-#X connect 35 0 33 0;
-#X connect 36 0 16 0;
-#X connect 37 0 36 0;
-#X connect 38 0 37 0;
-#X connect 39 0 22 0;
-#X connect 40 0 39 0;
-#X connect 41 0 40 0;
-#X connect 42 0 0 0;
-#X connect 43 0 0 0;
-#X connect 44 0 0 0;
-#X connect 45 0 0 0;
-#X connect 46 0 55 0;
-#X connect 47 0 46 0;
-#X connect 48 0 56 0;
-#X connect 49 0 48 0;
-#X connect 50 0 51 0;
-#X connect 51 0 49 0;
-#X connect 52 0 47 0;
-#X connect 53 0 52 0;
-#X connect 54 0 53 0;
-#X connect 55 0 0 0;
-#X connect 56 0 0 0;
-#X connect 57 0 34 0;
-#X connect 58 0 6 0;
-#X connect 59 0 35 0;
-#X connect 60 0 38 0;
-#X connect 61 0 19 0;
-#X connect 62 0 41 0;
-#X connect 63 0 25 0;
-#X connect 64 0 54 0;
-#X connect 65 0 50 0;
-#X connect 66 0 12 0;
-#X connect 67 0 69 1;
-#X connect 68 0 70 0;
-#X connect 69 0 67 0;
-#X connect 69 0 71 0;
-#X connect 70 0 76 0;
-#X connect 71 0 68 0;
-#X connect 71 1 74 1;
-#X connect 72 0 69 0;
-#X connect 73 0 72 0;
-#X connect 75 0 69 0;
-#X connect 76 0 77 0;
-#X connect 77 0 74 0;
-#X restore 592 84 pd ascolta-valori;
-#X obj 567 118 bay --------;
-#X obj 367 279 catch~ mainL;
-#X obj 491 281 catch~ mainR;
-#X obj 376 318 *~ 0.01;
-#X obj 467 319 *~ 0.01;
-#X obj 701 211 vsl 15 128 0 0.8 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 317 1;
-#X floatatom 700 346 5 0 0 0 - - -;
-#X obj 750 195 loadbang;
-#X msg 750 216 0.02;
-#X obj 265 365 csound~ 2 2;
-#X obj 332 137 r csound;
-#X msg 156 24 i9 0 8 400 90 0.3;
-#X msg 23 159 i30 0 17000 2 30;
-#X msg 23 136 i10 0 17000 10 30;
-#X msg 24 112 i25 0 17000 0.98 0.8 20000;
-#X msg 1 182 bang \; csound bin /usr/local/bin/csound \; csound orc
-bay.orc \; csound sco bay.sco \; csound csound -dm0 \; csound bang
-\; pd dsp 1;
-#X msg 267 58 i9 0 8 450 90 0.3;
-#X msg 293 20 i9 0 8 500 90 0.3;
-#X obj 255 392 /~ 32767;
-#X obj 324 391 /~ 32767;
-#N canvas 77 25 718 506 note---- 0;
-#X obj 95 284 outlet;
-#X obj 95 222 mtof;
-#X obj 202 211 mtof;
-#X obj 309 220 mtof;
-#X obj 412 221 mtof;
-#X obj 120 133 inlet;
-#X obj 195 140 inlet;
-#X obj 310 163 inlet;
-#X obj 414 170 inlet;
-#X obj 533 224 mtof;
-#X obj 535 173 inlet;
-#X obj 204 283 outlet;
-#X obj 303 284 outlet;
-#X obj 408 280 outlet;
-#X obj 539 274 outlet;
-#X connect 1 0 0 0;
-#X connect 2 0 11 0;
-#X connect 3 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 1 0;
-#X connect 6 0 2 0;
-#X connect 7 0 3 0;
-#X connect 8 0 4 0;
-#X connect 9 0 14 0;
-#X connect 10 0 9 0;
-#X restore 567 142 pd note----;
-#X obj 324 411 /~ 1.5;
-#X obj 255 412 /~ 1.5;
-#X obj 235 450 outlet~;
-#X obj 328 446 outlet~;
-#X msg 404 197 i9 0 14 \$1 90 0.3;
-#X obj 408 242 inlet~;
-#X obj 479 243 inlet~;
-#X connect 0 0 20 0;
-#X connect 0 0 17 0;
-#X connect 0 0 18 0;
-#X connect 0 0 19 0;
-#X connect 1 0 3 0;
-#X connect 2 0 30 0;
-#X connect 3 0 2 0;
-#X connect 5 0 25 0;
-#X connect 5 1 25 1;
-#X connect 5 2 25 2;
-#X connect 5 3 25 3;
-#X connect 5 4 25 4;
-#X connect 6 0 8 0;
-#X connect 7 0 9 0;
-#X connect 8 0 14 0;
-#X connect 9 0 14 1;
-#X connect 10 0 9 1;
-#X connect 10 0 8 1;
-#X connect 10 0 11 0;
-#X connect 12 0 13 0;
-#X connect 13 0 10 0;
-#X connect 14 0 23 0;
-#X connect 14 1 24 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 17 0 14 0;
-#X connect 18 0 14 0;
-#X connect 19 0 14 0;
-#X connect 21 0 14 0;
-#X connect 22 0 14 0;
-#X connect 23 0 27 0;
-#X connect 24 0 26 0;
-#X connect 25 0 30 0;
-#X connect 25 1 30 0;
-#X connect 25 2 30 0;
-#X connect 25 3 30 0;
-#X connect 25 4 30 0;
-#X connect 26 0 29 0;
-#X connect 27 0 28 0;
-#X connect 30 0 14 0;
-#X connect 31 0 8 0;
-#X connect 32 0 9 0;
-#X restore 195 544 pd bay;
-#X obj 242 683 dac~;
-#X obj 194 629 +~;
-#X obj 294 632 +~;
-#X obj 151 527 vsl 15 128 0.01 1 1 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8262 1;
-#X obj 186 599 *~ 0.5;
-#X obj 238 600 *~ 0.5;
-#X obj 87 563 loadbang;
-#X floatatom 149 660 5 0 0 0 - - -;
-#X obj 380 526 vsl 15 128 0.1 3 0 0 empty empty empty 0 -8 0 8 -262144
--1 -1 8321 1;
-#X floatatom 378 659 5 0 0 0 - - -;
-#X obj 217 653 *~ 1;
-#X obj 269 654 *~ 1;
-#X obj 311 574 loadbang;
-#X text 67 620 volume bay;
-#X msg 313 597 2;
-#X msg 104 594 0.2;
-#X obj 83 169 chords_memory test.graph;
-#X obj 91 411 print;
-#X msg 23 420 voices \$1;
-#X floatatom 23 399 5 0 0 0 - - -;
-#X obj 88 478 voicing_analyzer 4;
-#X obj 121 330 harmonizer 4;
-#X msg 64 443 help;
-#X connect 2 0 83 0;
-#X connect 3 0 83 0;
-#X connect 4 0 2 0;
-#X connect 5 0 4 0;
-#X connect 6 0 3 0;
-#X connect 7 0 12 0;
-#X connect 8 0 12 1;
-#X connect 9 0 12 2;
-#X connect 10 0 12 3;
-#X connect 11 0 12 4;
-#X connect 12 0 83 0;
-#X connect 13 0 7 0;
-#X connect 13 1 8 0;
-#X connect 13 2 9 0;
-#X connect 13 3 10 0;
-#X connect 13 4 11 0;
-#X connect 14 0 7 1;
-#X connect 14 0 22 0;
-#X connect 14 0 23 0;
-#X connect 14 1 8 1;
-#X connect 14 1 24 0;
-#X connect 14 2 9 1;
-#X connect 14 2 32 0;
-#X connect 14 3 10 1;
-#X connect 14 3 25 0;
-#X connect 14 4 11 1;
-#X connect 14 4 33 0;
-#X connect 15 0 17 0;
-#X connect 16 0 20 0;
-#X connect 17 0 78 0;
-#X connect 18 0 78 0;
-#X connect 19 0 78 0;
-#X connect 20 0 27 0;
-#X connect 21 0 13 0;
-#X connect 21 1 6 0;
-#X connect 22 0 4 0;
-#X connect 23 0 55 0;
-#X connect 24 0 55 0;
-#X connect 25 0 55 0;
-#X connect 27 0 28 0;
-#X connect 28 0 78 0;
-#X connect 29 0 27 1;
-#X connect 29 0 30 0;
-#X connect 31 0 56 0;
-#X connect 31 0 57 0;
-#X connect 31 0 58 0;
-#X connect 31 0 44 0;
-#X connect 32 0 55 0;
-#X connect 33 0 55 0;
-#X connect 34 0 35 0;
-#X connect 35 0 43 0;
-#X connect 36 0 29 0;
-#X connect 37 0 38 0;
-#X connect 37 0 42 0;
-#X connect 38 0 37 1;
-#X connect 39 0 40 0;
-#X connect 42 0 39 0;
-#X connect 43 0 20 0;
-#X connect 43 1 37 0;
-#X connect 45 0 46 0;
-#X connect 46 0 78 0;
-#X connect 47 0 45 0;
-#X connect 48 0 78 0;
-#X connect 50 0 52 0;
-#X connect 51 0 50 0;
-#X connect 52 0 78 0;
-#X connect 54 0 78 0;
-#X connect 55 0 60 0;
-#X connect 55 0 59 0;
-#X connect 56 0 60 0;
-#X connect 57 0 60 0;
-#X connect 58 0 60 0;
-#X connect 61 0 66 0;
-#X connect 61 1 67 0;
-#X connect 63 0 72 0;
-#X connect 64 0 73 0;
-#X connect 65 0 66 1;
-#X connect 65 0 67 1;
-#X connect 65 0 69 0;
-#X connect 66 0 63 0;
-#X connect 67 0 64 0;
-#X connect 68 0 77 0;
-#X connect 70 0 71 0;
-#X connect 70 0 72 1;
-#X connect 70 0 73 1;
-#X connect 72 0 62 0;
-#X connect 73 0 62 1;
-#X connect 74 0 76 0;
-#X connect 76 0 70 0;
-#X connect 77 0 65 0;
-#X connect 78 0 0 0;
-#X connect 78 0 4 1;
-#X connect 78 0 21 0;
-#X connect 78 0 45 1;
-#X connect 78 0 15 0;
-#X connect 78 0 50 1;
-#X connect 78 1 49 0;
-#X connect 78 2 53 0;
-#X connect 80 0 83 0;
-#X connect 81 0 80 0;
-#X connect 82 0 26 0;
-#X connect 83 0 14 0;
-#X connect 83 0 79 0;
-#X connect 83 0 82 0;
-#X connect 84 0 82 0;
diff --git a/externals/frankenstein/test-rhythm.pd b/externals/frankenstein/test-rhythm.pd
deleted file mode 100644
index 4fac39ab9..000000000
--- a/externals/frankenstein/test-rhythm.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 0 0 458 308 12;
-#X obj 140 162 test;
-#X obj 140 102 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X connect 1 0 0 0;
diff --git a/externals/frankenstein/test-rhythms_memory.pd b/externals/frankenstein/test-rhythms_memory.pd
deleted file mode 100644
index d2287e719..000000000
--- a/externals/frankenstein/test-rhythms_memory.pd
+++ /dev/null
@@ -1,94 +0,0 @@
-#N canvas 91 38 913 531 12;
-#X obj 126 256 rhythms_memory;
-#X msg 126 212 measure;
-#X msg 232 220 0;
-#X obj 123 48 metro 500;
-#X obj 85 86 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 123 25 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 124 71 int 0;
-#X obj 175 72 + 1;
-#X obj 124 94 % 4;
-#X obj 127 155 sel 0;
-#X obj 125 185 bang;
-#X obj 232 185 bng 30 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 231 363 unpack f f f f f;
-#X floatatom 229 390 5 0 0 1 is_this_a_new_rhythm - -;
-#X floatatom 258 408 5 0 0 1 id - -;
-#X floatatom 291 426 5 0 0 1 subid - -;
-#X floatatom 323 446 5 0 0 1 root_closeness - -;
-#X floatatom 355 469 5 0 0 1 sub_closeness - -;
-#X text 442 392 (0=known \, 1=new root \, 2=new sub);
-#X obj 124 117 t f f;
-#X msg 568 247 crash;
-#N canvas 0 0 454 304 drum 0;
-#X obj 108 27 inlet;
-#X obj 108 212 outlet~;
-#X obj 139 93 noise~;
-#X obj 122 159 *~;
-#X obj 207 155 line;
-#X msg 224 101 1 10;
-#X obj 311 89 delay 50;
-#X msg 314 112 0 100;
-#X obj 245 56 t b b;
-#X connect 0 0 8 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 3 1;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 6 0;
-#X connect 8 1 5 0;
-#X restore 276 155 pd drum;
-#X obj 274 124 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 270 187 dac~;
-#X floatatom 180 155 5 0 0 0 - - -;
-#X obj 126 294 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 489 133 1 0 0.5;
-#X text 381 17 you can ask it to play a stored rhythm;
-#X text 559 227 (crash me! for debugging);
-#X text 405 98 you will be able to send rhythms in the form of list
-of floats (TODO);
-#X obj 180 319 print;
-#X text 152 294 here you get the wanted rhythms played in realtime
-;
-#X text 235 315 here you'll get the wanted rhythms in the form of lists
-of floats (TODO);
-#X text 373 361 here you get info on the last detected rhythm;
-#X msg 384 39 rhythm_out 6 0;
-#X connect 0 0 25 0;
-#X connect 0 0 21 0;
-#X connect 0 1 30 0;
-#X connect 0 2 12 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 4 0;
-#X connect 3 0 6 0;
-#X connect 5 0 3 0;
-#X connect 6 0 7 0;
-#X connect 6 0 8 0;
-#X connect 7 0 6 1;
-#X connect 8 0 19 0;
-#X connect 9 0 10 0;
-#X connect 10 0 1 0;
-#X connect 11 0 2 0;
-#X connect 12 0 13 0;
-#X connect 12 1 14 0;
-#X connect 12 2 15 0;
-#X connect 12 3 16 0;
-#X connect 12 4 17 0;
-#X connect 19 0 21 0;
-#X connect 19 0 24 0;
-#X connect 19 1 9 0;
-#X connect 20 0 0 0;
-#X connect 21 0 23 0;
-#X connect 21 0 23 1;
-#X connect 22 0 21 0;
-#X connect 22 0 11 0;
-#X connect 26 0 0 1;
-#X connect 34 0 0 0;
diff --git a/externals/frankenstein/test.c b/externals/frankenstein/test.c
deleted file mode 100644
index 49462a312..000000000
--- a/externals/frankenstein/test.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
-just a dummy test patch
-
-*/
-
-#include "m_pd.h"
-
-#include "common.h"
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-
-static t_class *test_class;
-
-
-
-typedef struct _test
-{
-    t_object x_obj; // myself
-	t_outlet *l_out;
-	t_rhythm_event *curr_seq;
-	int seq_initialized;
-	t_rhythm_memory_representation *rhythms_memory;
-	
-} t_test;
-
-void test_free(t_test *x)
-{
-	freeBeats(x->curr_seq);
-}
-
-static void test_bang(t_test *x) {
-
-	// generate a random value
-	float rnd;
-	t_rhythm_event *events;
-	t_duration dur;
-
-	rnd = rand()/((double)RAND_MAX + 1);
-	dur = float2duration(rnd);
-
-	post("random value=%f duration.numerator=%i duration.denominator=%i", rnd, dur.numerator, dur.denominator);
-
-	if (x->seq_initialized)
-	{
-		concatenateBeat(x->curr_seq, 0, rnd, 1);
-	} else
-	{
-		setFirstBeat(&(x->curr_seq), 0, rnd, 1);
-		x->seq_initialized = 1;
-	}
-
-	// print the sequence
-	events = x->curr_seq;
-	while(events)
-	{
-		post("event: numerator=%i, denominator=%i", events->duration.numerator, events->duration.denominator);
-		events=events->next;
-	}
-	
-}
-
-void *test_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_test *x = (t_test *)pd_new(test_class);
-	x->l_out = outlet_new(&x->x_obj, &s_list);
-	
-	x->seq_initialized = 0;
-
-	rhythm_memory_create(&(x->rhythms_memory));
-
-    return (x);
-}
-
-void test_setup(void)
-{
-    test_class = class_new(gensym("test"), (t_newmethod)test_new,
-        (t_method)test_free, sizeof(t_test), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(test_class, (t_method)test_bang);
-	
-
-}
diff --git a/externals/frankenstein/themes_memory.c b/externals/frankenstein/themes_memory.c
deleted file mode 100644
index cefdb5e1c..000000000
--- a/externals/frankenstein/themes_memory.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/* 
-themes_memory
-
-Authors:
-Davide Morelli http://www.davidemorelli.it
-David Plans Casal http://www.studios.uea.ac.uk/people/staff/casal
-
-uses graphs to store melodies
-
-it is just like rhythms_memory but works on the more complex world of themes
-
-TODO:
-  * memory save/load to file (?)
-  * output rhythms in the form of list of floats (easy)
-  * add velo (?)
-  * input rhythms from a list (second inlet) (easy)
-  * let it create variations on known rhythms (?)
-  * let it merge rhythms (?)
-
-*/
-
-#include "m_pd.h"
-
-#include "common.h"
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-
-static t_class *themes_memory_class;
-
-typedef struct event event;
-typedef struct event
-{
-	unsigned short int voice;
-	double when;
-	event *next;
-};
-
-typedef struct _themes_memory
-{
-    t_object x_obj; // myself
-	// 3 outlets:
-	// bangs_out plays the wanted rhythmsin realtime
-	// list_out outputs the wanted rhythm as a list of floats
-	// info_out outputs info on the last recognized rhythm
-	t_outlet *bangs_out, *list_out, *info_out;
-	t_rhythm_event *curr_seq;
-	int seq_initialized;
-	// the memory
-	t_rhythm_memory_representation *themes_memory;
-	// measure length
-	double measure_start_time;
-	double measure_length;
-	// input rhythm's events
-	event *events;
-	// output rhythm's events
-	unsigned short int next_main_rhythm_out;
-	unsigned short int next_sub_rhythm_out;
-	event *events_out;
-	t_clock *x_clock;
-    double x_deltime;
-	double last_event_out_time;
-	
-} t_themes_memory;
-
-void themes_memory_free(t_themes_memory *x)
-{
-	if (x->curr_seq)
-		freeBeats(x->curr_seq);	
-	if (x->themes_memory)
-		rhythm_memory_free(x->themes_memory);
-
-	clock_free(x->x_clock);
-}
-
-// called when a new measure starts
-void start_measure(t_themes_memory *x)
-{
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_start_time = clock_getlogicaltime();
-	x->last_event_out_time = 0;
-}
-
-// called when a new event occours
-void add_event(t_themes_memory *x, unsigned short int voice)
-{
-	event *newEvent, *currEvent, *lastEvent;
-	double when;
-	when = clock_gettimesince(x->measure_start_time);
-	newEvent = (event *) malloc(sizeof(event));
-	newEvent->when = when;
-	newEvent->voice = voice;
-	newEvent->next = 0;
-	currEvent = x->events;
-	if (currEvent)
-	{
-		// this is not the first event
-		while(currEvent)
-		{
-			lastEvent = currEvent;
-			currEvent = currEvent->next;
-		}
-		lastEvent->next = newEvent;
-	} else
-	{
-		// this is the first event
-		x->events = newEvent;
-	}
-	post("event added");
-}
-
-// called when a measure ends
-void end_measure(t_themes_memory *x)
-{
-	float fduration;
-	event *currEvent, *lastEvent;
-	unsigned short int is_it_a_new_rhythm;
-	unsigned short int id, subid;
-	float root_closeness, sub_closeness;
-	int counter;
-	t_atom *lista;
-	// these 2 are for output rhythm
-	int rhythm_found;
-	t_rhythm_event *wanted_rhythm;
-	t_rhythm_event *curr_rhythm;
-	event *lastOutEvent;
-
-	// I call the pd functions to get a representation
-	// of this very moment
-	x->measure_length = clock_gettimesince(x->measure_start_time);
-	// now that i know the exact length of the current measure
-	// i can process the rhythm in the current measure
-	// and evaluate it
-	currEvent = x->events;
-	// this is not the first event
-	// now I translate events in rhythm
-	counter = 0;
-	while(currEvent)
-	{
-		fduration = (float) (((float) currEvent->when) / ((float) x->measure_length));
-		if (x->seq_initialized)
-		{
-			concatenateBeat(x->curr_seq, currEvent->voice, fduration, 1);
-		} else
-		{
-			setFirstBeat(&(x->curr_seq), currEvent->voice, fduration, 1);
-			x->seq_initialized = 1;
-		}
-		currEvent = currEvent->next;
-		counter++;
-	}
-	
-	// delete events after having evaluated them
-	currEvent = x->events;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events = 0;
-
-	if (x->curr_seq)
-	{
-		// now I evaluate this rhythm with the memory
-		rhythm_memory_evaluate(x->themes_memory, x->curr_seq, &is_it_a_new_rhythm,
-								&id, &subid, &root_closeness, &sub_closeness);
-		// tell out the answer
-		// allocate space for the list
-		lista = (t_atom *) malloc(sizeof(t_atom) * 5);
-		SETFLOAT(lista, (float) is_it_a_new_rhythm);
-		SETFLOAT(lista+1, (float) id);
-		SETFLOAT(lista+2, (float) subid);
-		SETFLOAT(lista+3, (float) root_closeness);
-		SETFLOAT(lista+4, (float) sub_closeness);
-		outlet_anything(x->info_out,
-						gensym("list") ,
-						5, 
-						lista);
-		free(lista);
-		// rhythm_memory_evaluate freed the memory for the rhythm if needed
-		x->seq_initialized = 0;
-		x->curr_seq = 0;
-	}
-
-	// I free the list of events_out (if present)
-	currEvent = x->events_out;
-	// this is not the first event
-	while(currEvent)
-	{
-		lastEvent = currEvent;
-		currEvent = currEvent->next;
-		free(lastEvent);
-	}
-	x->events_out = 0;
-	// i set up the list of events_out
-	// for the wanted rhythm
-	if (x->next_main_rhythm_out)
-	{
-		wanted_rhythm = 0;
-		// ask the memory for the wanted rhythm
-		rhythm_found = rhythm_memory_get_rhythm(x->themes_memory, // the memory
-								&wanted_rhythm, // a pointer to the returned rhythm
-								// the id of the main rhythm wanted
-								x->next_main_rhythm_out, 
-								// the sub-id of the sub-rhythm wanted
-								x->next_sub_rhythm_out);
-		if (rhythm_found==0)
-		{
-			post("themes_memory: rhythm %i %i was not found ", x->next_main_rhythm_out, x->next_sub_rhythm_out);
-			return;
-		}
-
-		if (wanted_rhythm==0)
-		{
-			error("themes_memory: wanted_rhythm should not be null! ");
-			return;
-		}
-
-		// now I setup the events_out list
-		// for each event in wanted_rhythm
-		// allocate and link an element of elements_out
-		curr_rhythm = wanted_rhythm;
-		lastOutEvent = 0;
-		while (curr_rhythm)
-		{
-			event *newEvent;
-			newEvent = malloc(sizeof(event));
-			newEvent->next = 0;
-			newEvent->voice = curr_rhythm->voice;
-			newEvent->when = (double) (duration2float(curr_rhythm->start) * x->measure_length);
-			post("DEBUG: add event in moment: %f", newEvent->when);
-			if (x->events_out)
-			{
-				// this is not the first event
-				// assign the next
-				lastOutEvent->next = newEvent;
-			} else
-			{
-				// this is the first event
-				x->events_out = newEvent;
-			}
-			// change the last pointer
-			lastOutEvent = newEvent;
-			curr_rhythm = curr_rhythm->next;
-		}
-
-		// also setup the timer for the first event
-		if (x->events_out)
-		{
-			// setup the clock
-			clock_delay(x->x_clock, x->events_out->when);
-			// remember when next event will occour
-			x->last_event_out_time = x->events_out->when;
-			// remember the curr event
-			lastOutEvent = x->events_out;
-			//reassign next event
-			x->events_out = x->events_out->next;
-			// free old event
-			free(lastOutEvent);
-		}
-		x->next_main_rhythm_out = 0;
-
-	}
-
-	// also start the new measure!
-	start_measure(x);
-
-	
-}
-
-// this function is called  by pd
-// when the timer bangs
-static void rhythms_tick(t_themes_memory *x)
-{
-	event *lastOutEvent;
-    // here i must:
-	// take the next element in x->events_out
-	// and compute when I'll need to schedule next event
-	// (next_event - curr_event)
-	// set the next element as the current one
-	// and free the memory allocated for the old curr event
-	// set up the timer	
-	post("DEBUG: eveng bang");
-	// first of all trigger the bang!
-	outlet_bang(x->bangs_out);
-	//then do the stuff
-	if (x->events_out)
-	{
-		// setup the clock
-		clock_delay(x->x_clock, x->events_out->when - x->last_event_out_time);
-		// remember when next event will occour
-		x->last_event_out_time = x->events_out->when ;
-		// remember the curr event
-		lastOutEvent = x->events_out;
-		//reassign next event
-		x->events_out = x->events_out->next;
-		// free old event
-		free(lastOutEvent);
-	}
-}
-
-// the user wants me to play a rhythm in the next measure
-// the user MUST pass 2 args: main_rhythm and sub_rhythm wanted
-static void ask_rhythm(t_themes_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
-	if (argc<2)
-	{
-		error("this method needs at least 2 floats: main_rhythm and sub_rhythm wanted");
-		return;
-	}
-	//argv++;
-	x->next_main_rhythm_out = atom_getfloat(argv++);
-	x->next_sub_rhythm_out = atom_getfloat(argv);
-	post("DEBUG: asked rhythm %i %i", x->next_main_rhythm_out, x->next_sub_rhythm_out); 
-	// i have nothing left to do:
-	// when this measure will end a list of events_out will be set
-	// from the current values of x->next_main_rhythm_out and x->next_sub_rhythm_out
-}
-
-// add this rhythm to the memory
-static void add_rhythm(t_themes_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-}
-
-// creates a variation of a given rhythm (in memory)
-// with a given degree of closeness
-static void variation(t_themes_memory *x, t_symbol *s, int argc, t_atom *argv)
-{
- // TODO
-	post("TODO");
-
-	// get the rhythm
-
-	// using the transitions table create a new one
-
-	// add it to the memory?
-
-	// output to the list outlet?
-
-	// set it as the next played rhythm
-}
-
-static void themes_memory_bang(t_themes_memory *x) {
-
-	// generate a random value
-	float rnd;
-	t_rhythm_event *events;
-	t_duration dur;
-
-	rnd = rand()/((double)RAND_MAX + 1);
-	dur = float2duration(rnd);
-
-	post("random value=%f duration.numerator=%i duration.denominator=%i", rnd, dur.numerator, dur.denominator);
-
-	if (x->seq_initialized)
-	{
-		concatenateBeat(x->curr_seq, 0, rnd, 1);
-	} else
-	{
-		setFirstBeat(&(x->curr_seq), 0, rnd, 1);
-		x->seq_initialized = 1;
-	}
-
-	// print the sequence
-	events = x->curr_seq;
-	while(events)
-	{
-		post("event: numerator=%i, denominator=%i", events->duration.numerator, events->duration.denominator);
-		events=events->next;
-	}
-	
-}
-
-void *themes_memory_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_themes_memory *x = (t_themes_memory *)pd_new(themes_memory_class);
-	// first is for bangs (to let this external play in realtime
-	//x->l_out = outlet_new(&x->x_obj, &s_list);
-	x->bangs_out = outlet_new(&x->x_obj, gensym("bang"));
-	// this outputs lists of events
-	x->list_out = outlet_new(&x->x_obj, gensym("symbol"));
-	// this outputs info on the last detected rhythm
-	x->info_out = outlet_new(&x->x_obj, gensym("symbol"));
-
-	// inlet for rhythms in the form of lists
-	inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("list"), gensym("rhythm_in"));
-
-	x->x_clock = clock_new(x, (t_method)rhythms_tick);
-	x->seq_initialized = 0;
-
-	rhythm_memory_create(&(x->themes_memory));
-	start_measure(x);
-
-    return (x);
-}
-
-// debugging function
-void crash(t_themes_memory *x)
-{
-	int *a;
-	a = malloc(sizeof(int));
-	a[99999] = 1;
-}
-
-void themes_memory_setup(void)
-{
-    themes_memory_class = class_new(gensym("themes_memory"), (t_newmethod)themes_memory_new,
-        (t_method)themes_memory_free, sizeof(t_themes_memory), CLASS_DEFAULT, A_GIMME, 0);
-    class_addbang(themes_memory_class, (t_method)themes_memory_bang);
-	class_addmethod(themes_memory_class, (t_method)end_measure, gensym("measure"), 0);
-	class_doaddfloat(themes_memory_class, (t_method)add_event);
-	class_addmethod(themes_memory_class, (t_method)crash, gensym("crash"), 0);
-	// the user asks for a rhythm
-	class_addmethod(themes_memory_class, (t_method)ask_rhythm, gensym("rhythm_out"),
-        A_GIMME, 0);
-	// adds a rhythm passing it as a list of floats
-	class_addmethod(themes_memory_class, (t_method)add_rhythm, gensym("rhythm_in"),
-        A_GIMME, 0);
-	// builds a variation of a given rhythm
-	class_addmethod(themes_memory_class, (t_method)variation, gensym("variation"),
-        A_GIMME, 0);
-}
-
-
diff --git a/externals/frankenstein/themes_memory.vcproj b/externals/frankenstein/themes_memory.vcproj
deleted file mode 100755
index ba43182a3..000000000
--- a/externals/frankenstein/themes_memory.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="themes_memory"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:themes_memory_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/themes_memory.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="themes_memory.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/frankenstein/voicing_analyzer.c b/externals/frankenstein/voicing_analyzer.c
deleted file mode 100644
index abd767554..000000000
--- a/externals/frankenstein/voicing_analyzer.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/* 
-voicing_analyzer:
-
-
-*/
-#include <stdlib.h>
-#include <math.h>
-#include <time.h>
-// for string manipulation
-#include <string.h>
-#include <ctype.h>
-#include "m_pd.h"
-
-// to sort arrays
-#include "sglib.h"
-
-
-#define VOICES 5
-
-#define NOTES_RANGE 80 // this should be multiple of 16
-#define LOWER_POSSIBLE_NOTE 24 // lower note possible, it should be a C
-#define POSSIBLE_NOTES (NOTES_RANGE/12*4) // 4 is the max number of notes in a chord
-
-// default values 
-#define DEF_WIDENESS 3 // 3 octaves
-#define DEF_CENTER_NOTE 72 // central C
-
-#define DEBUG 0 // messaggi di debug
-#define DEBUG_VERBOSE 0 // messaggi di debug
-
-static t_class *voicing_analyzer_class;
-
-
-typedef struct _voicing_analyzer
-{
-    t_object x_obj; // myself
-	//int current_voices[VOICES];
-	//int previous_voices[VOICES];
-	int *current_voices;
-	int *previous_voices;
-	t_outlet *small_intervals_out, *i_like_parallelism_out,
-		*center_note_out, *wideness_out;
-	int voices;
-} t_voicing_analyzer;
-
-
-void voicing_analyzer_free(t_voicing_analyzer *x)
-{
-	free(x->current_voices);
-	free(x->previous_voices);
-//	freebytes(x->buf_strum1, sizeof(x->buf_strum1));
-//	freebytes(x->buf_strum2, sizeof(x->buf_strum2));
-}
-
-void voicing_analyzer_allocate(t_voicing_analyzer *x)
-{
-	int i;
-	x->current_voices = malloc(sizeof(int)*x->voices);
-	x->previous_voices = malloc(sizeof(int)*x->voices);
-	for (i=0; i<x->voices; i++)
-	{
-		x->current_voices[i] = 60;
-		x->previous_voices[i] = 60;
-	}
-}
-
-// here i evaluate this voicing
-void analyze_it(t_voicing_analyzer *x, float *wideness, float *i_like_parallelism, int *center_note, float *small_intervals)
-{
-	int i, j, tmp, res, last, avgHI, avgLOW, sameDirection, parallel8_5;
-	int min,max, distance;
-	short int chord_notes[4];
-	short int chord_notes_ok[4];
-	//short int transitions[VOICES];
-	short int *transitions;
-	//short int directions[VOICES];
-	short int *directions;
-	// intervals between voices
-	// for parallel and hidden 5ths
-	// voices spacing etc..
-	//short int intervals[VOICES][VOICES]; 
-	short int **intervals; 
-	//short int notes[VOICES];
-	short int *notes;
-	res = 0; // starting fitness
-	tmp = 0;
-
-	// allocate arrays
-	transitions = malloc(sizeof(short int)*x->voices);
-	directions = malloc(sizeof(short int)*x->voices);
-	notes = malloc(sizeof(short int)*x->voices);
-	intervals = malloc(sizeof(short int *) * x->voices);
-	for (i=0; i<x->voices; i++)
-	{
-		intervals[i] = malloc(sizeof(short int) * x->voices);
-	}
-
- 	// shared objects
-	for (i=0; i<x->voices; i++)
-	{
-		notes[i]=x->current_voices[i];
-		transitions[i] = x->current_voices[i] - x->previous_voices[i];
-		if (transitions[i]!=0)
-			directions[i] = transitions[i]/abs(transitions[i]);
-		else
-			directions[i] = 0;
-		if (DEBUG_VERBOSE)
-			post("directions[%i]=%i", i, directions[i]);
-
-	}
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			intervals[i][j] = (x->current_voices[i] - x->current_voices[j])%12 ;
-			if (DEBUG_VERBOSE)
-				post("intervals[%i][%i]=%i", i, j, intervals[i][j]);
-		}
-	}
-	SGLIB_ARRAY_SINGLE_QUICK_SORT(short int, notes, x->voices, SGLIB_NUMERIC_COMPARATOR)
-
-	sameDirection = 0; 
-	parallel8_5 = 0;
-	
-	// all same direction? 
-	if ( directions[0]==directions[1] &&
-	directions[1]==directions[2] &&
-	directions[2]==directions[3])
-	{
-		sameDirection=1;
-		if (DEBUG_VERBOSE)
-			post("same direction!");
-	}
-	
-	// parallel 5ths or octaves? (if yes return 0)
-	// how?
-	// hidden 8ths nor 5ths ?
-	for (i=0; i<x->voices; i++)
-	{
-		for (j=i+1; j<x->voices; j++)
-		{
-			if (intervals[i][j]==7 || intervals[i][j]==0)
-			{
-				// hidden or parallel 5th,octave or unison
-				// bad!
-				if (directions[i]==directions[j])
-				{
-					parallel8_5 += 1;
-					if (DEBUG_VERBOSE)
-						post("hidden or parallel consonance!");
-				}
-			}
-		}
-	}
-
-	// now i can compute parallelism
-	*i_like_parallelism = (float) -1;
-	*i_like_parallelism += sameDirection;
-	if (parallel8_5)
-		*i_like_parallelism += (float) ( ((float)parallel8_5) / ((float)(x->voices*(x->voices - 1)))  );
-
-
-	// is voice spacing uniform ?(except for the bass)
-	// TODO: use notes[]
-	// are voices average centered?
-	for (i=0; i<x->voices; i++)
-	{
-		tmp+=notes[i];
-		if (DEBUG_VERBOSE)
-			post("average note is %i at passage %i", tmp, i);
-	}
-	// this is the average note
-	*center_note = tmp/(x->voices);
-
-	// are intervals small?
-	tmp=0;
-	for (i=0; i<x->voices; i++)
-	{
-	//	if (DEBUG_VERBOSE)
-	//		post("transitions[%i] = %i",i, transitions[i]);
-	//	res-=abs(transitions[i]);
-		// give an incentive for semitones etc..
-		if (transitions[i]==0)
-			res += 5;
-		if (abs(transitions[i]==1))
-			res += 5;
-		if (abs(transitions[i]==2))
-			res += 5;
-		if (abs(transitions[i]==3))
-			res += 2;
-		if (abs(transitions[i]==4))
-			res += 2;
-		if (abs(transitions[i]==5))
-			res += 1;
-		if (abs(transitions[i]==6))
-			res += 1;
-		if (abs(transitions[i]>11))
-			res -= 2;
-		if (abs(transitions[i]>15))
-			res -= 3;
-	}
-
-	*small_intervals = (float) (((float) res) / ((float) (5 * x->voices)));
-
-	// now wideness	
-	min = notes[0];
-	max = notes[x->voices-1];
-	distance = max - min;
-	*wideness = (float) (((float)distance) / ((float)12));
-
-
-	// free memory
-	free(transitions);
-	free(directions); 
-	free(notes);
-	for (i=0; i<x->voices; i++)
-	{
-		free(intervals[i]);
-	}
-	free(intervals);
-}
-
-typedef struct fitness_list_element_t 
-{
-	int index;
-	int fitness;
-} fitness_list_element;
-
-#define FITNESS_LIST_COMPARATOR(e1, e2) (e1.fitness - e2.fitness)
-
-void analyze_voicing(t_voicing_analyzer *x)
-{
-	t_atom lista[4];
-	float small_intervals=0;
-	float i_like_parallelism=0;
-	float wideness=0;
-	int center_note=0;
-	
-	analyze_it(x, &wideness, &i_like_parallelism, &center_note, &small_intervals);
-	
-	// order is important!
-	outlet_float(x->i_like_parallelism_out, i_like_parallelism);
-	outlet_float(x->wideness_out, wideness);
-	outlet_float(x->small_intervals_out, small_intervals);
-	outlet_float(x->center_note_out, center_note);
-	
-}
-
-// called when i send a list (with midi values)
-void set_current_voices(t_voicing_analyzer *x, t_symbol *sl, int argc, t_atom *argv)
-{
-	int i=0;	
-	
-	if (argc<x->voices)
-	{
-		error("insufficient notes sent!");
-		return;
-	}
-	// fill input array with actual data sent to inlet
-	for (i=0;i<x->voices;i++)
-	{
-		x->previous_voices[i] = x->current_voices[i];
-		x->current_voices[i] = atom_getint(argv++);
-	}
-
-	analyze_voicing(x);
-
-
-}
-
-void set_voices(t_voicing_analyzer *x, t_floatarg f)
-{
-	int newval = (int)  f;
-	if (newval<1)
-	{
-		error("number of voices must be > 0 !");
-		return;
-	}
-	x->voices = newval;
-	voicing_analyzer_free(x);
-	voicing_analyzer_allocate(x);
-}
-
-void print_help(t_voicing_analyzer *x)
-{
-	post("");
-	post("voicing_analyzer is an external that analyze voicing");
-	post("takes as input a list of midi notes");
-	post("and send out 4 values (from left to right):");
-	post("1)the center note of the chord (average value)");
-	post("2)wideness of the chord (how many octaves)");
-	post("3)small intervals were used? (-1=no, 1=yes)");
-	post("4)parallelism was used? (parallel octaves and fifths) (-1=no, 1=yes)");
-	post("available commands:");
-	post("voices: changes the number of expected notes");	
-	post("this externalis part of the frank framework");
-	post("authors: davide morelli, david casals");
-
-}
-
-void *voicing_analyzer_new(t_symbol *s, int argc, t_atom *argv)
-{
-	int i;
-	time_t a;
-    t_voicing_analyzer *x = (t_voicing_analyzer *)pd_new(voicing_analyzer_class);
-	x->center_note_out = outlet_new(&x->x_obj, gensym("float"));
-	x->wideness_out = outlet_new(&x->x_obj, gensym("float"));
-	x->small_intervals_out = outlet_new(&x->x_obj, gensym("float"));
-	x->i_like_parallelism_out = outlet_new(&x->x_obj, gensym("float"));	
-	x->voices = VOICES;
-	if (argc>0) 
-	{
-		x->voices = atom_getintarg(0, argc, argv);
-	}
-	voicing_analyzer_allocate(x);
-
-	return (x);
-}
-
-void voicing_analyzer_setup(void)
-{
-    voicing_analyzer_class = class_new(gensym("voicing_analyzer"), (t_newmethod)voicing_analyzer_new,
-        (t_method)voicing_analyzer_free, sizeof(t_voicing_analyzer), CLASS_DEFAULT, A_GIMME, 0);
-	class_addmethod(voicing_analyzer_class, (t_method)print_help, gensym("help"),0, 0);
-	class_addlist(voicing_analyzer_class, (t_method)set_current_voices);
-	// set number of voices
-	class_addmethod(voicing_analyzer_class, (t_method)set_voices, gensym("voices"), A_DEFFLOAT, 0);
-
-
-}
diff --git a/externals/frankenstein/voicing_analyzer.vcproj b/externals/frankenstein/voicing_analyzer.vcproj
deleted file mode 100755
index c5be06128..000000000
--- a/externals/frankenstein/voicing_analyzer.vcproj
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="7.00"
-	Name="voicing_analyzer"
-	ProjectGUID="{DBC75D2A-816A-4C0A-8FE7-2016518D2D19}"
-	Keyword="Win32Proj">
-	<Platforms>
-		<Platform
-			Name="Win32"/>
-	</Platforms>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
-				MinimalRebuild="TRUE"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="5"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="4"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalOptions="/export:voicing_analyzer_setup /dll"
-				AdditionalDependencies="pd.lib"
-				OutputFile="$(OutDir)/voicing_analyzer.dll"
-				LinkIncremental="2"
-				AdditionalLibraryDirectories="../"
-				GenerateDebugInformation="TRUE"
-				ProgramDatabaseFile="$(OutDir)/frankenstein.pdb"
-				SubSystem="0"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="1"
-			CharacterSet="2">
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				OmitFramePointers="TRUE"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
-				StringPooling="TRUE"
-				RuntimeLibrary="4"
-				EnableFunctionLevelLinking="TRUE"
-				UsePrecompiledHeader="3"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="TRUE"
-				DebugInformationFormat="3"/>
-			<Tool
-				Name="VCCustomBuildTool"/>
-			<Tool
-				Name="VCLinkerTool"
-				OutputFile="$(OutDir)/frankenstein.exe"
-				LinkIncremental="1"
-				GenerateDebugInformation="TRUE"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"/>
-			<Tool
-				Name="VCMIDLTool"/>
-			<Tool
-				Name="VCPostBuildEventTool"/>
-			<Tool
-				Name="VCPreBuildEventTool"/>
-			<Tool
-				Name="VCPreLinkEventTool"/>
-			<Tool
-				Name="VCResourceCompilerTool"/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"/>
-			<Tool
-				Name="VCWebDeploymentTool"/>
-		</Configuration>
-	</Configurations>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
-			<File
-				RelativePath="common.c">
-			</File>
-			<File
-				RelativePath="voicing_analyzer.c">
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc">
-			<File
-				RelativePath="common.h">
-			</File>
-			<File
-				RelativePath="..\m_pd.h">
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/externals/input_noticer/INSTALL.TXT b/externals/input_noticer/INSTALL.TXT
deleted file mode 100644
index 1d2afa85f..000000000
--- a/externals/input_noticer/INSTALL.TXT
+++ /dev/null
@@ -1,27 +0,0 @@
-input_noticer install instructions
-David Merrill <dmerrill@media.mit.edu>
-
-In order to make this code compile, I had to install the following libraries
-onto my system:
-
- libhal-dev
- libglib2.0-dev
- libdbus-glib-1-dev
-
-In a debian-based system, they can be installed with apt-get, as in:
- sudo apt-get install libhal-dev
-
-To see if you have the right libraries installed in order to compile, you can
-try compiling the test_noticer.c file, by running the test_noticer_compile.sh
-shell script, as follows:
-
-source test_noticer_compile.sh
-
-Then, run test_noticer, and when it's running you should see messages when 
-you plug, or un-plug a joystick.
-
-Once you've got your libraries sorted out, to compile and install, you should
-first modify the Makefile to suit your system. Then you can type:
-
-make pd_linux
-make install_noticer
diff --git a/externals/input_noticer/Makefile b/externals/input_noticer/Makefile
deleted file mode 100644
index 209ca7471..000000000
--- a/externals/input_noticer/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-CC=gcc
-
-pd_linux: input_noticer.pd_linux parseeventnodenum.pd_linux
-
-clean: ; rm -f *.pd_linux *.o *~
-
-# installs all compiled externals.
-# you'll want to change this to match where your externals live
-install: ; sudo cp *.pd_linux /usr/local/lib/pd/extra/ ; sudo cp *help.pd /usr/local/lib/pd/doc/5.reference/
-
-# installs the input_noticer
-# you'll want to change this to match where your externals live
-install_noticer: ; sudo cp input_noticer.pd_linux /usr/local/lib/pd/extra ; sudo cp input_noticer-help.pd /usr/local/lib/pd/doc/5.reference/
-
-# ----------------------- LINUX i386 -----------------------
-
-.SUFFIXES: .pd_linux
-
-LINUXLDFLAGS = `pkg-config --libs glib-2.0 hal dbus-glib-1` -lpthread -lgthread-2.0 -lglib-2.0
-# LINUXLDFLAGS = `pkg-config --libs glib-2.0 hal dbus-glib-1 gthread-2.0`
-
-LINUXCFLAGS = -DUNIX -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch \
-    `pkg-config --cflags --libs glib-2.0 hal dbus-glib-1 gthread-2.0`
-
-LINUXINCLUDE =  -I/usr/local/lib/pd/include -I/usr/lib/pd/src -I/usr/local/include 
-
-.c.pd_linux:
-	$(CC) $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld --export-dynamic -shared -o $*.pd_linux $*.o -lc -lm $(LINUXLDFLAGS)
-	strip --strip-unneeded $*.pd_linux
-	rm $*.o
diff --git a/externals/input_noticer/README.TXT b/externals/input_noticer/README.TXT
deleted file mode 100644
index 1207c9f26..000000000
--- a/externals/input_noticer/README.TXT
+++ /dev/null
@@ -1,58 +0,0 @@
-title: input_noticer
-
-author: David Merrill <dmerrill@media.mit.edu>
-
-desc: Using dbus and the hardware abstraction layer (HAL) in linux, 
-this external allows pd to find all linux device files for a given device type.
-This scanning behavior can happen when the external is set up (via a [bang]),
-and will happen automatically when a new device is added to the system. An
-example linux device file would be:
-
-/dev/input/event5
-
-The pd user specifies device type as a string - i.e. "SideWinder Dual Strike", and
-this external outputs lists containing an index, and the linux device file where 
-each device of the given type was found. For example
-
-{0, /dev/input/event5}
-{1, /dev/input/event6}
-
-These lists can be routed in PD with the [route] object - see the help file for
-[route] for more details.
-
-In order to make this code compile, I had to install the following libraries
-onto my system:
-
- libhal-dev
- libglib2.0-dev
- libdbus-glib-1-dev
-
-In a debian-based system, they can be installed with apt-get, as in:
- sudo apt-get install libhal-dev
-
-To see if you have the right libraries installed in order to compile, you can
-try compiling the test_noticer.c file, by running the test_noticer_compile.sh
-shell script, as follows:
-
-source test_noticer_compile.sh
-
-Then, run test_noticer, and when it's running you should see messages when 
-you plug, or un-plug a joystick.
-
-dmerrill@dmerrill-t40:~/externals/input_noticer$ ./test_noticer
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial_if0
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial_usbraw
-device added, udi = /org/freedesktop/Hal/devices/usb_device_45e_28_noserial_if0_logicaldev_input
-found the joystick at: /dev/input/event6
-
-Thanks to Dan Willmans, Seth Nickell, and David Zeuthen for their 
-invaluable help with the whole dbus/hal part. Also, thanks to Hans-Christoph
-Steiner for his help with (and creation of) the joystick external.
-
-For good examples and reference on dbus/hal, please see: 
-NetworkManager.c: http://cvs.gnome.org/viewcvs/NetworkManager/src/NetworkManager.c?rev=1.100&view=markup
-libhal.h: http://webcvs.freedesktop.org/hal/hal/libhal/libhal.h?rev=1.32&view=markup
-
-Parts of this code were pulled from those examples.
-
diff --git a/externals/input_noticer/input_noticer-help.pd b/externals/input_noticer/input_noticer-help.pd
deleted file mode 100644
index 6ad4dc041..000000000
--- a/externals/input_noticer/input_noticer-help.pd
+++ /dev/null
@@ -1,82 +0,0 @@
-#N canvas 196 114 1367 915 10;
-#X obj 49 116 route 0 1;
-#X obj 49 10 loadbang;
-#X obj 49 45 input_noticer joystick "SideWinder Dual Strike";
-#X obj 110 10 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X text 549 12 INSTANTIATION ARGUMENTS:;
-#X text 549 31 1) device type: for instance \, as I have entered here:
-joystick;
-#X text 658 182 This external takes the "joystick" that I have entered
-\, and creates "input.joystick" from it \, and then asks HAL to look
-for all devices that have that capability.;
-#X text 659 275 In linux \, this references the HAL info.product field
-for the device. The input_noticer will iterate through all devices
-that HAL returns with the given Capabilities field (see above) \, and
-look for the user-supplied substring. The corresponding linux.device_file
-field is returned \, which will be something like "/dev/input/event6".
-This can be used to connect to objects like [hid].;
-#X text 127 10 <- BANG to scan for devices \, outputs any that are
-found;
-#X text 13 430 Output from input_noticer is a list \, like 0 \, /dev/input/event5
-1 \, /dev/input/event6;
-#X text 59 552 5 means /dev/input/event5;
-#X text 661 60 In linux \, this references the HAL (Hardware Abstraction
-Layer) Capabilities field for the device. You can have a look at what
-your favorite device has by using the HAL Device Manager \, and look
-at the "Device" tab of the most specific entry for your input device.
-In my case \, the device tree for my joystick looks like: "SideWinder
-Dual Strike" -> "USB Hid Interface" -> "Microsoft SideWinder Dual Strike
-USB Version 1.0". Capabilities listed are: input \, input.joystick
-;
-#X text 549 236 2) product substring: for instance \, as I have entered
-here: "SideWinder Dual Strike";
-#X text 11 509 To feed this to [hid] \, you'll need to strip the number
-from the end \, since [hid] currently wants just the number \, and
-interprets the number as follows:;
-#X obj 49 180 parseeventnodenum;
-#X floatatom 49 202 5 0 0 0 - - -;
-#X obj 79 294 hid 0;
-#X msg 79 250 open \$1;
-#X obj 49 221 t b f;
-#X text 173 181 <- converts '/dev/input/eventX' to 'X';
-#X text 11 476 Use [route] to separate the messages \, and you'll be
-left with the second list element \, like /dev/input/event5;
-#X text 120 295 <- gets told which /dev/input/eventX to use;
-#X text 258 309 then is opened \, started;
-#X text 9 410 USING input_noticer:;
-#X text 57 74 <- outputs are tuples like 0 \, /dev/input/event5;
-#X text 246 89 1 \, /dev/input/event6;
-#X text 246 104 etc...;
-#X text 56 148 <- add more below here for multiple input devices;
-#N canvas 282 199 759 562 creating_input_abstractions 0;
-#X text 31 23 The philosophy behind input_noticer is really "plug and
-play". It's silly to have to manually figure out which device file
-a piece of hardware has mapped to \, then change your PD patch to match..
-Or to have to make sure to plug your devices in in the same order every
-time \, to make sure that the device files get created in a deterministic
-way \, etc..;
-#X text 30 122 The point of input_noticer is to make all of this "just
-work" \, so that you can get to the more interesting parts of interaction/instrument/sound/performance
-design.;
-#X text 30 167 -David Merrill <dmerrill@media.mit.edu>;
-#X restore 48 605 pd creating_input_abstractions;
-#X obj 79 321 route abs;
-#X floatatom 79 365 5 0 0 0 - - -;
-#X obj 79 343 route abs_x abs_y;
-#X floatatom 136 367 5 0 0 0 - - -;
-#X msg 32 250 poll 5;
-#X connect 0 0 14 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 14 0 15 0;
-#X connect 15 0 18 0;
-#X connect 16 0 29 0;
-#X connect 17 0 16 0;
-#X connect 18 0 33 0;
-#X connect 18 1 17 0;
-#X connect 29 0 31 0;
-#X connect 31 0 30 0;
-#X connect 31 1 32 0;
-#X connect 33 0 16 0;
diff --git a/externals/input_noticer/input_noticer.c b/externals/input_noticer/input_noticer.c
deleted file mode 100644
index a462f39f3..000000000
--- a/externals/input_noticer/input_noticer.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * input_noticer - input noticer external for pure-data
- *
- * David Merrill <dmerrill@media.mit.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include <libhal.h>
-#include <stdio.h>
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <stdlib.h>
-#include <string.h>
-#include "input_noticer.h"
-
-static char *version = "$Revision: 1.2 $";
-#define MAX_INPUT_DEVICES 32
-
-/*------------------------------------------------------------------------------
- *  CLASS DEF
- */
-
-typedef struct callback_info {
-  void    (*device_added)(char *device_file);
-  void    (*device_removed)(char *device_file);
-} callback_info;
-
-static t_class *input_noticer_class;
-
-typedef struct _input_noticer {
-	t_object		x_obj;
-	GMainContext	*gmc;
-	GMainLoop		*gml;
-	callback_info	*cbi;
-	LibHalContext	*lhc;
-	DBusConnection	*connection;
-	char			*capability;
-	char			*product_substring;
-	int				device_idx;
-	t_outlet		*notify_out;
-	char			*last_notification_sent;
-	GThread			*gthread;
-	int				started;
-} t_input_noticer;
-
-int udi_matches_device(LibHalContext *ctx, const char *udi);
-static void output_list(t_input_noticer *x, t_symbol *s, int argc, t_atom *argv);
-
-/*------------------------------------------------------------------------------
- * IMPLEMENTATION                    
- */
-
-static void output_inputpath(t_input_noticer *x, int idx, char *path)
-{
-	t_atom t[2];
-
-	// set up the output array
-  	SETFLOAT(&(t[0]),idx); 
-  	SETSYMBOL(&(t[1]),gensym(path));
-
-	// output a list
-  	outlet_list(x->notify_out, &s_list, 2, t);
-}
-
-int scmp(const void *sp1, const void *sp2 )
-{
-    return( strcmp(*(char **)sp1, *(char **)sp2) );
-}
-
-void scan_for_devices(LibHalContext *ctx) {
-	char **		input_devices;
-	int		num_input_devices;
-	int		i,j;
-	int		this_device_idx;
-  	DBusError	dbus_error;
-	char *linux_device_file = NULL;
-	char *found_devices[MAX_INPUT_DEVICES];
-	t_input_noticer *x = libhal_ctx_get_user_data(ctx);
-    
-    /// can't do anything here if we don't have a pointer back to our struct
-    if (x == NULL) return;
-
-	// not really using this, but why not initialize... :)
-    dbus_error_init (&dbus_error);
-
-	// grab an array of all devices that match the capability we're looking for
-    input_devices = libhal_find_device_by_capability (ctx, "input", &num_input_devices, &dbus_error);
-	if (dbus_error_is_set (&dbus_error))
-	{
-		post("could not find existing networking devices: %s\n", dbus_error.message);
-		dbus_error_free (&dbus_error);
-		return;		
-	}
-
-	if (input_devices) 
-        {	
-		// we found at least one
-		this_device_idx = 0;
-		for (i = 0; i < num_input_devices; i++)
-		{
-			if (udi_matches_device(ctx, input_devices[i])) 
-			{
-				post("found a %s",x->product_substring);
-
-				// get the linux.device_file
-				linux_device_file = libhal_device_get_property_string(ctx, input_devices[i],"linux.device_file", NULL);
-				
-				// store the linux device file
-				found_devices[this_device_idx] = linux_device_file;
-
-				this_device_idx++;
-			}
-
-		}
-		// sort the devices alphabetically, so they will stay in the same order
-		qsort (found_devices, this_device_idx, sizeof (char *), scmp);
-		for (i = 0; i < this_device_idx; i++)
-		{
-			output_inputpath(x, i, found_devices[i]);
-			libhal_free_string(found_devices[i]);
-		}
-		libhal_free_string_array(input_devices);
-        } else {
-		post("no input devices found!");
-        }
-}
-
-// this function checks the UDI returned from libhal against the device product string
-// that we are looking
-int udi_matches_device(LibHalContext *ctx, const char *udi) {
-	t_input_noticer *x = libhal_ctx_get_user_data(ctx);
-	int i;
-	char *capability = malloc (strlen("input") + strlen(x->capability) + 2);
-	char *temp1;
-
-	sprintf(capability,"input.%s",x->capability);
-	temp1 = libhal_device_get_property_string (ctx, udi, "info.product", NULL);
-	if (libhal_device_property_exists(ctx, udi, "info.capabilities", NULL)) 
-	{
-		char **capabilities = libhal_device_get_property_strlist(ctx, udi, "info.capabilities", NULL);
-    		for (i=0; capabilities[i] != NULL; i++) 
-		{
-			//post("looking for %s, now checking capability #%d, %s",capability,i,capabilities[i]);
-      			if (!strcmp (capabilities[i], capability)) 
-			{
-         			char *temp = libhal_device_get_property_string (ctx, udi, "info.product", NULL);
-				if (temp != NULL && strstr(temp, x->product_substring)) // if product string matches up
-				{
-					libhal_free_string_array(capabilities);
-					libhal_free_string (temp);
-					free(capability);
-					return 1;					
-				} else {
-					// product string does not match up
-				}
-
-				libhal_free_string (temp);
-         		}
-		}
-		libhal_free_string_array(capabilities);
-        } else {
-        	// no capabilities found
-        }
-        free(capability);
-	return 0;
-}
-
-// this callback gets called whenever HAL notices a new device being added
-void hal_device_added(LibHalContext *ctx, const char *udi) {
-  t_input_noticer *x = libhal_ctx_get_user_data(ctx);
-
-  if (x != NULL && x->started) {
-  	if (udi_matches_device(ctx,udi)) {
-  		scan_for_devices(ctx);
-  	} else {
-        	// post("nope");
-  	}
-  }
-}
-
-void hal_device_removed(LibHalContext *ctx, const char *udi) {
-  // post("device removed, udi = %s\n", udi);  
-}
-
-// I haven't seen this one get called... <Dm>
-void hal_device_new_capability(LibHalContext *ctx, const char *udi, const char *capability) {
-	// post("new device capability, udi = %s\n", udi);  
-}
-
-void input_noticer_stop(t_input_noticer* x) {
-  DEBUG(post("input_noticer_stop"););
-
-  /* Signal the HAL listener to stop */
-  g_main_loop_quit(x->gml);
-
-  /* Wait until it has actually stopped */
-  g_thread_join(x->gthread);
-}
-
-static int input_noticer_close(t_input_noticer *x) {
-	DEBUG(post("input_noticer_close"););
-	
-	input_noticer_stop(x);
-
-   if (x->product_substring) free(x->product_substring);
-   if (x->capability) free(x->capability);
-   
-   return 1;
-}
-
-static int input_noticer_open(t_input_noticer *x, t_symbol *s) {
-  DEBUG(post("input_noticer_open");)
-
-  // close it down, if running already
-  input_noticer_close(x);
-  
-  return 1;
-}
-
-void input_noticer_start(t_input_noticer* x) {
-  post("input_noticer: started");
-
-  x->started = 1;
-  
-  // do first scan here (NOT in input_noticer_new, can't generate output from there)
-  scan_for_devices(x->lhc);
-}
-
-gpointer input_noticer_thread_main(gpointer user_data) {
-  t_input_noticer *x = (t_input_noticer *) user_data;
-	
-  /* Run the main loop.  We stay here until g_main_quit() is called */
-  g_main_loop_run(x->gml);
-
-  return user_data;
-}
-
-/* teardown functions */
-static void input_noticer_free(t_input_noticer* x) {
-  DEBUG(post("input_noticer_free");)
-}
-
-// removes double-quotes from a string, and returns a copy of it, otherwise unharmed
-static char *remove_quotes(char *input_str)
-{
-	char *rv, *tp;
-	unsigned int i;
-
-	// post ("removing quotes from %s", input_str);
-		
-	if (input_str != NULL)
-	{
-		rv = malloc ((strlen(input_str) + 1) * sizeof(char));
-		tp = rv;
-		for (i=0; i < strlen(input_str); i++) {
-			if (input_str[i] != '"') {
-				*tp = input_str[i];
-				tp++;
-			}
-		}
-		*tp = '\0';
-	} else {
-		return NULL;
-	}
-	
-	post ("returning %s", rv);
-	return rv;
-}
-
-/* setup functions */
-static void *input_noticer_new(t_symbol *capability, t_symbol *product_substring) {
-  int i;
-  t_input_noticer *x = (t_input_noticer *)pd_new(input_noticer_class);
-
-  post("[input_noticer] %s, written by David Merrill <dmerrill@media.mit.edu>",version);  
-
-  /* init vars */
-  x->gmc = NULL;
-  x->cbi = NULL;
-  x->lhc = NULL;
-  x->connection = NULL;
-  x->notify_out = NULL;
-  x->last_notification_sent = NULL;
-  x->started = 0;
-  x->capability = remove_quotes((char *)capability->s_name);
-  x->product_substring = remove_quotes((char *)product_substring->s_name);
-
-  // create outlet for notifying
-  x->notify_out = outlet_new(&x->x_obj, 0); // list outlet
-
-  // Setup glib and dbus for threading
-  g_type_init();
-  if (!g_thread_supported ())
-    g_thread_init (NULL);
-  dbus_g_thread_init();
-
-  // create a context for the callback functions
-  x->gmc = g_main_context_new();
-  x->gml = g_main_loop_new(x->gmc, FALSE);
-
-  // create a libhal context
-  if ((x->lhc = libhal_ctx_new()) == NULL) {
-    // complain here (exit)
-    DEBUG(post("input_noticer_open: error, could not create a libhal context!");)
-  }
-  
-  // get the dbus connection
-  x->connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-  if (x->connection == NULL) {
-    // complain here (exit)
-    DEBUG(post("input_noticer_open: error, could not get the DBUS connection!");)
-  }
-
-  // attaches the main loop to dbus, so that the main loop
-  // gets dbus events
-  dbus_connection_setup_with_g_main(x->connection,x->gmc);
-
-  // tells libhal to use our dbus connection, in order to receive
-  // events from hal
-  libhal_ctx_set_dbus_connection(x->lhc,x->connection);
-
-  if (!libhal_ctx_init (x->lhc, NULL)) {
-    DEBUG(post("input_noticer_open: error, could not init libhal!");)
-  } 
-  
-  // handing my custom data structure to libhal context, so that the callback functions
-  // can get to it
-  libhal_ctx_set_user_data(x->lhc, x);
-
-  libhal_ctx_set_device_added(x->lhc, hal_device_added);
-  libhal_ctx_set_device_removed(x->lhc,  hal_device_removed);
-  libhal_ctx_set_device_new_capability(x->lhc,  hal_device_new_capability);
-
-  /* Create the thread that listens for HAL events */
-  x->gthread = g_thread_create(input_noticer_thread_main, x, TRUE, NULL);
- 
-  return (void *)x;
-}
-
-void input_noticer_setup(void) {
-  // DEBUG(post("input_noticer_setup");)
-
-  // define how the object gets instantiated
-  // example: [input_noticer joystick "SideWinder Dual Strike"]
-  input_noticer_class = class_new(	
-  			gensym("input_noticer"), 
-			(t_newmethod)input_noticer_new, 
-			(t_method)input_noticer_free,
-			sizeof(t_input_noticer),
-			CLASS_DEFAULT,
-			A_DEFSYMBOL,
-			A_DEFSYMBOL,
-			0);
-
-  class_addbang(input_noticer_class, input_noticer_start);
-}
diff --git a/externals/input_noticer/input_noticer.h b/externals/input_noticer/input_noticer.h
deleted file mode 100644
index 5bedd24f3..000000000
--- a/externals/input_noticer/input_noticer.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef INPUT_NOTICER_H_
-#define INPUT_NOTICER_H_
-
-/*
- * input_noticer - input noticer external for pure-data
- *
- * David Merrill <dmerrill@media.mit.edu>
- *
- * Description: Using dbus and the hardware abstraction layer (HAL) in linux, 
- * this external allows pd to find all linux device files for a given device type.
- * This scanning behavior can happen when the external is set up (via a [bang]),
- * and will happen automatically when a new device is added to the system. An
- * example linux device file would be:
- * 
- * /dev/input/event5
- * 
- * The pd user specifies device type as a string - i.e. "SideWinder Dual Strike", and
- * this external outputs lists containing an index, and the linux device file where 
- * each device of the given type was found. For example
- * 
- * {0, /dev/input/event5}
- * {1, /dev/input/event6}
- * 
- * These lists can be routed in PD with the [route] object - see the help file for
- * more details.
- * 
- * Thanks to Dan Willmans, Seth Nickell, and David Zeuthen for their 
- * invaluable help with the whole dbus/hal part. Also, thanks to Hans-Christoph
- * Steiner for his help with (and creation of) the joystick external.
- * 
- * For good examples and reference on dbus/hal, please see: 
- * NetworkManager.c: http://cvs.gnome.org/viewcvs/NetworkManager/src/NetworkManager.c?rev=1.100&view=markup
- * libhal.h: http://webcvs.freedesktop.org/hal/hal/libhal/libhal.h?rev=1.32&view=markup
- * 
- * Parts of this code were pulled from those examples.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include <m_pd.h>
-
-//#define DEBUG(x)
-#define DEBUG(x) x 
-
-#endif /*INPUT_NOTICER_H_*/
diff --git a/externals/input_noticer/noticer_test.pd b/externals/input_noticer/noticer_test.pd
deleted file mode 100644
index 4ea2dcc12..000000000
--- a/externals/input_noticer/noticer_test.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X obj 49 93 print A;
-#X obj 49 70 route 0 1;
-#X obj 107 140 print C;
-#X obj 78 116 print B;
-#X obj 49 10 loadbang;
-#X obj 49 45 input_noticer joystick "SideWinder Dual Strike";
-#X obj 110 10 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X connect 1 0 0 0;
-#X connect 1 1 3 0;
-#X connect 1 2 2 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 5 0;
diff --git a/externals/input_noticer/parseeventnodenum.c b/externals/input_noticer/parseeventnodenum.c
deleted file mode 100644
index e8ddae1d4..000000000
--- a/externals/input_noticer/parseeventnodenum.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* 
- * author: David Merrill <dmerrill@media.mit.edu>
- * based on code from Tom Schouten, found online at:
- * http://lists.puredata.info/pipermail/pd-list/2002-02/004871.html
- */
-
-#include "m_pd.h"
-#include <stdio.h>
-
-#define MAXHEAD 1024
-
-typedef struct{
-    char buffer[MAXHEAD];
-} t_parseeventnodenum_data;
- 
-typedef struct parseeventnodenum
-{
-  t_object t_ob;
-  t_outlet *x_out;  
-  t_outlet *x_out_error;
-} t_parseeventnodenum;
-
-void penn_any_method(t_parseeventnodenum *x, t_symbol *s, int argc, t_atom *argv)
-{
-    char* p = s->s_name;
-    int eventnodenum = -1, rv = 0;
-
-    if (sscanf(p,"/dev/input/event%i",&eventnodenum)) {
-
-	// success, send the float to the left outlet
-	outlet_float(x->x_out, eventnodenum);
-    } else {
-
-	// failure, send the input symbol to the right outlet
-	outlet_symbol(x->x_out_error, gensym(p));
-    }
-}
-
-void parseeventnodenum_free(void)
-{
-}
-
-t_class *parseeventnodenum_class;
-
-void *parseeventnodenum_new(void)
-{
-    t_parseeventnodenum *x = (t_parseeventnodenum *)pd_new(parseeventnodenum_class);
-
-    // left outlet is where the parsed number will come out
-    x->x_out = outlet_new(&x->t_ob, gensym("float"));
-
-    // right outlet is where the original string will come out if an error occured
-    x->x_out_error = outlet_new(&x->t_ob, gensym("symbol"));
-
-
-    return (void *)x;
-}
-
-void parseeventnodenum_setup(void)
-{
-    parseeventnodenum_class = class_new(gensym("parseeventnodenum"), (t_newmethod)parseeventnodenum_new,
-    	(t_method)parseeventnodenum_free, sizeof(t_parseeventnodenum), 0, 0);
-    class_addanything(parseeventnodenum_class, penn_any_method);
-}
-
diff --git a/externals/input_noticer/test_noticer.c b/externals/input_noticer/test_noticer.c
deleted file mode 100644
index b963ae324..000000000
--- a/externals/input_noticer/test_noticer.c
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <libhal.h>
-#include <stdio.h>
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <stdlib.h>
-
-typedef struct callback_info {
-  void    (*device_added)(char *device_file);
-  void    (*device_removed)(char *device_file);
-} callback_info;
-
-// callback fns
-
-// this one actually never gets called in my experience <DJM>
-void hal_device_added(LibHalContext *ctx, const char *udi) {
-  int i, found_joystick;
-  char *linux_device_file = NULL;
-
-  printf("device added, udi = %s\n", udi);
-
-  // find out if this device advertises capabilities
-  if (libhal_device_property_exists(ctx, udi, "info.capabilities", NULL)) {
-    //printf("***** it's a joystick! *****\n");
-
-    // get the capabilities strlist
-    char **capabilities = libhal_device_get_property_strlist(ctx, udi, "info.capabilities", NULL);
-
-    // find out if it's a joystick
-    found_joystick = 0;
-    for (i=0; capabilities[i] != NULL; i++) {
-      if (!strcmp (capabilities[i], "input.joystick")) {
-         char **linux_device_file_strlist;
-         found_joystick = 1;
-
-	// printf("found a joystick!\n");
-
-         // pull out the relevant information (note - in Device Manager, this is reported incorrectly as a strlist,
-	 // whereas it actually returns a string - so we make the correct call here
-         linux_device_file = libhal_device_get_property_string(ctx, udi, "linux.device_file", NULL);
-
-         if (linux_device_file != NULL) {
-            // linux_device_file = linux_device_file_strlist[0];
-            printf("found the joystick at: %s\n", linux_device_file);
-
-         } else {
-	    // we didn't find the device file, better luck next time
-
-         }
-      }
-      // printf("got the following: %s\n", capabilities[i]);
-    }
-  }
-}
-
-void hal_device_removed(LibHalContext *ctx, const char *udi) {
-  printf("device removed, udi = %s\n", udi);  
-}
-
-void hal_device_new_capability(LibHalContext *ctx, const char *udi, const char *capability) {
-  char *device;
-  callback_info *cbi = (callback_info *)libhal_ctx_get_user_data(ctx);
-
-  printf("device has a new capability, udi = %s, cap = %s\n", udi, capability); 
-
-  if (capability && ((strcmp (capability, "input") == 0))) {
-	// 
-	if (libhal_device_property_exists(ctx, udi, "input.device", NULL)) {
-		device = libhal_device_get_property_string(ctx, udi, "input.device",NULL);
-
-		// this is the callback into my PD C code
-		// (*(cbi->device_added))(device);
-		printf("new capability, testing: %s\n",device);
-	}
-  } 
-}
-
-
-
-gpointer hal_thread_main(gpointer user_data) {
-  callback_info *cbi = (callback_info *)(user_data);
-  GMainContext *gmc;
-  GMainLoop *gml;
-  LibHalContext *lhc;
-  DBusConnection *connection;
-
-  gmc = g_main_context_new();
-  gml = g_main_loop_new(gmc,FALSE);
-
-  if ((lhc = libhal_ctx_new()) == NULL) {
-    // complain here (exit)
-  }
-  
-  connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
-  if (connection == NULL) {
-
-  }
-
-  // attaches the main loop to dbus, so tha the main loop
-  // gets dbus events
-  dbus_connection_setup_with_g_main(connection,gmc);
-
-  // tells libhal to use our dbus connection, in order to receive
-  // events from hal
-  libhal_ctx_set_dbus_connection(lhc,connection);
-
-  if (!libhal_ctx_init (lhc, NULL)) {
-    // die
-  } 
-  
-  // handing my custom data structure to libhal context
-  libhal_ctx_set_user_data(lhc, cbi);
-
-  libhal_ctx_set_device_added(lhc, hal_device_added);
-  libhal_ctx_set_device_removed(lhc,  hal_device_removed);
-  libhal_ctx_set_device_new_capability(lhc,  hal_device_new_capability);
-
-  // Get stuck here forever, and ever, and ever....
-  g_main_loop_run(gml);
-}
-
-GThread *hal_thread(callback_info *cbi) {
-  GThread *rv;
-
-  // eventually, we will pass in some user data here (the first NULL)
-  // this could be a fn pointer, or a structure with a few fn pointers, 
-  // etc, so that 
-  rv = g_thread_create(hal_thread_main, cbi, TRUE, NULL);
-  return(rv);
-}
-
-int main(int argc, char **argv) {
-  GThread *gth;
-  callback_info * cbi = malloc (sizeof (callback_info));
-  
-  // Setup glib
-  g_type_init();
-  if (!g_thread_supported ())
-    g_thread_init (NULL);
-
-  dbus_g_thread_init();
-
-  gth = hal_thread(cbi);
-  while (1) {
-    sleep(1);
-  }
-}
-
diff --git a/externals/input_noticer/test_noticer_compile.sh b/externals/input_noticer/test_noticer_compile.sh
deleted file mode 100644
index 7adc18a1a..000000000
--- a/externals/input_noticer/test_noticer_compile.sh
+++ /dev/null
@@ -1 +0,0 @@
-gcc `pkg-config --cflags --libs glib-2.0 hal dbus-glib-1 gthread-2.0` -o test_noticer test_noticer.c
diff --git a/externals/jackx/GnuGPL.txt b/externals/jackx/GnuGPL.txt
deleted file mode 100644
index fa0bef492..000000000
--- a/externals/jackx/GnuGPL.txt
+++ /dev/null
@@ -1,290 +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. 
-
-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
diff --git a/externals/jackx/README b/externals/jackx/README
deleted file mode 100644
index 1bef91740..000000000
--- a/externals/jackx/README
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Another small external lib.
-This one has two objects:
-jack-connect :connect/disconnect/toggle/query connections from named ports
-jack-ports: find the ports in the jack-graph. You can send it regular-expressions plus a few keywords to get client and port names.
-
-There are two basic help patches included.
-
-
-
-To compile:
-make sure that m_pd.h is in your include path
-type make.
-Manually install everything :)
-
-have fun
-
-TODO
-finally learn autotools
-When and if the jack-developers finalize their transport structures add a jack-transport object.
-
-
-
-Gerard van Dongen
-gml@xs4all.nl
diff --git a/externals/jackx/jack-connect-help.pd b/externals/jackx/jack-connect-help.pd
deleted file mode 100644
index be2cb512e..000000000
--- a/externals/jackx/jack-connect-help.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 1260 312 610 300 10;
-#X obj 137 190 jack-connect;
-#X obj 137 231 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 136 12 connect;
-#X msg 139 39 toggle;
-#X msg 156 89 symbol alsa_pcm;
-#X msg 195 133 symbol pure_data_0;
-#X msg 138 65 query;
-#X msg 317 8 bang;
-#X msg 382 6 0;
-#X obj 346 30 metro 50;
-#X msg 173 113 symbol capture_2;
-#X msg 216 155 symbol input0;
-#X text 307 89 output client;
-#X text 306 111 output port;
-#X text 343 133 input client;
-#X text 344 155 input port;
-#X msg 24 13 disconnect;
-#X text 185 232 output is 1 for connect(ed) 0 for disconnect(ed);
-#X text 199 64 doesn't change the connection only outputs the state
-;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 1;
-#X connect 5 0 0 3;
-#X connect 6 0 0 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 0;
-#X connect 9 0 3 0;
-#X connect 10 0 0 2;
-#X connect 11 0 0 4;
-#X connect 16 0 0 0;
diff --git a/externals/jackx/jack-ports-help.pd b/externals/jackx/jack-ports-help.pd
deleted file mode 100644
index b87c17284..000000000
--- a/externals/jackx/jack-ports-help.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 1245 199 744 386 10;
-#X obj 161 197 jack-ports;
-#X msg 160 1 bang;
-#X obj 146 239 print output;
-#X obj 253 238 print input;
-#X text 41 267 output is in the form of a pairs client - port. outputs
-on the left \, inputs on the right.;
-#X text 200 5 will give all ports registered;
-#X text 181 25 Input is a regular expression for the client/port plus
-one or more of the following keywords: virtual: a port that is _not_
-a physical hw interface physical: a port that _is_ a hw interface output:a
-port that is a jack output input: a port that is a jack input;
-#X msg 184 123 virtual input .*3.*;
-#X text 340 123 will give all software inputs with a 3 in the name
-;
-#X msg 182 153 physical ouput .*[34].*;
-#X text 356 152 will give the hw jack outputs with either a 3 or a
-4 in the name;
-#X text 354 181 notice that these are soundcard _inputs_!!;
-#X connect 0 0 2 0;
-#X connect 0 1 3 0;
-#X connect 1 0 0 0;
-#X connect 7 0 0 0;
-#X connect 9 0 0 0;
diff --git a/externals/jackx/jack.pd b/externals/jackx/jack.pd
deleted file mode 100644
index de8dbc1a7..000000000
--- a/externals/jackx/jack.pd
+++ /dev/null
@@ -1,47 +0,0 @@
-#N canvas 0 0 827 657 10;
-#X obj 77 194 jack-connect;
-#X msg 47 68 c;
-#X floatatom 78 237 5 0 0 0 - - -;
-#X msg 67 18 connect;
-#X msg 184 44 toggle;
-#X msg 178 82 symbol alsa_pcm;
-#X msg 215 127 symbol pure_data_0;
-#X msg 79 157 query;
-#X msg 227 153 symbol output0;
-#X msg 199 103 symbol playback_3;
-#X msg 317 8 bang;
-#X msg 382 6 0;
-#X obj 346 30 metro 50;
-#X obj 354 345 jack-ports;
-#X msg 365 263 bang;
-#X msg 443 271 input pure_data.*;
-#X msg 451 225 output;
-#X msg 475 298 pure_data.*;
-#X msg 523 323 pure.* output;
-#X msg 415 175 physical output .*[34].*;
-#X obj 306 399 unpack s s;
-#X obj 412 401 unpack s s;
-#X obj 265 479 jack-connect;
-#X obj 408 490 print;
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 3;
-#X connect 6 0 0 1;
-#X connect 7 0 0 0;
-#X connect 8 0 0 2;
-#X connect 9 0 0 4;
-#X connect 10 0 12 0;
-#X connect 11 0 12 0;
-#X connect 12 0 4 0;
-#X connect 13 0 20 0;
-#X connect 13 0 23 0;
-#X connect 13 1 21 0;
-#X connect 13 1 23 0;
-#X connect 14 0 13 0;
-#X connect 15 0 13 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 18 0 13 0;
-#X connect 19 0 13 0;
diff --git a/externals/jackx/jackx.c b/externals/jackx/jackx.c
deleted file mode 100644
index 75042cec0..000000000
--- a/externals/jackx/jackx.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* jack utility externals for linux pd
- * copyright 2003 Gerard van Dongen gml@xs4all.nl
-
-* 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. 
-
-
-
-* objects:  
-* jack-connect
-* this can query and set the port connections on the jack system
-* methods:
-* jack-ports
-* this can query jack ports with regex's
-
-
-
-
- */
-
-
-
-
-#include "m_pd.h"
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <jack/jack.h>
-
-
-static t_class *jackports_class;
-static t_class *jackconnect_class;
-
-typedef struct _jackports {
-	t_object x_obj;
-	t_outlet *input_ports, *output_ports;
-	char expression[128];
-	char *buffer; //used internally it doesn't have to be reserved every time
-	t_atom *a_outlist;
-
-} t_jackports;
-
-typedef struct _jackconnect {
-	t_object x_obj;
-	t_symbol *input_client,*input_port, *output_client,*output_port;
-	char source[128],destination[128]; //ought to be enough for most names
-	int connected;
-} t_jackconnect;
-
-static jack_client_t * jc;
-
-
-
-/********************************************************************************************************
-
-methods for jack-ports
-
-*********************************************************************************************************/
-
-void jackports_input(t_jackports *x, t_symbol *s,int argc, t_atom *argv)
-{
-	if (jc){
-	const char ** ports;
-
-	int l = 0;
-	int n = 0;
-	int keyflag = 0;
-	int expflag =0;
-	int portflags = 0;
-	t_symbol *s_client;
-	t_symbol *s_port;
-	char *t;
-
-	if (!strcmp(s->s_name,"bang")) {
-		strcpy(x->expression,"");
-		expflag = 1;
-	} else {
-
-		//parse symbol s and all arguments for keywords:
-		//physical,virtual,input and output
-
-		if (!strcmp(s->s_name,"physical")) {
-			portflags = portflags | JackPortIsPhysical;
-			keyflag = 1;
-		}
-		if (!strcmp(s->s_name,"virtual")) {
-			portflags = portflags & (~JackPortIsPhysical);
-			keyflag = 1;
-		}		
-		if (!strcmp(s->s_name,"input")) {
-			portflags = portflags | JackPortIsInput;
-			keyflag = 1;
-		}
-
-		if (!strcmp(s->s_name,"output")) {
-			portflags = portflags | JackPortIsOutput;
-			keyflag = 1;
-		}
-		if (!keyflag) {
-			strcpy(x->expression,s->s_name);
-			expflag = 1;
-		}
-		for (n=0;n<argc;n++) {
-			keyflag = 0;
-			atom_string(argv+n,x->buffer,128);
-			if (!strcmp(x->buffer,"physical")) {
-				portflags = portflags | JackPortIsPhysical;
-				keyflag = 1;
-			}
-			if (!strcmp(x->buffer,"virtual")) {
-				portflags = portflags & (~JackPortIsPhysical);
-				keyflag = 1;
-			}		
-			if (!strcmp(x->buffer,"input")) {
-				portflags = portflags | JackPortIsInput;
-				keyflag = 1;
-			}
-			
-			if (!strcmp(x->buffer,"output")) {
-				portflags = portflags | JackPortIsOutput;
-				keyflag = 1;
-			}
-			if (!keyflag && !expflag) {
-				strcpy(x->expression,x->buffer);
-				expflag = 1;
-			}
-
-
-		}
-
-
-	}
-
-
-	ports = jack_get_ports (jc,x->expression,NULL,portflags|JackPortIsOutput);
-	n=0;
-	if (ports) {
-		while (ports[n]) {
-			//seperate port and client
-			
-			l = strlen(ports[n]);
-			t = strchr(ports[n],':');
-
-			if (t) {
-				s_port=gensym(strchr(ports[n],':')+1);
-			
-
-				snprintf(x->buffer,l-strlen(s_port->s_name),ports[n]);
-				s_client = gensym(x->buffer);
-
-				SETSYMBOL(x->a_outlist,s_client);			
-				SETSYMBOL(x->a_outlist+1,s_port);
-
-				// output in output-outlet
-				outlet_list(x->output_ports,&s_list,2,x->a_outlist);
-			}
-
-			n++;
-		}
-	}
-	free(ports);
-
-	ports = jack_get_ports (jc,x->expression,NULL,portflags|JackPortIsInput);
-	n=0;
-	if (ports) {
-		while (ports[n]) {
-			l = strlen(ports[n]);
-			t = strchr(ports[n],':');
-
-			if (t) {
-				s_port=gensym(strchr(ports[n],':')+1);
-			
-
-				snprintf(x->buffer,l-strlen(s_port->s_name),ports[n]);
-				s_client = gensym(x->buffer);
-
-				SETSYMBOL(x->a_outlist,s_client);			
-				SETSYMBOL(x->a_outlist+1,s_port);
-
-				// output in output-outlet
-				outlet_list(x->input_ports,&s_list,2,x->a_outlist);
-			}
-		
-			
-			n++;
-		}
-	}
-	free(ports);
-
-	strcpy(x->expression,"");//reset regex
-	}
-
-}
-
-
-
-
-void *jackports_new(void)
-{
-	t_jackports * x = (t_jackports *)pd_new(jackports_class);
-	x->output_ports = outlet_new(&x->x_obj, &s_list);
-	x->input_ports = outlet_new(&x->x_obj, &s_list);
-	x->a_outlist = getbytes(3 * sizeof(t_atom));
-	x->buffer = getbytes(128);
-
-	return (void*)x;
-}
-
-
-
-/********************************************************************************************************
-
-methods for jack-connect
-
-*********************************************************************************************************/
-void jackconnect_getnames(t_jackconnect *x)
-{
-	char* to = x->source;
-	to = (char*)stpcpy( to,x->output_client->s_name);
-	to = (char*)stpcpy(to,":");
-	to = (char*)stpcpy(to,x->output_port->s_name);
-	to = x->destination;
-	to = (char*)stpcpy(to,x->input_client->s_name);
-	to = (char*)stpcpy(to,":");
-	to = (char*)stpcpy(to,x->input_port->s_name);
-
-}
-void jackconnect_connect(t_jackconnect *x)
-{
-
-	if (jc) {
-
-		jackconnect_getnames(x);
-		post("connecting   %s with %s",x->source,x->destination);
-		if (!jack_connect(jc,x->source,x->destination)) {
-			x->connected = 1;
-			outlet_float(x->x_obj.ob_outlet,x->connected);
-		}
-	}
-
-}
-
-void jackconnect_disconnect(t_jackconnect *x)
-{
-	if (jc) {
-
-		jackconnect_getnames(x);
-		if (!jack_disconnect(jc,x->source,x->destination)) {
-			x->connected = 0;
-			outlet_float(x->x_obj.ob_outlet,x->connected);
-		}
-		post("disconnecting   %s with %s",x->source,x->destination);
-	}
-
-}
-
-void jackconnect_toggle(t_jackconnect *x)
-{
-	if (jc) {
-
-		jackconnect_getnames(x);
-		post("toggling connection   %s with %s",x->source,x->destination);
-		if (jack_disconnect(jc,x->source,x->destination)) {
-			jack_connect(jc,x->source,x->destination);
-			x->connected = 1;
-		} else {
-			x->connected = 0;
-		}
-		outlet_float(x->x_obj.ob_outlet,x->connected);
-	}
-}
-
-
-void jackconnect_query(t_jackconnect *x)
-{
-	if (jc) {
-
-		const char **ports;
-		int n=0;
-		jackconnect_getnames(x);
-		
-		post("querying connection   %s with %s",x->source,x->destination);
-		
-		ports = jack_port_get_all_connections(jc,(jack_port_t *)jack_port_by_name(jc,x->source));
-		x->connected = 0;
-		
-		if(ports){
-			while (ports[n]){
-				post("n = %i",n);
-				if (!strcmp(ports[n],x->destination)){
-					x->connected = 1;
-					break;
-				}
-				n++;
-				
-			}
-			free(ports);
-		}
-		outlet_float(x->x_obj.ob_outlet,x->connected);
-	}
-
-
-
-}
-
-
-
-
-
-
-
-void *jackconnect_new(void)
-{
-	t_jackconnect * x = (t_jackconnect *)pd_new(jackconnect_class);
-
-	outlet_new(&x->x_obj, &s_float);
-	symbolinlet_new(&x->x_obj,&x->output_client);
-	symbolinlet_new(&x->x_obj,&x->output_port);
-	symbolinlet_new(&x->x_obj,&x->input_client);
-	symbolinlet_new(&x->x_obj,&x->input_port);
-
-	/* to prevent segfaults put default names in the client/port variables */
-	x->input_client = gensym("none");
-	x->input_port = gensym("none");
-	x->output_client =  gensym("none");
-	x->output_port =  gensym("none");
-	x->connected = 0;
-	jackconnect_getnames(x);
-
-	return (void*)x;
-}
-
-
-/********************************************************************************************************
-
-setup for jack-connect and jack-ports
-
-*********************************************************************************************************/
-
-
-
-void jackx_setup(void)
-{
-
-	post("//////////////////////////////////////////\n"
-	     "/////Jack utility external library///////\n"
-	     "////Gerard van Dongen, gml@xs4all.nl////\n"
-	     "///testing for jack////////////////////\n"
-	     "//////////////////////////////////////");
-
-
-	jc = jack_client_new("jacky-x");
-
-
-
-
-        /*jack ports setup */
-
-	jackports_class = class_new(gensym("jack-ports"),(t_newmethod)jackports_new,0,sizeof(t_jackports),CLASS_DEFAULT,0);
-
-
-
-
-	class_addanything(jackports_class,jackports_input);
-
-	class_sethelpsymbol(jackports_class,gensym("jack-ports"));
-
-	/*jack-connect setup */
-
-
-
-	jackconnect_class = class_new(gensym("jack-connect"),(t_newmethod)jackconnect_new,0,sizeof(t_jackconnect),CLASS_DEFAULT,0);
-
-	class_addmethod(jackconnect_class, (t_method)jackconnect_connect, gensym("connect"),0);
-	class_addmethod(jackconnect_class, (t_method)jackconnect_disconnect, gensym("disconnect"),0);
-	class_addmethod(jackconnect_class, (t_method)jackconnect_toggle, gensym("toggle"),0);
-	class_addmethod(jackconnect_class, (t_method)jackconnect_query, gensym("query"),0);
-	class_addbang(jackconnect_class, (t_method)jackconnect_toggle);
-	class_sethelpsymbol(jackports_class,gensym("jack-connect"));
-}
-
-
-
-
diff --git a/externals/jackx/makefile b/externals/jackx/makefile
deleted file mode 100644
index 333a18dd3..000000000
--- a/externals/jackx/makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-
-CFLAGS = -DPD $(OPT_CFLAGS) -I../../pd/src -Wall -W $(DEBUG_CFLAGS)
-LDFLAGS =  
-LIBS = -lm
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Linux)
-  OS_NAME = linux
-  EXTENSION = pd_linux
-  CFLAGS += -DUNIX -Dunix -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared
-endif
-ifeq ($(UNAME),Darwin)
-  OS_NAME = darwin
-  EXTENSION = pd_darwin
-  CFLAGS += -DMACOSX -DUNIX -Dunix
-  LDFLAGS += -bundle -bundle_loader ../../pd/bin/pd -undefined dynamic_lookup
-endif
-
-all: jackx.$(EXTENSION)
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-	rm -f -- $*.o
-
-clean:
-	-rm -f -- jackx.$(EXTENSION)
-	-rm -f -- jackx.o
diff --git a/externals/k_cext/Makefile b/externals/k_cext/Makefile
deleted file mode 100644
index 1ed4d0e53..000000000
--- a/externals/k_cext/Makefile
+++ /dev/null
@@ -1,98 +0,0 @@
-NAME=k_cext
-CSYM=k_cext
-
-DIR=k_cext
-
-current: pd_linux
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo /DINCLUDEPATH=\"D:\\sourcescvs\\pd\"
-
-PDNTINCLUDE = /I. /ID:\sourcescvs\pd\src
-PDNTLIB = libc.lib oldnames.lib kernel32.lib "C:\Pure Data\bin\pd.lib"
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c k_cext_win.c
-	link /dll /export:$(CSYM)_setup $*.obj k_cext_win.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux  k_cext.c k_cext.h  k_cext_generatecode.c
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDEPATH=../../src
-LINUXINCLUDE =  -I$(LINUXINCLUDEPATH)
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\" -o k_cext.o -c k_cext.c
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\" -o k_cext_unix.o -c k_cext_unix.c
-	ld --export-dynamic  -shared -o k_cext.pd_linux k_cext.o k_cext_unix.o -lc -lm
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s $(DIR)/$*.pd_linux ..
-	ln -sf $(DIR)/$*.pd_linux ../k_cfunc.pd_linux
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: $(NAME).pd_darwin k_cext.c k_cext.h   k_cext_generatecode.c
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\ -o $*.o -c k_cext.c
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\ -o $*.o -c k_cext_macosx.c
-	cc -bundle -undefined suppress  -flat_namespace -o $*.pd_darwin $*.o 
-	rm -f $*.o ../$*.pd_darwin
-	ln -s $*/$*.pd_darwin ..
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations *~ core
diff --git a/externals/k_cext/README b/externals/k_cext/README
deleted file mode 100644
index e5998169d..000000000
--- a/externals/k_cext/README
+++ /dev/null
@@ -1,262 +0,0 @@
-
-
-
-k_cext PD external
-
-
-
-INTRODUCTION
-
-	The k_cext PD external makes you able to program
-	the programming language "C" directly within
-	the PD objects.
-
-	+-------------------------------------------------------+
-	| Which means: You don't need an external text-editor.  |
-	+-------------------------------------------------------+
-
-
-
-WHY USE K_CEXT
-
-	First, the reason for using "C", and not some other programming
-	or scripting language, was simply because it is
-	so easy to compile and link c code inside externals in pd.
-	Because C is probably not the best suited language for this
-	task, except when extreme cpu-efficiency is needed.
-
-	Still, I personally think making small k_cext objects
-	is a lot more comfortable than making large pd sub-patches
-	doing the same things. And thats probably the main reason
-	to use k_cext.
-	
-
-
-
-A SMALL EXAMPLE IN K_CEXT
-
-	The following k_cext object have one inlet and one outlet.
-	What it does, when receiving a value on the inlet, is to
-	send the _previously_ received inlet value to the outlet.
-
-
-	[ k_cext 1 1;
-	  static t_float prev=0;
-	  O(0,prev);
-	  prev=V(0); ]
-
-
-	The "k_cext 1 1" line is the k_cext header. The first "1"
-	means that it has one inlet, and the second "1" means that
-	it has one outlet.
-
-	The "static t_float prev=0;" line declares a variable for the
-	object called "prev". "t_float" means that the type of the variable is
-	a floating-point number. "static" means here that the value
-	for the variable is remembered the next time the object
-	is runned, which is necesarry if we want to send out the
-	previous value sent to the inlet.
-
-	"O(0,prev);" sends the value of "prev" to outlet number 0.
-	"O" is a function.
-
-	"prev=V(0);" stores the value of the current inlet to the
-	variable "prev" for the next time the object is run.
-
-
-
-
-THE SAME EXAMPLE AS A PD SUB-PATCH
-
-
-	The following PD-patch does the same:
-
-	[inlet]
-	|
-	[t f b]
-	 \   /
-	  \ /
-	   X	
-	  / \
-	 /   \
-	[float]
-	|
-	[outlet]
-	
-
-	I guess its a matter of personal taste, but I really don't
-	find the PD-way of sending out a previous value very intuitive.
-
-	And the advantage of using k_cext instead of making
-	PD sub-patches becomes more appearent the larger the tasks are.
-	Look at the help-file, and try to do the same things directly in PD.
-
-
-
-K_CEXT OBJECT
-
-	A k_cext object can be divided into three parts:
-
-	1. Header.
-	2. Variables
-	3. Body.
-
-
-
-K_CEXT HEADER
-
-	The first line in a k_cext header is built up like this:
-
-	"k_cext <num_inlets> <num_outlets> <default inlet values>".
-
-	"k_cext 4 5 1 2 3 4" means that the object has 4 inlets,
-	5 outlets, and the value of V(0) is by default 1, the
-	value of V(1) is by default 2, the value of V(2) is by
-	default 3, and the value of V(3) is by default 4.
-
-	Its optional whether you want to set "default inlet values"
-	or not. If not set, they get the value 0.
-
-
-
-K_CEXT VARIABLES
-
-	There are four types of variables that makes sense using
-	in a k_cext object. These are:
-
-	"int" - integer number.
-	"t_float" - floating point numbers.
-	"INTARRAY" - An array of integer numbers.
-	"FLOATARRAY" - An array of floating point numbers.
-
-	See the help patch for examples of use.
-
-
-
-MACROS / USING THE PD OBJECT AS A TEXT-EDITOR
-
-	Using the pd object as a text-editor is unfortunately
-	a bit limited. But by using some pre-defined macros
-	spesified in the "k_cext.h" file, its not that bad.
-
-	begin/end -
-		The most noticable limitation is probably that you are
-		not able to write { or }. This is solved by
-		using the BEGIN and END macros. Or better; the "DO"
-	        symbol which makes k_cext automaticly insert BEGIN and
-	        END for you. Look at the help-do.pd patch.
-
-	lineshift - 
-		The pd object text editor doesn't understand lineshift
-		directly. Instead you have to use ";" at the end
-		of each line.
-
-	semicolon -
-		If you need to write ";", but dont want the line to end
-		right there, use the "SC" macro instead.
-
-	indentation -
-		The pd object text editor automaticly removes spaces and
-		tabs from the beginning of lines. You can work around this by
-		writing ". " instead. The k_cext external removes all
-		". "'s at the beginning of lines before compiling the code.
-
-	strings -
-		It does not seem to be possible to write "'s anymore in PD.
-		The workaround is to define strings like this: s<thisisastring>s
-
-
-	More macros are defined in the k_cext.h header file.
-
-
-
-OS
-	k_cext runs fine in linux using gcc and in windows using visual C.
-	The macosx code was made by looking at code inside PD, and has never
-	been tested (at least not that I know if). It might work, but probably
-	not. Check out the k_cext_macosx.c file.
-
-
-FAQ
-	Q: I can not get k_cext to work in windows, and I dont have Visual C.
-	A: You need Visual C.
-
-	Q: Where can I get a windows .dll file?
-	A: Since you allready need to have some basic knowledge about C, in
-	   addition to a C compiler, it should not be that hard for you to
-	   compile the .dll file yourself, if you know how to use the k_cext
-	   external. So you have to make it yourself.
-
-	Q: k_func does not work with Visual C.
-	A: Visual C does not have a varargs macro. Send complains to Microsoft.
-
-
-
-CHANGES
-	0.3.0 -> 0.3.1:
-	-Works with VisualC. (0.3.0 didn't):
-	  -Workaround for missing variable number of argument macros in VisualC, (which is not a gcc
-	   extension, by the way, but a part of the iso99 c-standard). (Does not work)
-	  -Workaround for missing stdbool.h file in VisualC. (also a part of the iso99 c-standard)
-	   (Thomas Grill)
-	  -Workaround for missing static <something> <something>[] in VisualC.
-	  -Fixed a variable which was not defined at the beginning of the function. (Thomas Grill)
-	  -Added macros to bang outlet and to access values (Tim Blechman)
-	  -Support for $0 values. (Tim Blechmann)
-	  -Some changes to k_cext to link with functions defined in k_cext, which wasn't possible
-           before. (for Windows). (Tim Blechmann)
-	  -Added code to make it possible to use strings again. See help-strings.pd.
-	  -Fixed horrible bug that sometime caused FLOAT k_cfuncs to crash PD.
-
-	0.2.5 -> 0.3.0:
-	-Added the k_cfunc object. k_cfunc is very similar to k_cext, but instead of being triggered
-	 by getting a bang or value on the first inlet, the k_cfunc-code is run
-	 when being called from another k_cfunc object or a k_cext object. In other words,
-	 its a c function object available for k_cext.
-
-	0.2.4 -> 0.2.5:
-	-Fixed the problem that integer numbers sometimes was converted to
-	 floats before compiling.
-	-Fixed ENDSWITCH macro.
-	-Small internal changes.
-	-Changed the PD subpatch example in the README file to use the trigger
-	 object. The information that was written earlier that you had to
-	 make connections in a certain order, was misinformation. The behaviour
-	 is unspesified according to the spesification. The trigger object fix
-	 such situations. (But if you need to use the trigger-object, its a good
-	 sign that you should rather use k_cext for the operation anyway. My
-	 opinion.)
-	-Removed the windows .dll file. If you are not able to compile up k_cext
-	 yourself, you most probably aren't able to use k_cext either.
-	-Added a "print" message, which prints out the generated c-code with
-	 line-numbers to the terminal.
-	-Prints out the generated c-code with linenumbers if compilation fails.
-	 Makes debugging a lot faster.
-	-Added a SEND macro that takes a symbol string and a number, and sends
-	 a pd message.
-	-Added "DO", which can (and should) be used instead of the BEGIN macro.
-	 DO is not a macro, but a special symbol used by the k_cext
-	 preprocessor to know when to automaticly insert BEGIN and
-	 END based on indentation. Just like Python. :)
-	-Changed the main example patch to use DO instead of BEGIN/END.
-	-Added some more example patches.
-	-Fixed nearly correct indentation for the generated C code.
-
-	0.2.3 -> 0.2.4:
-	-Added a lot of new macros to k_cext.h.
-	-Fixed the help file a bit.
-	-Wrote the README file.
-	-Changed the license for k_cext.h from GPL to LGPL.
-	 (Note, the k_cext external is still GPL)
-	-Some windows code was for some strange reason put
-	 in the macosx file. Fixed.
-	-Added Mac OSX to the Makefile. (Not tested.)
-
-
-CREDITS
-	k_cext is made by Kjetil S. Matheussen 2002/2003.
-	k.s.matheussen@notam02.no
-
-	The windows-port is made by Olaf Matthes.
-	olaf.matthes@gmx.de
-
diff --git a/externals/k_cext/help-do.pd b/externals/k_cext/help-do.pd
deleted file mode 100644
index 1e7420c0a..000000000
--- a/externals/k_cext/help-do.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 338 168 450 300 10;
-#X floatatom 8 272 5 0 0;
-#X floatatom 136 274 5 0 0;
-#X msg 129 103 1;
-#X floatatom 224 103 5 0 0;
-#X obj 12 158 k_cext 1 2 \; IF I(0)!=1 THEN DO \; . O0(I(0)) \; . O1(I(0)+1)
-\; ELSE \; . O0(-2) \; . O1(-3) \;;
-#X obj 269 141 k_cext 1 2 \; IF I(0)!=1 THEN BEGIN \; . O0(I(0)) \;
-. O1(I(0)+1) \; ELSE \; . O0(-2) \; . O1(-3) \; ENDIF;
-#X floatatom 274 269 5 0 0;
-#X floatatom 400 270 5 0 0;
-#X text 34 65 With DO:;
-#X text 288 65 Without DO:;
-#X text 10 5 DO is not a macro \, but a special symbol used by the
-k_cext preprocessor to know when to automaticly insert BEGIN and END
-based on indentation.;
-#X msg 293 109 print;
-#X msg 10 114 print;
-#X text 32 76 ---------;
-#X text 287 76 ---------;
-#X connect 2 0 4 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 3 0 5 0;
-#X connect 4 0 0 0;
-#X connect 4 1 1 0;
-#X connect 5 0 6 0;
-#X connect 5 1 7 0;
-#X connect 11 0 5 0;
-#X connect 12 0 4 0;
diff --git a/externals/k_cext/help-fibonacci.pd b/externals/k_cext/help-fibonacci.pd
deleted file mode 100644
index 38cd1949f..000000000
--- a/externals/k_cext/help-fibonacci.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X floatatom 51 143 5 0 0 0 - - -;
-#X floatatom 49 231 10 0 0 0 - - -;
-#X obj 50 174 k_cext 1 1 \; IF I(0)< 30 THEN DO \; . O(0 \, INT_fib(I(0)))
-\;;
-#X text 216 177 Set a limit on 30 \, because of;
-#X text 215 192 the computing time.;
-#X text 43 27 The simplest way to find the fibonacci numbers.;
-#X obj 49 62 k_cfunc INT_fib int n \; IF n<2 THEN DO \; . return n
-\; ELSE \; . return INT_fib(n-1)+INT_fib(n-2) \;;
-#X connect 0 0 2 0;
-#X connect 2 0 1 0;
diff --git a/externals/k_cext/help-gcd.pd b/externals/k_cext/help-gcd.pd
deleted file mode 100644
index 57ddcfdb6..000000000
--- a/externals/k_cext/help-gcd.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#N canvas 469 87 530 363 10;
-#X msg 14 79 print;
-#X floatatom 114 202 5 0 0 0 - - -;
-#X floatatom 73 201 5 0 0 0 - - -;
-#X msg 98 247 bang;
-#X floatatom 70 327 5 0 0 0 - - -;
-#X text 14 42 Find the greatest common divisor between two numbers.
-;
-#X msg 12 208 print;
-#X obj 73 271 k_cext 2 1 \; O(0 \, INT_gcd(I(0) \, I(1))) \;;
-#X obj 114 225 t b f;
-#X obj 285 174 k_cfunc INT_te \; return INT_te() \;;
-#X msg 283 132 print;
-#X obj 14 112 k_cfunc INT_gcd int a int b \; IF b==0 THEN DO \; . return
-a \; ELSE \; . return INT_gcd(b \, a%b) \;;
-#X connect 0 0 11 0;
-#X connect 1 0 8 0;
-#X connect 2 0 7 0;
-#X connect 3 0 7 0;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 8 0 3 0;
-#X connect 8 1 7 1;
-#X connect 10 0 9 0;
diff --git a/externals/k_cext/help-k_cext.pd b/externals/k_cext/help-k_cext.pd
deleted file mode 100644
index 6e1a14d16..000000000
--- a/externals/k_cext/help-k_cext.pd
+++ /dev/null
@@ -1,130 +0,0 @@
-#N canvas 231 140 726 710 10;
-#X floatatom 19 52 5 0 0 0 - - -;
-#X floatatom 17 116 5 0 0 0 - - -;
-#X floatatom 238 54 5 0 0 0 - - -;
-#X floatatom 237 117 5 0 0 0 - - -;
-#X floatatom 419 50 5 0 0 0 - - -;
-#X floatatom 419 137 5 0 0 0 - - -;
-#X floatatom 30 216 5 0 0 0 - - -;
-#X floatatom 30 337 5 0 0 0 - - -;
-#X text 416 29 Sends out previous value.;
-#X text 235 33 Adds one.;
-#X floatatom 367 199 5 0 0 0 - - -;
-#X text 26 198 (Gliding average);
-#X floatatom 29 405 5 0 0 0 - - -;
-#X floatatom 29 502 20 0 0 0 - - -;
-#X text 32 356 Calculates the faculty.;
-#X text 139 707 Additional \, read the macros in k_cext.h;
-#X floatatom 373 394 5 0 0 0 - - -;
-#X floatatom 367 501 5 0 0 0 - - -;
-#X floatatom 515 397 5 0 0 0 - - -;
-#X floatatom 516 501 5 0 0 0 - - -;
-#X text 361 366 Divide two numbers.;
-#X text 361 379 Integer modulus in the second outlet.;
-#X floatatom 53 682 10 0 0 0 - - -;
-#X floatatom 176 587 5 0 0 0 - - -;
-#X msg 62 584 bang;
-#X text 16 31 Sends out the input.;
-#X text 10 149 ______________________________________________________
-;
-#X text 12 341 ______________________________________________________
-;
-#X text 226 516 ______________________________________________________
-;
-#X text 231 688 ______________________________________________________
-;
-#X text 20 -9 ______________________________________________________
-;
-#X text 102 -28 k_cext. The c external object for PD by K.Matheussen
-\;;
-#X text 230 -9 ______________________________________________________
-;
-#X text 221 149 ______________________________________________________
-;
-#X text 231 341 ______________________________________________________
-;
-#X text 11 516 ______________________________________________________
-;
-#X text 8 688 ______________________________________________________
-;
-#X obj 323 357 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 334 165 vsl 8 185 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 183 7 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X obj 381 8 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X text 201 9 2;
-#X text 398 10 3;
-#X text 16 9 1;
-#X text 12 166 4;
-#X text 352 165 5;
-#X text 13 356 6;
-#X text 338 357 7;
-#X text 22 535 8;
-#X obj 17 75 k_cext 1 1 \; O0(V(0)) \;;
-#X obj 237 76 k_cext 1 1 \; O0(V(0) + 1) \;;
-#X obj 422 72 k_cext 1 1 \; static t_float a=0 \; O0(a) \; a=V(0) \;
-;
-#X obj 30 240 k_cext 1 1 \; static FLOATARRAY(a \, 5) \; static int
-p=0 \; a[p%5]=V(0) \; p++ \; O0( (a[0]+a[1]+a[2]+a[3]+a[4])/5 ) \;
-;
-#X obj 133 681 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 199 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 275 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X floatatom 289 588 5 0 0 0 - - -;
-#X floatatom 359 338 5 0 0 0 - - -;
-#X floatatom 437 337 5 0 0 0 - - -;
-#X floatatom 530 337 5 0 0 0 - - -;
-#X text 371 174 Some modulo operations;
-#X obj 460 530 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X text 478 535 9 Start mozilla;
-#X msg 479 566 bang;
-#X text 43 534 Sends out four random numbers between the value of inlet
-1 and inlet 2 Default values for the inlets are set by argument 3 and
-4 (5 and 10).;
-#X text 28 183 Sends out the average of the 5 last values.;
-#X text 33 380 and the SC macro.;
-#X text 33 368 Also demonstrates the use of the FOR;
-#X obj 369 223 k_cext 1 3 \; int v=I(0) \; IF !(v%3) THEN DO \; . O0(v)
-\; ELIF !(v%2) THEN DO \; . O1(v) \; ELSE \; . O2(v) \;;
-#X obj 29 431 k_cext 1 1 \; int out=1 \, i \; FOR i=2 SC i<=I(0) SC
-i++ THEN DO \; . out*=i \; O0(out) \;;
-#X obj 62 608 k_cext 3 4 0 5 10 \; int i \; RANGE(i \, 0 \, 4) DO \;
-. O(i \, (int)BETWEEN(I(1) \, I(2))) \;;
-#X obj 377 426 k_cext 2 2 \; IF I(1)!=0 THEN DO \; . O1(I(0) % I(1))
-\; O0(V(0) / V(1)) \;;
-#X msg 446 198 print;
-#X obj 479 603 k_cext 1 0 \; system( s<mozilla&>s ) \;;
-#X connect 0 0 49 0;
-#X connect 2 0 50 0;
-#X connect 4 0 51 0;
-#X connect 6 0 52 0;
-#X connect 10 0 68 0;
-#X connect 12 0 69 0;
-#X connect 16 0 71 0;
-#X connect 18 0 71 1;
-#X connect 23 0 70 1;
-#X connect 24 0 70 0;
-#X connect 49 0 1 0;
-#X connect 50 0 3 0;
-#X connect 51 0 5 0;
-#X connect 52 0 7 0;
-#X connect 56 0 70 2;
-#X connect 63 0 73 0;
-#X connect 68 0 57 0;
-#X connect 68 1 58 0;
-#X connect 68 2 59 0;
-#X connect 69 0 13 0;
-#X connect 70 0 22 0;
-#X connect 70 1 53 0;
-#X connect 70 2 54 0;
-#X connect 70 3 55 0;
-#X connect 71 0 17 0;
-#X connect 71 1 19 0;
-#X connect 72 0 68 0;
diff --git a/externals/k_cext/help-k_cext2.pd b/externals/k_cext/help-k_cext2.pd
deleted file mode 100644
index 3ae42d39a..000000000
--- a/externals/k_cext/help-k_cext2.pd
+++ /dev/null
@@ -1,128 +0,0 @@
-#N canvas 325 15 782 775 10;
-#X floatatom 19 52 5 0 0 0 - - -;
-#X floatatom 17 116 5 0 0 0 - - -;
-#X floatatom 238 54 5 0 0 0 - - -;
-#X floatatom 237 117 5 0 0 0 - - -;
-#X floatatom 419 50 5 0 0 0 - - -;
-#X floatatom 419 137 5 0 0 0 - - -;
-#X floatatom 30 216 5 0 0 0 - - -;
-#X floatatom 30 337 5 0 0 0 - - -;
-#X text 416 29 Sends out previous value.;
-#X text 235 33 Adds one.;
-#X floatatom 539 178 5 0 0 0 - - -;
-#X text 26 198 (Gliding average);
-#X floatatom 29 405 5 0 0 0 - - -;
-#X floatatom 29 502 20 0 0 0 - - -;
-#X text 32 356 Calculates the faculty.;
-#X text 139 707 Additional \, read the macros in k_cext.h;
-#X floatatom 373 394 5 0 0 0 - - -;
-#X floatatom 367 501 5 0 0 0 - - -;
-#X floatatom 515 397 5 0 0 0 - - -;
-#X floatatom 516 501 5 0 0 0 - - -;
-#X text 361 366 Divide two numbers.;
-#X text 361 379 Integer modulus in the second outlet.;
-#X floatatom 53 682 10 0 0 0 - - -;
-#X floatatom 176 587 5 0 0 0 - - -;
-#X msg 62 584 bang;
-#X text 16 31 Sends out the input.;
-#X text 10 149 ______________________________________________________
-;
-#X text 12 341 ______________________________________________________
-;
-#X text 226 516 ______________________________________________________
-;
-#X text 231 688 ______________________________________________________
-;
-#X text 20 -9 ______________________________________________________
-;
-#X text 102 -28 k_cext. The c external object for PD by K.Matheussen
-\;;
-#X text 230 -9 ______________________________________________________
-;
-#X text 221 149 ______________________________________________________
-;
-#X text 231 341 ______________________________________________________
-;
-#X text 11 516 ______________________________________________________
-;
-#X text 8 688 ______________________________________________________
-;
-#X obj 323 357 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 334 165 vsl 8 185 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X obj 183 7 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X obj 381 8 vsl 8 152 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1 -1
-0 1;
-#X text 201 9 2;
-#X text 398 10 3;
-#X text 16 9 1;
-#X text 12 166 4;
-#X text 352 165 5;
-#X text 13 356 6;
-#X text 338 357 7;
-#X text 22 535 8;
-#X obj 17 75 k_cext 1 1 \; O0(V(0)) \;;
-#X obj 237 76 k_cext 1 1 \; O0(V(0) + 1) \;;
-#X obj 422 72 k_cext 1 1 \; static t_float a=0 \; O0(a) \; a=V(0) \;
-;
-#X obj 30 240 k_cext 1 1 \; static FLOATARRAY(a \, 5) \; static int
-p=0 \; a[p%5]=V(0) \; p++ \; O0( (a[0]+a[1]+a[2]+a[3]+a[4])/5 ) \;
-;
-#X obj 133 681 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 199 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 275 683 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X floatatom 289 588 5 0 0 0 - - -;
-#X floatatom 359 338 5 0 0 0 - - -;
-#X floatatom 437 337 5 0 0 0 - - -;
-#X floatatom 530 337 5 0 0 0 - - -;
-#X text 371 174 Some modulo operations;
-#X obj 460 530 vsl 8 170 0 127 0 0 empty empty empty 0 -8 0 8 -1 -1
--1 0 1;
-#X text 478 535 9 Start mozilla;
-#X msg 479 566 bang;
-#X text 43 534 Sends out four random numbers between the value of inlet
-1 and inlet 2 Default values for the inlets are set by argument 3 and
-4 (5 and 10).;
-#X text 28 183 Sends out the average of the 5 last values.;
-#X text 33 380 and the SC macro.;
-#X text 33 368 Also demonstrates the use of the FOR;
-#X obj 367 202 k_cext 1 3 \; int v=I(0) \; IF !(v%3) THEN DO \; . O0(v)
-\; ELIF !(v%2) THEN DO \; . O1(v) \; ELSE \; . O2(v) \;;
-#X obj 29 431 k_cext 1 1 \; int out=1 \, i \; FOR i=2 SC i<=I(0) SC
-i++ THEN DO \; . out*=i \; O0(out) \;;
-#X obj 62 608 k_cext 3 4 0 5 10 \; int i \; RANGE(i \, 0 \, 4) DO \;
-. O(i \, (int)BETWEEN(I(1) \, I(2))) \;;
-#X obj 377 426 k_cext 2 2 \; IF I(1)!=0 THEN DO \; . O1(I(0) % I(1))
-\; O0(V(0) / V(1)) \;;
-#X obj 479 602 k_cext 1 0 \; system(s<mozilla&>s) \;;
-#X connect 0 0 49 0;
-#X connect 2 0 50 0;
-#X connect 4 0 51 0;
-#X connect 6 0 52 0;
-#X connect 10 0 68 0;
-#X connect 12 0 69 0;
-#X connect 16 0 71 0;
-#X connect 18 0 71 1;
-#X connect 23 0 70 1;
-#X connect 24 0 70 0;
-#X connect 49 0 1 0;
-#X connect 50 0 3 0;
-#X connect 51 0 5 0;
-#X connect 52 0 7 0;
-#X connect 56 0 70 2;
-#X connect 63 0 72 0;
-#X connect 68 0 57 0;
-#X connect 68 1 58 0;
-#X connect 68 2 59 0;
-#X connect 69 0 13 0;
-#X connect 70 0 22 0;
-#X connect 70 1 53 0;
-#X connect 70 2 54 0;
-#X connect 70 3 55 0;
-#X connect 71 0 17 0;
-#X connect 71 1 19 0;
diff --git a/externals/k_cext/help-k_cfunc.pd b/externals/k_cext/help-k_cfunc.pd
deleted file mode 100644
index 390b46cc4..000000000
--- a/externals/k_cext/help-k_cfunc.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 583 347 825 399 10;
-#X obj 31 310 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 30 256;
-#X obj 259 312 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 20 256;
-#X floatatom 33 110 5 0 0 0 - - -;
-#X floatatom 217 107 5 0 0 0 - - -;
-#X floatatom 30 182 5 0 0 0 - - -;
-#X obj 32 140 k_cext 2 1 \; O(0 \, INT_func(I(0) \, I(1))) \;;
-#X obj 31 234 k_cfunc 0 2 INT_func int a int b \; O(0 \, a) \; O(1
-\, b) \; return a+b \;;
-#X obj 404 315 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 32 256;
-#X obj 632 317 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 12 256;
-#X floatatom 406 115 5 0 0 0 - - -;
-#X floatatom 590 112 5 0 0 0 - - -;
-#X floatatom 403 187 5 0 0 0 - - -;
-#X obj 405 144 k_cext 2 1 \; O(0 \, FLOAT_func(V(0) \, V(1))) \;;
-#X obj 404 239 k_cfunc 0 2 FLOAT_func float a float b \; O(0 \, a)
-\; O(1 \, b) \; return a+b \;;
-#X text 148 25 Demonstrating the use of two functions to add integer
-numbers. The first one does an integer operation \, the second one
-does a floating point operation.;
-#X connect 2 0 5 0;
-#X connect 3 0 5 1;
-#X connect 5 0 4 0;
-#X connect 6 0 0 0;
-#X connect 6 1 1 0;
-#X connect 9 0 12 0;
-#X connect 10 0 12 1;
-#X connect 12 0 11 0;
-#X connect 13 0 7 0;
-#X connect 13 1 8 0;
diff --git a/externals/k_cext/help-markov.pd b/externals/k_cext/help-markov.pd
deleted file mode 100644
index b0d45a9b0..000000000
--- a/externals/k_cext/help-markov.pd
+++ /dev/null
@@ -1,66 +0,0 @@
-#N canvas 0 107 907 643 10;
-#X obj 244 40 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X obj 283 31 r state;
-#X obj 261 66 f 1;
-#X floatatom 312 55 3 0 0 0 - - -;
-#X text 227 19 STEP;
-#X msg 371 52 \; state 1;
-#X text 371 32 reset;
-#X obj 33 25 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X obj 72 16 r state;
-#X obj 50 51 f 1;
-#X floatatom 101 40 3 0 0 0 - - -;
-#X text 16 4 STEP;
-#X obj 26 511 s state;
-#X text 244 391 documentation patches.;
-#X text 245 375 chain example in the PD;
-#X msg 155 65 print;
-#X msg 200 66 print;
-#X obj 26 100 k_cext 1 1 \; int state=I(0) \; int random=RANDOM(100)
-\; \; SWITCH state THEN DO \; . case 1: \; . . IF random<30 THEN DO
-\; . . . state=1 \; . . ELIF random<60 THEN DO \; . . . state=2 \;
-. . ELSE \; . . . state=3 \; . . break \; . case 2: \; . . IF random<10
-THEN DO \; . . . state=1 \; . . ELIF random<60 THEN DO \; . . . state=2
-\; . . ELSE \; . . . state=3 \; . . break \; . case 3: \; . . IF random<70
-THEN DO \; . . . state=1 \; . . ELIF random<80 THEN DO \; . . . state=2
-\; . . ELSE \; . . . state=3 \; O0(state) \;;
-#X obj 561 300 k_cfunc INT_markov int a int b \; int random=RANDOM(100)
-\; IF random<a THEN DO \; . return 1 \; ELIF random<b THEN DO \; .
-return 2 \; ELSE \; . return 3 \;;
-#X obj 574 46 bng 20 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
-#X obj 613 37 r state;
-#X obj 591 72 f 1;
-#X floatatom 642 61 3 0 0 0 - - -;
-#X text 557 25 STEP;
-#X msg 530 72 print;
-#X text 237 29 comment;
-#X text 244 360 Three ways to implement the markov;
-#X msg 561 259 print;
-#X obj 260 103 k_cext 1 0 \; \; int state=I(0) \; int s1[3]=BEGIN 30
-\, 10 \, 70 END \; int s2[3]=BEGIN 60 \, 60 \, 80 END \; int random=RANDOM(100)
-\; \; IF random < s1[state] THEN DO \; . SEND(state \, 1) \; ELIF random
-< s2[state] THEN DO \; . SEND(state \, 2) \; ELSE \; . SEND(state \,
-3) \;;
-#X obj 557 115 k_cext 1 0 \; \; int s1[3]=BEGIN 30 \, 10 \, 70 END
-\; int s2[3]=BEGIN 60 \, 60 \, 80 END \; SEND(state \, INT_markov(s1[I(0)]
-\, s2[I(0)])) \;;
-#X connect 0 0 2 0;
-#X connect 1 0 2 1;
-#X connect 1 0 3 0;
-#X connect 2 0 28 0;
-#X connect 7 0 9 0;
-#X connect 8 0 9 1;
-#X connect 8 0 10 0;
-#X connect 9 0 17 0;
-#X connect 15 0 17 0;
-#X connect 16 0 28 0;
-#X connect 17 0 12 0;
-#X connect 19 0 21 0;
-#X connect 20 0 21 1;
-#X connect 20 0 22 0;
-#X connect 21 0 29 0;
-#X connect 24 0 29 0;
-#X connect 27 0 18 0;
diff --git a/externals/k_cext/help-rangeifelifelse.pd b/externals/k_cext/help-rangeifelifelse.pd
deleted file mode 100644
index df694dd90..000000000
--- a/externals/k_cext/help-rangeifelifelse.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 321 226 450 300 10;
-#X floatatom 102 55 5 0 0;
-#X floatatom 112 275 5 0 0;
-#X floatatom 172 276 5 0 0;
-#X floatatom 218 278 5 0 0;
-#X floatatom 273 280 5 0 0;
-#X obj 160 39 k_cext 1 4 \; \; int lokke \; int a=5 \; \; RANGE(lokke
-\, 0 \, 4) DO \; . O(lokke \, I(0)) \; . IF I(0)==0 THEN DO \; . .
-O(1 \, 2) \; . ELIF I(0)==1 THEN DO \; . . O(2 \, 3) \; . ELSE \; .
-. O(3 \, 4) \; . . IF a==2 THEN DO \; . . . O(3 \, 23) \; . . . IF
-a==3 THEN DO \; . . . . O(2 \, 4) \;;
-#X msg 163 15 print;
-#X connect 0 0 5 0;
-#X connect 5 0 1 0;
-#X connect 5 1 2 0;
-#X connect 5 2 3 0;
-#X connect 5 3 4 0;
-#X connect 6 0 5 0;
diff --git a/externals/k_cext/help-send.pd b/externals/k_cext/help-send.pd
deleted file mode 100644
index ee7d0a982..000000000
--- a/externals/k_cext/help-send.pd
+++ /dev/null
@@ -1,29 +0,0 @@
-#N canvas 488 163 708 409 10;
-#X floatatom 96 329 5 0 0 0 - - -;
-#X floatatom 39 199 5 0 0 0 - - -;
-#X floatatom 149 207 5 0 0 0 - - -;
-#X text 28 15 The SEND macro is just as efficient;
-#X text 30 29 as the send object \, and is defined like this:;
-#X obj 42 248 send a_sym;
-#X obj 96 297 r a_sym;
-#X floatatom 161 331 5 0 0 0 - - -;
-#X obj 161 299 r a_sym2;
-#X floatatom 384 235 5 0 0 0 - - -;
-#X text 379 202 Warning \, the following code will not do;
-#X msg 321 182 print;
-#X text 379 215 as one might expect:;
-#X text 32 59 #define SEND(symname \, val) do BEGIN static t_symbol
-*k_cext_internal_symbol=NULL SC if(k_cext_internal_symbol==NULL) k_cext_internal_symbol=gensym(symname)
-SC if(k_cext_internal_symbol->s_thing) pd_float(k_cext_internal_symbol->s_thing
-\, val) SC END while(0);
-#X obj 141 235 k_cext 1 0 \; SEND(a_sym \, I(0)) \;;
-#X obj 382 261 k_cext 1 0 \; char *syms[2]=BEGIN s<a_sym>s \, s<a_sym2>s
-END \; static int s=0 \; IF s==0 THEN DO \; . s=1 \; ELSE \; . s=0
-\; SEN(syms[s] \, s+5) \;;
-#X text 381 383 (The SEN macro expect real strings.);
-#X connect 1 0 5 0;
-#X connect 2 0 14 0;
-#X connect 6 0 0 0;
-#X connect 8 0 7 0;
-#X connect 9 0 15 0;
-#X connect 11 0 15 0;
diff --git a/externals/k_cext/help-send2.pd b/externals/k_cext/help-send2.pd
deleted file mode 100644
index 7d8cae7a5..000000000
--- a/externals/k_cext/help-send2.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 427 167 481 300 10;
-#X obj 8 75 k_cext 1 0 \; SENDFLOAT(" \$0-receive" \, 42) \; SENDSYMBOL("
-\$0-receive" \, "hello_world") \;;
-#X obj 8 53 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1
-;
-#X obj 9 134 r \$0-receive;
-#X obj 9 160 route float symbol;
-#X floatatom 9 184 5 0 0 0 - - -;
-#X symbolatom 78 205 15 0 0 0 - - -;
-#X text 4 15 SENDFLOAT sends a float \, SENDSYMBOL sends a symbol:
-;
-#X text 4 233 leading spaces in the receive name will be dropped ...
-this makes $N arguments usable (as long as no receive names with leading
-spaces will be allowed);
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 3 1 5 0;
diff --git a/externals/k_cext/help-sort.pd b/externals/k_cext/help-sort.pd
deleted file mode 100644
index 018fbb3eb..000000000
--- a/externals/k_cext/help-sort.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 149 460 622 320 10;
-#X floatatom 20 82 5 0 0 0 - - -;
-#X floatatom 20 267 5 0 0 0 - - -;
-#X text 14 24 Sends out the largest of;
-#X obj 20 111 k_cext 1 1 \; static FLOATARRAY(a \, 5) \; FLOATARRAY(a2
-\, 5) \; static int p=0 \; int i \; a[p%5]=V(0) \; p++ \; RANGE(i \,
-0 \, 5) a2[i]=a[i] \; FLOATSORT(a2 \, 5) \; O(0 \, a2[4]) \;;
-#X text 14 41 the five last float numbers.;
-#X floatatom 318 80 5 0 0 0 - - -;
-#X floatatom 318 265 5 0 0 0 - - -;
-#X text 312 22 Sends out the largest of;
-#X obj 318 109 k_cext 1 1 \; static INTARRAY(a \, 5) \; INTARRAY(a2
-\, 5) \; static int p=0 \; int i \; a[p%5]=I(0) \; p++ \; RANGE(i \,
-0 \, 5) a2[i]=a[i] \; INTSORT(a2 \, 5) \; O(0 \, a2[4]) \;;
-#X text 312 39 the five last integer numbers.;
-#X connect 0 0 3 0;
-#X connect 3 0 1 0;
-#X connect 5 0 8 0;
-#X connect 8 0 6 0;
diff --git a/externals/k_cext/help-string.pd b/externals/k_cext/help-string.pd
deleted file mode 100644
index aa97cf1bc..000000000
--- a/externals/k_cext/help-string.pd
+++ /dev/null
@@ -1,11 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X msg 31 84 bang;
-#X obj 30 125 k_cext \; system(s<echo something>s) \;;
-#X text 26 40 Strings are started with s< and ended with >s;
-#X obj 248 125 k_cext \; SEN(s<ai>s \, 1) \;;
-#X obj 31 200 r ai;
-#X obj 33 232 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X connect 0 0 1 0;
-#X connect 0 0 3 0;
-#X connect 4 0 5 0;
diff --git a/externals/k_cext/help-value.pd b/externals/k_cext/help-value.pd
deleted file mode 100644
index ca7c2a424..000000000
--- a/externals/k_cext/help-value.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 63 54 481 300 10;
-#X obj 12 62 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 12 85 t b b;
-#X obj 12 159 value \$0-count;
-#X floatatom 12 183 5 0 0 0 - - -;
-#X obj 47 108 k_cext 1 0 \; float f = VALUE(" \$0-count") \; SETVALUE("
-\$0-count" \, f+1) \;;
-#X text 70 86 yet another counter;
-#X text 8 17 VALUE returns the content of a value object \, SETVALUE
-sets the content of a value object:;
-#X text 4 218 leading spaces in the receive name will be dropped ...
-this makes $N arguments usable (as long as no receive names with leading
-spaces will be allowed);
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 1 4 0;
-#X connect 2 0 3 0;
diff --git a/externals/k_cext/k_cext.c b/externals/k_cext/k_cext.c
deleted file mode 100644
index a96030266..000000000
--- a/externals/k_cext/k_cext.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/* --------------------------- k_cext  ----------------------------------- */
-/*                                                                              */
-/* Program c directly within a pd object. */
-/*                                                                              */
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-
-#include "m_pd.h"
-#include "k_cext.h"
-
-#include <ctype.h>
-
-static char *version = 
-"k_cext v0.3.1, written by Kjetil S. Matheussen, k.s.matheussen@notam02.no\n"
-"Windows-port by Olaf Matthes. Contributors: Thomas Grill and Tim Blechmann.";
-
-int instancenumber=0; // Can not be static because of the win-port.
-
-
-static t_class *k_cext_class;
-static t_class *k_cfunc_class;
-
-int k_cext_intcompare(const void *p1, const void *p2)
-{
-  int i = *((int *)p1);
-  int j = *((int *)p2);
-  
-  if (i > j)
-    return (1);
-  if (i < j)
-    return (-1);
-  return (0);
-}
-
-int k_cext_floatcompare(const void *p1, const void *p2)
-{
-  float i = *((int *)p1);
-  float j = *((int *)p2);
-  
-  if (i > j)
-    return (1);
-  if (i < j)
-    return (-1);
-  return (0);
-}
-
-
-static void k_cext_print(t_k_cext *x){
-  FILE *printfile;
-  char name[500];
-  int lokke;
-  char temp[500];
-
-  sprintf(name,"%s.c",x->filename);
-
-  printfile=fopen(name,"r");
-  post("------------------------------------------");
-  for(lokke=1;;lokke++){
-    char temp2[500];
-    int c;
-    if((c=fgetc(printfile))==EOF) break;
-    ungetc(c,printfile);
-    fgets(temp,400,printfile);
-    sprintf(temp2,"%3d %s",lokke,temp);
-    temp2[strlen(temp2)-1]=0;
-    post(temp2);
-  }
-  fclose(printfile);
-  post("------------------------------------------");
-
-}
-
-static void k_cext_bang(t_k_cext *x)
-{
-  /* Fixme, for some reason, k_cfunc's float method points to k_cext_float
-     instead of k_cfunc_float.
-     As a workaround, there is this x->iscext==true test below. */
-  if(x->k_cext_process!=NULL && x->iscext==true)
-    (*x->k_cext_process)(x);
-}
-
-
-static void k_cext_float(t_k_cext *x, t_floatarg f)
-{
-  x->values[0]=f;
-
-  k_cext_bang(x);
-}
-
-static void k_cfunc_float(t_k_cext *x, t_floatarg f)
-{
-  post("k_cfunc_float");
-  x->values[0]=f;
-}
-
-
-#include "k_cext_funchandler.c"
-
-
-struct k_cext_init{
-  int indentation;
-  int set_indentation[500]; // Very unlikely that anyone wants to indent more than 500 levels.
-  int thisisanelifline;
-  FILE *file;
-  char name[500];
-  char funcname[500];
-
-  int num_intfuncs;
-  int num_floatfuncs;
-
-  char intfuncnames[50000]; // Max functionname length=50, max number of functions=1000.
-  char floatfuncnames[50000];
-
-  int doinitpos1;
-  int doinitpos2;
-
-  /* The rest is used by k_cfunc objects. */
-  bool cfuncnamefound;
-  char cfuncname[200];
-  int cfuncrettype; //0=int, 1=float
-  int numargs;
-  char cfuncargtypes[50000];
-  char cfuncargnames[50000];
-};
-
-
-
-
-/******************************/
-/* Set up inlets and outlets. */
-/******************************/
-static void k_cext_makeinletsandoutlets(t_k_cext *x,t_int argc,t_atom* argv){
-  int lokke;
-
-  if(argc<2 || argv[1].a_type!=A_FLOAT){
-    x->num_outs=0;
-  }else{
-    x->num_outs=atom_getfloatarg(1,argc,argv);    
-    x->outlets=calloc(sizeof(t_outlet*),x->num_outs);
-  }
-
-  if(argc<1  || argv[1].a_type!=A_FLOAT){
-    x->num_ins=1;
-  }else{
-    x->num_ins=atom_getfloatarg(0,argc,argv);    
-  }
-
-  x->inlets=calloc(sizeof(t_inlet*),x->num_ins);
-  x->values=calloc(sizeof(t_float),x->num_ins);
-
-  for(lokke=1;lokke<x->num_ins;lokke++){
-    x->inlets[lokke-1] = floatinlet_new(&x->x_ob, &x->values[lokke]);
-  }
-
-  for(lokke=0;lokke<x->num_outs;lokke++){
-    x->outlets[lokke] = outlet_new(&x->x_ob, gensym("float"));
-  }
-
-}
-
-
-/******************************/
-/* Set default values for the inlets. */
-/******************************/
-static int k_cext_setdefaultvalues(t_k_cext *x,t_int argc, t_atom* argv){
-  int i;
-  for(i=2;i<argc;i++){
-    char string[500];
-    switch(argv[i].a_type){
-    case A_FLOAT:
-      x->values[i-2]=atom_getfloatarg(i,argc,argv);
-      break;
-    case A_SYMBOL:
-      return i;
-    }
-  }
-  return i;
-}
-
-
-
-#include "k_cext_generatecode.c"
-
-
-
-static void *k_cextandfunc_new(t_symbol *s, t_int argc, t_atom* argv,bool iscext)
-{
-  char temp[500];
-  int i;
-
-  struct k_cext_init k;
-
-  t_k_cext *x = (t_k_cext *)pd_new(k_cext_class);
-  x->iscext=iscext;
-
-  memset(&k,0,sizeof(struct k_cext_init));
-
-  k_cext_makeinletsandoutlets(x,argc,argv);
-
-  if(argv[2].a_type==A_FLOAT){
-    i=k_cext_setdefaultvalues(x,argc,argv);
-  }else{
-    if(argv[1].a_type==A_FLOAT){
-      i=2;
-    }else{
-      if(argv[0].a_type==A_FLOAT){
-	i=1;
-      }else{
-	i=0;
-      }
-    }
-  }
-
-  k_sys_mktempfilename(x->filename);
-  sprintf(k.name,"%s",x->filename);
-  k.name[strlen(k.name)+2]=0;
-  k.name[strlen(k.name)+1]='c';
-  k.name[strlen(k.name)]='.';
-
-  k.file=fopen(k.name,"w");
-  //  post("name: %s\n",name)
-
-  k_sys_writeincludes(k.file);
-
-
-
-  k_cext_generatecode(x,argc,argv,i,&k);
-
-
-
-  /*************************************/
-  /* Compile and link                  */
-  /*************************************/
-
-  k_sys_makecompilestring(temp,k.name,k.funcname);
-  post("Compiling %s",k.name);
-  system(temp);
-
-  sprintf(k.name,"%s.o",k.name);
-
-  if(!k_sys_getprocessfunction(x,k.funcname,k.name)){
-    FILE *printfile;
-    post("Error in loader!");
-    x->k_cext_process=NULL;
-    k_cext_print(x);
-    return NULL;
-  }
-
-
-  if(x->iscext==false){
-    if(k.cfuncrettype==0){
-      k_cext_addintfunc(k.cfuncname,x);
-    }else{
-      k_cext_addfloatfunc(k.cfuncname,x);
-    }
-  }
-
-  return (void *)x;
-}
-
-static void *k_cext_new(t_symbol *s, t_int argc, t_atom* argv){
-  return k_cextandfunc_new(s,argc,argv,true);
-}
-
-static void *k_cfunc_new(t_symbol *s, t_int argc, t_atom* argv){
-  return k_cextandfunc_new(s,argc,argv,false);
-}
-
-
-
-static void k_cext_free(t_k_cext *x)
-{
-  char temp[500];
-
-  if(x->iscext==false){
-    k_cext_setdummy(x->k_cext_process);
-  }
-
-  if(x->handle!=NULL){
-    k_sys_freehandle(x);
-  }
-
-  sprintf(temp,"%s.c",x->filename);
-  k_sys_deletefile(temp);
-
-  free(x->inlets);
-  free(x->outlets);
-  free(x->values);
-}
-
-
-
-
-void k_cext_setup(void)
-{
-
-  k_sys_init();
-
-  /* k_cext */
-  k_cext_class = class_new(gensym("k_cext"), (t_newmethod)k_cext_new,
-			   (t_method)k_cext_free, sizeof(t_k_cext), 0, A_GIMME, 0);
-  class_addfloat(k_cext_class, k_cext_float);
-  class_addbang(k_cext_class, (t_method)k_cext_bang);
-  class_addmethod(k_cext_class, (t_method)k_cext_print, gensym("print"), 0);
-  class_sethelpsymbol(k_cext_class, gensym("help-k_cext.pd"));
-
-  /* k_cfunc */
-  k_cfunc_class = class_new(gensym("k_cfunc"), (t_newmethod)k_cfunc_new,
-			   (t_method)k_cext_free, sizeof(t_k_cext), 0, A_GIMME, 0);
-
-  // This does not work! Why? (Have to make workaround-code in k_cext_bang)
-  class_addfloat(k_cfunc_class, k_cfunc_float);
-  class_addmethod(k_cfunc_class, (t_method)k_cext_print, gensym("print"), 0);
-  class_sethelpsymbol(k_cfunc_class, gensym("help-k_cfunc.pd")); 
-
- 
-  post(version);
-}
-
-void k_cfunc_setup(void){
-  k_cext_setup();
-}
-
-/* TB: for accessing $0 values */
-t_float k_cext_getvalue(char c[])
-{
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    return (*(value_get(gensym(c))));
-}
-
-int k_cext_setvalue(char c[],float f)
-{
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    return value_setfloat(gensym(c),f);
-}
-
-void k_cext_sendfloat (char c[],float f)
-{
-    static t_symbol *k_cext_internal_symbol=NULL;
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    if(k_cext_internal_symbol==NULL) k_cext_internal_symbol=gensym(c);
-    if(k_cext_internal_symbol->s_thing) 
-	pd_float(k_cext_internal_symbol->s_thing, f); 
-}
-
-void k_cext_sendsymbol (char c[],char s[])
-{
-    static t_symbol *k_cext_internal_symbol=NULL;
-    while ( isspace(c[0]) )
-    {
-	c++;
-    }
-    if(k_cext_internal_symbol==NULL) 
-	k_cext_internal_symbol=gensym(c);
-    if(k_cext_internal_symbol->s_thing) 
-	pd_symbol(k_cext_internal_symbol->s_thing, gensym(s)); 
-}
diff --git a/externals/k_cext/k_cext.h b/externals/k_cext/k_cext.h
deleted file mode 100644
index 0dea39fea..000000000
--- a/externals/k_cext/k_cext.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- *   k_cext.h copyright 2002 Kjetil S. Matheussen.
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as
- *   published by the Free Software Foundation; either version 2.1 of
- *   the License, or (at your option) any later version.
- *
- *   This 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 Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-//#include <stdbool.h>
-#ifdef _MSC_VER
-typedef int bool;
-#define true 1
-#define false 0
-#else
-#include <stdbool.h>
-#endif
-
-#include <stdarg.h>
-
-#ifdef MSW
-#define K_EXTERN __declspec(dllexport) extern
-#else
-#define K_EXTERN extern
-#endif
-
-typedef struct k_cext
-{
-  t_object x_ob;
-  t_float *values;
-
-  int num_ins;
-  int num_outs;
-
-  t_inlet **inlets;
-  t_outlet **outlets;
-
-  void (*k_cext_process)(struct k_cext *x);
-  void *handle;
-
-  char filename[40];
-
-  bool iscext;
-
-  void *userdata; // This attribute /can/ be used by a patch, but using "static" is much cleaner, so please don't.
-} t_k_cext;
-
-
-/* The following functions are used by intsort and floatsort */
-K_EXTERN int k_cext_intcompare(const void *p1, const void *p2);
-K_EXTERN int k_cext_floatcompare(const void *p1, const void *p2);
-
-
-/* The following functions are system dependant, and called internally from k_cext only.
-   All ports must implement these functions.
- */
-
-K_EXTERN int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name);
-K_EXTERN void k_sys_freehandle(t_k_cext *x);
-K_EXTERN void k_sys_mktempfilename(char *to);
-K_EXTERN void k_sys_writeincludes(FILE *file);
-K_EXTERN void k_sys_makecompilestring(char *to,char *name,char *funcname);
-K_EXTERN void k_sys_deletefile(char *name);
-K_EXTERN void k_sys_init(void);
-
-/* TB value accessing / send functions */
-K_EXTERN t_float k_cext_getvalue(char c[]);
-K_EXTERN int k_cext_setvalue(char c[],float f);
-K_EXTERN void k_cext_sendfloat (char c[],float f);
-K_EXTERN void k_cext_sendsymbol (char c[],char s[]);
-
-
-#define V(a) (x->values[a])
-#define I(a) ((int)(x->values[a]))
-
-
-#define O(a,b) outlet_float(x->outlets[a],b)
-
-#define O0(b) O(0,b)
-#define O1(b) O(1,b)
-#define O2(b) O(2,b)
-#define O3(b) O(3,b)
-#define O4(b) O(4,b)
-#define O5(b) O(5,b)
-#define O6(b) O(6,b)
-
-#define BETWEEN(dasmin,dasmax) ((dasmin) + (((float)(dasmax-(dasmin)))*rand())/(RAND_MAX+1.0))
-#define RANDOM(dasmax) BETWEEN(0,dasmax)
-
-#define SEND(symname,val) \
-do{ \
-  static t_symbol *k_cext_internal_symbol=NULL; \
-  if(k_cext_internal_symbol==NULL) k_cext_internal_symbol=gensym(symname); \
-  if(k_cext_internal_symbol->s_thing) pd_float(k_cext_internal_symbol->s_thing, val);  \
-}while(0)
-
-#define SEN(symname,val) SEND(symname,val)
-
-#define INTARRAY(name,len) int name[len]={0}
-#define FLOATARRAY(name,len) t_float name[len]={0.0f}
-
-#define INTSORT(a,b) qsort((void *)(a),b, sizeof (int), k_cext_intcompare);
-#define FLOATSORT(a,b) qsort((void *)(a),b, sizeof (float), k_cext_floatcompare);
-
-/* TB: values and bang outlets */
-#define Ob(a) outlet_bang(x->outlets[a]);
-float k_cext_getvalue(char c[]);
-int k_cext_setvalue(char c[],float f);
-#define VALUE(char) k_cext_getvalue(char)
-#define SETVALUE(char,float) k_cext_setvalue(char,float)
-
-/* TB: send float and symbol functions */
-void k_cext_sendfloat (char c[],float f);
-void k_cext_sendsymbol (char c[],char s[]);
-#define SENDFLOAT(char,float) k_cext_sendfloat(char,float)
-#define SENDSYMBOL(char1,char2) k_cext_sendsymbol(char1,char2)
-
-
-#define IF if(
-#define FOR for(
-#define RANGE(a,b,c) for(a=b;a<c;a++)
-#define WHILE while(
-#define SWITCH switch(
-
-#define THEN )
-#define BEGIN {
-
-#define LOOP for(;;){
-
-#define ELIF }else if(
-
-/* If you think "END ELSE BEGIN" is more natural, just write "END else BEGIN". */
-#define ELSE }else{
-
-#define END }
-#define ENDFOR END
-#define ENDRANGE END
-#define ENDIF END
-#define ENDWHILE END
-#define ENDLOOP END
-#define ENDSWITCH END
-
-#define SC ;
-
-#define NL "\n"
-  
-#define SP " "
-  //#define STRING(a) " " ## a ## " "
-
-  //#define gakk system("echo");
-
-typedef int (*k_cext_f_int_callback)(t_k_cext *x,...);
-typedef float (*k_cext_f_float_callback)(t_k_cext *x,...);
-
-#ifndef _MSC_VER
-static k_cext_f_int_callback *k_cext_int_funcs[];
-static k_cext_f_float_callback *k_cext_float_funcs[];
-static t_k_cext **k_cext_int_x[];
-static t_k_cext **k_cext_float_x[];
-#else
-k_cext_f_int_callback *k_cext_int_funcs[];
-k_cext_f_float_callback *k_cext_float_funcs[];
-t_k_cext **k_cext_int_x[];
-t_k_cext **k_cext_float_x[];
-#endif
-
-bool k_cext_get_int_funcs(k_cext_f_int_callback **funcs,t_k_cext **xs[],int length,...);
-bool k_cext_get_float_funcs(k_cext_f_float_callback **funcs,t_k_cext **xs[],int length,...);
-
-
-#define INT_(b,a) (*k_cext_int_funcs[a])
-#define I_(a) *k_cext_int_x[a]
-
-
-/* 
-   The alternative suggested by Thomas Grill might be better:
-
-#define INT_0(b,a) (*k_cext_int_funcs[a])(*k_cext_int_x[a])
-#define INT_1(b,a,c) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c)
-#define INT_2(b,a,c,d) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c,d)
-#define INT_3(b,a,c,e) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c,d,e)
-#define INT_4(b,a,c,e,f) (*k_cext_int_funcs[a])(*k_cext_int_x[a],c,d,e,f)
-...
- */
-
-
-/* VC is reported not to be an iso99 c compiler, so the following very nice macro can't be used. #$Â¥5Â¥@{@{@$Â¥@ !!! */
-/* #define F_INT(a,...) (*k_cext_int_funcs[a])(*k_cext_int_x[a],__VA_ARGS__) */
-
-
-#define FLOAT_(b,a) (*k_cext_float_funcs[a])
-#define F_(a) *k_cext_float_x[a]
-
-/* Same here. */
-/* #define F_FLOAT(a,...) (*k_cext_float_funcs[a])(*k_cext_float_x[a],__VA_ARGS__) */
-
diff --git a/externals/k_cext/k_cext_funchandler.c b/externals/k_cext/k_cext_funchandler.c
deleted file mode 100644
index 2554fdd5b..000000000
--- a/externals/k_cext/k_cext_funchandler.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *   Copyright 2003 Kjetil S. Matheussen.
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as
- *   published by the Free Software Foundation; either version 2.1 of
- *   the License, or (at your option) any later version.
- *
- *   This 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 Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-
-#define MAX_FUNCS 1000
-#define MAX_FUNCLENGTH 50
-
-static char k_cext_intfuncnames[MAX_FUNCLENGTH*MAX_FUNCS]={0};
-static k_cext_f_int_callback k_cext_intfuncpointers[MAX_FUNCS]={0};
-static t_k_cext *k_cext_intxs[MAX_FUNCS];
-
-static char k_cext_floatfuncnames[MAX_FUNCLENGTH*MAX_FUNCS]={0};
-static k_cext_f_float_callback k_cext_floatfuncpointers[MAX_FUNCS]={0};
-static t_k_cext *k_cext_floatxs[MAX_FUNCS];
-
-
-
-static int k_cext_intdummy(t_k_cext *x,...){
-  post("Error. An integer k_func function has dissapeared. Returning 0 instead.\n");
-  return 0;
-}
-
-static float k_cext_floatdummy(t_k_cext *x,...){
-  post("Error. A float k_func function has dissapeared. Returning 0.0f instead.\n");
-  return 0.0f;
-}
-
-void k_cext_setdummy(void *func){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_intfuncpointers[lokke]==func){
-      k_cext_intfuncpointers[lokke]=k_cext_intdummy;
-      return;
-    }
-  }
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_floatfuncpointers[lokke]==func){
-      k_cext_floatfuncpointers[lokke]=k_cext_floatdummy;
-      return;
-    }
-  }
-}
-
-
-static void k_cext_addintfunc(char *name,t_k_cext *x){
-  int lokke;
-
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_intfuncpointers[lokke]==NULL || !strcmp(&k_cext_intfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      post("---Adding ---%s--- at pos %d",name,lokke);
-      sprintf(&k_cext_intfuncnames[lokke*MAX_FUNCLENGTH],"%s",name);
-      k_cext_intxs[lokke]=x;
-      k_cext_intfuncpointers[lokke]=(k_cext_f_int_callback)x->k_cext_process;
-      return;
-    }
-  }
-}
-
-static void k_cext_addfloatfunc(char *name,t_k_cext *x){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(k_cext_floatfuncpointers[lokke]==NULL  || !strcmp(&k_cext_floatfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      post("---Adding ---%s--- at pos %d",name,lokke);
-      sprintf(&k_cext_floatfuncnames[lokke*MAX_FUNCLENGTH],"%s",name);
-      k_cext_floatxs[lokke]=x;
-      k_cext_floatfuncpointers[lokke]=(k_cext_f_float_callback)x->k_cext_process;
-      return;
-    }
-  }
-}
-
-static int k_cext_findintfromname(char *name){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(!strcmp(&k_cext_intfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      return lokke;
-    }
-  }
-  return -1;
-}
-static int k_cext_findfloatfromname(char *name){
-  int lokke;
-  for(lokke=0;lokke<MAX_FUNCS;lokke++){
-    if(!strcmp(&k_cext_floatfuncnames[lokke*MAX_FUNCLENGTH],name)){
-      return lokke;
-    }
-  }
-  return -1;
-}
-
-
-
-bool k_cext_get_int_funcs(k_cext_f_int_callback **funcs,t_k_cext **xs[],int length,...){
-    int lokke;
-    bool ret=true;
-    va_list ap;
-    va_start(ap,length);
-
-    for(lokke=0;lokke<length;lokke++){
-      char *name=va_arg(ap,char *);
-      int num=k_cext_findintfromname(name);
-      if(num==-1){
-	post("Error, the k_func function with the name \"%s\" was not found.\n",name);
-	ret=false;
-	goto exit;
-      }
-      funcs[lokke]=&k_cext_intfuncpointers[num];
-      xs[lokke]=&k_cext_intxs[lokke];
-    }
-
- exit:
-    va_end(ap);
-
-    return ret;
-}
-
-bool k_cext_get_float_funcs(k_cext_f_float_callback **funcs,t_k_cext **xs[],int length,...){
-    int lokke;
-    bool ret=true;
-    va_list ap;
-    va_start(ap,length);
-
-    for(lokke=0;lokke<length;lokke++){
-      char *name=va_arg(ap,char *);
-      int num=k_cext_findfloatfromname(name);
-      if(num==-1){
-	post("Error, the k_func function with the name \"%s\" was not found.\n",name);
-	ret=false;
-	goto exit;
-      }
-      funcs[lokke]=&k_cext_floatfuncpointers[num];
-      xs[lokke]=&k_cext_floatxs[num];
-      //post("xs[%d]=%x for %s",lokke,(unsigned int)xs[lokke],name);
-    }
-
- exit:
-    va_end(ap);
-    return ret;
-}
-
-
diff --git a/externals/k_cext/k_cext_generatecode.c b/externals/k_cext/k_cext_generatecode.c
deleted file mode 100644
index cd4435571..000000000
--- a/externals/k_cext/k_cext_generatecode.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- *   Copyright 2003 Kjetil S. Matheussen.
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as
- *   published by the Free Software Foundation; either version 2.1 of
- *   the License, or (at your option) any later version.
- *
- *   This 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 Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public
- *   License along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-
-static char *has_intfunc(char *string){
-  char *s=strstr(string,"INT_");
-  if(s==NULL) return NULL;
-  if(s[4]=='(') return has_intfunc(s+4);
-  return s;
-}
-
-static char *has_floatfunc(char *string){
-  char *s=strstr(string,"FLOAT_");
-  if(s==NULL) return NULL;
-  if(s[6]=='(') return has_floatfunc(s+6);
-  return s;
-}
-
-
-static void k_cext_fixfuncs(struct k_cext_init *k,char *string){
-  char newstring[500];
-
-  sprintf(newstring,"%s",string);
-
-  if(has_intfunc(newstring)){
-    char name[500]={0};
-    char *f_intstart=has_intfunc(newstring);
-    char *f_namestart=f_intstart+4;
-    char *f_nameend=strstr(f_namestart+1,"(");
-    int lastarg=false;
-
-    //post("namestart: -%s-",f_namestart);
-    //post("nameend: -%s-",f_nameend);
-
-    if(f_nameend==NULL){
-      post("Error. k_cext needs this syntax: \"%s(\", not \"%s (\"",f_intstart,f_intstart);
-      return;
-    }
-
-    if(f_nameend[1]==')') lastarg=true;
-
-    memcpy(&k->intfuncnames[k->num_intfuncs*50],f_namestart,f_nameend-f_namestart);
-    memcpy(name,f_namestart,f_nameend-f_namestart);
-
-    f_intstart[0]=0;
-    sprintf(string,
-	    "%s INT_(%s,%d)(I_(%d)%s %s",
-	    newstring,
-	    name,
-	    k->num_intfuncs,
-	    k->num_intfuncs,
-	    lastarg==true?"":",",
-	    f_nameend+1
-	    );
-    k->num_intfuncs++;
-  }else{
-    if(has_floatfunc(newstring)){
-      char name[500]={0};
-      char *f_floatstart=has_floatfunc(newstring);
-      char *f_namestart=f_floatstart+6;
-      char *f_nameend=strstr(f_namestart+1,"(");
-      int lastarg=false;
-      
-      //post("namestart: -%s-",f_namestart);
-      //post("nameend: -%s-",f_nameend);
-
-
-      if(f_nameend==NULL){
-	post("Error, k_cext needs this syntax: \"%s(\", not \"%s (\"",f_floatstart,f_floatstart);
-	return;
-      }
-    
-      if(f_nameend[1]==')') lastarg=true;
-      
-      memcpy(&k->floatfuncnames[k->num_floatfuncs*50],f_namestart,f_nameend-f_namestart);
-      memcpy(name,f_namestart,f_nameend-f_namestart);
-
-      f_floatstart[0]=0;
-      sprintf(string,
-	      "%s FLOAT_(%s,%d)(F_(%d)%s %s",
-	      newstring,
-	      name,
-	      k->num_floatfuncs,
-	      k->num_floatfuncs,
-	      lastarg==true?"":",",
-	      f_nameend+1
-	    );
-
-      k->num_floatfuncs++;
-    }else{
-      return;
-    }
-  }
-
-  if(has_intfunc(string) || has_floatfunc(string)){
-    k_cext_fixfuncs(k,string);
-  }
-}
-
-
-static void k_cext_gen_funcname(struct k_cext_init *k){
-  sprintf(k->funcname,"k_cext_process%d",instancenumber++);
-
-  k->doinitpos1=ftell(k->file);
-  fprintf(k->file,"                         \n");
-  //               static bool doinit(void);
-
-  fprintf(k->file,"void %s(t_k_cext *x){\n",k->funcname);
-  k->doinitpos2=ftell(k->file);
-  fprintf(k->file,"             \n");
-  //               if(doinit()){
-
-}
-
-
-static int k_cext_gen_cfunc_funcname(t_k_cext *x,int argc, t_atom* argv,int i, struct k_cext_init *k){
-  char string[500];
-  int lokke;
-
-  k->doinitpos1=ftell(k->file);
-  fprintf(k->file,"                         \n");
-
-  sprintf(string,"%s",atom_getsymbolarg(i,argc,argv)->s_name);
-  if(!strncmp(string,"INT_",4)){
-    k->cfuncrettype=0;
-    sprintf(k->cfuncname,"%s",string+4);
-  }else{
-    if(!strncmp(string,"FLOAT_",6)){
-      k->cfuncrettype=1;
-      sprintf(k->cfuncname,"%s",string+6);
-    }else{
-      post("k_cfunc: Error. Function name must begin with either INT_ or FLOAT_.");
-      return 1;
-    }
-  }
-  i++;
-
-  for(;i<argc;i+=2){  
-    sprintf(string,"%s",atom_getsymbolarg(i,argc,argv)->s_name);
-    if(!strcmp(string,";")) goto end;
-    if(!strcmp(string,"float") || !strcmp(string,"t_float")){
-      sprintf(string,"double");
-    }
-    sprintf(&k->cfuncargtypes[k->numargs*50],"%s",string);
-    sprintf(&k->cfuncargnames[k->numargs*50],"%s",atom_getsymbolarg(i+1,argc,argv)->s_name);
-    k->numargs++;
-  }
-
- end:
-
-  fprintf(k->file,"static %s %s(t_k_cext *x%s",k->cfuncrettype==0?"int":"float",k->cfuncname,k->numargs>0?",":"){\n");
-  for(lokke=0;lokke<k->numargs;lokke++){
-    fprintf(k->file,"%s %s%s",&k->cfuncargtypes[lokke*50],&k->cfuncargnames[lokke*50],lokke==k->numargs-1?"){\n":",");
-  }
-
-  k->doinitpos2=ftell(k->file);
-  fprintf(k->file,"             \n");
-
-  return i;
-}
-
-
-static void k_cext_gen_mainfunccode(t_k_cext *x,int argc, t_atom* argv,int i, struct k_cext_init *k){
-  int lokke;
-  int prevwasnewline=1;
-
-  for(;i<argc;i++){
-    char string[500];
-    switch(argv[i].a_type){
-    case A_FLOAT:
-      if((float)atom_getintarg(i,argc,argv)==atom_getfloatarg(i,argc,argv)){
-	fprintf(k->file,"%d ",(int)atom_getintarg(i,argc,argv));
-      }else{
-	fprintf(k->file,"%f ",atom_getfloatarg(i,argc,argv));
-      }
-      prevwasnewline=0;
-      break;
-    case A_SYMBOL:
-      sprintf(string,"%s",atom_getsymbolarg(i,argc,argv)->s_name);
-
-      if(strstr(string,"s<")!=NULL){
-	char *pos=strstr(string,"s<");
-	pos[0]=' ';
-	pos[1]='\"';
-      }
-
-      if(strstr(string,">s")!=NULL){
-	char *pos=strstr(string,">s");
-	pos[0]='\"';
-	pos[1]=' ';
-      }
-
-      if(strstr(string,"SEND(")!=NULL){
-	char *pos=strstr(string,"SEND(")+3;
-	int len;
-	pos[0]='(';
-	pos[1]='\"';
-
-	len=strlen(string);
-	string[len]='\"';
-	string[len+1]=0;
-      }
-      
-      if(!strcmp(".",string)){
-	sprintf(string," ");
-	k->indentation++;
-
-      
-      }else{if(!strcmp("DO",string)){
-	k->set_indentation[k->indentation]=1;
-	sprintf(string,"BEGIN");
-	
-      }else{if(!strcmp(";",string)){
-	if(prevwasnewline==1) break;
-	sprintf(string,";\n");
-	prevwasnewline=1;
-	k->indentation=0;
-	k->thisisanelifline=0;
-	
-      }else{if(!strcmp("ELIF",string)){
-	k->thisisanelifline=1;
-	
-      }else{
-	
-	if(has_intfunc(string) || has_floatfunc(string)){
-	  k_cext_fixfuncs(k,string);
-	}
-	
-	prevwasnewline=0;
-	//post("%d: -%s-",k->indentation,string);
-	
-	if(
-	   strcmp("ELSE",string)
-	   && k->thisisanelifline==0
-	   )
-	  {
-	    int hasindented=0;
-	    char orgind[500];
-	    for(lokke=0;lokke<k->indentation*2;lokke++){
-	      orgind[lokke]=' ';
-	    }
-	    orgind[lokke]=0;
-	    for(lokke=499;lokke>=k->indentation;lokke--){
-	      if(k->set_indentation[lokke]==1){
-		k->set_indentation[lokke]=0;
-		fprintf(k->file,"END\n");
-		hasindented++;
-	      }		    
-	    }
-	    if(hasindented>0){
-	      char temp2[500];
-	      sprintf(temp2,"%s%s",orgind,string);
-	      sprintf(string,temp2);
-	    }
-	  }
-      }
-      }
-      /*
-	    if(!strcmp("\n",string)){
-	    sprintf(string," ");
-	    }
-      */
-      }
-      }
-
-      fprintf(k->file,"%s",string);
-      if(string[strlen(string)-1]!='\n') fprintf(k->file," ");
-      break;
-    default:
-      post("k_cext.c: Unknown argv type: %d",argv[i].a_type);
-      post("Please send this patch to k->s.matheussen@notam02.no .");
-      break;
-    }
-  }
-}
-
-static void k_cext_gen_endbrackets(struct k_cext_init *k){
-  int lokke;
-  for(lokke=499;lokke>=0;lokke--){
-    if(k->set_indentation[lokke]==1){
-      int lokke2;
-      for(lokke2=0;lokke2<lokke;lokke2++){
-	fprintf(k->file,"  ");
-      }
-      fprintf(k->file,"END\n");
-    }
-  }
-  fprintf(k->file,"}");
-}
-
-
-static void k_cext_gen_funcs_dasfunc(struct k_cext_init *k){
-  sprintf(k->funcname,"k_cext_process%d",instancenumber++);
-  
-  fprintf(k->file,"\n%s %s(t_k_cext *x%s){\n",k->cfuncrettype==0?"int":"float",k->funcname,k->numargs>0?",...":"");
-  
-  if(k->numargs>0){
-    int lokke;
-    fprintf(k->file,"  va_list k_cext_a;\n");
-    for(lokke=0;lokke<k->numargs;lokke++){
-      fprintf(k->file,"  %s %s;\n",&k->cfuncargtypes[lokke*50],&k->cfuncargnames[lokke*50]);
-    }
-    fprintf(k->file,"  va_start(k_cext_a,x);\n");
-    for(lokke=0;lokke<k->numargs;lokke++){
-      fprintf(k->file,"  %s=va_arg(k_cext_a,%s);\n",&k->cfuncargnames[lokke*50],&k->cfuncargtypes[lokke*50]);
-    }    
-    fprintf(k->file,"  va_end(k_cext_a);\n");
-
-    fprintf(k->file,"  return %s(x,",k->cfuncname);
-    for(lokke=0;lokke<k->numargs;lokke++){
-      fprintf(k->file,"%s%s",&k->cfuncargnames[lokke*50],lokke==k->numargs-1?");\n}\n":",");
-    }
-
-  }else{
-    fprintf(k->file,"  return %s(x);\n}\n",k->cfuncname);
-  }
-}
-
-
-static void k_cext_gen_doinit(t_k_cext *x,struct k_cext_init *k){
-  int lokke;
-  if(k->num_intfuncs>0 || k->num_floatfuncs>0){
-    if(x->iscext==true){
-      fprintf(k->file,"}\n");
-    }
-
-    fprintf(k->file,
-	    "static bool doinit(void){\n"
-	    "  static bool k_cext_inited=false;\n"
-	    "  if(k_cext_inited==false){\n"
-	    );
-    if(k->num_intfuncs>0){
-      fprintf(k->file,"    if(k_cext_get_int_funcs(&k_cext_int_funcs[0],&k_cext_int_x[0],%d,",k->num_intfuncs);
-      for(lokke=0;lokke<k->num_intfuncs;lokke++){
-	fprintf(k->file,"\"%s\"%s",k->intfuncnames+(lokke*50),lokke<k->num_intfuncs-1?",":"");
-      }
-      fprintf(k->file,")==false) return false;\n");
-    }
-
-    if(k->num_floatfuncs>0){
-      fprintf(k->file,"    if(k_cext_get_float_funcs(&k_cext_float_funcs[0],&k_cext_float_x[0],%d,",k->num_floatfuncs);
-      for(lokke=0;lokke<k->num_floatfuncs;lokke++){
-	fprintf(k->file,"\"%s\"%s",k->floatfuncnames+(lokke*50),lokke<k->num_floatfuncs-1?",":"");
-      }
-      fprintf(k->file,")==false) return false;\n");
-    }
-
-    fprintf(k->file,
-	    "    k_cext_inited=true;\n"
-	    "  }\n"
-	    "  return true;\n"
-	    "}\n"
-	    );
-
-    if(k->num_intfuncs>0){
-      fprintf(k->file,
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "k_cext_f_int_callback *k_cext_int_funcs[%d]={0};\n"
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "t_k_cext **k_cext_int_x[%d]={0};\n",
-	      k->num_intfuncs,k->num_intfuncs
-	      );
-    }
-    
-    if(k->num_floatfuncs>0){
-      fprintf(k->file,
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "k_cext_f_float_callback *k_cext_float_funcs[%d]={0};\n"
-#ifndef _MSC_VER
-	      "static "
-#endif
-	      "t_k_cext **k_cext_float_x[%d]={0};\n",
-	      k->num_floatfuncs,k->num_floatfuncs
-	      );
-    }
-
-    fseek(k->file,k->doinitpos1,SEEK_SET);
-    fprintf(k->file,"static bool doinit(void);");
-
-    fseek(k->file,k->doinitpos2,SEEK_SET);
-    fprintf(k->file,"if(doinit()){");
-  }else{
-    fprintf(k->file,"\n");
-  }
-
-}
-
-static void k_cext_generatecode(t_k_cext *x,int argc, t_atom* argv,int i, struct k_cext_init *k){
-
-  if(x->iscext==true){
-    k_cext_gen_funcname(k);
-  }else{
-    i=k_cext_gen_cfunc_funcname(x,argc,argv,i,k);
-  }
-
-  k_cext_gen_mainfunccode(x,argc,argv,i,k);
-  k_cext_gen_endbrackets(k);
-
-  if(x->iscext==false){
-    if(k->num_intfuncs>0 || k->num_floatfuncs>0){    
-      fprintf(k->file,"return 0;}\n");
-    }
-    k_cext_gen_funcs_dasfunc(k);
-  }
-
-  k_cext_gen_doinit(x,k);
-
-  fclose(k->file);
-}
diff --git a/externals/k_cext/k_cext_macosx.c b/externals/k_cext/k_cext_macosx.c
deleted file mode 100644
index 1bfe97a2d..000000000
--- a/externals/k_cext/k_cext_macosx.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* k_cext_macosx.c. MacosX part of k_cext. Made by Kjetil Matheussen. Never tested. */
-//
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-#include "m_pd.h"
-#include "k_cext.h"
-
-#include <unistd.h>
-
-#include <mach-o/dyld.h> 
-
-int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name){
-  NSObjectFileImage image; 
-  void *ret;
-  NSSymbol s; 
-
-  x->k_cext_process=NULL;
-  x->handle=NULL;
-
-  if ( NSCreateObjectFileImageFromFile( name, &image) != NSObjectFileImageSuccess ){
-    post("Error. \n");
-    return 0;
-  }
-  ret=NSLinkModule( image, name, NSLINKMODULE_OPTION_BINDNOW); 
-  s = NSLookupSymbolInModule(ret,funcname); 
-  
-  if(s){
-    x->k_cext_process = (t_xxx)NSAddressOfSymbol( s);
-  }else{
-    return 0;
-  }
-
-  return 1;
-}
-
-void k_sys_freehandle(t_k_cext *x){
-  post("k_cext_macosx.c/k_sys_freehandle: FIX ME.\n");
-}
-
-
-void k_sys_mktempfilename(char *to){
-  sprintf(to,"/tmp/pd-k_cext-XXXXXX");
-  mktemp(to);
-}
-
-void k_sys_writeincludes(FILE *file){
-  fprintf(file,"#include \"" INCLUDEPATH "/" LINUXINCLUDE "/m_pd.h\"\n");
-  fprintf(file,"#include \"" INCLUDEPATH  "/k_cext.h\"\n");
-}
-
-
-void k_sys_makecompilestring(char *to,char *name,char *funcname){
-  sprintf(to,"gcc -Wall -O2 %s -o %s.o -shared",name,name);
-}
-
-void k_sys_deletefile(char *name){
-  unlink(name);
-}
-
-static void k_sys_cleanup(void){
-  system("rm -fr /tmp/pd-k_cext-*");
-}
-
-static void finish(int sig){
-  k_sys_cleanup();
-  exit(0);
-}
-
-
-void k_sys_init(void){
-  atexit(k_sys_cleanup);
-  signal(SIGINT,finish);
-}
diff --git a/externals/k_cext/k_cext_unix.c b/externals/k_cext/k_cext_unix.c
deleted file mode 100644
index ee9c25227..000000000
--- a/externals/k_cext/k_cext_unix.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* k_cext_unix.c. unix part of k_cext. Made by Kjetil Matheussen. Never tested. */
-//
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-#include <m_pd.h>
-#include "k_cext.h"
-#include <dlfcn.h>
-
-#include <unistd.h>
-#include <signal.h>
-
-
-int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name){
-
-  x->handle=dlopen(name,RTLD_NOW|RTLD_GLOBAL);
-
-  if(x->handle!=NULL){
-    x->k_cext_process=(void (*)(struct k_cext *))dlsym(x->handle,funcname);
-    return 1;
-  }
-  return 0;
-}
-
-void k_sys_freehandle(t_k_cext *x){
-  char temp[500];
-  dlclose(x->handle);
-
-  sprintf(temp,"%s.c.o",x->filename);
-  unlink(temp);
-}
-
-void k_sys_mktempfilename(char *to){
-  sprintf(to,"/tmp/pd-k_cext-XXXXXX");
-  mktemp(to);
-}
-
-void k_sys_writeincludes(FILE *file){
-  fprintf(file,"#include \"" INCLUDEPATH "/" LINUXINCLUDE "/m_pd.h\"\n");
-  fprintf(file,"#include \"" INCLUDEPATH  "/k_cext.h\"\n");
-}
-
-void k_sys_makecompilestring(char *to,char *name,char *funcname){
-  sprintf(to,"gcc -Wall -O2 %s -o %s.o -shared",name,name);
-}
-
-void k_sys_deletefile(char *name){
-  unlink(name);
-}
-
-static void k_sys_cleanup(void){
-  system("rm -fr /tmp/pd-k_cext-*");
-}
-
-static void finish(int sig){
-  k_sys_cleanup();
-  exit(0);
-}
-
-
-void k_sys_init(void){
-  atexit(k_sys_cleanup);
-  signal(SIGINT,finish);
-}
diff --git a/externals/k_cext/k_cext_win.c b/externals/k_cext/k_cext_win.c
deleted file mode 100644
index 0ed4e1544..000000000
--- a/externals/k_cext/k_cext_win.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* k_cext_win.c. Windows part of k_cext. Made by Kjetil Matheussen and Olaf Matthes. */
-//
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-#include <io.h>
-#include <windows.h>
-
-#include "m_pd.h"
-#include "k_cext.h"
-
-#define MAX_INSTANCES 256
-
-char *nametemplate = "pd-XXXXXX";
-extern int instancenumber;	/* number of instance of this object */
-char names[MAX_INSTANCES][9];
-
-
-int k_sys_getprocessfunction(t_k_cext *x, char *funcname, char *name){
-  char dllname[50];
-  strcpy(dllname, name);
-  sys_bashfilename(dllname, dllname);
-  dllname[strlen(dllname)-4]=0;
-  strcat(dllname, ".dll");
-  post("going to load %s...", dllname);
-  x->handle = LoadLibrary(dllname);
-
-  if (!x->handle){
-    x->handle=NULL;
-    post("Error (%d). \n", GetLastError());
-    return 0;
-  }
-  // x->k_cext_process = (t_xxx)GetProcAddress(x->handle, "k_cext_process");  
-  x->k_cext_process=(void (*)(struct k_cext *))GetProcAddress(x->handle, funcname);
-  return 1;
-}
-
-void k_sys_freehandle(t_k_cext *x){
-  char temp[500];
-
-  FreeLibrary((HINSTANCE)x->handle);
-
-  sprintf(temp,"%s.dll",x->filename);
-  unlink(temp);
-  sprintf(temp,"%s.obj",x->filename);
-  unlink(temp);
-  sprintf(temp,"%s.exp",x->filename);
-  unlink(temp);
-  sprintf(temp,"%s.lib",x->filename);
-  unlink(temp);
-
-  unlink(x->filename);
-}
-
-void k_sys_mktempfilename(char *to){
-  char *temp;
-  FILE *file;
-  strcpy(names[instancenumber], nametemplate);
-  temp = _mktemp(names[instancenumber]);
-  if(temp == NULL)
-  {
-    error("could not create unique filename");
-	return;
-  }
-  sprintf(to,"%s",temp);
-  file=fopen(temp,"w");	/* we have to cheat ;-( */
-  fclose(file);
-}
-
-void k_sys_writeincludes(FILE *file){
-  fprintf(file,"#include \"" INCLUDEPATH "\\src\\m_pd.h\"\n");
-  fprintf(file,"#include \"" INCLUDEPATH "\\src\\k_cext.h\"\n");	/* needs to be in pd/src, sorry.. */
-}
-
-void k_sys_makecompilestring(char *to,char *name,char *funcname){
-  sprintf(to,"cl %s " INCLUDEPATH "\\bin\\pd.lib " INCLUDEPATH "\\extra\\k_cext.lib /LD /Gd /GD /Ox /DNT /link /export:%s",
-	  name, funcname);
-}
-
-void k_sys_deletefile(char *name){
-  char delname[16];
-	post("del %s", name);
-  _unlink(name);
-
-}
-
-void k_sys_init(void){
-}
diff --git a/externals/k_cext/test.pd b/externals/k_cext/test.pd
deleted file mode 100644
index f61becb27..000000000
--- a/externals/k_cext/test.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 321 226 450 300 10;
-#X floatatom 102 55 5 0 0;
-#X floatatom 112 275 5 0 0;
-#X floatatom 172 276 5 0 0;
-#X floatatom 218 278 5 0 0;
-#X floatatom 273 280 5 0 0;
-#X obj 160 39 k_cext 1 4 \; \; int lokke \; int a=5 \; \; RANGE(lokke
-\, 0 \, 4) DO \; . O(lokke \, I(0)) \; . IF I(0)==0 THEN DO \; . .
-O(1 \, 2) \; . ELIF I(0)==1 THEN DO \; . . O(2 \, 3) \; . ELSE \; .
-. O(3 \, 4) \; . . IF a==2 THEN DO \; . . . O(3 \, 23) \; . . . IF
-a==3 THEN DO \; . . . . O(2 \, 4) \;;
-#X connect 0 0 5 0;
-#X connect 5 0 1 0;
-#X connect 5 1 2 0;
-#X connect 5 2 3 0;
-#X connect 5 3 4 0;
diff --git a/externals/k_guile/Makefile b/externals/k_guile/Makefile
deleted file mode 100644
index e28f66480..000000000
--- a/externals/k_guile/Makefile
+++ /dev/null
@@ -1,114 +0,0 @@
-NAME=k_guile
-CSYM=k_guile
-
-DIR=k_guile
-
-current: pd_linux
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo /DINCLUDEPATH=\"c:\\pd\"
-VC="C:\Programme\Microsoft Visual Studio\Vc98"
-
-PDNTINCLUDE = /I. /I\tcl\include /Ic:\pd\src /I$(VC)\include
-
-PDNTLDIR = $(VC)\lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	c:\pd\bin\pd.lib 
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c k_guile_win.c
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$(CSYM)_setup $*.obj k_guile_win.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDEPATH=../../src
-LINUXINCLUDE =  -I$(LINUXINCLUDEPATH)
-
-$(NAME).pd_linux: $(NAME).o
-	ld --export-dynamic  -shared -o $(NAME).pd_linux k_guile.o -lc -lm -lguile
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s $(DIR)/$*.pd_linux ..
-
-$(NAME).o: $(NAME).c global_scm.txt local_scm.txt
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $(NAME).o -c $(NAME).c
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: $(NAME).pd_darwin k_guile.c
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin: global_scm.txt local_scm.txt
-	cc $(DARWINCFLAGS) $(LINUXINCLUDE) -DINCLUDEPATH=\""`pwd`"\" -DLINUXINCLUDE=\""$(LINUXINCLUDEPATH)"\ -o $*.o -c k_guile.c
-	cc -bundle -undefined suppress  -flat_namespace -o $*.pd_darwin $*.o 
-	rm -f $*.o ../$*.pd_darwin
-	ln -s $*/$*.pd_darwin ..
-
-# ----------------------------------------------------------
-
-
-global_scm.txt: global.scm gen_c_scheme.py
-	./gen_c_scheme.py global.scm >global_scm.txt
-
-local_scm.txt: local.scm gen_c_scheme.py
-	./gen_c_scheme.py local.scm >local_scm.txt
-
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations *~ core global_scm.txt local_scm.txt
-
-
diff --git a/externals/k_guile/README b/externals/k_guile/README
deleted file mode 100644
index 6a613855a..000000000
--- a/externals/k_guile/README
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-k_guile PD external
---------------------------------------------
-V0.0.2
-
--This external makes you able to use guile as an extension language for
- PD. Guile is a scheme interpreter. The API is inspired by
- the python pyext external made by Thomas Grill, and a small part of
- the code is made by looking at the flext source.
-
--To be able to use it, you should first know the lisp programming language,
- then check out the help-k_guile.pd example patch and read the small
- example-scripts that the patch loads.
-
-
-API
--------------------------------------------
-k_guile provides the following functions:
-
-* (pd-inlets num-inlets)
-    - Sets number of inlets for the object.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-outlets num-outlets)
-    - Sets number of outlets for the object.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-inlet inlet-num type func)
-    - "func" is a function that is called when the object
-      receives a message to the inlet "inlet-num" of type
-      "type". Normal values for "type" are 'float, 'list,
-      'bang, etc.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-outlet outlet-num arg0 arg1 ...)
-    - Sends value(s) to outlet "outlet-num". 
-      The argument(s) can be of any kind.
-    - add.scm, inout.scm
-    - Local function.
-
-* (pd-bind symbol func)
-    - Pd messages sent to "symbol" arrives at the "func" function.
-    - send_receive.scm
-    - Both local and global
-
-* (pd-unbind symbol)
-    - Stop receiving messages sent to "symbol".
-    - Both local and global. For the local version, all bindings
-      are automatically unbinded when the object is destroyed or
-      reloaded.
-
-* (pd-send symbol arg0 arg1 ...)
-    - Sends value(s) to receivers for "symbol". "Symbol" can either
-      be a scheme or a pd symbol.
-    - send_receive.scm
-    - Global function.
-
-* (pd-get-symbol symbol)
-    - Returns the pd symbol for the scheme symbol "symbol".
-      pd-send works faster when a pd symbol is used instead of a scheme symbol.
-    - send_receive.scm
-    - Global function.
-
-* (pd-set-destroy-func thunk)
-    - "thunk" is called before the object is destroyed or reloaded.
-    - Local function.
-
-
-
-Scheme programming with the k_guile object.
---------------------------------------------------
--The code executed lives in its own local namespace
- spesific for the pd object. If you need or want to
- break out of the local namespace, simply just use
- (load ) to let another script run in the global
- namespace.
--If you need to call pd-inlets or pd-outlets, they
- should/must be the first functions to call in the
- script. The default number of inlets is 1,
- and the default number of outlets is 0.
--Some global debugging options are set at the top
- of the global.scm file. You might want to edit
- those values _before compiling_ the k_guile external.
--None of the functions have been made with
- thread-safety in mind.
--Backtracing doesn't work properly. Don't know why.
-
-
-Changes
---------------------------------------------------
-v0.0.1->v0.0.2:
--Loads /etc/.k_guile.scm and $HOME/.k_guile.scm at
- startup.
--An inlet can specify 'any as type, and will then
- receive anything.
--The k_guile object can receive "eval" messages to evaluate
- scheme code.
-
-
---------------------------------------------------
-Kjetil S. Matheussen, k.s.matheussen@notam02.no
-last updated 21.1.2004
-
-
diff --git a/externals/k_guile/add.scm b/externals/k_guile/add.scm
deleted file mode 100644
index b4bfd76df..000000000
--- a/externals/k_guile/add.scm
+++ /dev/null
@@ -1,15 +0,0 @@
-
-(pd-inlets 2)
-(pd-outlets 1)
-
-(let ((inlet1 0))
-  (pd-inlet 1 'float
-	    (lambda (x)
-	      (set! inlet1 x)))
-  (pd-inlet 0 'float
-	    (lambda (x)
-	      (pd-outlet 0 (+ inlet1 x)))))
-
-
-
-
diff --git a/externals/k_guile/any.scm b/externals/k_guile/any.scm
deleted file mode 100644
index bf261912c..000000000
--- a/externals/k_guile/any.scm
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-(pd-inlet 0 'any
-	  (lambda x
-	    (pd-display "Got " x " to inlet 0")))
diff --git a/externals/k_guile/gen_c_scheme.py b/externals/k_guile/gen_c_scheme.py
deleted file mode 100755
index 58c2dcc6d..000000000
--- a/externals/k_guile/gen_c_scheme.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-import sys,string
-
-file=open(sys.argv[1],"r")
-
-while 1:
-    line=""
-    while line=="" or line=="\n" or line[0:1]==";":
-        line=file.readline()
-        if line=="":
-            file.close()
-            sys.exit(0)
-    line=string.replace(line[:-1],'\\','\\\\')
-    sys.stdout.write('"'+string.replace(line,'"','\\"')+'\\n"\n')
-
-
-
-
diff --git a/externals/k_guile/global.scm b/externals/k_guile/global.scm
deleted file mode 100644
index 7fe7eccca..000000000
--- a/externals/k_guile/global.scm
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-;; These functions are global functions available for all guile scripts loaded into PD.
-;; Kjetil S. Matheussen, 2004.
-
-;;/* 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.  */
-;;/*                                                                              */
-
-
-
-(debug-enable 'debug)
-(debug-enable 'trace)
-(debug-enable 'backtrace)
-
-(use-modules (ice-9 stack-catch))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Misc. functions
-;;
-;;
-(define (pd-load-if-exists filename)
-  (if (access? filename F_OK)
-      (load filename)))
-
-(define (pd-display . args)
-  (if (not (null? args))
-      (begin
-	(display (car args))
-	(apply pd-display (cdr args)))
-      (newline)))
-
-(define (pd-filter proc list)
-  (if (null? list)
-      '()
-      (if (proc (car list))
-	  (cons (car list) (pd-filter proc (cdr list)))
-	  (pd-filter proc (cdr list)))))
-
-(define (pd-for init pred least add proc)
-  (if (pred init least)
-      (begin
-	(proc init)
-	(pd-for (+ add init) pred least add proc))))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Argument checking
-;;
-;;
-(define (pd-check-number number message)
-  (if (number? number)
-      #t
-      (begin
-	(pd-display message ": " number " is not a number")
-	#f)))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Bindings
-;;
-;;
-(define pd-global-bindings '())
-
-(define (pd-bind-do symbol func bindings)
-  (if (or (not (symbol? symbol))
-	  (not (procedure? func)))
-      (begin
-	(pd-display "Wrong arguments for pd-bind")
-	bindings)
-      (cons (list symbol 
-		  func
-		  (pd-c-bind symbol func))
-	    bindings)))
-
-(define (pd-unbind-do symbol bindings)
-  (if (not (symbol? symbol))
-      (begin
-	(pd-display "Wrong arguments for pd-unbind")
-	bindings)
-      (let ((binding (assq symbol bindings)))
-	(pd-c-unbind (caddr binding) symbol)
-	(pd-filter (lambda (x) (not (eq? symbol (car x))))
-		   bindings))))
-
-(define (pd-bind symbol func)
-  (set! pd-global-bindings (pd-bind-do symbol func pd-global-bindings)))
-
-(define (pd-unbind symbol)
-  (set! pd-global-bindings (pd-unbind-do symbol pd-global-bindings)))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Sending
-;;
-;;
-(define (pd-send symbol firstarg . args)
-  (if (or (symbol? symbol)
-	  (number? symbol))
-      (cond ((> (length args) 0) (pd-c-send-list symbol (cons firstarg args)))
-	    ((list? firstarg) (pd-c-send-list symbol firstarg))
-	    ((number? firstarg) (pd-c-send-number symbol firstarg))
-	    ((string? firstarg) (pd-c-send-string symbol firstarg))
-	    ((eq? 'bang firstarg) (pd-c-send-bang symbol))
-	    ((symbol? firstarg) (pd-c-send-symbol symbol firstarg))
-	    (else
-	     (pd-display "Unknown argument to pd-outlet-or-send:" firstarg)))))
-
-(define (pd-get-symbol sym)
-  (if (not (symbol? sym))
-      (pd-display sym " is not a scheme symbol")
-      (pd-c-get-symbol sym)))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Backtrace (does not work properly)
-;;
-;;
-
-(define (pd-backtrace-eval string)
-  (eval-string string))
-
-(define (pd-display-errorfunc key . args)
-  (let ((dasstack (make-stack #t)))
-    (display-backtrace dasstack (current-output-port) #f #f)
-					;(display (stack-ref (make-stack #t) 1))
-					;(display (stack-length (make-stack #t)))
-    (display key)(newline)
-    (display args)
-    (newline))
-  0)
-
-(define (pd-backtrace-run thunk)
-  (stack-catch #t
-	       thunk
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-runx func arg1) 
-  (stack-catch #t
-	       (lambda x
-		 (apply func x))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run1 func arg1)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run2 func arg1 arg2)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1 arg2))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run3 func arg1 arg2 arg3)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1 arg2 arg3))
-	       pd-display-errorfunc))
-
-(define (pd-backtrace-run4 func arg1 arg2 arg3 arg4)
-  (stack-catch #t
-	       (lambda ()
-		 (func arg1 arg2 arg3 arg4))
-	       pd-display-errorfunc))
-
-(pd-backtrace-run1 pd-load-if-exists "/etc/.k_guile.scm")
-(pd-backtrace-run1 pd-load-if-exists (string-append (getenv "HOME") "/.k_guile.scm"))
-
diff --git a/externals/k_guile/help-k_guile.pd b/externals/k_guile/help-k_guile.pd
deleted file mode 100644
index 6e7614c91..000000000
--- a/externals/k_guile/help-k_guile.pd
+++ /dev/null
@@ -1,83 +0,0 @@
-#N canvas 481 303 707 547 10;
-#X obj 101 135 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 101 162 k_guile add.scm;
-#X obj 101 195 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 201 137 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X msg 38 134 reload;
-#X obj 341 157 k_guile send_receive.scm;
-#X msg 341 127 reload;
-#X obj 483 130 s in;
-#X obj 512 97 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 475 186 r out;
-#X msg 468 95 gakk;
-#X obj 475 215 print;
-#X obj 580 95 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 608 96 list 2 3 4;
-#X text 27 19 k_guile - guile external for PD.;
-#X text 26 36 Kjetil S. Matheussen \, 2004;
-#X obj 130 301 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 255 300 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 71 301 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 71 388 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 146 389 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 213 390 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X msg 17 300 reload;
-#X obj 75 341 k_guile inout.scm;
-#X obj 436 346 k_guile mozilla.scm;
-#X msg 436 301 start;
-#X text 300 496 Note \; you can not change the number of inlets and
-outlets by sending reload .;
-#X msg 316 299 testing;
-#X msg 190 299 testing;
-#X msg 409 95 we 3 2;
-#X msg 512 286 eval (newline);
-#X msg 512 309 eval (display(environ));
-#X obj 65 487 k_guile any.scm;
-#X msg 25 448 reload;
-#X obj 193 448 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X msg 149 446 gakk;
-#X obj 261 446 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 289 447 list 2 3 4;
-#X msg 90 446 we 3 2;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 3 0 1 1;
-#X connect 4 0 1 0;
-#X connect 6 0 5 0;
-#X connect 8 0 7 0;
-#X connect 9 0 11 0;
-#X connect 10 0 7 0;
-#X connect 12 0 7 0;
-#X connect 13 0 7 0;
-#X connect 16 0 23 152;
-#X connect 17 0 23 323;
-#X connect 18 0 23 9;
-#X connect 22 0 23 0;
-#X connect 23 13 19 0;
-#X connect 23 185 20 0;
-#X connect 23 346 21 0;
-#X connect 25 0 24 0;
-#X connect 27 0 23 396;
-#X connect 28 0 23 284;
-#X connect 29 0 7 0;
-#X connect 30 0 24 0;
-#X connect 31 0 24 0;
-#X connect 33 0 32 0;
-#X connect 34 0 32 0;
-#X connect 35 0 32 0;
-#X connect 36 0 32 0;
-#X connect 37 0 32 0;
-#X connect 38 0 32 0;
diff --git a/externals/k_guile/inout.scm b/externals/k_guile/inout.scm
deleted file mode 100644
index a2d829c52..000000000
--- a/externals/k_guile/inout.scm
+++ /dev/null
@@ -1,24 +0,0 @@
-
-(define num-inouts 400)
-
-(pd-inlets num-inouts)
-(pd-outlets num-inouts)
-
-
-(pd-for 0 < num-inouts 1
-	(lambda (i)
-	  (pd-inlet i 'float
-		    (lambda (x)
-		      (pd-display "Got " x " to inlet " i)
-		      (pd-for 0 < num-inouts 1
-			      (lambda (i2)
-				(pd-outlet i2 (+ i2 x))))))))
-
-
-(pd-inlet 284 'testing
-	  (lambda ()
-	    (pd-display "This is a function for handling 'testing sent to inlet 284.")))
-
-
-
-
diff --git a/externals/k_guile/k_guile.c b/externals/k_guile/k_guile.c
deleted file mode 100644
index 82212b9c1..000000000
--- a/externals/k_guile/k_guile.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/* --------------------------- k_guile  ----------------------------------- */
-/*   ;; Kjetil S. Matheussen, 2004.                                             */
-/*                                                                              */
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-
-
-#include "libguile.h"
-
-/* Need some more macros. */
-
-#define POINTER_P(x) (((int) (x) & 3) == 0)
-#define INTEGER_P(x) (! POINTER_P (x))
-
-#define GET_INTEGER SCM_INUM 
-#define MAKE_INTEGER  SCM_MAKINUM
-
-#define MAKE_STRING(a) scm_mem2string(a,strlen(a))
-#define EVAL(a) scm_eval_string(MAKE_STRING(a))
-
-#define MAKE_SYM(a) gensym(SCM_SYMBOL_CHARS(a))
-
-#define MAKE_POINTER(a) scm_ulong2num((unsigned long)a)
-#define GET_POINTER(a) (void *)scm_num2ulong(a,0,"GET_POINTER()")
-
-#define GET_X(a) ((t_k_guile *)GET_POINTER(a))
-
-#define RU_ return SCM_UNSPECIFIED
-
-
-
-#include "m_pd.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <stdbool.h>
-#include <stdarg.h>
-
-
-struct k_guile_workaround;
-
-typedef struct k_guile
-{
-  t_object x_ob;
-
-  int num_ins;
-  int num_outs;
-
-  struct k_guile_workaround **inlets;
-  t_outlet **outlets;
-
-  SCM inlet_func;
-  SCM cleanup_func;
-
-  char *filename;
-
-  bool isinited;
-} t_k_guile;
-
-typedef struct k_guile_workaround{
-  t_object x_ob;
-  t_k_guile *x;
-  t_inlet *inlet;
-  int index;
-  SCM func;
-} t_k_guile_workaround;
-
-
-
-
-#define KG_MAX(a,b) (((a)>(b))?(a):(b))
-#define KG_MIN(a,b) (((a)<(b))?(a):(b))
-
-
-
-static char *version = 
-"k_guile v0.0.2, written by Kjetil S. Matheussen, k.s.matheussen@notam02.no";
-
-static t_class *k_guile_class, *k_guile_workaroundclass;
-
-static SCM pd_backtrace_run;
-static SCM pd_backtrace_runx;
-static SCM pd_backtrace_run1;
-static SCM pd_backtrace_run2;
-static SCM pd_backtrace_run3;
-static SCM pd_backtrace_run4;
-static SCM eval_string_func;
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Functions to evaluate large amount of scheme code from C.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static char *evalstring=NULL;
-static void eval2(char *string){
-  char *new;
-  if(evalstring==NULL){
-    new=malloc(strlen(string)+1);
-    sprintf(new,"%s",string);
-  }else{
-    new=malloc(strlen(evalstring)+strlen(string)+1);
-    sprintf(new,"%s%s",evalstring,string);
-    free(evalstring);
-  }
-  evalstring=new;
-}
-static void eval_file(FILE *file){
-  char line[50000];
-  for(;;){
-    int c=fgetc(file);
-    if(c==EOF) break;
-    ungetc(c,file);
-    fgets(line,49999,file);
-    eval2(line);
-  }
-}
-static SCM eval_do(void){
-  //post(evalstring);
-  SCM ret=EVAL(evalstring);
-  free(evalstring);
-  evalstring=NULL;
-  return ret;
-}
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Sending data to the guile side. Called either via bind or an inlet.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static void k_guile_anything_do(t_k_guile *x,int index,SCM func,t_symbol *s, t_int argc, t_atom* argv){
-  int lokke;
-  SCM applyarg=SCM_EOL;
-
-  for(lokke=argc-1;lokke>=0;lokke--){
-    SCM to=SCM_BOOL_F;
-    switch(argv[lokke].a_type){
-    case A_NULL:
-      to=SCM_EOL;
-      break;
-    case A_FLOAT:
-      to=scm_make_real(atom_getfloatarg(lokke,argc,argv));
-      break;
-    case A_SYMBOL:
-      to=scm_string_to_symbol(MAKE_STRING(atom_getsymbolarg(lokke,argc,argv)->s_name));
-      break;
-    default:
-      post("Strange");
-      break;
-    }
-    applyarg=scm_cons(to,applyarg);
-  }
-
-  if(index>=0){
-    // Inlet
-    scm_call_4(pd_backtrace_run3,x->inlet_func,MAKE_INTEGER(index),scm_string_to_symbol(MAKE_STRING(s->s_name)),applyarg);
-  }else{
-    // Binding
-    if(s!=&s_float && s!=&s_list && s!=&s_symbol){
-      applyarg=scm_cons(scm_string_to_symbol(MAKE_STRING(s->s_name)),applyarg);
-    }
-    if(s!=&s_list && GET_INTEGER(scm_length(applyarg))==1)
-      applyarg=SCM_CAR(applyarg);
-    scm_call_2(pd_backtrace_run1,func,applyarg);
-  }
-}
-
-// Handles inlet>0 and bindings
-static void k_guile_anything(t_k_guile_workaround *x2,t_symbol *s, t_int argc, t_atom* argv){
-  if(x2->index>=0){
-    // Inlet
-    k_guile_anything_do(x2->x,x2->index,0,s,argc,argv);
-  }else{
-    // Binding
-    k_guile_anything_do(NULL,x2->index,x2->func,s,argc,argv);
-  }
-}
-
-// Handles first inlet
-static void k_guile_anything_first(t_k_guile *x,t_symbol *s, t_int argc, t_atom* argv){
-  k_guile_anything_do(x,0,0,s,argc,argv);
-}
-
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Initialization, called from the guile side.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static SCM gpd_inlets(SCM instance,SCM num_ins){
-  int lokke;
-  t_k_guile *x=GET_X(instance);
-
-  if(x->isinited==true) goto exit;
-
-  x->num_ins=GET_INTEGER(num_ins);
-  x->inlets=calloc(sizeof(t_k_guile_workaround*),x->num_ins);
-
-  for(lokke=1;lokke<x->num_ins;lokke++){
-    t_k_guile_workaround *x2;
-    x2=(t_k_guile_workaround*)pd_new(k_guile_workaroundclass);
-    x->inlets[lokke]=x2;
-    x2->x=x;
-    x2->index=lokke;
-    x2->inlet=inlet_new(&x->x_ob,(t_pd*)x2,0,0);
-  }
-
- exit:
-  RU_;
-}
-static SCM gpd_outlets(SCM instance,SCM num_outs){
-  int lokke;
-  t_k_guile *x=GET_X(instance);
-
-  if(x->isinited==true) goto exit;
-
-  x->num_outs=GET_INTEGER(num_outs);
-  x->outlets=calloc(sizeof(t_outlet*),x->num_outs);
-
-  for(lokke=0;lokke<x->num_outs;lokke++){
-    x->outlets[lokke] = outlet_new(&x->x_ob, gensym("anything"));
-  }
-
- exit:
-  RU_;
-}
-
-static SCM gpd_inited_p(SCM instance){
-  t_k_guile *x=GET_X(instance);
-  if(x->isinited==true) return SCM_BOOL_T;
-  return SCM_BOOL_F;
-}
-static SCM gpd_get_num_inlets(SCM instance){
-  t_k_guile *x=GET_X(instance);
-  return MAKE_INTEGER(x->num_ins);
-}
-static SCM gpd_get_num_outlets(SCM instance){
-  t_k_guile *x=GET_X(instance);
-  return MAKE_INTEGER(x->num_outs);
-}
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Binding and unbinding. Called from the guile side. 
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static SCM gpd_bind(SCM symname,SCM func){
-  t_k_guile_workaround *x2;
-  x2=(t_k_guile_workaround*)pd_new(k_guile_workaroundclass);
-  x2->index=-1;
-  x2->func=func;
-  scm_protect_object(x2->func);
-  pd_bind((t_pd *)x2, MAKE_SYM(symname));
-  return MAKE_POINTER(x2);
-}
-static SCM gpd_unbind(SCM scm_x2,SCM symname){
-  t_k_guile_workaround *x2=GET_POINTER(scm_x2);
-  pd_unbind((t_pd *)x2,MAKE_SYM(symname));
-  scm_unprotect_object(x2->func);
-  pd_free((t_pd*)x2);
-  RU_;
-}
-
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Got data from the guile side. Distributing to outlets or receivers.
- *    The guile side is responsible for checking that the arguments are correct.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-#define GET_CLASS() (INTEGER_P(symbol)?(t_symbol*)GET_POINTER(symbol):MAKE_SYM(symbol))->s_thing
-#define CLASS_INIT t_class **s=GET_CLASS();if(s==NULL) post("no receiver"); else 
-#define GET_OUTLET() GET_X(instance)->outlets[GET_INTEGER(outlet)]
-
-
-/* Number -> float */
-static SCM gpd_outlet_number(SCM instance,SCM outlet,SCM val){
-  outlet_float(GET_OUTLET(),scm_num2dbl(val,"gpd_outlet"));
-  RU_;
-}
-
-
-static SCM gpd_send_number(SCM symbol,SCM val){
-  CLASS_INIT
-    pd_float(s,scm_num2dbl(val,"gpd_send_number"));
-  RU_;
-}
-
-
-/* List -> list */
-static t_atom *make_list(t_atom *atom,SCM val){
-  int lokke;
-  int length=GET_INTEGER(scm_length(val));
-
-  for(lokke=0;lokke<length;lokke++){
-    SCM el=scm_list_ref(val,MAKE_INTEGER(lokke));
-    t_atom *to=&atom[lokke];
-    if(SCM_INUMP(el)){
-      SETFLOAT(to,(float)GET_INTEGER(el));
-    }else{
-      if(SCM_UNBNDP(el)){
-	SETSYMBOL(to,gensym("undefined"));
-      }else{
-	if(SCM_STRINGP(el)){
-	  SETSYMBOL(to,gensym(SCM_STRING_CHARS(el)));
-	}else{
-	  if(SCM_SYMBOLP(el)){
-	    SETSYMBOL(to,MAKE_SYM(el));
-	  }else{
-	    if(scm_number_p(el)){
-	      if(scm_real_p(el)){
-		SETFLOAT(to,(float)scm_num2dbl(el,"gpd_outlet_or_send_list"));
-	      }else{
-		post("Illegal argument to gdp_outlet_or_send_list. Setting atom to 0.");
-		SETFLOAT(to,0.0f);
-	      }
-	    }
-	  }
-	}
-      }
-    }
-  }
-  return atom;
-}
-static SCM gpd_outlet_list(SCM instance,SCM outlet,SCM val){
-  int length=GET_INTEGER(scm_length(val));
-  t_atom atom[length];
-  outlet_list(GET_OUTLET(), &s_list,length,make_list(atom,val));
-  RU_;
-}
-static SCM gpd_send_list(SCM symbol,SCM val){
-  int length=GET_INTEGER(scm_length(val));
-  t_atom atom[length];
-  CLASS_INIT
-    pd_list(s, &s_list,length,make_list(atom,val));
-  RU_;
-}
-
-/* Symbol -> symbol */
-static SCM gpd_outlet_symbol(SCM instance,SCM outlet,SCM val){
-  outlet_symbol(GET_OUTLET(),MAKE_SYM(val));
-  RU_;
-}
-static SCM gpd_send_symbol(SCM symbol,SCM val){
-  CLASS_INIT
-    pd_symbol(s,MAKE_SYM(val));
-  RU_;
-}
-
-/* String -> symbol */
-static SCM gpd_outlet_string(SCM instance,SCM outlet,SCM val){
-  outlet_symbol(GET_OUTLET(),gensym(SCM_STRING_CHARS(val)));
-  RU_;
-}
-static SCM gpd_send_string(SCM symbol,SCM val){
-  CLASS_INIT
-    pd_symbol(s,gensym(SCM_STRING_CHARS(val)));
-  RU_;
-}
-
-/* Bang -> bang */
-static SCM gpd_outlet_bang(SCM instance,SCM outlet){
-  outlet_bang(GET_OUTLET());
-  RU_;
-}
-static SCM gpd_send_bang(SCM symbol){
-  CLASS_INIT
-    pd_bang(s);
-  RU_;
-}
-
-/* <- symbol */
-static SCM gpd_get_symbol(SCM symname){
-  return MAKE_POINTER(MAKE_SYM(symname));
-}
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Setting up global guile functions.
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static void k_guile_init(void){
-  char *command=
-#include "global_scm.txt"
-    ;
-
-  scm_init_guile();
-  scm_c_define_gsubr("pd-c-outlets",2,0,0,gpd_outlets);
-  scm_c_define_gsubr("pd-c-inlets",2,0,0,gpd_inlets);
-  scm_c_define_gsubr("pd-c-inited?",1,0,0,gpd_inited_p);
-  scm_c_define_gsubr("pd-c-get-num-inlets",1,0,0,gpd_get_num_inlets);
-  scm_c_define_gsubr("pd-c-get-num-outlets",1,0,0,gpd_get_num_outlets);
-  scm_c_define_gsubr("pd-c-bind",2,0,0,gpd_bind);
-  scm_c_define_gsubr("pd-c-unbind",2,0,0,gpd_unbind);
-  scm_c_define_gsubr("pd-c-outlet-number",3,0,0,gpd_outlet_number);
-  scm_c_define_gsubr("pd-c-outlet-list",3,0,0,gpd_outlet_list);
-  scm_c_define_gsubr("pd-c-outlet-symbol",3,0,0,gpd_outlet_symbol);
-  scm_c_define_gsubr("pd-c-outlet-string",3,0,0,gpd_outlet_string);
-  scm_c_define_gsubr("pd-c-outlet-bang",2,0,0,gpd_outlet_bang);
-  scm_c_define_gsubr("pd-c-send-number",2,0,0,gpd_send_number);
-  scm_c_define_gsubr("pd-c-send-list",2,0,0,gpd_send_list);
-  scm_c_define_gsubr("pd-c-send-symbol",2,0,0,gpd_send_symbol);
-  scm_c_define_gsubr("pd-c-send-string",2,0,0,gpd_send_string);
-  scm_c_define_gsubr("pd-c-send-bang",1,0,0,gpd_send_bang);
-  scm_c_define_gsubr("pd-c-get-symbol",1,0,0,gpd_get_symbol);
-
-  EVAL(command);
-
-  pd_backtrace_run=EVAL("pd-backtrace-run");
-  scm_permanent_object(pd_backtrace_run);
-
-  pd_backtrace_runx=EVAL("pd-backtrace-runx");
-  scm_permanent_object(pd_backtrace_runx);
-
-  pd_backtrace_run1=EVAL("pd-backtrace-run1");
-  scm_permanent_object(pd_backtrace_run1);
-
-  pd_backtrace_run2=EVAL("pd-backtrace-run2");
-  scm_permanent_object(pd_backtrace_run2);
-
-  pd_backtrace_run3=EVAL("pd-backtrace-run3");
-  scm_permanent_object(pd_backtrace_run3);
-
-  pd_backtrace_run4=EVAL("pd-backtrace-run4");
-  scm_permanent_object(pd_backtrace_run4);
-
-  eval_string_func=EVAL("eval-string");
-}
-
-
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Starting and stopping new guile script
- *****************************************************************************************************
- *****************************************************************************************************/
-
-static bool k_guile_load(t_k_guile *x,char *filename){
-  SCM evalret;
-  bool ret=false;
-  
-  FILE *file=fopen(filename,"r");
-  if(file==NULL){
-    post("file \"%s\" not found.\n",filename);
-    return false;
-  }
-
-
-  // Let the file live in its own name-space (or something like that).
-  eval2("(define (pd-instance-func pd-instance)");
-  eval2(
-#include "local_scm.txt"
-);
-  eval_file(file);
-  eval2("  (cons pd-inlet-func pd-cleanup-func))");
-  eval2("1");
-
-  if(1!=GET_INTEGER(eval_do())){
-    post("Failed.");
-    goto exit;
-  }
-
-  evalret=scm_call_2(pd_backtrace_run1,EVAL("pd-instance-func"),MAKE_POINTER(x));
-  if(INTEGER_P(evalret)){
-    post("Failed.");
-    goto exit;
-  }
-  x->inlet_func=SCM_CAR(evalret);
-  x->cleanup_func=SCM_CDR(evalret);
-  scm_gc_protect_object(x->inlet_func);
-  scm_gc_protect_object(x->cleanup_func);
-
-  ret=true;
-
- exit:
-  fclose(file);
-
-  return ret;
-}
-
-static void *k_guile_new(t_symbol *s){
-  int lokke;
-  t_k_guile *x = (t_k_guile *)pd_new(k_guile_class);
-  x->filename=s->s_name;
-  x->isinited=false;
-
-  if(k_guile_load(x,x->filename)==true){
-    x->isinited=true;
-    return x;
-  }
-
-  return NULL;
-}
-
-static void k_guile_free(t_k_guile *x){
-  int lokke;
-  scm_call_1(pd_backtrace_run,x->cleanup_func);
-  for(lokke=1;lokke<x->num_ins;lokke++){
-    inlet_free(x->inlets[lokke]->inlet);
-    pd_free((t_pd*)x->inlets[lokke]);
-  }
-  for(lokke=0;lokke<x->num_outs;lokke++){
-    outlet_free(x->outlets[lokke]);
-  }
-  scm_gc_unprotect_object(x->inlet_func);
-  scm_gc_unprotect_object(x->cleanup_func);
-
-  free(x->inlets);
-  free(x->outlets);
-}
-
-
-static void k_guile_reload(t_k_guile *x){
-  scm_call_1(pd_backtrace_run,x->cleanup_func);
-  scm_gc_unprotect_object(x->inlet_func);
-  scm_gc_unprotect_object(x->cleanup_func);
-  k_guile_load(x,x->filename);
-}
-
-static void k_guile_eval(t_k_guile *x,t_symbol *s){
-  scm_call_2(pd_backtrace_run1,eval_string_func,MAKE_STRING(s->s_name));
-}
-
-//static void k_guile_evalfile(t_k_guile *x,t_symbol *s){
-//}
-
-
-
-/*****************************************************************************************************
- *****************************************************************************************************
- *    Das setup
- *****************************************************************************************************
- *****************************************************************************************************/
-void k_guile_setup(void){
-
-  k_guile_init();
-
-  k_guile_class = class_new(gensym("k_guile"), (t_newmethod)k_guile_new,
-			   (t_method)k_guile_free, sizeof(t_k_guile), 0, A_DEFSYM, 0);
-
-  class_addanything(k_guile_class, (t_method)k_guile_anything_first);
-  class_addmethod(k_guile_class, (t_method)k_guile_reload, gensym("reload"), 0);
-  class_addmethod(k_guile_class, (t_method)k_guile_eval, gensym("eval"), A_DEFSYM,0);
-  //class_addmethod(k_guile_class, (t_method)k_guile_evalfile, gensym("evalfile"), A_DEFSYM,0);
-  class_sethelpsymbol(k_guile_class, gensym("help-k_guile.pd"));
-
-
-  /* This trick(?) is taken from the flext source. (I don't understand what happens...) */
-  k_guile_workaroundclass=class_new(gensym("indexworkaround"),NULL,NULL,sizeof(t_k_guile_workaround),CLASS_PD|CLASS_NOINLET, A_NULL);
-  class_addanything(k_guile_workaroundclass,k_guile_anything);
-
- 
-  post(version);
-}
-
diff --git a/externals/k_guile/local.scm b/externals/k_guile/local.scm
deleted file mode 100644
index 65546b29b..000000000
--- a/externals/k_guile/local.scm
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-;; This file is evaluated (not (load)-ed) right before the file defined in the k_guile object in pd is evaluated or the
-;; reload message has been sent. (see k_guile.c/k_guile_new)
-;; Kjetil S. Matheussen, 2004.
-;;
-;;/* 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.  */
-;;/*                                                                              */
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Instance data
-;;
-;;
-(define pd-num-inlets 1)
-(define pd-num-outlets 0)
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Argument checking
-;;
-;;
-(define (pd-legaloutlet outlet-num)
-  (if (and (< outlet-num pd-num-outlets) (>= outlet-num 0))
-      #t
-      (begin
-	(pd-display "outlet-num out of range")
-	#f)))
-
-(define (pd-legalinlet inlet-num)
-  (if (and (< inlet-num pd-num-inlets) (>= inlet-num 0))
-      #t
-      (begin
-	(pd-display "inlet-num out of range")
-	#f)))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Inlets
-;;
-;;
-(define pd-inlet-vector (make-vector 1 '()))
-(define pd-inlet-anyvector (make-vector 1 '()))
-
-;; This function is called from the C side when the object receives something on an inlet.
-(define (pd-inlet-func inlet-num symbol args)
-  (let ((inlet-func (assq symbol 
-			  (vector-ref pd-inlet-vector
-				      inlet-num))))
-    (if (not inlet-func)
-	(begin
-	  (set! inlet-func (assq 'any
-				 (vector-ref pd-inlet-vector inlet-num)))
-	  (set! args (cons symbol args))))
-    (if inlet-func
-	(apply (cadr inlet-func) args)
-	(pd-display "No function defined for handling \'" symbol " to inlet " inlet-num))))
-
-(define (pd-inlet inlet-num symbol func)
-  (if (not (procedure? func))
-      (pd-display "Wrong argument to pd-inlet: " func " is not a procedure")
-      (if (and (pd-check-number inlet-num "pd-inlet")
-	       (pd-legalinlet inlet-num))
-	  (let ((inlet-funcs (vector-ref (if (eq? symbol 'any)
-					     pd-inlet-anyvector
-					     pd-inlet-vector)
-					 inlet-num)))
-	    (vector-set! pd-inlet-vector 
-			 inlet-num
-			 (cons (list symbol func)
-			       inlet-funcs))))))
-
-(define (pd-inlets new-num-inlets)
-  (let ((num-inlets (if (pd-c-inited? pd-instance)
-			(pd-c-get-num-inlets pd-instance)
-			new-num-inlets)))
-    (if (pd-check-number num-inlets "pd-inlets")
-	(if (<= num-inlets 0)
-	    (pd-display "num-inlets must be greater than 0, not " num-inlets)
-	    (begin
-	      (set! pd-num-inlets num-inlets)
-	      (set! pd-inlet-vector (make-vector num-inlets '()))
-	      (pd-c-inlets pd-instance num-inlets))))))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Outlets
-;;
-;;
-(define (pd-outlets new-num-outlets)
-  (let ((num-outlets (if (pd-c-inited? pd-instance)
-			 (pd-c-get-num-outlets pd-instance)
-			 new-num-outlets)))
-    (if (pd-check-number num-outlets "pd-outlets")
-	(if (<= num-outlets 0)
-	    (pd-display "num-outlets must be greater than 0, not " num-outlets)
-	    (begin
-	      (set! pd-num-outlets num-outlets)
-	      (pd-c-outlets pd-instance num-outlets))))))
-
-(define (pd-outlet outlet-num firstarg . args)
-  (if (pd-legaloutlet outlet-num)
-      (cond ((> (length args) 0) (pd-c-outlet-list pd-instance outlet-num issymbol (cons firstarg args)))
-	    ((list? firstarg) (pd-c-outlet-list pd-instance outlet-num firstarg))
-	    ((number? firstarg) (pd-c-outlet-number pd-instance outlet-num firstarg))
-	    ((string? firstarg) (pd-c-outlet-string pd-instance outlet-num firstarg))
-	    ((eq? 'bang firstarg) (pd-c-outlet-bang pd-instance outlet-num))
-	    ((symbol? firstarg) (pd-c-outlet-symbol pd-instance outlet-num firstarg))
-	    (else
-	     (pd-display "Unknown argument to pd-outlet-or-send:" firstarg)))))
-
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Bindings
-;;
-;;
-;; We must have our own local bind/unbind functions to be able to clean up automaticly.
-(define pd-local-bindings '())
-
-(define (pd-bind symbol func)
-  (set! pd-local-bindings (pd-bind-do symbol func pd-local-bindings)))
-
-(define (pd-unbind symbol)
-  (set! pd-local-bindings (pd-unbind-do symbol pd-local-bindings)))
-
-(define (pd-unbind-all)
-  (if (not (null? pd-local-bindings))
-      (begin
-	(pd-unbind (car (car pd-local-bindings)))
-	(pd-unbind-all))))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Cleanup
-;;
-;;
-(define pd-destroy-func #f)
-(define (pd-set-destroy-func thunk)
-  (if (not (procedure? thunk))
-      (pd-display "Wrong argument to pd-set-destroy-func: " thunk " is not a procedure.")
-      (set! pd-destroy-func thunk)))
-
-;; This func is called from the C-side.
-(define (pd-cleanup-func)
-  (if pd-destroy-func
-      (begin
-	(pd-destroy-func)
-	(set! pd-destroy-func #f)))
-  (pd-unbind-all))
-
diff --git a/externals/k_guile/mozilla.scm b/externals/k_guile/mozilla.scm
deleted file mode 100644
index e0e17b2ed..000000000
--- a/externals/k_guile/mozilla.scm
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-(pd-inlet 0 'start
-	  (lambda x
-	    (system "mozilla&")))
-
-
-
diff --git a/externals/k_guile/send_receive.scm b/externals/k_guile/send_receive.scm
deleted file mode 100644
index bae76688d..000000000
--- a/externals/k_guile/send_receive.scm
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-;; Send out what comes in.
-(pd-bind 'in
-	 (lambda (arg)
-	   (pd-send 'out arg)))
-
-
-#!
-;; This one does the same and is faster, but requires some more typing:
-(let ((s-out (pd-get-symbol 'out)))
-  (pd-bind 'in
-	   (lambda (arg)
-	     (pd-send s-out arg))))
-!#
-
-
-#!
-;; And the following example will (most probably) lead to a segmentation fault:
-;; This is also the only way I can think of right now that will make pd segfault using the pd- interface.
-(pd-send 5 arg)
-!#
-
diff --git a/externals/k_jack~/README b/externals/k_jack~/README
deleted file mode 100644
index 30f6b0265..000000000
--- a/externals/k_jack~/README
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-k_jack~ - General signal in/out external for pure data. Kjetil S. Matheussen.
-V0.0.2
-
-
-This external makes objects with signal inlets and outlets to jack ports. See
-the help patch.
-
-It works by calling functions and using variables in pd/src/s_audio.c that probably
-was not ment to be used for this purpose. But it works. And thats whats important.
-
-Changes
-v0.0.1->v0.0.2:
--Support for pure_data_1. And also pure_data_2/3/etc. if pd is compiled up with support
- for more than two simultaniously running pd sessions.
--Only connect ports once.
-
-
-Kjetil S. Matheussen
-k.s.matheussen@notam02.no
-
-
-
diff --git a/externals/k_jack~/k_jack~-help.pd b/externals/k_jack~/k_jack~-help.pd
deleted file mode 100644
index f8aa28d5a..000000000
--- a/externals/k_jack~/k_jack~-help.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#N canvas 245 237 811 481 10;
-#X obj 20 67 osc~ 500;
-#X obj 96 113 k_jack~ freqtweak;
-#X obj 97 65 osc~ 600;
-#X obj 11 22 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X obj 97 23 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0 256;
-#X text 597 425 k_jack~ General jack in/out;
-#X text 593 443 -Kjetil S. Matheussen \, 2004;
-#X text 230 114 <- Make sure freqtweak is running first!;
-#X text 292 64 <- Argument is a regexp string;
-#X obj 171 64 k_jack~ alsa_pcm;
-#X text 227 181 <- Its no harm having two similar k_jack objects;
-#X obj 105 181 k_jack~ alsa_pcm;
-#X obj 11 269 k_jack~ alsa_pcm:capture;
-#X obj 11 246 k_jack~ alsa_pcm:playback;
-#X text 201 246 <- Only playback.;
-#X text 200 267 <- Only capture.;
-#X obj 10 355 k_jack~ * . . . . . . . . . . . . . . . . . . .;
-#X text 359 357 <- "*" means all jack ports available. (The "."-s are
-there just for spacing.);
-#X obj 12 297 k_jack~ _1;
-#X text 95 298 <- All ports containing "_1";
-#X connect 0 0 1 0;
-#X connect 1 0 11 0;
-#X connect 1 1 11 1;
-#X connect 2 0 1 1;
-#X connect 3 0 0 0;
-#X connect 4 0 2 0;
-#X connect 9 0 1 0;
-#X connect 9 1 1 1;
-#X coords 0 0 1 1 200 140 1;
diff --git a/externals/k_jack~/k_jack~.c b/externals/k_jack~/k_jack~.c
deleted file mode 100644
index 8f6d14075..000000000
--- a/externals/k_jack~/k_jack~.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/* --------------------------- k_jack~  ----------------------------------- */
-/*   ;; Kjetil S. Matheussen, 2004.                                             */
-/*                                                                              */
-/* This program is free software; you can redistribute it and/or                */
-/* modify it under the terms of the GNU General Public License                  */
-/* as published by the Free Software Foundation; either version 2               */
-/* of the License, or (at your option) any later version.                       */
-/*                                                                              */
-/* This program is distributed in the hope that it will be useful,              */
-/* but WITHOUT ANY WARRANTY; without even the implied warranty of               */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
-/* GNU General Public License for more details.                                 */
-/*                                                                              */
-/* You should have received a copy of the GNU General Public License            */
-/* along with this program; if not, write to the Free Software                  */
-/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
-/*                                                                              */
-/* ---------------------------------------------------------------------------- */
-
-
-
-#include <m_pd.h>
-#include <s_stuff.h>
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <jack/jack.h>
-
-
-// Currently, the jack implementation in PD only supports 2 pd instances.
-// However, it doesn't hurt to use 100, so we use 100 to be prepared for
-// the future.
-
-#define MAX_PD_JACKCLIENTS 100
-
-
-static char *version = 
-"k_jack~ v0.0.2, written by Kjetil S. Matheussen, k.s.matheussen@notam02.no";
-
-
-
-
-
-/***********************************************************/
-/********************* Jack part ***************************/
-/***********************************************************/
-
-struct JackPort{
-  struct JackPort *next;
-  char *name;
-  bool is_input;
-  int num;
-};
-
-static struct JackPort *jackports=NULL;
-
-/* Name(+":") of the client we belong to. ("pure_data_0:", "pure_data_1:", ...) */
-static char *clientname=NULL;
-
-
-
-static void set_pd_channels(int inc_ins,int inc_outs){
-  int num_recs=sys_get_inchannels();
-  int num_plays=sys_get_outchannels();
-
-  int t1[1]={0};
-  int t2[1]={0};
-  int t3[1]={num_recs+inc_ins};
-  int t4[1]={num_plays+inc_outs};
-  sys_close_audio();
-  sys_open_audio(1,t1,
-		 1,t3,
-		 1,t2,
-		 1,t4,
-		 sys_getsr(),sys_schedadvance/1000,1);
-}
-
-
-
-static bool find_clientname(jack_client_t *client){
-  bool ret=false;
-
-  if(clientname!=NULL){
-    ret=true;
-  }else{
-    int lokke;
-    int num_clients=0;
-    int num_ports[MAX_PD_JACKCLIENTS]={0};
-    char temp[500];
-    const char **ports;
-
-    for(lokke=0;lokke<MAX_PD_JACKCLIENTS;lokke++){
-      sprintf(temp,"pure_data_%d",lokke);
-      ports=jack_get_ports(client,temp,"",0);
-      if(ports!=NULL){
-	while(ports[num_ports[lokke]]!=NULL){
-	  num_ports[lokke]+=1;
-	}
-      }
-    }
-
-    set_pd_channels(1,1);    
-      
-    for(lokke=0;lokke<MAX_PD_JACKCLIENTS;lokke++){
-      int num_ports2[MAX_PD_JACKCLIENTS]={0};
-      sprintf(temp,"pure_data_%d",lokke);
-      ports=jack_get_ports(client,temp,"",0);
-      if(ports!=NULL){
-	while(ports[num_ports2[lokke]]!=NULL){
-	  num_ports2[lokke]+=1;
-	}
-      }
-      if(num_ports2[lokke]!=num_ports[lokke]){
-	clientname=malloc(500);
-	sprintf(clientname,"pure_data_%d:",lokke);
-	//post("Got clientname: -%s-",clientname);
-	ret=true;
-	break;
-      }
-    }
-    set_pd_channels(-1,-1);
-  }
-
-  return ret;
-}
-
-
-/* Nearly the same as jack_get_ports, but filter out pure_data_%d ports. */
-static const char **my_jack_get_ports(jack_client_t *client,char *name){
-  const char **ret;
-  const char **ports;
-  int lokke=0;
-  int to=0;
-  int num_ports=0;
-
-  if(!strcmp("*",name))
-    ports=jack_get_ports(client,"","",0);
-  else
-    ports=jack_get_ports(client,name,"",0);
-  if(ports==NULL) return NULL;
-
-  while(ports[num_ports]!=NULL){
-    num_ports++;
-  }
-  ret=calloc(sizeof(char *),num_ports);
-
-  while(ports[lokke]!=NULL){
-    if(strstr(ports[lokke],clientname)==NULL){
-      ret[to]=ports[lokke];
-      to++;
-    }
-    lokke++;
-  }
-  if(to==0){
-    free(ret);
-    ret=NULL;
-  }
-
- exit:
-  free(ports);
-  return ret;
-}
-
-
-/* Disconnect all the ports connection to an alsa_pcm port. */
-static void disconnect_all_alsa(jack_client_t *client,const char *portname){
-  int lokke=0;
-  jack_port_t *port=jack_port_by_name(client,portname);
-  const char **ports=jack_port_get_all_connections(client,port);
-  if(ports==NULL) return;
-
-  while(ports[lokke]!=NULL){
-    if(strstr(ports[lokke],"alsa_pcm:")==ports[lokke]){
-      if(jack_port_flags(port)&JackPortIsOutput){
-	jack_disconnect(client,portname,ports[lokke]);
-      }else{
-	jack_disconnect(client,ports[lokke],portname);
-      }
-    }
-    lokke++;
-  }
-  free(ports);
-}
-
-
-static int add_pd_channel(bool is_input){
-  set_pd_channels(is_input==true?0:1,is_input==true?1:0);
-  return is_input==true
-    ?sys_get_outchannels()-1
-    :sys_get_inchannels()-1;
-}
-
-
-/* Returns the dac/adc index the jackport with name 'portname' has in pd. Create if it doesn't exist. */
-static int get_portindex(jack_client_t *client,const char *portname, bool is_input){
-  struct JackPort *jp=jackports;
-
-  while(jp!=NULL){
-    if(!strcmp(jp->name,portname)) break;
-    jp=jp->next;
-  }
-  if(jp==NULL){
-    char temp[500];
-    char temp2[500];
-    jp=calloc(1,sizeof(struct JackPort));
-    jp->name=strdup(portname);
-    jp->is_input=is_input;
-    jp->num=add_pd_channel(is_input);
-    jp->next=jackports;
-    jackports=jp;
-    disconnect_all_alsa(client,portname);
-    if(is_input){
-      sprintf(temp,"%soutput%d",clientname,jp->num);
-      jack_connect(client,temp,portname);
-      sprintf(temp2,"to_%s",portname);
-    }else{
-      sprintf(temp,"%sinput%d",clientname,jp->num);
-      jack_connect(client,portname,temp);
-      sprintf(temp2,"from_%s",portname);
-    }
-    while(strstr(temp2,":")) strstr(temp2,":")[0]='-';
-    if(strlen(temp2)+strlen(clientname)<32)
-      jack_port_set_name(jack_port_by_name(client,temp),temp2);
-  }
-  return jp->num;
-}
-
-
-
-
-/***********************************************************/
-/********************* PD part *****************************/
-/***********************************************************/
-
-typedef struct _k_jack
-{
-  t_object x_obj;
-  int num_recs;
-  int num_plays;
-  int *rec_nums;
-  int *play_nums;
-  float x_float;
-} t_k_jack;
-
-
-static t_class *k_jack_class;
-
-
-
-static t_int *k_jack_perform_add(t_int *w){
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
-  int n = (int)(w[3]);
-  int lokke;
-
-  for(lokke=0;lokke<DEFDACBLKSIZE;lokke++){
-    out[lokke]+=in[lokke];
-  }
-
-  return (w+3);
-}
-
-
-static t_int *k_jack_perform_copy(t_int *w){
-  t_float *in = (t_float *)(w[1]);
-  t_float *out = (t_float *)(w[2]);
-  int lokke;
-  
-  for(lokke=0;lokke<DEFDACBLKSIZE;lokke++){
-    out[lokke]=in[lokke];
-  }
-
-  return (w+3);
-}
-
-
-static void k_jack_dsp(t_k_jack *x, t_signal **sp)
-{
-  int lokke;
-  int ch=0;
-
-  for(lokke=0;lokke<x->num_recs;lokke++){
-    if(sp[ch]->s_n!=DEFDACBLKSIZE)
-      post("k_jack~ wrong framesize. Is this possible?");
-    else
-      dsp_add(
-	      k_jack_perform_add,
-	      2,
-	      sp[ch]->s_vec,
-	      sys_soundout + x->rec_nums[lokke]*DEFDACBLKSIZE
-	      );
-    ch++;
-  }
-  for(lokke=0;lokke<x->num_plays;lokke++){
-    if(sp[ch]->s_n!=DEFDACBLKSIZE)
-      post("k_jack~ wrong framesize. Is this possible?");
-    else
-      dsp_add(
-	      k_jack_perform_copy,
-	      2,
-	      sys_soundin + x->play_nums[lokke]*DEFDACBLKSIZE,
-	      sp[ch]->s_vec
-	      );
-    ch++;
-  }
-}
-
-
-static void k_jack_free(t_k_jack *x){
-  free(x->rec_nums);
-  free(x->play_nums);
-}
-
-
-static void *k_jack_new(t_symbol *s){
-  int num_recs=0;
-  int num_plays=0;
-  int lokke=0;
-  static jack_client_t *client=NULL;
-  const char **ports=NULL;
-  t_k_jack *x=NULL;
-
-
-  if(sys_audioapi!=API_JACK){
-    post("Error. k_jack~ will not work without jack as the sound API.");
-    goto exit;
-  }
-
-  if(client==NULL){
-    for(lokke=0;lokke<MAX_PD_JACKCLIENTS;lokke++){
-      char temp[500];
-      sprintf(temp,"k_jack_tilde_%d",lokke);
-      client=jack_client_new(temp);
-      if(client!=NULL) break;
-    }
-  }
-
-  if(client==NULL){
-    post("k_jack~: Could not make jack client.");
-    goto exit;
-  }
-
-  if(find_clientname(client)==false){
-    post("k_jack~: Could not find the name of pure data jack client.");
-    goto exit;
-  }
-
-  ports=my_jack_get_ports(client,s->s_name);
-  if(ports==NULL){
-    post("k_jack~: Client \"%s\" not found.\n",s->s_name);
-    goto exit;
-  }
-  while(ports[lokke]!=NULL){
-    jack_port_t* port=jack_port_by_name(client,ports[lokke]);
-    //post("%s, type: %s, flags: %d",ports[lokke],jack_port_type(port),jack_port_flags(port));
-    if(jack_port_flags(port)&JackPortIsInput){
-      num_recs++;
-    }else{
-      if(jack_port_flags(port)&JackPortIsOutput){
-	num_plays++;
-      }
-    }
-    lokke++;
-  }
-
-  if(num_plays==0 && num_recs==0){
-    post("Client(s) containing the name \"%s\" have no input or output ports.",s->s_name);
-    goto exit;
-  }
-
-  x = (t_k_jack *)pd_new(k_jack_class);
-
-  x->rec_nums=calloc(sizeof(int),num_recs);
-  x->play_nums=calloc(sizeof(int),num_plays);
-
-  //post("recs: %d, plays: %d\n",num_recs,num_plays);
-  lokke=0;
-  while(ports[lokke]!=NULL){
-    jack_port_t* port=jack_port_by_name(client,ports[lokke]);
-    if(jack_port_flags(port)&JackPortIsInput){
-      x->rec_nums[x->num_recs]=get_portindex(client,ports[lokke],true);
-      if(x->num_recs>0)
-	  inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
-      //post("Made inlet %s %d",ports[lokke],x->rec_nums[x->num_recs]);
-      x->num_recs++;
-    }else{
-      if(jack_port_flags(port)&JackPortIsOutput){
-	x->play_nums[x->num_plays]=get_portindex(client,ports[lokke],false);
-	outlet_new(&x->x_obj, gensym("signal"));
-	//post("Made outlet %s %d",ports[lokke],x->play_nums[x->num_plays]);
-	x->num_plays++;
-      }
-    }
-    lokke++;
-  }
-
-
- exit:
-
-  if(ports!=NULL) free(ports);
-
-  /* Program crash if client is closed. (as a workaround, I made it static for reuse. -Kjetil) (I thought this gruesome bug was fixed!?!)*/
-  //if(client!=NULL) jack_client_close(client);
-
-  return (x);
-}
- 
-
-
-void k_jack_tilde_setup(void){
-  k_jack_class = class_new(gensym("k_jack~"), (t_newmethod)k_jack_new, (t_method)k_jack_free,
-			  sizeof(t_k_jack), 0, A_SYMBOL, 0);
-  CLASS_MAINSIGNALIN(k_jack_class, t_k_jack, x_float);
-  class_addmethod(k_jack_class, (t_method)k_jack_dsp, gensym("dsp"), A_CANT, 0);
-  
-  class_sethelpsymbol(k_jack_class, gensym("help-k_jack~.pd"));
-
-  post(version);
-}
-
-
diff --git a/externals/k_jack~/makefile b/externals/k_jack~/makefile
deleted file mode 100644
index a7b242276..000000000
--- a/externals/k_jack~/makefile
+++ /dev/null
@@ -1,97 +0,0 @@
-NAME=k_jack~
-CSYM=k_jack_tilde
-
-current: pd_linux
-
-# ----------------------- NT -----------------------
-
-pd_nt: $(NAME).dll
-
-.SUFFIXES: .dll
-
-PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo
-VC="C:\Programme\Microsoft Visual Studio\VC98"
-
-PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude
-
-PDNTLDIR = $(VC)\Lib
-PDNTLIB = $(PDNTLDIR)\libc.lib \
-	$(PDNTLDIR)\oldnames.lib \
-	$(PDNTLDIR)\kernel32.lib \
-	$(PDNTLDIR)\user32.lib \
-	$(PDNTLDIR)\uuid.lib \
-	c:\pd\bin\pd.lib \
-
-.c.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
-	link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB)
-
-# ----------------------- IRIX 5.x -----------------------
-
-pd_irix5: $(NAME).pd_irix5
-
-.SUFFIXES: .pd_irix5
-
-SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
-
-SGIINCLUDE =  -I../../src
-
-.c.pd_irix5:
-	cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
-	rm $*.o
-
-# ----------------------- IRIX 6.x -----------------------
-
-pd_irix6: $(NAME).pd_irix6
-
-.SUFFIXES: .pd_irix6
-
-SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-	-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-	-Ofast=ip32
-
-.c.pd_irix6:
-	cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
-	ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o
-	rm $*.o
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-PDSRCDIR=../../pd/src
-LINUXINCLUDE =  -I$(PDSRCDIR)
-
-.c.pd_linux:
-	gcc $(LINUXCFLAGS) $(LINUXINCLUDE) -g -o $*.o -c $*.c
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc -lm -ljack
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s $*/$*.pd_linux ..
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin: $(NAME).pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-.c.pd_darwin:
-	$(CC) $(DARWINCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	$(CC) -bundle -bundle_loader ../../pd/bin/pd -undefined dynamic_lookup \
-		-o $*.pd_darwin $*.o 
-	rm -f $*.o
-
-# ----------------------------------------------------------
-
-clean:
-	rm -f *.o *.pd_* so_locations *~
diff --git a/externals/k_vst~/Makefile b/externals/k_vst~/Makefile
deleted file mode 100644
index 1b8032233..000000000
--- a/externals/k_vst~/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-NAME=k_vst~
-CSYM=k_vst_tilde
-
-current: pd_linux
-
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDEPATH=../../src
-LINUXINCLUDE =  -I$(LINUXINCLUDEPATH) -I../../vstserver/include
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -I/site/include/wine -c $(NAME).c -I../include -DPLUGIN_TILDE_USE_VST -DPLUGIN_DEBUG -DPLUGIN_TILDE_VERBOSE
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -I/site/include/wine  -c plugin~_vst.c -I../include -DPLUGIN_TILDE_USE_VST -DPLUGIN_DEBUG -DPLUGIN_TILDE_VERBOSE 
-
-	ld --export-dynamic k_vst~.o plugin~_vst.o -shared -o $(NAME).pd_linux -lc -lm -L/usr/local/lib -L../../vstserver -lvst
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o ../$*.pd_linux
-	ln -s k_vst~/$*.pd_linux ..
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
diff --git a/externals/k_vst~/README b/externals/k_vst~/README
deleted file mode 100644
index 40c167dec..000000000
--- a/externals/k_vst~/README
+++ /dev/null
@@ -1,26 +0,0 @@
-
-0.2.5 -> 0.2.6
--Code to allow space in dll names added. Code made by Thomas Charbonnel.
- Also updated the help2 patch to use space in dll name.
-
-0.2.4 -> 0.2.5
--New midicommands: "ctl", "pitchbend", "aftertouch", "prg", "noteon"
- and "noteoff". Code made by Thomas Charbonnel
--Made a better help patch.
-
-0.2.3 -> 0.2.4
-- Added support for VST effect/synth programs; these may now be changed with
-  the 'program' message and a program number.  (added by acb)
-  See the help2 example patch.
-
-V0.2.1 -> 0.2.3:
--Added simple noteon and noteoff messages for vst instruments.
- See help5-k_vst~.pd.
-
-Changes from v0.2.1 -> 0.2.2:
--Added opengui and closegui commands.
-
-
-See comment in the top of the file k_vst~ and the
-file org/README.
-
diff --git a/externals/k_vst~/abyss.pd b/externals/k_vst~/abyss.pd
deleted file mode 100644
index 8ea40269a..000000000
--- a/externals/k_vst~/abyss.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 262 30 450 300 10;
-#X obj 131 111 k_vst~ abyss;
-#X msg 59 59 print;
-#X msg 131 68 opengui;
-#X obj 197 68 adc~;
-#X obj 172 147 dac~;
-#X connect 0 1 4 0;
-#X connect 0 2 4 1;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 1;
-#X connect 3 1 0 2;
diff --git a/externals/k_vst~/config.h b/externals/k_vst~/config.h
deleted file mode 100644
index 96c2f17e8..000000000
--- a/externals/k_vst~/config.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: config.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   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. */
-
-#ifndef __CONFIG_H__
-#define __CONFIG_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* plug-in architecture config */
-
-#if 0
-#ifdef __linux__ /* FIXME? */
-#define PLUGIN_TILDE_USE_LADSPA 1
-#else
-#define PLUGIN_TILDE_USE_LADSPA 0
-#endif
-#ifdef WIN32
-#define PLUGIN_TILDE_USE_VST 1
-#else
-#define PLUGIN_TILDE_USE_VST 0
-#endif
-#endif
-
-    /* make sure something was selected */
-#if (PLUGIN_TILDE_USE_LADSPA == 0) && (PLUGIN_TILDE_USE_VST == 0)
-#error Either PLUGIN_TILDE_USE_LADSPA or PLUGIN_TILDE_USE_VST must be positive
-#endif
-
-/* print debug information */
-#define PLUGIN_TILDE_DEBUG 0
-
-/* print "useful" information */
-#define PLUGIN_TILDE_VERBOSE 0
-
-/* force out-of-place processing */
-#define PLUGIN_TILDE_FORCE_OUTOFPLACE 0
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __CONFIG_H__ */
-/* EOF */
diff --git a/externals/k_vst~/help-k_vst~.pd b/externals/k_vst~/help-k_vst~.pd
deleted file mode 100644
index eb57407c5..000000000
--- a/externals/k_vst~/help-k_vst~.pd
+++ /dev/null
@@ -1,25 +0,0 @@
-#N canvas 55 404 825 453 10;
-#X msg 20 138 aftertouch <value> <chan>;
-#X msg 23 99 pitchbend <value> <chan>;
-#X msg 22 177 prg <num> <chan>;
-#X msg 19 221 noteon <num> <level> <chan>;
-#X msg 24 59 ctl <cnum> <val> <chan>;
-#X obj 20 254 noteoff <num> <chan>;
-#X text 25 20 Midi commands:;
-#X text 25 35 --------------;
-#X text 280 25 GUI commands;
-#X text 281 38 -------------;
-#X msg 291 72 opengui;
-#X msg 293 111 closegui;
-#X text 495 17 Control value commands;
-#X msg 493 107 control /<control number> <value>;
-#X msg 493 62 control <control_name> <value>;
-#X text 287 184 Misc. commands;
-#X text 286 198 ---------------;
-#X msg 288 226 reset;
-#X msg 289 260 print;
-#X text 492 202 -----------------;
-#X msg 497 223 program <program number>;
-#X msg 497 262 programname <program name>;
-#X text 490 185 Program commands;
-#X obj 234 376 k_vst~ an_effect_or_softsynth.dll;
diff --git a/externals/k_vst~/help2-k_vst~.pd b/externals/k_vst~/help2-k_vst~.pd
deleted file mode 100644
index 585e5e439..000000000
--- a/externals/k_vst~/help2-k_vst~.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#N canvas 531 498 450 300 10;
-#X text 281 30 mda_JX10 is available from http://www.mda-vst.com/;
-#X msg 118 152 print;
-#X msg 24 155 program \$1;
-#X floatatom 26 120 5 0 63;
-#X obj 242 250 dac~;
-#X obj 178 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -233017 -233017
--1;
-#N canvas 0 0 559 288 playscale 0;
-#X obj 60 42 inlet;
-#X obj 63 258 outlet;
-#X text 122 41 <- bang here;
-#X text 127 264 <- noteon/noteoff events go here;
-#X msg 65 172 noteoff 48;
-#X obj 79 100 delay 400;
-#X obj 154 100 delay 800;
-#X obj 234 100 delay 1200;
-#X msg 148 172 noteoff 52;
-#X msg 234 172 noteoff 55;
-#X msg 33 201 noteon 48 100;
-#X msg 135 201 noteon 52 100;
-#X msg 239 201 noteon 55 100;
-#X obj 312 100 delay 1600;
-#X obj 395 100 delay 2000;
-#X msg 339 201 noteon 59 100;
-#X msg 325 172 noteoff 59;
-#X msg 442 201 noteon 60 100;
-#X msg 413 172 noteoff 60;
-#X obj 132 126 delay 760;
-#X obj 63 126 delay 360;
-#X obj 210 126 delay 1160;
-#X obj 298 127 delay 1560;
-#X text 532 270 acb;
-#X connect 0 0 10 0;
-#X connect 0 0 6 0;
-#X connect 0 0 7 0;
-#X connect 0 0 13 0;
-#X connect 0 0 14 0;
-#X connect 0 0 19 0;
-#X connect 0 0 5 0;
-#X connect 0 0 20 0;
-#X connect 0 0 21 0;
-#X connect 0 0 22 0;
-#X connect 4 0 1 0;
-#X connect 5 0 11 0;
-#X connect 6 0 12 0;
-#X connect 7 0 15 0;
-#X connect 8 0 1 0;
-#X connect 9 0 1 0;
-#X connect 10 0 1 0;
-#X connect 11 0 1 0;
-#X connect 12 0 1 0;
-#X connect 13 0 17 0;
-#X connect 14 0 18 0;
-#X connect 15 0 1 0;
-#X connect 16 0 1 0;
-#X connect 17 0 1 0;
-#X connect 18 0 1 0;
-#X connect 19 0 8 0;
-#X connect 20 0 4 0;
-#X connect 21 0 9 0;
-#X connect 22 0 16 0;
-#X restore 179 105 pd playscale;
-#X msg 70 196 reset;
-#X text 64 72 Click to hear->;
-#X msg 316 106 \; pd dsp 1;
-#X msg 315 150 \; pd dsp 0;
-#X text 31 35 Select preset below | | | V;
-#X obj 155 188 k_vst~ mda JX10;
-#X connect 1 0 12 0;
-#X connect 2 0 12 0;
-#X connect 3 0 2 0;
-#X connect 5 0 6 0;
-#X connect 6 0 12 0;
-#X connect 7 0 12 0;
-#X connect 12 1 4 0;
-#X connect 12 2 4 1;
diff --git a/externals/k_vst~/k_vst~.c b/externals/k_vst~/k_vst~.c
deleted file mode 100644
index a6c92c01b..000000000
--- a/externals/k_vst~/k_vst~.c
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
-
-   k_vst~, a Pd tilde object for hosting VST plug-ins.
-
-   This is really just the plugin~ source made by Jarno Seppänen,
-   but with a few lines changed (very few that is) to make it
-   work with vst-plugins using the vstlib.
-
-   The name was changed from plugin~ to k_vst~ to avoid nameclash
-   with the plugin~ object running ladspa plugins.
-
-   This object is for i386 non-windows (ie. linux/freebsd) only.
-
-   Copyright (C) 2002 Kjetil S. Matheussen / Notam,
-   k.s.matheussen@notam02.no
-
-   VST program change code made by Andrew C. Bulhak (acb at dev.null.org)
-
-   MIDI code by Thomas Charbonnel <thomas@undata.org>.
-
-   Code to allow space in dll names also made by Thomas Charbonnel <thomas@undata.org>.
-
-
-------------------
-
-   plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: k_vst~.c,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#include "config.h"
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "plugin~.h"
-#include "plugin~_ladspa.h"
-#include "plugin~_vst.h"
-#include "version.h"
-
-#define AEFFECTX_H_LINUXWORKAROUND
-#include "vst/aeffectx.h"
-
-#if PLUGIN_TILDE_USE_LADSPA
-#define PLUGIN_TILDE_BRAND "LADSPA"
-#endif
-#if PLUGIN_TILDE_USE_VST
-#define PLUGIN_TILDE_BRAND "VST"
-#endif
-
-static t_class* plugin_tilde_class = NULL;
-
-
-static char valid_channel (float ch) {
-  if (ch < 1.) {
-    return 0;
-  } else if (ch > 16.) {
-    return 15;
-  } else {
-    return (char)(ch-1);
-  }
-}
-
-static void send_midi_to_plugin (
-				    Pd_Plugin_Tilde* x,
-				    char data0,
-				    char data1,
-				    char data2
-				)
-{
-  struct VstMidiEvent das_event;
-  struct VstMidiEvent *pevent=&das_event;
-
-  struct VstEvents events;
-
-  pevent->type = kVstMidiType;
-  pevent->byteSize = 24;
-  pevent->deltaFrames = 0;
-  pevent->flags = 0;
-  pevent->detune = 0;
-  pevent->noteLength = 0;
-  pevent->noteOffset = 0;
-  pevent->reserved1 = 0;
-  pevent->reserved2 = 0;
-  pevent->noteOffVelocity = 0;
-  pevent->midiData[0] = data0;
-  pevent->midiData[1] = data1;
-  pevent->midiData[2] = data2;
-  pevent->midiData[3] = 0;
-
-
-  events.numEvents = 1;
-  events.reserved  = 0;
-  events.events[0]=(VstEvent*)pevent;
-  
-  x->plugin.vst.instance->dispatcher(
-				     x->plugin.vst.instance,
-				     effProcessEvents, 0, 0, &events, 0.0f
-				     );
- 
-}
-
-static void plugin_tilde_ctl (
-				 Pd_Plugin_Tilde* x,
-				 t_float ctlnum,
-				 t_float ctlval,
-				 t_float ctlchan
-				 )
-{
-  send_midi_to_plugin(x, 0xb0 | valid_channel(ctlchan), (char)ctlnum, (char)ctlval);  
-}
-
-static void plugin_tilde_pitchbend (
-				 Pd_Plugin_Tilde* x,
-				 t_float pitchvalue,
-				 t_float pitchchan
-				 )
-{
-  send_midi_to_plugin(x, 0xe0 | valid_channel(pitchchan), (((int)pitchvalue)>>7) & 127, (int)pitchvalue & 127);  
-}
-
-static void plugin_tilde_aftertouch (
-				 Pd_Plugin_Tilde* x,
-				 t_float atvalue,
-				 t_float atchan
-				 )
-{
-  send_midi_to_plugin(x, 0xa0 | valid_channel(atchan), (char)atvalue, 0);  
-}
-
-
-
-static void plugin_tilde_prg (
-				 Pd_Plugin_Tilde* x,
-				 t_float prgnum,
-				 t_float prgchan
-				 )
-{
-  send_midi_to_plugin(x, 0xc0 | valid_channel(prgchan), (char)prgnum, 0);  
-}
-
-
-
-static void plugin_tilde_noteon (
-				 Pd_Plugin_Tilde* x,
-				 t_float notenum,
-				 t_float notevel,
-				 t_float notechan
-				 )
-{
-  send_midi_to_plugin(x, 0x90 | valid_channel(notechan), (char)notenum, (char)notevel);
-}
-
-static void plugin_tilde_noteoff(
-				 Pd_Plugin_Tilde* x,
-				 t_float notenum,
-				 t_float notechan
-				 )
-{
-  send_midi_to_plugin(x, 0x90 | valid_channel(notechan), (char)notenum, 0);
-}
-
-
-void
-k_vst_tilde_setup (void)
-{
-    /* Make a new Pd class with 2 string creation parameters */
-    plugin_tilde_class = class_new (gensym ("k_vst~"),
-				    (t_newmethod)plugin_tilde_new,
-				    (t_method)plugin_tilde_free,
-				    sizeof (Pd_Plugin_Tilde),
-				    0,
-				    A_GIMME, 0);
-    assert (plugin_tilde_class != NULL);
-
-    /* Let's be explicit in not converting the signals in any way */
-    assert (sizeof (float) == sizeof (t_float));
-#if PLUGIN_TILDE_USE_LADSPA
-    assert (sizeof (float) == sizeof (LADSPA_Data));
-#endif
-
-    /* Set the callback for DSP events; this is a standard Pd message */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_dsp,
-		     gensym ("dsp"),
-		     A_CANT, 0);
-
-    /* Set the callback for "control" messages in the first inlet;
-       this is a message of our own for changing LADSPA control
-       ports/VST parameters */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_ctl,
-		     gensym ("ctl"),
-		     A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_pitchbend,
-		     gensym ("pitchbend"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_aftertouch,
-		     gensym ("aftertouch"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_prg,
-		     gensym ("prg"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_noteon,
-		     gensym ("noteon"),
-		     A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_noteoff,
-		     gensym ("noteoff"),
-		     A_DEFFLOAT, A_DEFFLOAT, 0);
-
-    /* Set the callback for "control" messages in the first inlet;
-       this is a message of our own for changing LADSPA control
-       ports/VST parameters */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_control,
-		     gensym ("control"),
-		     A_DEFSYM, A_DEFFLOAT, 0);
-
-    /* Register a callback for "print" messages in the first inlet;
-       this is a message for printing information on the plug-in */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_print,
-		     gensym ("print"),
-		     0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_opengui,
-		     gensym ("opengui"),
-		     0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_closegui,
-		     gensym ("closegui"),
-		     0);
-
-    /* Register a callback for "reset" messages in the first inlet;
-       this is a message for resetting plug-in state */
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_reset,
-		     gensym ("reset"),
-		     0);
-
-    /* Register a callback for setting the program */
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_program,
-		     gensym ("program"),
-		     A_DEFFLOAT, 0);
-
-    class_addmethod (plugin_tilde_class,
-		     (t_method)plugin_tilde_programname,
-		     gensym ("programname"),
-		     A_DEFSYM, 0);
-
-    /* We have to make a "null" callback for signal input to the first
-       inlet or otherwise Pd'll gracefully fuck the inlets up */
-    class_addmethod (plugin_tilde_class,
-		     nullfn,
-		     gensym ("signal"),
-		     0);
-}
-
-static void*
-plugin_tilde_new (t_symbol* s_name, int argc, t_atom *argv)
-{
-    char buf[255];
-    char name[255];
-    int z;
-    int offset = 0;
-    Pd_Plugin_Tilde* x = NULL;
-    unsigned i = 0;
-
-    /* Allocate object struct */
-    x = (Pd_Plugin_Tilde*)pd_new (plugin_tilde_class);
-    assert (x != NULL);
-
-    /* Initialize object struct */
-    x->plugin_library = NULL;
-    x->plugin_library_filename = NULL;
-    x->num_audio_inputs = 0;
-    x->num_audio_outputs = 0;
-    x->num_control_inputs = 0;
-    x->num_control_outputs = 0;
-    x->audio_inlets = NULL;
-    x->audio_outlets = NULL;
-    x->control_outlet = NULL;
-    x->dsp_vec = NULL;
-    x->dsp_vec_length = 0;
-
-    for (z = 0; z < argc; z++) {
-	atom_string(&argv[z], buf, 255);
-	if (z == 0)
-	{
-	    snprintf(&name[offset], 255, "%s", buf);
-	    offset += strnlen(buf, 255); 
-	} else {
-	    if (255-offset > 0) {
-		snprintf(&name[offset], 255-offset, " %s", buf);
-		offset += strnlen(buf, 255);
-	    }
-	}
-    }
-    
-    /* Construct the clock */
-    x->x_clock = clock_new (x, (t_method)plugin_tilde_tick);
-    assert (x->x_clock != NULL);
-
-#if PLUGIN_TILDE_USE_LADSPA
-    assert (&name[0] != NULL);
-    if (&name[0] == NULL || strlen (&name[0]) == 0) {
-	/* Search for the plugin library */
-	x->plugin_library_filename = plugin_tilde_search_plugin (x, &name[0]);
-	if (x->plugin_library_filename == NULL) {
-	    error ("plugin~: " PLUGIN_TILDE_BRAND " plugin not found in any library");
-	    goto PLUGIN_TILDE_NEW_RETURN_NULL;
-	}
-    }
-    else {
-	/* Search in the given plugin library */
-	x->plugin_library_filename = strdup (&name[0]);
-    }
-#endif /* PLUGIN_TILDE_USE_LADSPA */
-#if PLUGIN_TILDE_USE_VST
-    /* Remember plugin library filename */
-    x->plugin_library_filename = strdup (&name[0]);
-#endif /* PLUGIN_TILDE_USE_VST */
-
-    /* Load LADSPA/VST plugin */
-    if (plugin_tilde_open_plugin (x,
-				  &name[0],
-				  x->plugin_library_filename,
-				  (unsigned long)sys_getsr ())) {
-	error ("plugin~: Unable to open " PLUGIN_TILDE_BRAND " plugin");
-	goto PLUGIN_TILDE_NEW_RETURN_NULL;
-    }
-
-    /* Start the clock (used for plug-in GUI update) */
-    plugin_tilde_tick (x);
-
-    /* Create in- and outlet(s) */
-
-    /* Allocate memory for in- and outlet pointers */
-    x->audio_inlets = (t_inlet**)calloc (x->num_audio_inputs, sizeof (t_inlet*));
-    x->audio_outlets = (t_outlet**)calloc (x->num_audio_outputs, sizeof (t_outlet*));
-    assert (x->audio_inlets != NULL && x->audio_outlets != NULL);
-
-    /* The first inlet is always there (needn't be created), and is
-       used for control messages.  Now, create the rest of the
-       inlets for audio signal input. */ 
-    for (i = 0; i < x->num_audio_inputs; i++) {
-	x->audio_inlets[i] = inlet_new (&x->x_obj,
-					&x->x_obj.ob_pd,
-					gensym ("signal"),
-					gensym ("signal"));
-    }
-
-    /* We use the first outlet always for LADSPA/VST parameter control
-       messages */
-    x->control_outlet = outlet_new (&x->x_obj, gensym ("control"));
-
-    /* The rest of the outlets are used for audio signal output */
-    for (i = 0; i < x->num_audio_outputs; i++) {
-	x->audio_outlets[i] = outlet_new (&x->x_obj, gensym ("signal"));
-    }
-
-    /* Allocate memory for DSP parameters */
-    x->dsp_vec_length = x->num_audio_inputs + x->num_audio_outputs + 2;
-    x->dsp_vec = (t_int*)calloc (x->dsp_vec_length, sizeof (t_int));
-    assert (x->dsp_vec != NULL);
-
-    return x;
-
-    /* erroneous returns */
- PLUGIN_TILDE_NEW_RETURN_NULL:
-    if (x->plugin_library_filename != NULL) {
-	free ((void*)x->plugin_library_filename);
-	x->plugin_library_filename = NULL;
-    }
-    if (x->x_clock != NULL) {
-	clock_free (x->x_clock);
-	x->x_clock = NULL;
-    }
-    return NULL; /* Indicate error to Pd */
-}
-
-static void
-plugin_tilde_free (Pd_Plugin_Tilde* x)
-{
-    unsigned i = 0;
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* Stop and destruct the clock */
-    clock_unset (x->x_clock);
-    clock_free (x->x_clock);
-    x->x_clock = NULL;
-
-    /* Unload LADSPA/VST plugin */
-    plugin_tilde_close_plugin (x);
-
-    /* Free DSP parameter memory */
-    if (x->dsp_vec != NULL) {
-	free (x->dsp_vec);
-	x->dsp_vec = NULL;
-	x->dsp_vec_length = 0;
-    }
-
-    /* Destroy inlets */
-    if (x->audio_inlets != NULL) {
-	for (i = 0; i < x->num_audio_inputs; i++) {
-	    inlet_free (x->audio_inlets[i]);
-	}
-	free (x->audio_inlets);
-	x->audio_inlets = NULL;
-    }
-
-    /* Destroy outlets */
-    if (x->control_outlet != NULL) {
-	outlet_free (x->control_outlet);
-	x->control_outlet = NULL;
-    }
-    if (x->audio_outlets != NULL) {
-	for (i = 0; i < x->num_audio_outputs; i++) {
-	    outlet_free (x->audio_outlets[i]);
-	}
-	free (x->audio_outlets);
-	x->audio_outlets = NULL;
-    }
-
-
-    if (x->plugin_library_filename != NULL) {
-	free ((void*)x->plugin_library_filename);
-	x->plugin_library_filename = NULL;
-    }
-
-}
-
-static void
-plugin_tilde_tick (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* Issue a GUI update (FIXME should use separate GUI thread) */
-    plugin_tilde_update_gui (x);
-
-    /* Schedule next update */
-    clock_delay (x->x_clock, 100); /* FIXME period OK? */
-}
-
-static void
-plugin_tilde_dsp (Pd_Plugin_Tilde* x, t_signal** sp)
-{
-    unsigned i = 0;
-    unsigned long num_samples;
-
-    num_samples = sp[0]->s_n;
-
-    /* Pack vector of parameters for DSP routine */
-    x->dsp_vec[0] = (t_int)x;
-    x->dsp_vec[1] = (t_int)num_samples;
-    /* Inputs are before outputs; ignore the first "null" input */
-    for (i = 2; i < x->dsp_vec_length; i++) {
-	x->dsp_vec[i] = (t_int)(sp[i - 1]->s_vec);
-    }
-
-    /* Connect audio ports with buffers (this is only done when DSP
-       processing begins) */
-    plugin_tilde_connect_audio (x,
-				(float**)(&x->dsp_vec[2]),
-				(float**)(&x->dsp_vec[2 + x->num_audio_inputs]),
-				num_samples);
-
-    /* add DSP routine to Pd's DSP chain */
-    dsp_addv (plugin_tilde_perform, x->dsp_vec_length, x->dsp_vec);
-}
-
-static t_int*
-plugin_tilde_perform (t_int* w)
-{
-    unsigned i = 0;
-    Pd_Plugin_Tilde* x = NULL;
-    t_float** audio_inputs = NULL;
-    t_float** audio_outputs = NULL;
-    int num_samples = 0;
-
-    /* precondition(s) */
-    assert (w != NULL);
-
-    /* Unpack DSP parameter vector */
-    x = (Pd_Plugin_Tilde*)(w[1]);
-    num_samples = (int)(w[2]);
-    audio_inputs = (t_float**)(&w[3]);
-    audio_outputs = (t_float**)(&w[3 + x->num_audio_inputs]);
-
-    /* Call the LADSPA/VST plugin */
-    plugin_tilde_apply_plugin (x);
-
-    return w + (x->dsp_vec_length + 1);
-}
-
-void
-plugin_tilde_emit_control_output (Pd_Plugin_Tilde* x,
-				  const char* name,
-				  float new_value)
-{
-    /* Construct and outlet a "control" message with two Pd atoms */
-    t_atom anything_atoms[2];
-    anything_atoms[0].a_type = A_SYMBOL;
-    anything_atoms[0].a_w.w_symbol = gensym ((char*)name);
-    anything_atoms[1].a_type = A_FLOAT;
-    anything_atoms[1].a_w.w_float = new_value;
-    outlet_anything (x->control_outlet, gensym ("control"), 2, anything_atoms);
-}
-
-static void
-plugin_tilde_control (Pd_Plugin_Tilde* x,
-		      t_symbol* ctrl_name,
-		      t_float ctrl_value)
-     /* Change the value of a named control port of the plug-in */
-{
-    unsigned parm_num = 0;
-
-    /* precondition(s) */
-    assert (x != NULL);
-    /* FIXME we assert that the plug-in is already properly opened */
-    if (ctrl_name->s_name == NULL || strlen (ctrl_name->s_name) == 0) {
-	error ("plugin~: control messages must have a name and a value");
-	return;
-    }
-    if (ctrl_name->s_name[0]=='/'){
-      parm_num = atoi(ctrl_name->s_name+1);
-    }else{
-      parm_num = plugin_tilde_get_parm_number (x, ctrl_name->s_name);
-    }
-    if (parm_num) {
-	plugin_tilde_set_control_input_by_index (x, parm_num - 1, ctrl_value);
-    }
-    else {
-	plugin_tilde_set_control_input_by_name (x, ctrl_name->s_name, ctrl_value);
-    }
-}
-
-static void plugin_tilde_opengui (Pd_Plugin_Tilde* x){
-#if PLUGIN_TILDE_USE_VST
-  plugin_tilde_vst_open_editor(x);
-#endif
-}
-
-static void plugin_tilde_closegui (Pd_Plugin_Tilde* x){
-#if PLUGIN_TILDE_USE_VST
-  plugin_tilde_vst_close_editor(x);
-#endif
-}
-
-static void
-plugin_tilde_print (Pd_Plugin_Tilde* x)
-     /* Print plug-in name, port names and other information */
-
-/*
-stereo_amp: "Stereo amplifier"; control 1 in/0 out; audio 2 in/2 out
-Control inputs:
-Control outputs:
-Audio inputs:
-Audio outputs:
- */
-{
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if 1
-    printf("This is k_vst~ version %s. Made by Kjetil S. Matheussen, but ~99.9 percent based on code\n",PLUGIN_TILDE_VERSION);
-    printf("written by Jarno Seppänen.\n\n");
-#else
-    printf ("This is plugin~ version %s -- NO WARRANTY -- Copyright (C) 2000 Jarno Seppänen\n",
-	    PLUGIN_TILDE_VERSION);
-#endif
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_print (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_print (x);
-#endif
-}
-
-static void
-plugin_tilde_reset (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_reset (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_reset (x);
-#endif
-}
-
-static unsigned
-plugin_tilde_get_parm_number (Pd_Plugin_Tilde* x,
-			      const char* str)
-/* find out if str points to a parameter number or not and return the
-   number or zero.  The number string has to begin with a '#' character */
-{
-    long num = 0;
-    char* strend = NULL;
-    
-    assert (x != NULL);
-    if (str == NULL) {
-	return 0;
-    }
-    if (str[0] != '#') {
-	return 0;
-    }
-    num = strtol (&str[1], &strend, 10);
-    if (str[1] == 0 || *strend != 0) {
-	/* invalid string */
-	return 0;
-    }
-    else if (num >= 1 && num <= (long)x->num_control_inputs) {
-	/* string ok and within range */
-	return (unsigned)num;
-    }
-    else {
-	/* number out of range */
-	return 0;
-    }
-}
-
-static const char*
-plugin_tilde_search_plugin (Pd_Plugin_Tilde* x,
-			    const char* name)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    return plugin_tilde_ladspa_search_plugin (x, name);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    return plugin_tilde_vst_search_plugin (x, name);
-#endif
-}
-
-static int
-plugin_tilde_open_plugin (Pd_Plugin_Tilde* x,
-			  const char* name,
-			  const char* lib_name,
-			  unsigned long sample_rate)
-{
-    int ret = 0;
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: open_plugin (x, \"%s\", \"%s\", %ld);",
-	   name, lib_name, sample_rate);
-#endif
-
-#if PLUGIN_TILDE_USE_LADSPA
-    ret = plugin_tilde_ladspa_open_plugin (x, name, lib_name, sample_rate);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    ret = plugin_tilde_vst_open_plugin (x, name, lib_name, sample_rate);
-#endif
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: plugin active");
-#endif
-
-#if PLUGIN_TILDE_VERBOSE
-    plugin_tilde_print (x);
-#endif
-    return ret;
-}
-
-static void
-plugin_tilde_close_plugin (Pd_Plugin_Tilde* x)
-{
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: close_plugin (x)");
-#endif
-
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_close_plugin (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_close_plugin (x);
-#endif
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: destructed plugin successfully");
-#endif
-}
-
-static void
-plugin_tilde_apply_plugin (Pd_Plugin_Tilde* x)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_apply_plugin (x);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_apply_plugin (x);
-#endif
-}
-
-static void
-plugin_tilde_connect_audio (Pd_Plugin_Tilde* x,
-			    float** audio_inputs,
-			    float** audio_outputs,
-			    unsigned long num_samples)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_connect_audio (x, audio_inputs, audio_outputs,
-				       num_samples);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_connect_audio (x, audio_inputs, audio_outputs,
-				    num_samples);
-#endif
-}
-
-static void
-plugin_tilde_set_control_input_by_name (Pd_Plugin_Tilde* x,
-					const char* name,
-					float value)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_set_control_input_by_name (x, name, value);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_set_control_input_by_name (x, name, value);
-#endif
-}
-
-static void
-plugin_tilde_set_control_input_by_index (Pd_Plugin_Tilde* x,
-					 unsigned index_,
-					 float value)
-/* plugin~.c:535: warning: declaration of `index' shadows global declaration */
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    plugin_tilde_ladspa_set_control_input_by_index (x, index_, value);
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_set_control_input_by_index (x, index_, value);
-#endif
-}
-
-static void
-plugin_tilde_update_gui (Pd_Plugin_Tilde* x)
-{
-#if PLUGIN_TILDE_USE_LADSPA
-    /* FIXME LADSPA doesn't support GUI's at the moment */
-#endif
-#if PLUGIN_TILDE_USE_VST
-    plugin_tilde_vst_update_gui (x);
-#endif
-}
-
-static void
-plugin_tilde_program (Pd_Plugin_Tilde* x, t_float prog_num)
-	/* set the plugin's controls to one of its presets */
-{
-#if PLUGIN_TILDE_USE_LADSPA
-#endif
-#if PLUGIN_TILDE_USE_VST
-	plugin_tilde_vst_set_program(x, (long) prog_num);
-#endif
-}
-
-static void
-plugin_tilde_programname (Pd_Plugin_Tilde* x, t_symbol* progname)
-	/* set the name of the current program in the plugin */
-{
-#if PLUGIN_TILDE_USE_LADSPA
-#endif
-#if PLUGIN_TILDE_USE_VST
-    if (progname->s_name == NULL || strlen (progname->s_name) == 0) {
-	error ("plugin~: control messages must have a name and a value");
-	return;
-    }
-    plugin_tilde_vst_set_program_name(x, progname->s_name);
-#endif
-}
-
-
-/* EOF */
diff --git a/externals/k_vst~/plugin~.h b/externals/k_vst~/plugin~.h
deleted file mode 100644
index 23cb3765d..000000000
--- a/externals/k_vst~/plugin~.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   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. */
-
-#ifndef __PLUGIN_TILDE_H__
-#define __PLUGIN_TILDE_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "config.h"
-
-/* Pd header */
-#ifndef MAXPDSTRING /* lame */
-#include "m_pd.h"
-#endif /* MAXPDSTRING */
-
-#if 0
-#  if PLUGIN_TILDE_USE_LADSPA
-#    include "plugin~_ladspa.h"
-#  endif
-#  if PLUGIN_TILDE_USE_VST
-#    include "plugin~_vst.h"
-#  endif
-#endif /* 0 */
-/*
- * Now I've moved the following two plug-in-architecture-specific structures
- * here because having them in plugin~_ladspa.h and plugin~_vst.h proper will
- * result in a cyclical header dependency
- */
-#if PLUGIN_TILDE_USE_LADSPA
-#include "ladspa/ladspa.h"
-typedef struct
-{
-    const LADSPA_Descriptor*	type;
-    LADSPA_Handle*	instance;
-
-    /* Memory to pass async control data to/from the plugin */
-    float*		control_input_values;
-    float*		control_output_values;
-    /* Used for monitoring changes in the values */
-    float*		prev_control_output_values;
-    int			prev_control_output_values_invalid;
-
-    /* Pointers to signal memory for out-of-place processing */
-    float**		outofplace_audio_outputs;
-    float**		actual_audio_outputs;	/* real audio outputs for out-of-place */
-
-    unsigned long	num_samples;
-    unsigned long	sample_rate;
-
-} Plugin_Tilde_Ladspa;
-#endif /* PLUGIN_TILDE_USE_LADSPA */
-
-#if PLUGIN_TILDE_USE_VST
-#include "vst/AEffect.h"
-typedef struct
-{
-    AEffect*		instance;
-
-    /* audio wire buffer information */
-    float**		audio_inputs;
-    float**		audio_outputs;
-    unsigned long	num_samples;
-
-    int			editor_open;
-
-} Plugin_Tilde_Vst;
-#endif /* PLUGIN_TILDE_USE_VST */
-
-typedef struct
-{
-    /* Pd's way of object-oriented programming */
-    t_object		x_obj;
-    t_clock*		x_clock;
-
-    /* Access to LADSPA/VST plugins */
-    void*		plugin_library;
-    const char*		plugin_library_filename; /* only for diagnostics */
-    union {
-#if PLUGIN_TILDE_USE_LADSPA
-	Plugin_Tilde_Ladspa	ladspa;
-#endif
-#if PLUGIN_TILDE_USE_VST
-	Plugin_Tilde_Vst	vst;
-#endif
-    }			plugin;
-
-    /* Plugin information */
-    unsigned		num_audio_inputs;
-    unsigned		num_audio_outputs;
-    unsigned		num_control_inputs;
-    unsigned		num_control_outputs;
-
-    /* Pointers to our Pd in- and outlets */
-    t_inlet**		audio_inlets;
-    t_outlet**		audio_outlets;
-    t_outlet*		control_outlet;
-
-    /* Pd's way of passing parameters to the DSP routine */
-    t_int*		dsp_vec;
-    unsigned		dsp_vec_length;
-
-} Pd_Plugin_Tilde;
-
-/* Object construction and destruction */
-void		plugin_tilde_setup (void);
-static void*	plugin_tilde_new (t_symbol* s_name, int argc, t_atom *argv);
-static void	plugin_tilde_free (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_tick (Pd_Plugin_Tilde* x);
-
-/* DSP callbacks */
-static void	plugin_tilde_dsp (Pd_Plugin_Tilde* x, t_signal** sp);
-static t_int*	plugin_tilde_perform (t_int* w);
-
-/* Plugin callback for sending control output messages */
-void	plugin_tilde_emit_control_output (Pd_Plugin_Tilde* x,
-					  const char* name,
-					  float new_value);
-
-/* First inlet message callback for "control" messages */
-static void	plugin_tilde_control (Pd_Plugin_Tilde* x,
-				      t_symbol* ctrl_name,
-				      t_float ctrl_value);
-
-static void plugin_tilde_opengui (Pd_Plugin_Tilde* x);
-
-static void plugin_tilde_closegui (Pd_Plugin_Tilde* x);
-
-/* First inlet message callback for "control" messages */
-static void	plugin_tilde_print (Pd_Plugin_Tilde* x);
-
-/* First inlet message callback for "reset" messages */
-static void	plugin_tilde_reset (Pd_Plugin_Tilde* x);
-
-static unsigned	plugin_tilde_get_parm_number (Pd_Plugin_Tilde* x,
-					      const char* str);
-
-/* internal API to wrap the different plug-in interfaces */
-static const char*	plugin_tilde_search_plugin (Pd_Plugin_Tilde* x,
-						    const char* name);
-static int	plugin_tilde_open_plugin (Pd_Plugin_Tilde* x,
-					  const char* name,
-					  const char* lib_name,
-					  unsigned long sample_rate);
-static void	plugin_tilde_close_plugin (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_apply_plugin (Pd_Plugin_Tilde* x);
-
-static void	plugin_tilde_connect_audio (Pd_Plugin_Tilde* x,
-					    float** audio_inputs,
-					    float** audio_outputs,
-					    unsigned long num_samples);
-static void	plugin_tilde_set_control_input_by_name (Pd_Plugin_Tilde* x,
-						const char* name,
-						float value);
-static void	plugin_tilde_set_control_input_by_index (Pd_Plugin_Tilde* x,
-						unsigned index_,
-						float value);
-/*static float	plugin_tilde_get_control_input (Pd_Plugin_Tilde* x,
-						unsigned int index);*/
-static void	plugin_tilde_update_gui (Pd_Plugin_Tilde* x);
-
-static void     plugin_tilde_program (Pd_Plugin_Tilde* x, t_float prog_num);
-static void     plugin_tilde_programname (Pd_Plugin_Tilde* x, t_symbol* progname);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __PLUGIN_TILDE_H__ */
-/* EOF */
diff --git a/externals/k_vst~/plugin~_ladspa.h b/externals/k_vst~/plugin~_ladspa.h
deleted file mode 100644
index 88e0086b7..000000000
--- a/externals/k_vst~/plugin~_ladspa.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~_ladspa.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   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. */
-
-#ifndef __PLUGIN_TILDE_LADSPA_H__
-#define __PLUGIN_TILDE_LADSPA_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "config.h"
-
-#if PLUGIN_TILDE_USE_LADSPA
-
-#include "plugin~.h"
-
-/* LADSPA header */
-#include "ladspa/ladspa.h"
-
-#if 0 /* moved to plugin~.h because of cyclical header dependency */
-typedef struct
-{
-    const LADSPA_Descriptor*	type;
-    LADSPA_Handle*	instance;
-
-    /* Memory to pass async control data to/from the plugin */
-    float*		control_input_values;
-    float*		control_output_values;
-    /* Used for monitoring changes in the values */
-    float*		prev_control_output_values;
-    int			prev_control_output_values_invalid;
-
-    /* Pointers to signal memory for out-of-place processing */
-    float**		outofplace_audio_outputs;
-    float**		actual_audio_outputs;	/* real audio outputs for out-of-place */
-
-    unsigned long	num_samples;
-    unsigned long	sample_rate;
-
-} Plugin_Tilde_Ladspa;
-#endif /* moved to plugin~.h because of cyclical header dependency */
-
-
-/* subroutines to wrap the LADSPA interface */
-const char*	plugin_tilde_ladspa_search_plugin (Pd_Plugin_Tilde* x,
-						   const char* name);
-int	plugin_tilde_ladspa_open_plugin (Pd_Plugin_Tilde* x,
-					 const char* name,
-					 const char* lib_name,
-					 unsigned long sample_rate);
-void	plugin_tilde_ladspa_close_plugin (Pd_Plugin_Tilde* x);
-void	plugin_tilde_ladspa_apply_plugin (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_ladspa_print (Pd_Plugin_Tilde* x);
-void	plugin_tilde_ladspa_reset (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_ladspa_connect_audio (Pd_Plugin_Tilde* x,
-					   float** audio_inputs,
-					   float** audio_outputs,
-					   unsigned long num_samples);
-void	plugin_tilde_ladspa_set_control_input_by_name (Pd_Plugin_Tilde* x,
-					       const char* name,
-					       float value);
-void	plugin_tilde_ladspa_set_control_input_by_index (Pd_Plugin_Tilde* x,
-					       unsigned index_,
-					       float value);
-/*float	plugin_tilde_ladspa_get_control_input (Pd_Plugin_Tilde* x,
-					       const char* name);*/
-/* Control output is handled with plugin_tilde_emit_control_output() callback */
-
-/* Local subroutines */
-static void	plugin_tilde_ladspa_search_plugin_callback (const char* full_filename,
-							    void* plugin_handle,
-							    LADSPA_Descriptor_Function descriptor_function,
-							    void* user_data);
-static void	plugin_tilde_ladspa_count_ports (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_ladspa_connect_control_ports (Pd_Plugin_Tilde* x);
-
-static int	plugin_tilde_ladspa_alloc_outofplace_memory (Pd_Plugin_Tilde* x, unsigned long buflen);
-static void	plugin_tilde_ladspa_free_outofplace_memory (Pd_Plugin_Tilde* x);
-static int	plugin_tilde_ladspa_alloc_control_memory (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_ladspa_free_control_memory (Pd_Plugin_Tilde* x);
-
-#endif /* PLUGIN_TILDE_USE_LADSPA */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __PLUGIN_TILDE_LADSPA_H__ */
-/* EOF */
diff --git a/externals/k_vst~/plugin~_vst.c b/externals/k_vst~/plugin~_vst.c
deleted file mode 100644
index 001924ff1..000000000
--- a/externals/k_vst~/plugin~_vst.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~_vst.c,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License
-   as published by the Free Software Foundation; either version 2
-   of the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
-
-#include "config.h"
-#if PLUGIN_TILDE_USE_VST
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "plugin~.h"
-#include "plugin~_vst.h"
-/* VST header */
-#define AEFFECTX_H_LINUXWORKAROUND
-#include "vst/aeffectx.h"
-//#include "vst/AEffect.h"
-/* VST dll helper functions */
-#include "vstutils.h"
-#ifdef WIN32
-#include "win/vitunmsvc.h" /* strncasecmp() */
-#include <windows.h> /* GetForegroundWindow() */
-#endif
-
-#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-
-
-const char*
-plugin_tilde_vst_search_plugin (Pd_Plugin_Tilde* x,
-				const char* name)
-{
-    /* searching through VST libraries not supported */
-    error ("plugin~: warning: searching through VST libraries not supported");
-    return NULL;
-}
-
-int
-plugin_tilde_vst_open_plugin (Pd_Plugin_Tilde* x,
-			      const char* name,
-			      const char* lib_name,
-			      unsigned long sample_rate)
-{
-    unsigned port_index;
-
-    /* precondition(s) */
-    assert (x != NULL);
-    /* name is unused */
-    assert (lib_name != NULL);
-    assert (sample_rate != 0);
-
-    /* Initialize object struct */
-    x->plugin.vst.instance = NULL;
-    x->plugin.vst.audio_inputs = NULL;
-    x->plugin.vst.audio_outputs = NULL;
-    x->plugin.vst.num_samples = 0;
-    x->plugin.vst.editor_open = 0;
-
-#if 0
-    /* Attempt to load the plugin. */
-    x->plugin_library = vstutils_load_vst_plugin_dll (lib_name);
-    if (x->plugin_library == NULL)
-    {
-	error ("plugin~: Unable to load VST plugin library \"%s\"",
-	       lib_name);
-	return 1;
-    }
-#endif
-
-    /* Construct the plugin.  This is supposed to call
-       the AudioEffect::AudioEffect() ctor eventually */
-    x->plugin.vst.instance
-#if 1
-      =VSTLIB_new((char*)lib_name);
-#else
-	= vstutils_init_vst_plugin (x->plugin_library,
-				    lib_name,
-				    plugin_tilde_vst_audioMaster);
-#endif
-    if (x->plugin.vst.instance == NULL) {
-	error ("plugin~: Unable to instantiate VST plugin from library \"%s\"",
-	       lib_name);
-	return 1;
-    }
-
-    /* Stuff Pd_Plugin_Tilde* x into user field of AEffect for audioMaster() to use */
-    x->plugin.vst.instance->user = x;
-
-    /* Call plugin open() (through dispatcher()) in order to ensure
-       plugin is properly constructed */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effOpen,
-					0, 0, NULL, 0);
-
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~: constructed VST plugin \"%s\" successfully",
-	   lib_name);
-#endif
-
-
-    /* Check another strange id */
-    if (x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effIdentify,
-					    0, 0, NULL, 0)
-	!= 'NvEf') {
-	error ("plugin~_vst: warning: VST plugin malfunction (effIdentify != 'NvEf')");
-    }
-
-
-    /* Tell the sample rate and frame length to the VST plug-in */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effSetSampleRate,
-					0, 0, NULL, (float)sample_rate);
-
-    /* FIXME just give some value since it will be changed later */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effSetBlockSize,
-					0, 16, NULL, 0);
-    /* Find out the number of inputs and outputs needed (all VST
-       parameters can be automated i.e. output if the plug-in so wants
-       and the GUI can be operated). */
-    x->num_audio_inputs = x->plugin.vst.instance->numInputs;
-    x->num_audio_outputs = x->plugin.vst.instance->numOutputs;
-    x->num_control_inputs = x->plugin.vst.instance->numParams;
-    x->num_control_outputs = x->plugin.vst.instance->numParams;
-
-    /* Make sure that processReplacing() is implemented */
-    if (x->plugin.vst.instance->flags & effFlagsCanReplacing == 0) {
-	error ("plugin~_vst: sorry, this VST plug-in type isn't supported (processReplacing() not implemented)");
-	return 1;
-    }
-
-
-    /* Activate the plugin. */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 1, NULL, 0);
-
-
-    /* Finally, attempt open editor GUI if available */
-    //  plugin_tilde_vst_open_editor (x);
-
-
-    /* Make sure the user data still is there */
-    assert (x->plugin.vst.instance->user == x);
-
-    /* success */
-    return 0;
-}
-
-void
-plugin_tilde_vst_close_plugin (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* Attempt to close editor GUI */
-    plugin_tilde_vst_close_editor (x);
-
-    if (x->plugin.vst.instance != NULL)
-    {
-	/* Deactivate the plugin. */
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effMainsChanged,
-					    0, 0, NULL, 0);
-
-	/* Destruct the plugin.  This is supposed to translate to
-	   a call to the AudioEffect::~AudioEffect() dtor */
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effClose,
-					    0, 0, NULL, 0);
-#if 1
-	VSTLIB_delete(x->plugin.vst.instance);
-#endif
-	x->plugin.vst.instance = NULL;
-    }
-
-
-    if (x->plugin_library != NULL)
-    {
-#if 0
-	vstutils_unload_vst_plugin_dll (x->plugin_library);
-#endif
-	x->plugin_library = NULL;
-    }
-}
-
-void
-plugin_tilde_vst_apply_plugin (Pd_Plugin_Tilde* x)
-{
-  static int agurk=0;
-
-    /* Run the plugin on Pd's buffers */
-    /* FIXME need to implement out-of-place buffers and zero them here
-       if processReplacing() isn't implemented */
-
-    x->plugin.vst.instance->processReplacing (x->plugin.vst.instance,
-					      x->plugin.vst.audio_inputs,
-					      x->plugin.vst.audio_outputs,
-					      x->plugin.vst.num_samples);
-
-}
-
-void
-plugin_tilde_vst_print (Pd_Plugin_Tilde* x)
-{
-    unsigned i;
-    char display[25];
-    long l, nprog;
-
-    printf ("control %d in/out; audio %d in/%d out\n"
-	    "Loaded from library \"%s\".\n",
-	    x->num_control_inputs,
-	    x->num_audio_inputs,
-	    x->num_audio_outputs,
-	    x->plugin_library_filename);
-
-    /* print the current program name/number */
-    l = x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-		    effGetProgram, 0, 0, display, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-		    effGetProgramName, 0, 0, display, 0);
-    nprog = x->plugin.vst.instance->numPrograms;
-    printf("Program #%ld (of %ld), \"%s\".\n",l,nprog,display);
-
-    for (i = 0; i < x->num_control_inputs; i++) {
-	/* the Steinberg(tm) way... */
-	char name[9];
-	char label[9];
-	if (i == 0) {
-	    printf ("Control input/output(s):\n");
-	}
-	memset (name, 0, 9);
-	memset (display, 0, 25);
-	memset (label, 0, 9);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamName,
-					    i, 0, name, 0);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamDisplay,
-					    i, 0, display, 0);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamLabel,
-					    i, 0, label, 0);
-	printf (" #%d \"%s\" (%s %s)\n",
-		i + 1, name, display, label);
-    }
-}
-
-void
-plugin_tilde_vst_reset (Pd_Plugin_Tilde* x)
-{
-    /* precondition(s) */
-    assert (x != NULL);
-    /* reset plug-in by first deactivating and then re-activating it */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 0, NULL, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 1, NULL, 0);
-}
-
-void
-plugin_tilde_vst_connect_audio (Pd_Plugin_Tilde* x,
-				float** audio_inputs,
-				float** audio_outputs,
-				unsigned long num_samples)
-{
-    assert (x != NULL);
-    assert (audio_inputs != NULL);
-    assert (audio_outputs != NULL);
-    x->plugin.vst.audio_inputs = audio_inputs;
-    x->plugin.vst.audio_outputs = audio_outputs;
-    x->plugin.vst.num_samples = num_samples;
-    /* Tell the block size to the VST plug-in */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 0, NULL, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effSetBlockSize,
-					0, num_samples, NULL, 0);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effMainsChanged,
-					0, 1, NULL, 0);
-}
-
-void
-plugin_tilde_vst_set_control_input_by_name (Pd_Plugin_Tilde* x,
-				    const char* name,
-				    float value)
-{
-    unsigned parm_index;
-    int found_port; /* boolean */
-    char parm_name[9]; /* the Steinberg(tm) way! */
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-    /* compare control name to VST parameters' names
-       case-insensitively */
-    found_port = 0;
-    for (parm_index = 0; parm_index < x->num_control_inputs; parm_index++)
-    {
-	unsigned cmp_start, cmp_length;
-	memset (parm_name, 0, 9);
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effGetParamName,
-					    parm_index, 0, parm_name, 0);
-	/* skip any initial whitespace */
-	cmp_start = 0;
-	while (parm_name[cmp_start] != 0
-	       && parm_name[cmp_start] == ' ') {
-	    cmp_start++;
-	}
-	cmp_length = MIN (strlen (name), strlen (&parm_name[cmp_start]));
-	if (cmp_length != 0
-	    && strncasecmp (name, &parm_name[cmp_start], cmp_length) == 0)
-	{
-	    /* found the first port to match */
-	    found_port = 1;
-	    break;
-	}
-    }
-
-    if (!found_port)
-    {
-	error ("plugin~: VST plugin doesn't have a parameter named \"%s\"",
-	       name);
-	return;
-    }
-
-    plugin_tilde_vst_set_control_input_by_index (x,
-						 parm_index,
-						 value);
-}
-
-void
-plugin_tilde_vst_set_control_input_by_index (Pd_Plugin_Tilde* x,
-				       unsigned index_,
-				       float value)
-{
-    char name[9]; /* the Steinberg(tm) way! */
-
-    /* precondition(s) */
-    assert (x != NULL);
-    /* assert (index_ >= 0); causes a warning */
-    assert (index_ < x->num_control_inputs);
-
-    /* Limit parameter to range [0, 1] */
-    if (value < 0.0 || value > 1.0) {
-	if (value < 0.0) {
-	    value = 0.0;
-	}
-	else {
-	    value = 1.0;
-	}
-	error ("plugin~: warning: parameter limited to within [0, 1]");
-    }
-	
-    /* set the appropriate control port value */
-    x->plugin.vst.instance->setParameter (x->plugin.vst.instance,
-					  index_,
-					  value);
-
-#if PLUGIN_TILDE_DEBUG
-    memset (name, 0, 9);
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effGetParamName,
-					index_, 0, name, 0);
-    error ("DEBUG plugin~_vst: control change parameter #%ud: \"%s\" to value %f",
-	   index_ + 1, name, value);
-#endif
-}
-
-/*  change the plugin's program; takes a program index */
-void
-plugin_tilde_vst_set_program (Pd_Plugin_Tilde* x, long prog)
-{
-	long nprog = x->plugin.vst.instance->numPrograms;
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-			                    effSetProgram, 0, prog%nprog, 0, 0);
-}
-
-long
-plugin_tilde_vst_get_program (Pd_Plugin_Tilde* x)
-{
-	return x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-			                           effGetProgram, 0, 0, 0, 0);
-}
-
-long
-plugin_tilde_vst_get_num_of_programs (Pd_Plugin_Tilde* x)
-{
-	return x->plugin.vst.instance->numPrograms;
-}
-
-void
-plugin_tilde_vst_set_program_name (Pd_Plugin_Tilde* x, const char* progname)
-{
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-		effSetProgramName, 0, 0, (void*)progname, 0);
-}
-
-static long
-plugin_tilde_vst_audioMaster (AEffect* effect,
-			      long opcode,
-			      long index,
-			      long value,
-			      void* ptr,
-			      float opt)
-{
-    char param_name[9];
-
-#if 0 /*PLUGIN_TILDE_DEBUG*/
-    error ("DEBUG plugin~_vst: audioMaster(0x%p, %ld, %ld, %ld, 0x%p, %f)",
-	   effect, opcode, index, value, ptr, opt);
-#endif
-
-    switch (opcode) {
-	case audioMasterAutomate:
-	    assert (effect != NULL);
-	    assert (effect->user != NULL); /* this is Pd_Plugin_Tilde* */
-	    effect->setParameter (effect, index, opt);
-	    /* Send "control" messages from here */
-	    memset (param_name, 0, 9);
-	    effect->dispatcher (effect, effGetParamName, index, 0, param_name, 0);
-	    plugin_tilde_emit_control_output (effect->user, param_name, opt);
-	    return 0;
-	    break;
-	case audioMasterVersion:
-	    return 1;
-	    break;
-	case audioMasterCurrentId:
-	    return 0;
-	    break;
-	case audioMasterIdle:
-	    effect->dispatcher (effect, effEditIdle, 0, 0, NULL, 0);
-	    return 0;
-	    break;
-	case audioMasterPinConnected:
-	    /* return 0="true" for all inquiries for now */
-	    return 0;
-	    break;
-    }
-#if 0 /*PLUGIN_TILDE_DEBUG*/
-    error ("DEBUG plugin~_vst: warning: unsupported audioMaster opcode");
-#endif
-    return 0;
-}
-
-void plugin_tilde_vst_open_editor (Pd_Plugin_Tilde* x)
-{
-  x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-				      effEditOpen,
-				      0, 0, NULL, 0);
-  
-#if 0 /* FIXME doesn't work */
-#ifdef WIN32
-    HWND parent;
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~_vst: open_editor()");
-#endif
-
-    if ((x->plugin.vst.instance->flags & effFlagsHasEditor) == 0
-	|| x->plugin.vst.editor_open == 1) {
-	/* no editor or editor already open */
-	return;
-    }
-
-    /* Hmph, don't know about the Pd window, so give the desktop as
-       the parent to the plug-in; we could actually use
-       GetForegroundWindow(), since the user is currently typing into
-       the pd subpatch window */
-    /*parent = GetDesktopWindow ();*/
-    parent = GetForegroundWindow ();
-    /*parent = NULL;*/
-
-    /* Open the editor! */
-    if (!x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					     effEditOpen,
-					     0, 0, parent, 0)) {
-	/* no luck error */
-	error ("plugin~_vst: couldn't open editor");
-    } else {
-	x->plugin.vst.editor_open = 1;
-    }
-#endif /* WIN32 */
-#endif /* FIXME doesn't work */
-}
-
-void
-plugin_tilde_vst_close_editor (Pd_Plugin_Tilde* x)
-{
-  x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-				      effEditClose,
-				      0, 0, NULL, 0);
-
-#if 0 /* FIXME doesn't work */
-#ifdef WIN32
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~_vst: close_editor()");
-#endif
-
-    if ((x->plugin.vst.instance->flags & effFlagsHasEditor) == 0
-	|| x->plugin.vst.editor_open == 0) {
-	/* no editor or it isn't open */
-	return;
-    }
-
-    /* Close the editor */
-    x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					effEditClose,
-					0, 0, NULL, 0);
-    x->plugin.vst.editor_open = 0;
-
-#endif /* WIN32 */
-#endif /* FIXME doesn't work */
-}
-
-void
-plugin_tilde_vst_update_gui (Pd_Plugin_Tilde* x)
-{
-#if 0 /* FIXME doesn't work */
-#ifdef WIN32
-
-    /* precondition(s) */
-    assert (x != NULL);
-
-#if PLUGIN_TILDE_DEBUG
-    error ("DEBUG plugin~_vst: update_gui()");
-#endif
-    if (x->plugin.vst.editor_open) {
-	x->plugin.vst.instance->dispatcher (x->plugin.vst.instance,
-					    effEditIdle,
-					    0, 0, NULL, 0);
-    }
-#endif /* WIN32 */
-#endif /* FIXME doesn't work */
-}
-
-#endif /* PLUGIN_TILDE_USE_VST */
-
-/* EOF */
diff --git a/externals/k_vst~/plugin~_vst.h b/externals/k_vst~/plugin~_vst.h
deleted file mode 100644
index ff12d405c..000000000
--- a/externals/k_vst~/plugin~_vst.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: plugin~_vst.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   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. */
-
-#ifndef __PLUGIN_TILDE_VST_H__
-#define __PLUGIN_TILDE_VST_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "config.h"
-
-#if PLUGIN_TILDE_USE_VST
-
-#include "plugin~.h"
-
-/* VST header */
-#include "vst/AEffect.h"
-
-#if 0 /* moved to plugin~.h because of cyclical header dependency */
-typedef struct
-{
-    AEffect*		instance;
-
-    /* audio wire buffer information */
-    float**		audio_inputs;
-    float**		audio_outputs;
-    unsigned long	num_samples;
-
-    int			editor_open;
-} Plugin_Tilde_Vst;
-#endif /* moved to plugin~.h because of cyclical header dependency */
-
-
-/* subroutines to wrap the VST interface */
-const char*	plugin_tilde_vst_search_plugin (Pd_Plugin_Tilde* x,
-						const char* name);
-int	plugin_tilde_vst_open_plugin (Pd_Plugin_Tilde* x,
-				      const char* name,
-				      const char* lib_name,
-				      unsigned long sample_rate);
-
-void  plugin_tilde_vst_close_editor (Pd_Plugin_Tilde* x);
-void  plugin_tilde_vst_open_editor (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_vst_close_plugin (Pd_Plugin_Tilde* x);
-void	plugin_tilde_vst_apply_plugin (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_vst_print (Pd_Plugin_Tilde* x);
-void	plugin_tilde_vst_reset (Pd_Plugin_Tilde* x);
-
-void	plugin_tilde_vst_connect_audio (Pd_Plugin_Tilde* x,
-					float** audio_inputs,
-					float** audio_outputs,
-					unsigned long num_samples);
-void	plugin_tilde_vst_set_control_input_by_name (Pd_Plugin_Tilde* x,
-					    const char* name,
-					    float value);
-void	plugin_tilde_vst_set_control_input_by_index (Pd_Plugin_Tilde* x,
-					       unsigned index_,
-					       float value);
-
-
-/* subroutines needed by the VST interface */
-static long	plugin_tilde_vst_audioMaster (AEffect* effect,
-					      long opcode,
-					      long index,
-					      long value,
-					      void* ptr,
-					      float opt);
-
-  /*
-static void	plugin_tilde_vst_open_editor (Pd_Plugin_Tilde* x);
-static void	plugin_tilde_vst_close_editor (Pd_Plugin_Tilde* x);
-  */
-
-void		plugin_tilde_vst_update_gui (Pd_Plugin_Tilde* x);
-
-void		plugin_tilde_vst_set_program (Pd_Plugin_Tilde*, long);
-long		plugin_tilde_vst_get_program (Pd_Plugin_Tilde*);
-long		plugin_tilde_vst_get_num_of_programs (Pd_Plugin_Tilde*);
-void		plugin_tilde_vst_set_program_name (Pd_Plugin_Tilde*, const char*);
-
-#endif /* PLUGIN_TILDE_USE_VST */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __PLUGIN_TILDE_VST_H__ */
-/* EOF */
diff --git a/externals/k_vst~/version.h b/externals/k_vst~/version.h
deleted file mode 100644
index 8cb2f2157..000000000
--- a/externals/k_vst~/version.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2000 Jarno Seppänen
-   $Id: version.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   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. */
-
-#ifndef __PLUGIN_TILDE_VERSION_H__
-#define __PLUGIN_TILDE_VERSION_H__
-
-#ifndef PLUGIN_TILDE_VERSION
-#define PLUGIN_TILDE_VERSION "0.2"
-#endif
-
-#endif /* __PLUGIN_TILDE_VERSION_H__ */
diff --git a/externals/k_vst~/vstutils.h b/externals/k_vst~/vstutils.h
deleted file mode 100644
index c90edde5c..000000000
--- a/externals/k_vst~/vstutils.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* plugin~, a Pd tilde object for hosting LADSPA/VST plug-ins
-   Copyright (C) 2001 Jarno Seppänen
-   Copyright (C) 2000 Richard W.E. Furse
-   $Id: vstutils.h,v 1.1 2004-01-08 14:55:24 ksvalast Exp $
-
-   This file is part of plugin~.
-
-   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. */
-
-#ifndef __VSTUTILS_H__
-#define __VSTUTILS_H__
-
-#include <vstlib.h>
-
-#ifdef WIN32 /* currently for Windows only */
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* VST SDK header */
-#include "vst/AEffect.h"
-
-void*		vstutils_load_vst_plugin_dll (const char* plugin_dll_filename);
-void		vstutils_unload_vst_plugin_dll (void* plugin_dll);
-AEffect*	vstutils_init_vst_plugin (void* plugin_dll,
-					  const char* plugin_dll_filename,
-					  audioMasterCallback am);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* WIN32 */
-
-#endif /* __VSTUTILS_H__ */
-/* EOF */
diff --git a/externals/many/LICENSE.txt b/externals/many/LICENSE.txt
deleted file mode 100644
index 443254047..000000000
--- a/externals/many/LICENSE.txt
+++ /dev/null
@@ -1,676 +0,0 @@
-
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
- 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-  
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/externals/many/Makefile b/externals/many/Makefile
deleted file mode 100644
index 505f67151..000000000
--- a/externals/many/Makefile
+++ /dev/null
@@ -1,332 +0,0 @@
-## Pd library template version 1.0.6
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = many
-
-# add your .c source files, one object per file, to the SOURCES
-# variable, help files will be included automatically
-SOURCES = 
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = bundle.pd instances.pd instances-template.pd instances~.pd instances-template~.pd polypoly~.pd polypoly-wrap~.pd polypoly-voice~.pd voices~.pd voices-wrap~.pd
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = tick.wav ticker-voice.pd ticker.pd tock.wav aw.wav voicetest.pd run-200voicetest.pd
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, test patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = 
-
-
-
-#------------------------------------------------------------------------------#
-#
-# things you might need to edit if you are using other C libraries
-#
-#------------------------------------------------------------------------------#
-
-# -I"$(PD_INCLUDE)/pd" supports the header location for 0.43
-CFLAGS = -I"$(PD_INCLUDE)/pd" -Wall -W -g
-LDFLAGS =  
-LIBS = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"'
-
-PD_INCLUDE = $(PD_PATH)/include
-# where to install the library, overridden below depending on platform
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL) -p -m 644
-INSTALL_DATA = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU)
-  # GNU/Hurd, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU/kFreeBSD)
-  # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  PD_PATH = $(cygpath $(PROGRAMFILES))/pd
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-# in case somebody manually set the HELPPATCHES above
-HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_DATA) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_DATA) Makefile  $(DISTDIR)
-	$(INSTALL_DATA) README.txt $(DISTDIR)
-	$(INSTALL_DATA) LICENSE.txt $(DISTDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_DATA) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(HELPPATCHES))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "CFLAGS: $(CFLAGS)"
-	@echo "LDFLAGS: $(LDFLAGS)"
-	@echo "LIBS: $(LIBS)"
-	@echo "PD_INCLUDE: $(PD_INCLUDE)"
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/many/README.txt b/externals/many/README.txt
deleted file mode 100644
index 08870b4e5..000000000
--- a/externals/many/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-
-'many' is a library of techniques for creating and managing many instances of an object
-
-- bundle: a bundle of instances all connected to the same inlets and outlets
-- instances: many instances that are both individually and globally addressable 
-- instances~: same as [instances] but with outlet~s
-- polypoly~: designed for MIDI polyphony, built upon [poly] and based on [polypoly]
-- voices~: similar to polypoly~, but for generate voice allocation without being tied to MIDI
-
-Objects in the 'many' lib are based on code from Steven Pickles' (aka pix) nqpoly4 and Frank Barknecht's polypoly.  Thanks to pix's nqpoly4 because that was the real groundbreaking work that proved that a useful and reliable instance-managing object could be programmed in Pd.
-
-To install this library, unzip it, rename the folder to be just "many" without the version, and drop that folder into your user-installed libraries folder:
-http://puredata.info/docs/faq/how-do-i-install-externals-and-help-files
-
-- Hans-Christoph Steiner <hans@eds.org>
-
diff --git a/externals/many/TODO.txt b/externals/many/TODO.txt
deleted file mode 100644
index f82504209..000000000
--- a/externals/many/TODO.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-- check out rjlib's u_makepoly and u_robinpoly
-
-- use loadbang instead of initbang
-
-- many polypoly be like u_makepoly with
-
-- make round-robin based on voices~
\ No newline at end of file
diff --git a/externals/many/bundle-help.pd b/externals/many/bundle-help.pd
deleted file mode 100644
index ad21559fd..000000000
--- a/externals/many/bundle-help.pd
+++ /dev/null
@@ -1,7 +0,0 @@
-#N canvas 153 160 450 300 10;
-#X text 47 138 inlet0: routed to each instance based on instance number
-;
-#X text 47 158 inlet1: connected directly to each instance;
-#X text 47 218 outlet1: connected directly to each instance;
-#X text 47 198 outlet0: connected directly to each instance;
-#X obj 91 74 bundle 5 instances-template 1 2 3 4 5 6 7;
diff --git a/externals/many/bundle.pd b/externals/many/bundle.pd
deleted file mode 100644
index 2ba536467..000000000
--- a/externals/many/bundle.pd
+++ /dev/null
@@ -1,135 +0,0 @@
-#N canvas 604 370 622 492 10;
-#X declare -path /Users/hans/code/pure-data/trunk/externals/many/examples
-;
-#X obj 26 8 inlet;
-#X obj 99 306 until;
-#X obj 137 333 + 1;
-#X obj 99 333 float;
-#X msg 138 306 0;
-#X obj 26 32 send \$0-in1;
-#X obj 135 8 inlet;
-#X obj 135 32 send \$0-in2;
-#X obj 7 181 float \$1;
-#X obj 136 114 outlet;
-#X text 122 62 <-- open this subpatch to see the instances;
-#N canvas 863 482 400 437 create 1;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 242 71 symbol \$2;
-#X obj 173 409 outlet;
-#X obj 173 61 * 20;
-#X obj 173 83 + 70;
-#X msg 52 215 connect 2 0 \$1 1;
-#X msg 42 235 connect \$1 0 3 0;
-#X msg 25 259 connect \$1 1 4 0;
-#X obj 29 141 + 5;
-#X msg 61 193 connect 1 0 \$1 0;
-#X msg 173 176 obj 150 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7;
-#X obj 173 108 pack float symbol float \$1;
-#X obj 29 37 trigger anything anything anything bang anything;
-#X connect 0 0 14 0;
-#X connect 1 0 11 0;
-#X connect 2 0 13 1;
-#X connect 4 0 5 0;
-#X connect 5 0 13 0;
-#X connect 6 0 3 0;
-#X connect 7 0 3 0;
-#X connect 8 0 3 0;
-#X connect 9 0 6 0;
-#X connect 9 0 7 0;
-#X connect 9 0 8 0;
-#X connect 9 0 10 0;
-#X connect 10 0 3 0;
-#X connect 11 0 3 0;
-#X connect 12 0 1 0;
-#X connect 13 0 12 0;
-#X connect 14 0 9 0;
-#X connect 14 2 4 0;
-#X connect 14 3 2 0;
-#X connect 14 4 13 2;
-#X restore 106 363 pd create and link instances;
-#X obj 376 464 send;
-#X obj 99 278 trigger 0 bang;
-#X obj 7 160 loadbang;
-#X msg 46 363 loadbang;
-#X obj 46 227 trigger bang anything anything bang bang bang;
-#X msg 349 363 clear;
-#X obj 7 205 moses 1;
-#X text 59 203 no need to generate anything for 0 instances;
-#N canvas 48 22 633 512 \$0-bundle 0;
-#X restore 26 61 pd \$0-bundle;
-#X obj 26 113 outlet;
-#X obj 26 89 receive \$0-out1;
-#X obj 136 89 receive \$0-out2;
-#X obj 397 362 symbol pd-\$0-bundle;
-#N canvas 231 432 566 361 setup 0;
-#X obj 78 -165 inlet;
-#X obj 78 149 outlet;
-#X text 116 -107 This will create fake "in/outlets" as senders and
-receivers.;
-#X obj 78 17 float \$0;
-#N canvas 1084 528 552 411 expandpath 0;
-#X obj 59 16 inlet;
-#X obj 104 371 outlet;
-#X obj 59 98 list append;
-#X msg 59 153 symbol \$1/\$2;
-#X obj 58 67 ggee/getdir 2;
-#X obj 59 184 hcs/stat;
-#X obj 104 349 symbol;
-#X obj 59 43 trigger bang anything;
-#X obj 104 205 bang;
-#X obj 59 233 list split 1;
-#X connect 0 0 1 0;
-#X connect 2 0 3 0;
-#X connect 3 0 5 0;
-#X connect 4 0 2 0;
-#X connect 5 0 9 0;
-#X connect 5 1 8 0;
-#X connect 6 0 1 0;
-#X connect 7 0 4 0;
-#X connect 7 1 2 1;
-#X connect 7 1 6 1;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X restore 394 -80 pd expandpath;
-#X obj 177 -29 ggee/getdir 2;
-#X msg 177 -3 obj 10 5 declare -path \$1;
-#X obj 78 -88 trigger bang bang;
-#X msg 78 43 obj 10 40 receive \$1-in1 \, obj 400 40 receive \$1-in2
-\, obj 10 560 send \$1-out1 \, obj 380 560 send \$1-out2;
-#X connect 0 0 7 0;
-#X connect 3 0 8 0;
-#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 3 0;
-#X connect 7 1 5 0;
-#X connect 8 0 1 0;
-#X restore 289 363 pd setup;
-#X obj 67 160 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 3 0 11 0;
-#X connect 4 0 3 1;
-#X connect 6 0 7 0;
-#X connect 8 0 18 0;
-#X connect 11 0 12 0;
-#X connect 13 0 1 0;
-#X connect 13 1 4 0;
-#X connect 14 0 8 0;
-#X connect 15 0 12 0;
-#X connect 16 0 15 0;
-#X connect 16 1 13 0;
-#X connect 16 3 25 0;
-#X connect 16 4 17 0;
-#X connect 16 5 24 0;
-#X connect 17 0 12 0;
-#X connect 18 1 16 0;
-#X connect 22 0 21 0;
-#X connect 23 0 9 0;
-#X connect 24 0 12 1;
-#X connect 25 0 12 0;
-#X connect 26 0 8 0;
diff --git a/externals/many/debian/changelog b/externals/many/debian/changelog
deleted file mode 100644
index 3a6ef5d4d..000000000
--- a/externals/many/debian/changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-pd-many (0.0-1) unstable; urgency=low
-
-  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
-
- -- Hans-Christoph Steiner <hans@eds.org>  Thu, 21 Jan 2010 23:27:04 -0500
diff --git a/externals/many/debian/compat b/externals/many/debian/compat
deleted file mode 100644
index 7f8f011eb..000000000
--- a/externals/many/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/externals/many/debian/control b/externals/many/debian/control
deleted file mode 100644
index 67c5488d5..000000000
--- a/externals/many/debian/control
+++ /dev/null
@@ -1,38 +0,0 @@
-Source: pd-many
-Section: sound
-Priority: optional
-Maintainer: Debian Multimedia Maintainers <pkg-multimedia-maintainers@lists.alioth.debian.org>
-Uploaders: Hans-Christoph Steiner <hans@eds.org>
-Build-Depends: debhelper (>= 7.0.50~),
-               puredata
-Standards-Version: 3.9.1
-Homepage: http://puredata.info
-
-Package: pd-many
-Architecture: all
-Depends: ${shlibs:Depends},
-         pd,
-         pd-ggee,
-         pd-libdir,
-         ${misc:Depends}
-Recommends: pd-import,
-            pd-pddp
-Description: a Pd library for creating and managing many instances of objects
- This is a library for of techniques for creating and managing many
- instances of an object.
- .
-  * bundle: a bundle of instances all connected to the same 
-            inlets and outlets
-  * instances: many instances that are both individually 
-               and globally addressable 
-  * instances~: same as [instances] but with outlet~s
-  * polypoly~: designed for MIDI polyphony, built upon 
-               [poly] and based on [polypoly]
-  * voices~: similar to polypoly~, but for generate voice 
-             allocation without being tied to MIDI
- .
- Objects in the 'many' lib are based on code from Stephen Pickles'
- (aka pix) nqpoly4 and Frank Barknecht's polypoly.  Thanks to pix's
- nqpoly4 because that was the real groundbreaking work that proved
- that a useful and reliable instance-managing object could be
- programmed in Pd.
diff --git a/externals/many/debian/copyright b/externals/many/debian/copyright
deleted file mode 100644
index 5067e09de..000000000
--- a/externals/many/debian/copyright
+++ /dev/null
@@ -1,25 +0,0 @@
-Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=135
-Name: many
-Maintainer: Hans-Christoph Steiner <hans@eds.org>
-Source: http://sourceforge.net/projects/pure-data/files/libraries/many/
-
-Files: *
-Copyright: 2001-2003, Steven Pickles
-           2007, Frank Barknecht
-           2007-2010, Hans-Christoph Steiner
-License: GPL-3+
- This package is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this package; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-X-Comment: On Debian systems, the complete text of the GNU General
- Public License can be found in `/usr/share/common-licenses/GPL-2'.
diff --git a/externals/many/debian/gbp.conf b/externals/many/debian/gbp.conf
deleted file mode 100644
index ae1dc367f..000000000
--- a/externals/many/debian/gbp.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-[DEFAULT]
-upstream-branch = upstream
-debian-branch = master
-upstream-tag = upstream/%(version)s
-debian-tag = debian/%(version)s
-pristine-tar = True
-sign-tags = True
diff --git a/externals/many/debian/links b/externals/many/debian/links
deleted file mode 100644
index 48fcdf909..000000000
--- a/externals/many/debian/links
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/lib/pd/extra/many/README.txt        usr/share/doc/pd-many/README
-usr/lib/pd/extra/many/examples          usr/share/doc/pd-many/examples
-usr/share/common-licenses/GPL-2             usr/lib/pd/extra/many/LICENSE.txt
diff --git a/externals/many/debian/rules b/externals/many/debian/rules
deleted file mode 100755
index e138ba64e..000000000
--- a/externals/many/debian/rules
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/make -f
-
-LIBRARY_NAME = many
-PACKAGE = pd-$(LIBRARY_NAME)
-pkglibdir = /usr/lib/pd/extra
-
-%:
-	dh $@ --buildsystem=makefile
-
-override_dh_auto_install:
-	dh_auto_install -- prefix=/usr pkglibdir=$(pkglibdir)
-# replace license file with link to the Debian license file
-	rm -f -- $(CURDIR)/debian/$(PACKAGE)/$(pkglibdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-override_dh_shlibdeps:
-	dpkg-shlibdeps $(CURDIR)/debian/$(PACKAGE)$(pkglibdir)/$(LIBRARY_NAME)/*.pd_linux \
-		-T$(CURDIR)/debian/$(PACKAGE).substvars
diff --git a/externals/many/debian/source/format b/externals/many/debian/source/format
deleted file mode 100644
index 163aaf8d8..000000000
--- a/externals/many/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/externals/many/debian/watch b/externals/many/debian/watch
deleted file mode 100644
index 82c0d1a33..000000000
--- a/externals/many/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=3
-http://sf.net/pure-data/template-(.*)\.tar\.gz
diff --git a/externals/many/examples/aw.wav b/externals/many/examples/aw.wav
deleted file mode 100644
index 1ad142e83acbc5cff4c1c3a868e73246ee42ef39..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 133166
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%0D!h!t0+`a7G
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%0Aj+{1;XC11;>Rnw}|tJYTCt)B2(RTI(h
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

diff --git a/externals/many/examples/petal-test.pd b/externals/many/examples/petal-test.pd
deleted file mode 100644
index 710eee32b..000000000
--- a/externals/many/examples/petal-test.pd
+++ /dev/null
@@ -1,68 +0,0 @@
-#N canvas 562 93 676 425 10;
-#X declare -path /Users/hans/code/pure-data/trunk/externals/many/examples
-;
-#X obj 579 71 gemwin;
-#X obj 574 22 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 128 337 gemhead;
-#X obj 227 215 line;
-#X msg 227 195 \$1 1000;
-#X msg 221 161 21;
-#X msg 247 161 13;
-#X msg 277 161 8;
-#X text 281 366 make 35 petal objects waiting for commands;
-#X text 415 152 radius of the flower;
-#X text 333 131 radius of the petals;
-#X text 167 141 number of petals;
-#N canvas 0 22 450 300 pak 0;
-#X obj 107 37 inlet;
-#X obj 209 35 inlet;
-#X obj 209 57 t b a;
-#X obj 107 122 pack 0 0 0;
-#X obj 107 158 outlet;
-#X obj 149 35 inlet;
-#X obj 149 57 t b a;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 1 3 2;
-#X connect 3 0 4 0;
-#X connect 5 0 6 0;
-#X connect 6 0 3 0;
-#X connect 6 1 3 1;
-#X restore 316 241 pd pak;
-#X obj 320 144 vsl 15 60 0 2 0 1 empty empty empty 0 -9 0 10 -261682
--1 -1 5500 0;
-#X floatatom 321 211 5 0 0 0 - - -;
-#X obj 397 157 vsl 15 60 0 4 0 1 empty empty empty 0 -9 0 10 -203904
--1 -1 3300 0;
-#X floatatom 398 224 5 0 0 0 - - -;
-#X text 127 25 draw a shape using many instances and a little math
-;
-#X msg 586 41 create \, 1;
-#X msg 192 161 40;
-#X msg 194 296 draw fill;
-#X msg 215 317 draw line;
-#X msg 175 277 draw point;
-#X obj 175 255 loadbang;
-#X obj 128 364 many/bundle 250 petal;
-#X msg 153 161 250;
-#X connect 1 0 0 0;
-#X connect 2 0 24 0;
-#X connect 3 0 12 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 12 0 24 1;
-#X connect 13 0 14 0;
-#X connect 14 0 12 1;
-#X connect 15 0 16 0;
-#X connect 16 0 12 2;
-#X connect 18 0 0 0;
-#X connect 19 0 4 0;
-#X connect 20 0 24 1;
-#X connect 21 0 24 1;
-#X connect 22 0 24 1;
-#X connect 23 0 22 0;
-#X connect 25 0 4 0;
diff --git a/externals/many/examples/petal.pd b/externals/many/examples/petal.pd
deleted file mode 100644
index eaf09609b..000000000
--- a/externals/many/examples/petal.pd
+++ /dev/null
@@ -1,67 +0,0 @@
-#N canvas 602 416 942 484 10;
-#X obj 99 196 separator;
-#X obj 99 429 circle;
-#X obj 522 239 * 360;
-#X obj 99 312 rotateXYZ 0 0 0;
-#X obj 522 190 t b f;
-#X obj 39 35 inlet;
-#X obj 32 455 outlet;
-#X obj 99 340 translateXYZ 1 0 0;
-#X obj 424 310 * 1;
-#X obj 592 262 t b f;
-#X obj 522 218 / 1;
-#X obj 424 247 <= 0;
-#X text 82 458 this object just ignores triggers;
-#X text 483 130 \$1 is this objects index \, we use it to work out
-if we need to render;
-#X text 14 73 draw a petal (really just a circle)..;
-#X text 460 246 if we aren't needed \, scale ourselves to 0 is there
-a better way? email me.;
-#X obj 99 368 scaleXYZ 1;
-#X obj 522 33 inlet;
-#X obj 347 455 outlet;
-#X text 82 34 we connect to the global gemhead;
-#X obj 522 89 unpack float float float;
-#X text 683 87 petal# petalsize petalradius;
-#X obj 427 144 float \$1;
-#X obj 427 120 loadbang;
-#X obj 99 284 colorRGB 0.5 0 1;
-#X obj 168 245 % 8;
-#X obj 168 264 / 7;
-#X obj 522 58 route list;
-#X obj 285 108 route draw;
-#X obj 280 381 list prepend draw;
-#X obj 280 401 list trim;
-#X connect 0 0 24 0;
-#X connect 2 0 3 3;
-#X connect 3 0 7 0;
-#X connect 4 0 10 0;
-#X connect 4 0 11 0;
-#X connect 4 1 10 1;
-#X connect 4 1 11 1;
-#X connect 5 0 0 0;
-#X connect 7 0 16 0;
-#X connect 8 0 16 1;
-#X connect 8 0 16 2;
-#X connect 8 0 16 3;
-#X connect 9 0 8 0;
-#X connect 9 1 8 1;
-#X connect 10 0 2 0;
-#X connect 11 0 8 0;
-#X connect 16 0 1 0;
-#X connect 17 0 27 0;
-#X connect 20 0 4 0;
-#X connect 20 1 9 0;
-#X connect 20 2 7 1;
-#X connect 22 0 11 0;
-#X connect 22 0 10 0;
-#X connect 22 0 25 0;
-#X connect 23 0 22 0;
-#X connect 24 0 3 0;
-#X connect 25 0 26 0;
-#X connect 26 0 24 3;
-#X connect 27 0 20 0;
-#X connect 27 1 28 0;
-#X connect 28 0 29 0;
-#X connect 29 0 30 0;
-#X connect 30 0 1 0;
diff --git a/externals/many/examples/run-200voicetest.pd b/externals/many/examples/run-200voicetest.pd
deleted file mode 100644
index 16f5e69eb..000000000
--- a/externals/many/examples/run-200voicetest.pd
+++ /dev/null
@@ -1,109 +0,0 @@
-#N canvas 506 162 588 537 10;
-#X declare -path ..;
-#X obj 132 207 hsl 60 18 0 1 0 1 empty empty pan 15 9 0 10 -204800
--1 -1 2300 0;
-#X floatatom 135 229 5 0 0 0 - - -;
-#X obj 213 320 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 35 410 three outlets are needed: 2 audio and one message outlet
-that is banged when the voice is finished.;
-#X text 15 20 two inlets are needed: the first for voice-managed messages
-\, and the second for messages that are send to all instances;
-#X obj 386 9 declare -path ..;
-#X obj 63 207 hsl 60 18 0.1 10 1 1 empty empty stretch 10 9 0 10 -204786
--1 -1 4600 0;
-#X floatatom 70 228 5 0 0 0 - - -;
-#X text 231 319 out of voices;
-#X text 26 169 factor by which to stretch sample;
-#X text 26 183 (i.e. 2 means twice as long);
-#X text 33 459 this is the patch of a single voice \, it has the same
-inlets and outlets as voices~ above:;
-#X obj 335 188 table \$0-sample;
-#X text 221 298 (you can send \$0 for localizing things);
-#X obj 336 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#N canvas 0 22 482 301 load 0;
-#X obj 48 10 inlet;
-#X obj 138 251 outlet;
-#X obj 138 167 soundfiler;
-#X obj 138 50 loadbang;
-#X msg 138 146 read -resize \$1 \$2;
-#X obj 138 113 list append \$0-sample;
-#X msg 138 72 aw.wav;
-#X obj 49 61 openpanel;
-#X obj 309 21 inlet;
-#X obj 309 48 trigger bang bang;
-#X obj 320 174 tabwrite~ \$0-sample;
-#X obj 322 145 adc~;
-#X obj 354 146 send \$0-sample;
-#X msg 354 122 resize \$1;
-#X msg 354 82 100000;
-#X connect 0 0 7 0;
-#X connect 2 0 1 0;
-#X connect 3 0 6 0;
-#X connect 4 0 2 0;
-#X connect 5 0 4 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 9 1 14 0;
-#X connect 11 0 10 0;
-#X connect 11 1 10 0;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 14 0 1 0;
-#X restore 336 158 pd load sample;
-#X text 248 263 <-- send the size of the sample table to all instances
-;
-#X obj 67 349 output~;
-#X obj 135 505 voicetest~ 0 0 \$0;
-#X obj 60 272 pack 0 0;
-#X obj 78 250 t b f;
-#X obj 417 139 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 435 137 <-- record from mic;
-#X text 148 78 <-- play your voice like an instrument \, click and
-drag;
-#X obj 60 297 voices~ 200 voicetest~ \$0;
-#N canvas 0 22 450 300 (subpatch) 0;
-#X obj 106 259 outlet;
-#X obj 106 30 inlet;
-#X obj 160 29 inlet;
-#X obj 106 86 / 80;
-#X obj 106 199 pack float float;
-#X obj 160 152 * 10;
-#X obj 160 86 / 90;
-#X obj 160 110 + 0.1;
-#X obj 160 131 mapping/exponential_curve 0.75;
-#X obj 106 152 t b 0;
-#X connect 1 0 3 0;
-#X connect 2 0 6 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 5 0;
-#X connect 9 0 4 0;
-#X connect 9 1 4 1;
-#X coords 0 0 1 1 90 90 0;
-#X restore 2 175 pd;
-#X obj 64 76 gcanvas 80 80;
-#X text 223 138 load soundfile -->;
-#X connect 0 0 1 0;
-#X connect 0 0 20 0;
-#X connect 6 0 7 0;
-#X connect 6 0 19 0;
-#X connect 14 0 15 0;
-#X connect 15 0 24 1;
-#X connect 19 0 24 0;
-#X connect 20 0 19 0;
-#X connect 20 1 19 1;
-#X connect 21 0 15 1;
-#X connect 24 0 17 0;
-#X connect 24 1 17 1;
-#X connect 24 2 2 0;
-#X connect 25 0 24 0;
-#X connect 26 0 25 0;
-#X connect 26 1 25 1;
diff --git a/externals/many/examples/tick.wav b/externals/many/examples/tick.wav
deleted file mode 100644
index 3b155189fd5dd961ee9ee7dcc54b3779eccd3598..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 35856
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
J)kR7h{ty3)x5oeg

diff --git a/externals/many/examples/ticker-voice~.pd b/externals/many/examples/ticker-voice~.pd
deleted file mode 100644
index 8493f67b1..000000000
--- a/externals/many/examples/ticker-voice~.pd
+++ /dev/null
@@ -1,21 +0,0 @@
-#N canvas 474 451 518 379 10;
-#X obj 22 28 inlet;
-#X text 62 27 clock input;
-#X obj 32 357 outlet~;
-#X obj 136 357 outlet~;
-#X obj 41 135 % 2;
-#X obj 41 156 select 0 1;
-#X obj 253 28 inlet;
-#X obj 265 354 outlet;
-#X text 310 354 bang when done to free voice;
-#X text 291 30 optional inlet;
-#X obj 32 249 tabplay~ \$3-tick;
-#X obj 137 250 tabplay~ \$3-tock;
-#X connect 0 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 10 0;
-#X connect 5 1 11 0;
-#X connect 10 0 2 0;
-#X connect 10 1 7 0;
-#X connect 11 0 3 0;
-#X connect 11 1 7 0;
diff --git a/externals/many/examples/ticker.pd b/externals/many/examples/ticker.pd
deleted file mode 100644
index 96db9e4be..000000000
--- a/externals/many/examples/ticker.pd
+++ /dev/null
@@ -1,44 +0,0 @@
-#N canvas 520 164 518 379 10;
-#X declare -path ..;
-#X obj 344 54 table \$0-tick;
-#X obj 344 74 table \$0-tock;
-#X obj 338 241 soundfiler;
-#X msg 339 172 read -resize tick.wav \$1;
-#X obj 339 150 symbol \$0-tick;
-#X obj 333 122 loadbang;
-#X msg 306 215 read -resize tock.wav \$1;
-#X obj 306 193 symbol \$0-tock;
-#X obj 312 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 17 97 metro;
-#X obj 17 37 tgl 15 0 empty empty empty 17 7 0 10 -204786 -1 -1 1 1
-;
-#X obj 47 60 hsl 128 15 1 1000 1 1 empty empty empty -2 -8 0 10 -262130
--1 -1 9800 1;
-#X floatatom 56 84 5 0 0 0 - - -;
-#X obj 17 126 float;
-#X obj 57 126 + 1;
-#X obj 337 17 declare -path ..;
-#X obj 85 312 output~;
-#X text 35 34 <-- turn on clock;
-#X text 185 57 <-- run it faster!;
-#X obj 53 221 voices~ 100 ticker-voice~ \$0;
-#X text 201 302 here is the playback patch:;
-#X obj 211 333 ticker-voice~ 0 0 \$0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 5 0 7 0;
-#X connect 6 0 2 0;
-#X connect 7 0 6 0;
-#X connect 8 0 4 0;
-#X connect 8 0 7 0;
-#X connect 9 0 13 0;
-#X connect 10 0 9 0;
-#X connect 11 0 9 1;
-#X connect 11 0 12 0;
-#X connect 13 0 14 0;
-#X connect 13 0 19 0;
-#X connect 14 0 13 1;
-#X connect 19 0 16 0;
-#X connect 19 1 16 1;
diff --git a/externals/many/examples/tock.wav b/externals/many/examples/tock.wav
deleted file mode 100644
index 5f99b16d3adfb29a377b0fb05f8ae7a76ebb2e39..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20516
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
S9s=tH<6-y=OYlp#7yb|9rvtbE

diff --git a/externals/many/examples/voicetest~.pd b/externals/many/examples/voicetest~.pd
deleted file mode 100644
index 76c3afd0b..000000000
--- a/externals/many/examples/voicetest~.pd
+++ /dev/null
@@ -1,40 +0,0 @@
-#N canvas 393 160 577 494 10;
-#X obj 122 11 inlet;
-#X obj 122 463 outlet~;
-#X obj 267 11 inlet;
-#X obj 239 463 outlet~;
-#X obj 320 463 outlet;
-#X text 367 463 bang when done;
-#X obj 122 337 line~;
-#X obj -15 88 print voicetest~_\$1;
-#X obj 282 76 samplerate~;
-#X obj 267 97 /;
-#X obj 320 435 delay;
-#X obj 267 124 * 1000;
-#X text 306 125 ms;
-#X obj 122 241 pack float float;
-#X msg 122 313 0 \, \$2 \$1;
-#X obj 122 179 *;
-#X obj 112 365 tabread4~ \$3-sample;
-#X obj 122 397 pan/equal_power_pan~;
-#X obj 122 60 unpack float float;
-#X obj 282 56 loadbang;
-#X connect 0 0 7 0;
-#X connect 0 0 18 0;
-#X connect 2 0 9 0;
-#X connect 2 0 13 1;
-#X connect 6 0 16 0;
-#X connect 8 0 9 1;
-#X connect 9 0 11 0;
-#X connect 10 0 4 0;
-#X connect 11 0 15 1;
-#X connect 13 0 14 0;
-#X connect 14 0 6 0;
-#X connect 15 0 13 0;
-#X connect 15 0 10 0;
-#X connect 16 0 17 0;
-#X connect 17 0 1 0;
-#X connect 17 1 3 0;
-#X connect 18 0 15 0;
-#X connect 18 1 17 1;
-#X connect 19 0 8 0;
diff --git a/externals/many/instances-help.pd b/externals/many/instances-help.pd
deleted file mode 100644
index 5f122d10f..000000000
--- a/externals/many/instances-help.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#N canvas 153 160 450 300 10;
-#X text 27 21 inlet0: routed to each instance based on instance number
-;
-#X text 27 41 inlet1: connected directly to each instance;
-#X text 27 101 outlet1: connected directly to each instance;
-#X obj 62 163 instances 50 instances-template 1 2 3 4 5 6 7;
-#X text 27 81 outlet0: connected directly to each instance;
-#X text 54 223 up to 7 symbol or float arguments can be used;
diff --git a/externals/many/instances-template-help.pd b/externals/many/instances-template-help.pd
deleted file mode 100644
index 360a6f052..000000000
--- a/externals/many/instances-template-help.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X text 79 120 Your [instances] abstraction needs two inlets and two
-outlets. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [instances] and will be passed
-on to the custom abstraction.;
-#X text 80 35 instances-template is a basic patch here only to illustrate what a
-patch designed for [instance] looks like. Feel free to use it as a
-template for your own patches for [instances].;
-#X obj 111 233 instances-template 1 8 four more arguments possible;
-#X text 48 255 message-out;
-#X text 52 212 message-in;
-#X text 328 255 message-out;
-#X text 332 212 message-in;
diff --git a/externals/many/instances-template.pd b/externals/many/instances-template.pd
deleted file mode 100644
index 085c53bcd..000000000
--- a/externals/many/instances-template.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 411 77 637 579 10;
-#X obj 29 30 inlet;
-#X obj 335 19 inlet;
-#X obj 345 508 outlet;
-#X obj 35 508 outlet;
diff --git a/externals/many/instances-template~-help.pd b/externals/many/instances-template~-help.pd
deleted file mode 100644
index 0e899c523..000000000
--- a/externals/many/instances-template~-help.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X obj 110 254 instances-template~ 1 8 four more arguments possible
-;
-#X text 72 274 dsp-out left;
-#X text 381 274 dsp-out right;
-#X text 35 233 inlet for messages routed to instances;
-#X text 380 234 inlet for audio to all instances;
-#X text 80 35 instances-template~ is a basic patch here only to illustrate
-what a patch designed for [instances~] looks like. Feel free to use
-it as a template for your own patches for [instances~].;
-#X text 76 100 Your [instances~] abstraction needs one [inlet] and
-one [inlet~] and two [outlet~]s. First argument will be the voice index
-number starting from 0 \, second argument will be the total number
-of voices. Four more arguments can be passed as arguments to [instances~]
-and will be passed on to the custom abstraction.;
diff --git a/externals/many/instances-template~.pd b/externals/many/instances-template~.pd
deleted file mode 100644
index 6f639fbbf..000000000
--- a/externals/many/instances-template~.pd
+++ /dev/null
@@ -1,36 +0,0 @@
-#N canvas 244 339 552 361 10;
-#X obj 54 11 inlet;
-#X obj 54 324 outlet~;
-#X obj 228 325 outlet~;
-#X obj 243 9 inlet~;
-#X obj 228 150 *~;
-#X obj 211 121 osc~;
-#X obj 100 48 print instances~_\$1;
-#X obj 54 302 *~;
-#X obj 129 137 osc~;
-#X obj 129 158 +~ 1;
-#X obj 129 178 *~ 0.5;
-#X obj 228 305 *~;
-#X obj 243 285 -~;
-#X msg 243 256 1;
-#X obj 243 236 loadbang;
-#X obj 130 81 float;
-#X obj 130 115 / 500;
-#X connect 0 0 6 0;
-#X connect 0 0 15 0;
-#X connect 3 0 4 1;
-#X connect 4 0 11 0;
-#X connect 4 0 7 0;
-#X connect 5 0 4 0;
-#X connect 7 0 1 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 7 1;
-#X connect 10 0 12 1;
-#X connect 11 0 2 0;
-#X connect 12 0 11 1;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 5 0;
-#X connect 15 0 16 0;
-#X connect 16 0 8 0;
diff --git a/externals/many/instances.pd b/externals/many/instances.pd
deleted file mode 100644
index e3719f640..000000000
--- a/externals/many/instances.pd
+++ /dev/null
@@ -1,156 +0,0 @@
-#N canvas 320 157 643 491 10;
-#X obj 26 8 inlet;
-#X obj 99 336 until;
-#X obj 137 363 + 1;
-#X obj 99 363 float;
-#X msg 138 336 0;
-#X obj 26 32 send \$0-in1;
-#X obj 135 8 inlet;
-#X obj 135 32 send \$0-in2;
-#X obj 7 181 float \$1;
-#X obj 136 114 outlet;
-#X text 122 62 <-- open this subpatch to see the instances;
-#N canvas 90 404 490 437 make 0;
-#X obj 88 14 inlet;
-#X obj 210 83 until;
-#X obj 210 107 float;
-#X obj 248 107 + 1;
-#X msg 251 83 0;
-#X msg 281 113 route;
-#X obj 210 244 list trim;
-#X obj 88 57 trigger bang bang anything bang;
-#X obj 210 317 outlet;
-#N canvas 0 22 450 300 tolist 0;
-#X obj 90 40 inlet;
-#X obj 169 40 inlet;
-#X obj 67 215 outlet;
-#X obj 90 150 list;
-#X obj 67 171 list;
-#X obj 90 127 list prepend;
-#X connect 0 0 5 0;
-#X connect 1 0 5 1;
-#X connect 1 0 4 0;
-#X connect 3 0 4 1;
-#X connect 3 0 5 1;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X restore 210 193 pd tolist;
-#X msg 85 225 connect 1 0 5 0;
-#X obj 210 223 list prepend obj 10 60;
-#X connect 0 0 7 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 0 9 0;
-#X connect 3 0 2 1;
-#X connect 4 0 2 1;
-#X connect 5 0 9 0;
-#X connect 6 0 8 0;
-#X connect 7 0 10 0;
-#X connect 7 1 9 1;
-#X connect 7 2 1 0;
-#X connect 7 3 5 0;
-#X connect 7 3 4 0;
-#X connect 9 0 11 0;
-#X connect 10 0 8 0;
-#X connect 11 0 6 0;
-#X restore 292 393 pd make route;
-#N canvas 493 375 432 461 create 0;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 260 71 symbol \$2;
-#X obj 58 225 pack float float;
-#X obj 173 409 outlet;
-#X msg 58 247 connect 5 \$2 \$1 0;
-#X obj 29 141 + 6;
-#X msg 45 282 connect 2 0 \$1 1;
-#X msg 35 302 connect \$1 0 3 0;
-#X msg 18 326 connect \$1 1 4 0;
-#X obj 173 61 * 31;
-#X obj 173 83 + 100;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X msg 173 176 obj 90 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 29 37 trigger anything anything anything bang;
-#X obj 173 108 pack float symbol;
-#X connect 0 0 14 0;
-#X connect 1 0 13 0;
-#X connect 2 0 15 1;
-#X connect 3 0 5 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 6 0 3 0;
-#X connect 6 0 8 0;
-#X connect 6 0 9 0;
-#X connect 7 0 4 0;
-#X connect 8 0 4 0;
-#X connect 9 0 4 0;
-#X connect 10 0 11 0;
-#X connect 11 0 15 0;
-#X connect 12 0 1 0;
-#X connect 13 0 4 0;
-#X connect 14 0 6 0;
-#X connect 14 1 3 1;
-#X connect 14 2 10 0;
-#X connect 14 3 2 0;
-#X connect 15 0 12 0;
-#X restore 106 393 pd create and link instances;
-#X obj 466 464 send;
-#X obj 99 308 trigger 0 bang;
-#X obj 7 160 loadbang;
-#X msg 46 393 loadbang;
-#X msg 439 283 clear;
-#X obj 7 235 moses 1;
-#X text 59 233 no need to generate anything for 0 instances;
-#N canvas 48 22 657 548 \$0-instances 1;
-#X restore 26 61 pd \$0-instances;
-#X obj 26 113 outlet;
-#X obj 26 89 receive \$0-out1;
-#X obj 136 89 receive \$0-out2;
-#X obj 487 282 symbol pd-\$0-instances;
-#X obj 7 204 trigger anything bang bang;
-#X obj 46 257 trigger bang anything anything bang;
-#N canvas 268 410 566 361 setup 0;
-#X obj 78 -165 inlet;
-#X obj 78 139 outlet;
-#X text 126 -137 This will create fake "in/outlets" as senders and
-receivers.;
-#X obj 78 -23 float \$0;
-#X obj 177 -49 ggee/getdir 2;
-#X msg 177 -23 obj 10 5 declare -path \$1;
-#X obj 78 -108 trigger bang bang;
-#X msg 78 3 obj 10 40 receive \$1-in1 \, obj 540 40 receive \$1-in2
-\, obj 10 560 send \$1-out1 \, obj 560 560 send \$1-out2;
-#X connect 0 0 6 0;
-#X connect 3 0 7 0;
-#X connect 4 0 5 0;
-#X connect 5 0 1 0;
-#X connect 6 0 3 0;
-#X connect 6 1 4 0;
-#X connect 7 0 1 0;
-#X restore 384 393 pd setup;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 3 0 12 0;
-#X connect 4 0 3 1;
-#X connect 6 0 7 0;
-#X connect 8 0 25 0;
-#X connect 11 0 13 0;
-#X connect 12 0 13 0;
-#X connect 14 0 1 0;
-#X connect 14 1 4 0;
-#X connect 15 0 8 0;
-#X connect 16 0 13 0;
-#X connect 17 0 13 0;
-#X connect 18 1 26 0;
-#X connect 22 0 21 0;
-#X connect 23 0 9 0;
-#X connect 24 0 13 1;
-#X connect 25 0 18 0;
-#X connect 25 1 17 0;
-#X connect 25 2 24 0;
-#X connect 26 0 16 0;
-#X connect 26 1 14 0;
-#X connect 26 2 11 0;
-#X connect 26 3 27 0;
-#X connect 27 0 13 0;
diff --git a/externals/many/instances~-help.pd b/externals/many/instances~-help.pd
deleted file mode 100644
index 6eeb8f912..000000000
--- a/externals/many/instances~-help.pd
+++ /dev/null
@@ -1,31 +0,0 @@
-#N canvas 202 131 588 471 10;
-#X text 62 424 dsp-out left;
-#X text 371 424 dsp-out right;
-#X text 25 383 inlet for messages routed to instances;
-#X text 370 384 inlet for audio to all instances;
-#X obj 219 318 output~;
-#X obj 365 220 adc~;
-#X obj 168 249 list prepend;
-#X obj 237 228 hradio 15 1 1 5 empty empty empty 0 -8 0 10 -203904
--1 -1 4;
-#X obj 168 272 instances~ 5 instances-template~ 1 2 3 4 5 6 7;
-#X obj 171 203 hsl 128 15 200 500 1 1 empty empty empty -2 -8 0 10
--261682 -1 -1 6600 0;
-#X obj 100 404 instances-template~ 1 8 four more arguments possible
-;
-#X obj 134 142 loadbang;
-#X msg 134 166 0 200 \, 1 300 \, 2 400 \, 3 500 \, 4 100;
-#X text 27 81 outlet~0: connected directly to each instance;
-#X text 27 101 outlet~1: connected directly to each instance;
-#X text 27 41 inlet~: connected directly to each instance;
-#X text 27 21 inlet: routed to each instance based on instance number
-;
-#X connect 5 0 8 1;
-#X connect 5 1 8 1;
-#X connect 6 0 8 0;
-#X connect 7 0 6 1;
-#X connect 8 0 4 0;
-#X connect 8 1 4 1;
-#X connect 9 0 6 0;
-#X connect 11 0 12 0;
-#X connect 12 0 8 0;
diff --git a/externals/many/instances~.pd b/externals/many/instances~.pd
deleted file mode 100644
index 1e39f818b..000000000
--- a/externals/many/instances~.pd
+++ /dev/null
@@ -1,157 +0,0 @@
-#N canvas 326 147 634 492 10;
-#X obj 26 8 inlet;
-#X obj 106 341 until;
-#X obj 144 368 + 1;
-#X obj 106 368 float;
-#X msg 145 341 0;
-#X obj 7 181 float \$1;
-#X obj 26 113 outlet~;
-#X text 122 62 <-- open this subpatch to see the instances;
-#N canvas 564 572 490 437 make 0;
-#X obj 88 14 inlet;
-#X obj 210 83 until;
-#X obj 210 107 float;
-#X obj 248 107 + 1;
-#X msg 251 83 0;
-#X msg 281 113 route;
-#X obj 210 244 list trim;
-#X obj 88 57 trigger bang bang anything bang;
-#X obj 210 317 outlet;
-#N canvas 0 22 450 300 tolist 0;
-#X obj 90 40 inlet;
-#X obj 169 40 inlet;
-#X obj 67 215 outlet;
-#X obj 90 150 list;
-#X obj 67 171 list;
-#X obj 90 127 list prepend;
-#X connect 0 0 5 0;
-#X connect 1 0 5 1;
-#X connect 1 0 4 0;
-#X connect 3 0 4 1;
-#X connect 3 0 5 1;
-#X connect 4 0 2 0;
-#X connect 5 0 3 0;
-#X restore 210 193 pd tolist;
-#X msg 88 225 connect 1 0 5 0;
-#X obj 210 223 list prepend obj 10 60;
-#X connect 0 0 7 0;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 2 0 9 0;
-#X connect 3 0 2 1;
-#X connect 4 0 2 1;
-#X connect 5 0 9 0;
-#X connect 6 0 8 0;
-#X connect 7 0 10 0;
-#X connect 7 1 9 1;
-#X connect 7 2 1 0;
-#X connect 7 3 5 0;
-#X connect 7 3 4 0;
-#X connect 9 0 11 0;
-#X connect 10 0 8 0;
-#X connect 11 0 6 0;
-#X restore 292 393 pd make route;
-#N canvas 493 375 432 461 create 0;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 260 71 symbol \$2;
-#X obj 173 61 * 20;
-#X obj 58 225 pack float float;
-#X obj 173 409 outlet;
-#X obj 29 141 + 6;
-#X msg 58 247 connect 5 \$2 \$1 0;
-#X msg 45 282 connect 2 0 \$1 1;
-#X msg 35 302 connect \$1 0 3 0;
-#X msg 18 326 connect \$1 1 4 0;
-#X obj 173 83 + 90;
-#X msg 173 177 obj 150 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 29 37 trigger anything anything anything bang;
-#X obj 173 108 pack float symbol;
-#X connect 0 0 14 0;
-#X connect 1 0 12 0;
-#X connect 2 0 15 1;
-#X connect 3 0 11 0;
-#X connect 4 0 7 0;
-#X connect 6 0 8 0;
-#X connect 6 0 4 0;
-#X connect 6 0 9 0;
-#X connect 6 0 10 0;
-#X connect 7 0 5 0;
-#X connect 8 0 5 0;
-#X connect 9 0 5 0;
-#X connect 10 0 5 0;
-#X connect 11 0 15 0;
-#X connect 12 0 5 0;
-#X connect 13 0 1 0;
-#X connect 14 0 6 0;
-#X connect 14 1 4 1;
-#X connect 14 2 3 0;
-#X connect 14 3 2 0;
-#X connect 15 0 13 0;
-#X restore 106 393 pd create and link instances;
-#X obj 466 464 send;
-#X obj 106 314 trigger 0 bang;
-#X obj 7 160 loadbang;
-#X msg 46 393 loadbang;
-#X msg 439 283 clear;
-#N canvas 678 643 566 361 xlets 0;
-#X obj 78 -165 inlet;
-#X obj 78 129 outlet;
-#X text 126 -137 This will create fake "in/outlets" as senders and
-receivers.;
-#X obj 78 -23 float \$0;
-#X msg 78 3 obj 10 40 receive \$1-message \, obj 400 40 catch~ \$1-audio-in
-\, obj 10 560 throw~ \$1-audio-out0 \, obj 380 560 throw~ \$1-audio-out1
-;
-#X obj 177 -49 ggee/getdir 2;
-#X msg 177 -23 obj 10 5 declare -path \$1;
-#X obj 78 -108 trigger bang bang;
-#X connect 0 0 7 0;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X connect 5 0 6 0;
-#X connect 6 0 1 0;
-#X connect 7 0 3 0;
-#X connect 7 1 5 0;
-#X restore 384 393 pd xlets;
-#X obj 7 258 moses 1;
-#X text 55 259 no need to generate anything for 0 instances;
-#N canvas 48 22 633 512 \$0-instances 1;
-#X restore 26 61 pd \$0-instances;
-#X obj 26 32 send \$0-message;
-#X obj 161 32 throw~ \$0-audio-in;
-#X obj 163 89 catch~ \$0-audio-out1;
-#X obj 26 89 catch~ \$0-audio-out0;
-#X obj 163 114 outlet~;
-#X obj 161 8 inlet~;
-#X obj 487 282 symbol pd-\$0-instances;
-#X obj 46 280 trigger bang anything anything bang;
-#X obj 7 206 trigger anything bang bang;
-#X connect 0 0 19 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 2 0;
-#X connect 3 0 9 0;
-#X connect 4 0 3 1;
-#X connect 5 0 27 0;
-#X connect 8 0 10 0;
-#X connect 9 0 10 0;
-#X connect 11 0 1 0;
-#X connect 11 1 4 0;
-#X connect 12 0 5 0;
-#X connect 13 0 10 0;
-#X connect 14 0 10 0;
-#X connect 15 0 10 0;
-#X connect 16 1 26 0;
-#X connect 21 0 23 0;
-#X connect 22 0 6 0;
-#X connect 24 0 20 0;
-#X connect 25 0 10 1;
-#X connect 26 0 13 0;
-#X connect 26 1 11 0;
-#X connect 26 2 8 0;
-#X connect 26 3 15 0;
-#X connect 27 0 16 0;
-#X connect 27 1 14 0;
-#X connect 27 2 25 0;
diff --git a/externals/many/itest.pd b/externals/many/itest.pd
deleted file mode 100644
index cba4be673..000000000
--- a/externals/many/itest.pd
+++ /dev/null
@@ -1,19 +0,0 @@
-#N canvas 823 274 637 579 10;
-#X obj 35 508 outlet~;
-#X obj 145 508 outlet~;
-#X obj 330 505 outlet;
-#X text 371 503 bang when done;
-#X obj 29 331 tabplay~ \$3;
-#X obj 35 445 pan/equal_power_pan~;
-#X obj 29 30 inlet;
-#X obj 335 19 inlet;
-#X obj 29 247 delay;
-#X obj 29 85 unpack float float;
-#X connect 4 0 5 0;
-#X connect 4 1 2 0;
-#X connect 5 0 0 0;
-#X connect 5 1 1 0;
-#X connect 6 0 9 0;
-#X connect 8 0 4 0;
-#X connect 9 0 8 0;
-#X connect 9 1 5 1;
diff --git a/externals/many/many-meta.pd b/externals/many/many-meta.pd
deleted file mode 100644
index eacd709eb..000000000
--- a/externals/many/many-meta.pd
+++ /dev/null
@@ -1,7 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 25 49 420 300 META 1;
-#X text 13 41 NAME many;
-#X text 10 25 AUTHOR Hans-Christoph Steiner <hans@eds.org>;
-#X text 10 10 VERSION 0.0.20101128;
-#X text 10 70 LICENSE GPL-3+;
-#X restore 10 10 pd META;
diff --git a/externals/many/polypoly-voice~-help.pd b/externals/many/polypoly-voice~-help.pd
deleted file mode 100644
index 94db875bf..000000000
--- a/externals/many/polypoly-voice~-help.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X text 32 214 inlet for (note \, velocity) pairs;
-#X text 69 255 dsp-out left;
-#X text 378 255 dsp-out right;
-#X text 377 215 extra inlet to customize freely;
-#X text 96 131 Your [polypoly~] abstraction needs two inlets and two
-outlet~s. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [polypoly~] and will be passed
-on to the custom abstraction.;
-#X text 98 36 polypoly-voice~ is a basic patch here only to illustrate
-what a patch designed for [polypoly~] looks like. Feel free to use
-it as a template for your own voice patches.;
-#X obj 111 234 polypoly-voice~ 1 8 four more arguments possible;
diff --git a/externals/many/polypoly-voice~.pd b/externals/many/polypoly-voice~.pd
deleted file mode 100644
index d8e5e7a11..000000000
--- a/externals/many/polypoly-voice~.pd
+++ /dev/null
@@ -1,86 +0,0 @@
-#N canvas 403 268 423 406 10;
-#X obj 75 80 inlet;
-#X obj 147 100 inlet;
-#X obj 76 275 outlet~;
-#X obj 148 276 outlet~;
-#X text 62 54 inlet for (note \, velocity) pairs;
-#X text 74 303 left and right dsp outlet;
-#N canvas 0 0 621 566 \$0-instr 1;
-#X obj 75 80 inlet;
-#X obj 76 356 *~;
-#X obj 76 389 *~ 0.2;
-#X obj 75 247 mtof;
-#X obj 139 249 select 0;
-#X obj 75 224 unpack 0 0;
-#X obj 192 276 / 127;
-#X obj 76 295 osc~;
-#X obj 76 455 outlet~;
-#X obj 91 194 print \$1_NOTE;
-#X obj 151 456 outlet~;
-#X obj 383 237 random 100;
-#X obj 150 423 *~ 0.2;
-#X obj 77 424 *~ 0.2;
-#X text 447 286 * ~M_PI/2;
-#X obj 383 285 * 1.5708;
-#X obj 342 350 cos;
-#X obj 423 351 sin;
-#X obj 383 264 * 0.01;
-#X obj 280 349 pow -1;
-#X floatatom 280 410 5 0 0 0 - - -;
-#X floatatom 342 411 5 0 0 0 - - -;
-#X floatatom 423 411 5 0 0 0 - - -;
-#X obj 280 317 f \$2;
-#X msg 139 304 \$1 10;
-#X obj 134 362 *~;
-#X obj 134 381 *~;
-#X text 62 54 inlet for (note \, velocity) pairs;
-#X text 74 483 left and right dsp outlet;
-#X obj 383 172 loadbang;
-#X obj 257 91 inlet;
-#X obj 192 301 pack 0 500;
-#X floatatom 272 119 5 0 0 0 - - -;
-#X obj 139 340 vline~;
-#X text 382 79 loadbang can be used just fine.;
-#X obj 75 100 t a b;
-#X connect 0 0 35 0;
-#X connect 1 0 2 0;
-#X connect 2 0 13 0;
-#X connect 2 0 12 0;
-#X connect 3 0 7 0;
-#X connect 4 0 31 0;
-#X connect 4 1 6 0;
-#X connect 5 0 3 0;
-#X connect 5 1 4 0;
-#X connect 6 0 24 0;
-#X connect 7 0 1 0;
-#X connect 11 0 18 0;
-#X connect 12 0 10 0;
-#X connect 13 0 8 0;
-#X connect 15 0 16 0;
-#X connect 15 0 17 0;
-#X connect 16 0 13 1;
-#X connect 16 0 21 0;
-#X connect 17 0 12 1;
-#X connect 17 0 22 0;
-#X connect 18 0 15 0;
-#X connect 19 0 2 1;
-#X connect 19 0 20 0;
-#X connect 23 0 19 0;
-#X connect 24 0 33 0;
-#X connect 25 0 26 0;
-#X connect 25 0 26 1;
-#X connect 26 0 1 1;
-#X connect 29 0 11 0;
-#X connect 29 0 23 0;
-#X connect 30 0 31 1;
-#X connect 30 0 32 0;
-#X connect 31 0 33 0;
-#X connect 33 0 25 0;
-#X connect 33 0 25 1;
-#X connect 35 0 5 0;
-#X restore 75 223 pd \$0-instr;
-#X text 129 76 extra inlet;
-#X connect 0 0 6 0;
-#X connect 1 0 6 1;
-#X connect 6 0 2 0;
-#X connect 6 1 3 0;
diff --git a/externals/many/polypoly-wrap~-help.pd b/externals/many/polypoly-wrap~-help.pd
deleted file mode 100644
index 43330fd6f..000000000
--- a/externals/many/polypoly-wrap~-help.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 137 124 450 300 10;
-#X text 60 100 [polypoly~-wrap] is an object used by [polypoly~] to handle
-the voice allocation logic for each patch that [polypoly~] is instantiating.
-It is not a patch that has any use outside of how [polypoly~] uses it
-internally.;
diff --git a/externals/many/polypoly-wrap~.pd b/externals/many/polypoly-wrap~.pd
deleted file mode 100644
index 66c3fd4d5..000000000
--- a/externals/many/polypoly-wrap~.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 366 494 450 300 10;
-#X obj 45 26 inlet;
-#X obj 45 204 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 96 166 outlet;
-#X obj 222 22 inlet;
-#X text 12 5 nqpwrap (v4) - pix.test.at;
-#X text 252 126 this object is used by nqpoly;
-#X obj 45 137 route \$2;
-#X obj 129 237 outlet~;
-#X obj 223 235 outlet~;
-#X connect 0 0 6 0;
-#X connect 1 0 7 0;
-#X connect 1 1 8 0;
-#X connect 3 0 1 1;
-#X connect 6 0 1 0;
-#X connect 6 1 2 0;
diff --git a/externals/many/polypoly~-help.pd b/externals/many/polypoly~-help.pd
deleted file mode 100644
index e6f1bee25..000000000
--- a/externals/many/polypoly~-help.pd
+++ /dev/null
@@ -1,56 +0,0 @@
-#N canvas 145 22 616 708 10;
-#X msg 147 185 bang;
-#X obj 147 263 makenote 80 1000;
-#X obj 147 298 pack 0 0;
-#X obj 147 208 random 30;
-#X obj 147 237 + 40;
-#X msg 269 211 40 \, 44 \, 56 \, 60;
-#X obj 200 167 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X obj 200 187 metro 100;
-#X text 50 559 inlet for (note \, velocity) pairs;
-#X text 87 600 dsp-out left;
-#X text 396 600 dsp-out right;
-#X text 55 85 Arguments: <max polyphony> <voice stealing 0/1> <poly-abstraction
-name> <arg1> <arg2> <arg3> <arg4>;
-#X text 96 635 Thanks to Cesare Marilungo for inspiration.;
-#X text 17 20 [polypoly~];
-#X text 55 669 Also see:;
-#X obj 127 668 poly;
-#X floatatom 228 315 5 0 0 2 decay - -;
-#X floatatom 283 264 5 0 0 0 - - -;
-#X text 427 322 recreate all abstractions;
-#X text 395 560 extra inlet to customize freely;
-#X text 186 339 custom inlet;
-#X text 53 157 Example:;
-#X text 96 470 Your [polypoly~] abstraction needs two inlets and two
-outlet~s. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [polypoly~] and will be passed
-on to the custom abstraction.;
-#X text 54 121 Inlets: <pair: note velocity> <custom> <pair: num abstraction_name>
-;
-#X msg 96 318 clear;
-#X msg 60 318 stop;
-#X text 55 44 [poly]-clone which automatically creates abstractions
-to be played based heavily on [polypoly] by Frank Barknecht.;
-#X obj 153 406 output~;
-#X obj 129 579 polypoly-voice~ 1 8 four more arguments possible;
-#X msg 310 323 12 polypoly-voice~;
-#X obj 147 361 polypoly~ 12 1 polypoly-voice~;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 1 2 1;
-#X connect 2 0 30 0;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X connect 5 0 1 0;
-#X connect 6 0 7 0;
-#X connect 7 0 3 0;
-#X connect 16 0 30 1;
-#X connect 17 0 1 2;
-#X connect 24 0 30 0;
-#X connect 25 0 30 0;
-#X connect 29 0 30 2;
-#X connect 30 0 27 0;
-#X connect 30 1 27 1;
diff --git a/externals/many/polypoly~.pd b/externals/many/polypoly~.pd
deleted file mode 100644
index f20b58846..000000000
--- a/externals/many/polypoly~.pd
+++ /dev/null
@@ -1,198 +0,0 @@
-#N canvas 152 148 939 654 10;
-#X obj 36 31 inlet;
-#X obj 292 200 moses 1;
-#X text 555 67 your abstraction is ultimately called with the parameters:
-<index> <number of objects> <arg1> <arg2> <arg3> <arg4>;
-#N canvas 7 455 362 318 \$0-poly 0;
-#X restore 36 254 pd \$0-poly;
-#X obj 36 227 s \$0-in1;
-#N canvas 220 112 751 428 init 0;
-#X obj 197 139 symbol \$0-poly;
-#X obj 197 163 makefilename pd-%s;
-#X obj 197 187 pack s \$0;
-#X msg 204 118 bang;
-#X text 154 317 This will clear the subpatch and create fake "in/outlets"
-as senders and receivers.;
-#X obj 103 206 s \$0-subname;
-#X obj 197 92 b;
-#X obj 197 69 r \$0-init;
-#X msg 197 230 \; \$1 clear \; \$1 obj 50 60 r \$2-in1 \; \$1 obj 199
-60 r \$2-in2 \; \$1 obj 50 200 throw~ \$2-out0 \; \$1 obj 199 200 throw~
-\$2-out1 \;;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 2 0 8 0;
-#X connect 3 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 6 0;
-#X restore 343 108 pd init;
-#X obj 139 31 inlet;
-#X obj 256 63 loadbang;
-#N canvas 0 22 692 559 last-two 0;
-#X obj 153 175 cnv 15 150 80 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X text 378 110 first reset (b) \, then set new length (f).;
-#X text 311 195 Right outlet is responsible to first fill the list
-;
-#X text 312 211 Left outlet then only lets the smaller list pass.;
-#X obj 180 183 list;
-#X obj 228 113 inlet;
-#X obj 180 149 inlet;
-#X obj 180 302 outlet;
-#X obj 180 228 list split 2;
-#X obj 228 149 b;
-#X connect 4 0 8 0;
-#X connect 5 0 9 0;
-#X connect 6 0 4 0;
-#X connect 8 0 4 1;
-#X connect 8 0 7 0;
-#X connect 8 2 4 1;
-#X connect 9 0 4 1;
-#X restore 386 521 pd last-two;
-#X obj 386 562 list prepend;
-#X msg 386 589 \; \$1 connect \$3 0 \$2 0 \;;
-#X obj 465 541 r \$0-subname;
-#N canvas 183 178 858 457 finish 0;
-#X obj 121 185 until;
-#X obj 156 212 + 1;
-#X obj 121 284 list prepend;
-#X obj 121 162 t a b;
-#X obj 200 255 r \$0-subname;
-#X obj 452 126 r \$0-subname;
-#X obj 77 31 inlet;
-#X obj 77 67 moses 1;
-#X text 412 238 Connect [r \$0-in1] to first object's first inlet;
-#X obj 168 185 4;
-#X obj 121 211 f 4;
-#X text 167 163 first 4 objects are xlets;
-#X msg 415 196 \; \$1 connect 0 0 4 0 \;;
-#X msg 121 318 \; \$1 connect 1 0 \$2 1 \; \$1 connect \$2 1 2 0 \;
-\$1 connect \$2 2 3 0 \;;
-#X obj 415 165 symbol;
-#X obj 121 98 t a b;
-#X text 276 344 Connect all wrapper's middle signal outlet to [s~ \$0-out0]
-;
-#X text 276 330 Connect all wrapper's right inlet to [r \$0-in2];
-#X text 276 359 Connect all wrapper's left signal outlet to [s~ \$0-out1]
-;
-#X connect 0 0 10 0;
-#X connect 1 0 10 1;
-#X connect 2 0 13 0;
-#X connect 3 0 0 0;
-#X connect 3 1 9 0;
-#X connect 4 0 2 1;
-#X connect 5 0 14 1;
-#X connect 6 0 7 0;
-#X connect 7 1 15 0;
-#X connect 9 0 10 1;
-#X connect 10 0 1 0;
-#X connect 10 0 2 0;
-#X connect 14 0 12 0;
-#X connect 15 0 3 0;
-#X connect 15 1 14 0;
-#X restore 274 260 pd finish;
-#X text 600 134 based on: nqpoly (v4) - pix.test.at;
-#X obj 343 135 s \$0-init;
-#X obj 458 494 r \$0-init;
-#X text 600 158 changes: fbar at footils.org 2006;
-#X msg 405 444 \; \$2 obj 50 100 polypoly-wrap~ \$3 \$1 \$4 \$5 \$6
-\$7 \$8 \;;
-#X obj 256 135 t b a a a b;
-#X obj 386 273 t a a b;
-#X obj 343 31 inlet;
-#X obj 36 167 pack 0 0 0;
-#X obj 36 140 - 1;
-#X obj 36 344 outlet~;
-#X obj 454 306 symbol \$3;
-#X obj 405 417 list append \$4 \$5 \$6 \$7;
-#X obj 386 494 + 4;
-#X obj 139 344 outlet~;
-#X obj 36 287 catch~ \$0-out0;
-#X obj 139 287 catch~ \$0-out1;
-#X text 555 30 usage: polypoly~ <number of objects> <voice stealing:
-0/1> <abstraction name> <up to 4 creation args>;
-#X obj 36 113 poly \$1 \$2;
-#N canvas 0 22 382 282 loadbang 0;
-#X obj 130 64 inlet;
-#X obj 130 86 b;
-#X msg 130 141 \; \$1 loadbang;
-#X obj 167 86 r \$0-subname;
-#X obj 130 113 symbol;
-#X connect 0 0 1 0;
-#X connect 1 0 4 0;
-#X connect 3 0 4 1;
-#X connect 4 0 2 0;
-#X restore 256 287 pd loadbang;
-#X obj 139 227 s \$0-in2;
-#N canvas 0 22 227 234 countto 0;
-#X obj 60 97 until;
-#X obj 95 124 + 1;
-#X obj 60 124 f;
-#X obj 107 97 0;
-#X obj 60 77 t a b;
-#X obj 60 54 inlet;
-#X obj 60 145 outlet;
-#X connect 0 0 2 0;
-#X connect 1 0 2 1;
-#X connect 2 0 1 0;
-#X connect 2 0 6 0;
-#X connect 3 0 2 1;
-#X connect 4 0 0 0;
-#X connect 4 1 3 0;
-#X connect 5 0 4 0;
-#X restore 386 246 pd countto;
-#N canvas 183 272 316 307 expandpath 0;
-#X obj 59 16 inlet;
-#X obj 55 271 outlet;
-#X obj 59 98 list append;
-#X msg 58 153 symbol \$1/\$2;
-#X obj 59 43 trigger bang anything;
-#X obj 58 67 ggee/getdir 2;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 5 0;
-#X connect 4 1 2 1;
-#X connect 5 0 2 0;
-#X restore 454 328 pd expandpath;
-#X obj 343 58 unpack float symbol;
-#X obj 448 359 receive \$0-subname;
-#X obj 405 390 pack 0 symbol symbol 0;
-#X obj 534 216 float;
-#X obj 256 108 float \$1;
-#X connect 0 0 31 0;
-#X connect 1 1 34 0;
-#X connect 6 0 33 0;
-#X connect 7 0 40 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 11 0 9 1;
-#X connect 15 0 8 1;
-#X connect 18 0 32 0;
-#X connect 18 1 12 0;
-#X connect 18 2 1 0;
-#X connect 18 3 39 0;
-#X connect 18 4 14 0;
-#X connect 19 0 26 0;
-#X connect 19 1 38 0;
-#X connect 19 2 24 0;
-#X connect 20 0 36 0;
-#X connect 21 0 4 0;
-#X connect 22 0 21 0;
-#X connect 24 0 35 0;
-#X connect 25 0 17 0;
-#X connect 26 0 8 0;
-#X connect 28 0 23 0;
-#X connect 29 0 27 0;
-#X connect 31 0 22 0;
-#X connect 31 1 21 1;
-#X connect 31 2 21 2;
-#X connect 34 0 19 0;
-#X connect 35 0 38 2;
-#X connect 36 0 40 0;
-#X connect 36 1 24 0;
-#X connect 37 0 38 1;
-#X connect 38 0 25 0;
-#X connect 39 0 38 3;
-#X connect 40 0 18 0;
diff --git a/externals/many/rawpoly-test.pd b/externals/many/rawpoly-test.pd
deleted file mode 100644
index b507ce065..000000000
--- a/externals/many/rawpoly-test.pd
+++ /dev/null
@@ -1,17 +0,0 @@
-#N canvas 372 366 450 300 10;
-#X text 53 202 beeware of loadbangs when dynamically adding instances
-using the 3rd inlet! Everytime a new instance is created \, all instances
-will receive a loadbang!;
-#X msg 218 113 7;
-#X msg 185 113 3;
-#X msg 249 112 9;
-#X text 279 112 control instances;
-#X obj 113 138 rawpoly 5 itest;
-#X text 27 21 inlet0: routed to each instance based on instance number
-;
-#X text 27 41 inlet1: connected directly to each instance;
-#X text 27 61 outlet~0: connected directly to each instance;
-#X text 27 81 outlet1: connected directly to each instance;
-#X connect 1 0 5 2;
-#X connect 2 0 5 2;
-#X connect 3 0 5 2;
diff --git a/externals/many/rawpoly.pd b/externals/many/rawpoly.pd
deleted file mode 100644
index c81127ae9..000000000
--- a/externals/many/rawpoly.pd
+++ /dev/null
@@ -1,185 +0,0 @@
-#N canvas 820 73 679 577 10;
-#X obj 26 8 inlet;
-#X obj 196 378 until;
-#X obj 234 403 + 1;
-#N canvas 169 250 601 588 \$0-poly 0;
-#X restore 26 61 pd \$0-poly;
-#X obj 196 403 float;
-#X obj 26 32 send \$0-in1;
-#X obj 100 8 inlet;
-#X obj 100 32 send \$0-in2;
-#X obj 214 246 float \$1;
-#X obj 126 113 outlet;
-#X obj 126 88 receive \$0-message;
-#X obj 26 89 catch~ \$0-audio;
-#X obj 26 113 outlet~;
-#X text 102 62 <-- open this subpatch to see the instances;
-#N canvas 452 457 572 467 create 0;
-#X obj 29 10 inlet;
-#X obj 173 153 list trim;
-#X obj 202 60 symbol \$2;
-#X obj 155 61 * 20;
-#X obj 173 132 list append \$3 \$4 \$5 \$6 \$7;
-#X obj 173 409 outlet;
-#X obj 173 174 trigger anything anything;
-#X obj 155 83 + 30;
-#X msg 186 281 connect 0 0 \$1 0;
-#X obj 92 62 * 2;
-#X obj 92 85 + 4;
-#X obj 29 192 pack float float;
-#X obj 29 62 * 2;
-#X obj 29 85 + 5;
-#X msg 294 281 connect \$1 0 \$2 0;
-#X msg 74 261 connect \$1 1 \$2 0;
-#X msg 186 261 connect 1 0 \$2 1;
-#X msg 294 260 connect \$2 1 3 0;
-#X msg 74 281 connect \$2 0 2 0;
-#X obj 350 84 makefilename $%d;
-#X msg 350 62 1;
-#X obj 173 108 pack float symbol float symbol;
-#X obj 29 37 trigger anything anything anything bang anything bang
-;
-#X msg 168 196 obj 125 \$1 route \$3 all;
-#X msg 320 196 obj 210 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X connect 0 0 22 0;
-#X connect 1 0 6 0;
-#X connect 2 0 21 1;
-#X connect 3 0 7 0;
-#X connect 4 0 1 0;
-#X connect 6 0 23 0;
-#X connect 6 1 24 0;
-#X connect 7 0 21 0;
-#X connect 8 0 5 0;
-#X connect 9 0 10 0;
-#X connect 10 0 11 1;
-#X connect 11 0 8 0;
-#X connect 11 0 14 0;
-#X connect 11 0 15 0;
-#X connect 11 0 16 0;
-#X connect 11 0 17 0;
-#X connect 11 0 18 0;
-#X connect 12 0 13 0;
-#X connect 13 0 11 0;
-#X connect 14 0 5 0;
-#X connect 15 0 5 0;
-#X connect 16 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 5 0;
-#X connect 19 0 21 3;
-#X connect 20 0 19 0;
-#X connect 21 0 4 0;
-#X connect 22 0 12 0;
-#X connect 22 1 9 0;
-#X connect 22 2 3 0;
-#X connect 22 3 2 0;
-#X connect 22 4 21 2;
-#X connect 22 5 20 0;
-#X connect 23 0 5 0;
-#X connect 24 0 5 0;
-#X restore 196 450 pd create and link instances;
-#X obj 458 530 send;
-#X msg 136 450 loadbang;
-#X msg 440 449 clear;
-#N canvas 973 300 625 362 xlets 0;
-#X obj 137 -89 inlet;
-#X obj 277 175 outlet;
-#X text 190 -84 This will create fake "in/outlets" as senders and receivers.
-;
-#X msg 137 -59 0;
-#X obj 477 28 makefilename $%d-in1;
-#X obj 337 28 makefilename $%d-in2;
-#X obj 187 28 makefilename $%d-audio;
-#X obj 27 28 makefilename $%d-message;
-#X obj 277 133 list prepend obj;
-#X obj 277 153 list trim;
-#X msg 27 49 480 560 send \$1;
-#X msg 187 49 10 560 throw~ \$1;
-#X msg 337 49 500 10 receive \$1;
-#X msg 477 49 10 10 receive \$1;
-#X obj 137 -36 trigger float float float float;
-#X connect 0 0 3 0;
-#X connect 3 0 14 0;
-#X connect 4 0 13 0;
-#X connect 5 0 12 0;
-#X connect 6 0 11 0;
-#X connect 7 0 10 0;
-#X connect 8 0 9 0;
-#X connect 9 0 1 0;
-#X connect 10 0 8 0;
-#X connect 11 0 8 0;
-#X connect 12 0 8 0;
-#X connect 13 0 8 0;
-#X connect 14 0 7 0;
-#X connect 14 1 6 0;
-#X connect 14 2 5 0;
-#X connect 14 3 4 0;
-#X restore 376 449 pd xlets;
-#X obj 330 10 inlet;
-#X obj 214 268 moses 1;
-#X obj 122 214 moses;
-#X obj 505 449 symbol pd-\$0-poly;
-#X obj 280 404 moses;
-#X msg 223 356 bang;
-#X msg 323 347 0;
-#X obj 376 425 trigger bang bang bang;
-#X obj 142 327 trigger bang bang anything;
-#X obj 253 292 trigger anything bang;
-#X obj 117 175 trigger 0 0;
-#N canvas 0 22 519 307 warning 0;
-#X obj 70 17 inlet;
-#X obj 383 18 inlet;
-#X obj 44 260 print rawpoly_WARNING;
-#X msg 62 122 inlet value less than current instance count- reseting
-all instances!;
-#X msg 116 65 inlet value equal to current instance count- ignoring!
-;
-#X connect 0 0 3 0;
-#X connect 1 0 4 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X restore 92 275 pd warning;
-#X obj 214 224 loadbang;
-#X text 22 507 Beware of loadbangs when dynamically adding instances
-using the 3rd inlet! Everytime a new instance is created \, all instances
-will receive a loadbang!;
-#X obj 207 426 print;
-#X obj 149 255 select;
-#X connect 0 0 5 0;
-#X connect 1 0 4 0;
-#X connect 2 0 23 0;
-#X connect 2 0 4 1;
-#X connect 4 0 2 0;
-#X connect 4 0 14 0;
-#X connect 4 0 33 0;
-#X connect 6 0 7 0;
-#X connect 8 0 20 0;
-#X connect 10 0 9 0;
-#X connect 11 0 12 0;
-#X connect 14 0 15 0;
-#X connect 16 0 15 0;
-#X connect 17 0 15 0;
-#X connect 18 0 15 0;
-#X connect 19 0 29 0;
-#X connect 20 1 28 0;
-#X connect 21 0 30 0;
-#X connect 21 0 8 0;
-#X connect 21 1 34 0;
-#X connect 22 0 15 1;
-#X connect 23 1 24 0;
-#X connect 24 0 1 1;
-#X connect 25 0 4 1;
-#X connect 26 0 18 0;
-#X connect 26 1 17 0;
-#X connect 26 2 22 0;
-#X connect 27 0 16 0;
-#X connect 27 1 1 0;
-#X connect 27 2 23 1;
-#X connect 28 0 27 0;
-#X connect 28 1 26 0;
-#X connect 28 1 25 0;
-#X connect 29 0 21 1;
-#X connect 29 0 34 1;
-#X connect 29 1 21 0;
-#X connect 31 0 8 0;
-#X connect 34 0 30 1;
-#X connect 34 1 27 0;
diff --git a/externals/many/voices-template~-help.pd b/externals/many/voices-template~-help.pd
deleted file mode 100644
index 3a28f3dcd..000000000
--- a/externals/many/voices-template~-help.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#N canvas 204 154 602 360 10;
-#X text 72 274 dsp-out left;
-#X text 222 271 dsp-out right;
-#X text 35 233 inlet for messages routed to voices;
-#X text 80 35 voices-template~ is a basic patch here only to illustrate
-what a patch designed for [voices~] looks like. Feel free to use it
-as a template for your own patches for [voices~].;
-#X obj 110 254 voices-template~ 1 8 four more arguments possible;
-#X text 370 234 inlet for messages to all voices;
-#X text 368 273 bang when done;
-#X text 82 100 Your [voices~] abstraction needs two [inlet]s for input
-\, two [outlet~]s for audio \, and a third [outlet] for voice allocation
-control. First argument will be the voice index number starting from
-0 \, second argument will be the total number of voices. Four more
-arguments can be passed as arguments to [voices~] and will be passed
-on to the custom abstraction.;
diff --git a/externals/many/voices-template~.pd b/externals/many/voices-template~.pd
deleted file mode 100644
index c4341a601..000000000
--- a/externals/many/voices-template~.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#N canvas 244 339 552 361 10;
-#X obj 54 11 inlet;
-#X obj 54 324 outlet~;
-#X obj 228 325 outlet~;
-#X obj 365 323 outlet;
-#X text 416 322 bang when done;
-#X obj 243 9 inlet;
-#X text 286 12 messages for all voices;
-#X obj 56 113 print voices~_\$1;
-#X text 65 57 messages filtered by voice allocation for a single instance
-;
-#X connect 0 0 7 0;
diff --git a/externals/many/voices-wrap~-help.pd b/externals/many/voices-wrap~-help.pd
deleted file mode 100644
index 43330fd6f..000000000
--- a/externals/many/voices-wrap~-help.pd
+++ /dev/null
@@ -1,5 +0,0 @@
-#N canvas 137 124 450 300 10;
-#X text 60 100 [polypoly~-wrap] is an object used by [polypoly~] to handle
-the voice allocation logic for each patch that [polypoly~] is instantiating.
-It is not a patch that has any use outside of how [polypoly~] uses it
-internally.;
diff --git a/externals/many/voices-wrap~.pd b/externals/many/voices-wrap~.pd
deleted file mode 100644
index c9a0c9514..000000000
--- a/externals/many/voices-wrap~.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#N canvas 366 494 452 327 10;
-#X obj 45 26 inlet;
-#X obj 45 177 spigot;
-#X obj 192 274 spigot;
-#X obj 25 249 \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9;
-#X obj 22 301 outlet;
-#X obj 260 23 inlet;
-#X msg 67 124 0 1;
-#X msg 105 125 1 0;
-#X text 252 156 this object is used by nqpoly5;
-#X text 12 5 nqpwrap5 - pix.test.at;
-#X obj 45 64 trigger anything anything;
-#X obj 25 226 trigger anything bang;
-#X obj 105 100 loadbang;
-#X obj 78 155 unpack float float;
-#X obj 85 301 outlet~;
-#X text 213 298 strange ordering to make dynamic patching esaier;
-#X obj 161 301 outlet~;
-#X connect 0 0 10 0;
-#X connect 1 0 11 0;
-#X connect 2 0 4 0;
-#X connect 3 0 14 0;
-#X connect 3 1 16 0;
-#X connect 3 2 7 0;
-#X connect 5 0 3 1;
-#X connect 6 0 13 0;
-#X connect 7 0 13 0;
-#X connect 10 0 1 0;
-#X connect 10 1 2 0;
-#X connect 11 0 3 0;
-#X connect 11 1 6 0;
-#X connect 12 0 7 0;
-#X connect 13 0 1 1;
-#X connect 13 1 2 1;
diff --git a/externals/many/voices~-help.pd b/externals/many/voices~-help.pd
deleted file mode 100644
index b9b131c80..000000000
--- a/externals/many/voices~-help.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#N canvas 281 60 588 471 10;
-#X text 100 423 dsp-out left;
-#X text 236 420 dsp-out right;
-#X text 25 383 inlet for messages routed to instances;
-#X obj 219 318 output~;
-#X obj 168 249 list prepend;
-#X obj 237 228 hradio 15 1 1 5 empty empty empty 0 -8 0 10 -203904
--1 -1 4;
-#X obj 171 203 hsl 128 15 200 500 1 1 empty empty empty -2 -8 0 10
--261682 -1 -1 6600 0;
-#X obj 134 142 loadbang;
-#X msg 134 166 0 200 \, 1 300 \, 2 400 \, 3 500 \, 4 100;
-#X text 27 71 outlet~0: connected directly to each instance;
-#X text 27 91 outlet~1: connected directly to each instance;
-#X obj 321 293 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 27 21 inlet0: routed to each instance based on instance number
-;
-#X text 27 41 inlet1: connected directly to each instance;
-#X text 27 111 outlet:;
-#X text 321 384 inlet for messages to all instances;
-#X obj 168 272 voices~ 5 voices-template~;
-#X text 339 292 message overflow (i.e. out of voices);
-#X obj 128 404 voices-template~ 1 8 four more arguments possible;
-#X text 388 423 bang when done;
-#X connect 4 0 16 0;
-#X connect 5 0 4 1;
-#X connect 6 0 4 0;
-#X connect 7 0 8 0;
-#X connect 8 0 16 0;
-#X connect 16 0 3 0;
-#X connect 16 1 3 1;
-#X connect 16 2 11 0;
diff --git a/externals/many/voices~.pd b/externals/many/voices~.pd
deleted file mode 100644
index e2061fed4..000000000
--- a/externals/many/voices~.pd
+++ /dev/null
@@ -1,176 +0,0 @@
-#N canvas 361 57 694 548 10;
-#X obj 26 8 inlet;
-#X obj 256 209 outlet;
-#N canvas 539 471 610 407 finish 0;
-#X obj 77 180 until;
-#X obj 127 206 + 1;
-#X text 210 158 first 3 objects are xlets;
-#X obj 38 26 inlet;
-#X obj 38 62 moses 1;
-#X obj 77 157 trigger anything bang;
-#X text 15 363 Connect all wrapper object's right inlet to [receive
-\$0-in2];
-#X text 360 282 Connect final object to [send \$0-out];
-#X msg 200 177 5;
-#X obj 373 207 + 4;
-#X obj 372 333 outlet;
-#X msg 483 228 connect 0 0 5 0;
-#X msg 373 227 connect \$1 0 4 0;
-#X obj 77 93 trigger anything anything bang;
-#X msg 144 249 connect 1 0 \$1 1;
-#X obj 77 206 float;
-#X connect 0 0 15 0;
-#X connect 1 0 15 1;
-#X connect 3 0 4 0;
-#X connect 4 1 13 0;
-#X connect 5 0 0 0;
-#X connect 5 1 8 0;
-#X connect 8 0 15 1;
-#X connect 9 0 12 0;
-#X connect 11 0 10 0;
-#X connect 12 0 10 0;
-#X connect 13 0 5 0;
-#X connect 13 1 9 0;
-#X connect 13 2 11 0;
-#X connect 14 0 10 0;
-#X connect 15 0 1 0;
-#X connect 15 0 14 0;
-#X restore 106 443 pd finish;
-#X obj 26 67 send \$0-in1;
-#X obj 100 8 inlet;
-#X obj 100 67 send \$0-in2;
-#X obj 26 208 outlet~;
-#X text 122 97 <-- open this subpatch to see the instances;
-#N canvas 138 22 601 588 \$0-voices~ 0;
-#X restore 26 96 pd \$0-voices~;
-#X obj 136 209 outlet~;
-#X obj 26 124 catch~ \$0-audioL;
-#X obj 136 124 catch~ \$0-audioR;
-#X obj 256 124 receive \$0-voicemsg;
-#X obj 168 386 until;
-#X obj 206 413 + 1;
-#X obj 168 413 float;
-#X msg 207 386 0;
-#X obj 27 261 float \$1;
-#X obj 536 514 send;
-#X obj 168 358 trigger 0 bang;
-#X obj 27 239 loadbang;
-#X msg 46 443 loadbang;
-#X msg 509 443 clear;
-#N canvas 73 546 512 291 xlets 0;
-#X obj 70 -124 inlet;
-#X obj 70 70 outlet;
-#X text 101 -86 This will create fake "in/outlets" as senders and receivers.
-;
-#X obj 70 -32 float \$0;
-#X msg 70 -6 obj 10 10 receive \$1-in1 \, obj 400 10 receive \$1-in2
-\, obj 10 560 throw~ \$1-audioL \, obj 380 560 throw~ \$1-audioR \,
-obj 500 560 send \$1-voicemsg;
-#X connect 0 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 1 0;
-#X restore 444 443 pd xlets;
-#X obj 27 285 moses 1;
-#X text 79 283 no need to generate anything for 0 instances;
-#X obj 557 442 symbol pd-\$0-voices~;
-#N canvas 1048 429 450 300 connect 0;
-#X obj 89 17 inlet;
-#X obj 89 102 + 5;
-#X obj 89 248 outlet;
-#X msg 89 123 connect \$1 1 2 0 \, connect \$1 2 3 0;
-#X connect 0 0 1 0;
-#X connect 1 0 3 0;
-#X connect 3 0 2 0;
-#X restore 340 443 pd connect xlets;
-#X obj 10 241 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#N canvas 934 484 551 402 create+connect 0;
-#X obj 29 10 inlet;
-#X obj 167 139 list append \$3 \$4 \$5 \$6;
-#X obj 347 69 float \$1;
-#X obj 224 93 + 30;
-#X obj 29 181 + 5;
-#X obj 281 70 symbol \$2;
-#N canvas 40 466 316 307 expandpath 0;
-#X obj 59 16 inlet;
-#X obj 55 271 outlet;
-#X obj 59 98 list append;
-#X msg 58 153 symbol \$1/\$2;
-#X obj 59 43 trigger bang anything;
-#X obj 58 67 ggee/getdir 3;
-#X connect 0 0 4 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 4 0 5 0;
-#X connect 4 1 2 1;
-#X connect 5 0 2 0;
-#X restore 281 90 pd expandpath;
-#X obj 225 347 outlet;
-#X obj 167 115 pack float float symbol float;
-#X obj 224 71 * 50;
-#X msg 167 166 obj 100 \$2 voices-wrap~ \$3 \$1 \$4 \$5 \$6 \$7 \$8
-;
-#X msg 39 296 connect \$1 1 2 0;
-#X msg 29 318 connect \$1 2 3 0;
-#X obj 77 226 pack float float;
-#X obj 29 37 trigger anything anything anything anything bang bang
-;
-#X obj 111 184 + 4;
-#X msg 77 248 connect \$2 0 \$1 0;
-#X obj 38 203 moses 6;
-#X connect 0 0 14 0;
-#X connect 1 0 10 0;
-#X connect 2 0 8 3;
-#X connect 3 0 8 1;
-#X connect 4 0 11 0;
-#X connect 4 0 12 0;
-#X connect 4 0 17 0;
-#X connect 5 0 6 0;
-#X connect 6 0 8 2;
-#X connect 8 0 1 0;
-#X connect 9 0 3 0;
-#X connect 10 0 7 0;
-#X connect 11 0 7 0;
-#X connect 12 0 7 0;
-#X connect 13 0 16 0;
-#X connect 14 0 4 0;
-#X connect 14 1 15 0;
-#X connect 14 2 8 0;
-#X connect 14 3 9 0;
-#X connect 14 4 5 0;
-#X connect 14 5 2 0;
-#X connect 15 0 13 1;
-#X connect 16 0 7 0;
-#X connect 17 1 13 0;
-#X restore 168 443 pd create+connect instances;
-#X obj 66 307 trigger bang anything anything anything bang bang bang
-;
-#X connect 0 0 3 0;
-#X connect 2 0 18 0;
-#X connect 4 0 5 0;
-#X connect 10 0 6 0;
-#X connect 11 0 9 0;
-#X connect 12 0 1 0;
-#X connect 13 0 15 0;
-#X connect 14 0 15 1;
-#X connect 15 0 14 0;
-#X connect 15 0 29 0;
-#X connect 16 0 15 1;
-#X connect 17 0 24 0;
-#X connect 19 0 13 0;
-#X connect 19 1 16 0;
-#X connect 20 0 17 0;
-#X connect 21 0 18 0;
-#X connect 22 0 18 0;
-#X connect 23 0 18 0;
-#X connect 24 1 30 0;
-#X connect 26 0 18 1;
-#X connect 27 0 18 0;
-#X connect 28 0 17 0;
-#X connect 29 0 18 0;
-#X connect 30 0 21 0;
-#X connect 30 1 2 0;
-#X connect 30 2 19 0;
-#X connect 30 4 23 0;
-#X connect 30 5 22 0;
-#X connect 30 6 26 0;
diff --git a/externals/pd-l2ork-TODO.txt b/externals/pd-l2ork-TODO.txt
index af5e98beb..0aa7df76e 100644
--- a/externals/pd-l2ork-TODO.txt
+++ b/externals/pd-l2ork-TODO.txt
@@ -1,3 +1,31 @@
+New Pd-l2ork TODO
+-----------------
+
+[x] Remove all libs that _obviously_ are not included in LIB_TARGETS of externals/Makefile, which
+    don't get built from tar_em_up.sh, and which aren't leveraging Flext
+[ ] Figure out flatspace dependencies and whether we want to support any of them going forward (probably not)
+[ ] Get rid of Flext-based libs that aren't being built
+[ ] Get rid of Flext
+[ ] Check duplicates like
+    * externals/signal and pd/extra/etc.
+    * externals/loaders and externals/import and pd/src/import.c
+    * io and whatever else
+    * grh and grill (and perhaps both can be removed)
+    * pdp_opencv and pix_opencv and whatever is in Gem that might be another dup
+    * check if footils is being used
+    figure out which are currently getting build and get rid of the other ones
+[ ] Check interesting remaining libs like
+    * mmonoplayer
+    * various stuff in tb
+    * rhythm _estimator
+    * supercollider
+    * dfx
+    * deprecated
+    See if we want to keep/maintain any of it and whether it even compiles
+
+Old Pd-l2ork TODO
+-----------------
+
 Diff status between pd-l2ork externals source tree and main community pd svn
 AS OF November 14, 2014
 
diff --git a/externals/pdvjtools/Makefile b/externals/pdvjtools/Makefile
deleted file mode 100644
index c1dfef4a5..000000000
--- a/externals/pdvjtools/Makefile
+++ /dev/null
@@ -1,176 +0,0 @@
-# To use this Makefile for your project, first put the name of your library in
-# LIBRARY_NAME variable. The folder for your project should have the same name
-# as your library.
-LIBRARY_NAME = pdvjtools
-
-# exclude videogrid for now since it doesn't build with ffmpeg from Debian/stable
-CSOURCES = colorgrid/colorgrid.c pdp_freeframe/pdp_freeframe.c pdp_frei0r/pdp_frei0r.c
-CXXSOURCES = pix_preview/pix_preview.cc videogrid/videogrid.cc
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-CSOURCES_Darwin =
-CXXSOURCES_Darwin =
-
-CSOURCES_Linux = 
-CXXSOURCES_Linux = 
-
-CSOURCES_Windows = 
-CXXSOURCES_Windows = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-objectsdir = $(PD_PATH)/extra
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g -I../pdp/include -I../../Gem/src -I/usr/include/ffmpeg
-
-LDFLAGS = 
-LIBS = -lavcodec -lavformat -lavutil -lswscale -lquicktime -lstdc++ 
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    CSOURCES += $(CSOURCES_Darwin)
-    CXXSOURCES += $(CXXSOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-  else # Mac OS X
-    CSOURCES += $(CXXSOURCES_Darwin)
-    CXXSOURCES += $(CXXSOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = macosx
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-    FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    LIBS += -lc 
-    STRIP = strip -x
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CSOURCES += $(CSOURCES_Linux)
-  CXXSOURCES += $(CXXSOURCES_Linux)
-  EXTENSION = pd_linux
-  OS = linux
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CSOURCES += 
-  CXXSOURCES += 
-  EXTENSION = dll
-  OS = cygwin
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L$(PD_PATH)/src
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CSOURCES += $(CSOURCES_Windows)
-  CXXSOURCES += $(CXXSOURCES_Windows)
-  EXTENSION = dll
-  OS = windows
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  WINDOWS_HACKS = -D'O_NONBLOCK=1'
-  CFLAGS += -mms-bitfields $(WINDOWS_HACKS)
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L$(PD_PATH)/src -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install install-doc install-exec clean dist etags
-
-all: $(CSOURCES:.c=.$(EXTENSION)) $(CXXSOURCES:.cc=.$(EXTENSION))
-
-%.$(EXTENSION): %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-%.$(EXTENSION): %.cc
-	$(CXX) $(CFLAGS) -o "$*.o" -c "$*.cc"
-	$(CXX) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-install: all install-doc install-exec
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(LIBRARY_NAME)-meta.pd $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CSOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CXXSOURCES:.cc=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(CSOURCES:.c=.$(EXTENSION)))
-	$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(CXXSOURCES:.cc=.$(EXTENSION)))
-
-install-doc:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CSOURCES:.c=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(CXXSOURCES:.cc=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p README $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	install -m644 -p VERSION $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/VERSION.txt
-	install -m644 -p CHANGES $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/CHANGES.txt
-
-install-exec:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-#	install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-
-clean:
-	-rm -f -- $(CSOURCES:.c=.o)
-	-rm -f -- $(CXXSOURCES:.cc=.o)
-	-rm -f -- $(CSOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(CXXSOURCES:.cc=.$(EXTENSION))
-
-distclean: clean
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS).tar.bz2
-
-dist: all dist_$(OS)
-
-dist_linux:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2 $(LIBRARY_NAME)
-
-dist_macosx:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-dist_windows:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-
-etags:
-	etags *.[ch] ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showpaths:
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "CSOURCES: $(CSOURCES)"
-	@echo "CXXSOURCES: $(CXXSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
diff --git a/externals/pdvjtools/README.txt b/externals/pdvjtools/README.txt
deleted file mode 100644
index 4effa19f4..000000000
--- a/externals/pdvjtools/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-hello!
diff --git a/externals/pdvjtools/colorgrid/CHANGES.LOG b/externals/pdvjtools/colorgrid/CHANGES.LOG
deleted file mode 100755
index ef94355e9..000000000
--- a/externals/pdvjtools/colorgrid/CHANGES.LOG
+++ /dev/null
@@ -1,13 +0,0 @@
-0.5
-  GOP working
-
-0.4
-  Added the colorpicker image inside the C code, so, there will not be  more path problems. 
-  Now colorgrid has one new requeriment :: libtk-img 
-
-0.2
-  Better algorithm for extract RGB values
-  new spectrum image 
-
-0.1
-  First version for pd 0.37
diff --git a/externals/pdvjtools/colorgrid/INSTALL b/externals/pdvjtools/colorgrid/INSTALL
deleted file mode 100755
index 983cac8b1..000000000
--- a/externals/pdvjtools/colorgrid/INSTALL
+++ /dev/null
@@ -1,15 +0,0 @@
-untar in /usr/local/lib/pd/externs
-
-cd /usr/local/lib/pd/externs/colorgrid
-
-make clean 
-
-make
-
-make install
-
-open help-colorgrid.pd
-
-Thanx for getting here.
-Lluis/
-comments and bugs @ lluis@artefacte.org
diff --git a/externals/pdvjtools/colorgrid/Makefile b/externals/pdvjtools/colorgrid/Makefile
deleted file mode 100755
index 2da52c4f8..000000000
--- a/externals/pdvjtools/colorgrid/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-NAME=colorgrid
-CSYM=colorgrid
-
-current: pd_linux
-
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -fPIC -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch #-Werror
-
-LINUXINCLUDE =  -I../../../pd/src 
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld --export-dynamic  -shared -o $*.pd_linux $*.o -lc -lm
-	strip --strip-unneeded $*.pd_linux
-	rm -f $*.o
-
-# ----------------------------------------------------------
-
-install:
-	cp help-*.pd ../../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
diff --git a/externals/pdvjtools/colorgrid/README b/externals/pdvjtools/colorgrid/README
deleted file mode 100755
index 77a1fc209..000000000
--- a/externals/pdvjtools/colorgrid/README
+++ /dev/null
@@ -1,20 +0,0 @@
-Version 0.01 
-copyright 2004 by Lluis Gomez
-inspired by the grid object written by Yves Degoyon
-tarballs and updates available @ http://pd.artefacte.org
-
-colorgrid : grid color picker
-
-To install grid, follow the steps from INSTALL
-
-This software is published under GPL terms.
-
-This is software with ABSOLUTELY NO WARRANTY.
-Use it at your OWN RISK. It's possible to damage e.g. hardware or your hearing
-due to a bug or for other reasons. 
-We do not warrant that the program is free of infringement of any third-party
-patents.
-
-*****************************************************************************
-
-
diff --git a/externals/pdvjtools/colorgrid/colorgrid-help.pd b/externals/pdvjtools/colorgrid/colorgrid-help.pd
deleted file mode 100644
index 77af92b05..000000000
--- a/externals/pdvjtools/colorgrid/colorgrid-help.pd
+++ /dev/null
@@ -1,47 +0,0 @@
-#N canvas 26 1 762 514 10;
-#X floatatom 93 434 5 0 0 0 - - -;
-#X floatatom 217 434 5 0 0 0 - - -;
-#X floatatom 430 220 5 0 0 0 - - -;
-#X floatatom 496 220 5 0 0 0 - - -;
-#X obj 430 245 pack f f;
-#X text 471 221 X;
-#X text 537 220 Y;
-#X msg 93 131 bang;
-#X floatatom 342 431 5 0 0 0 - - -;
-#X text 93 451 R;
-#X text 217 450 G;
-#X text 342 445 B;
-#X text 39 12 Grid is a 2-dimensional color picker;
-#X text 39 25 Written by Lluis Gomez i Bigorda ( lluis@artefacte.org
-);
-#X text 39 39 ( inspired by the grid object written by Yves Degoyon
-);
-#X msg 339 246 xgoto \$1 \$2;
-#X text 330 195 Set position without changing output:;
-#X obj 496 246 t b f;
-#X floatatom 430 133 5 0 0 0 - - -;
-#X floatatom 496 133 5 0 0 0 - - -;
-#X obj 430 158 pack f f;
-#X text 471 134 X;
-#X text 537 133 Y;
-#X obj 496 159 t b f;
-#X text 330 108 Set position :;
-#X msg 339 159 goto \$1 \$2;
-#X obj 90 376 colorgrid colorgrid1 256 0 256 50 0 50 0 1 1 10 10 147
-392.06;
-#X connect 2 0 4 0;
-#X connect 3 0 17 0;
-#X connect 4 0 15 0;
-#X connect 7 0 26 0;
-#X connect 15 0 26 0;
-#X connect 17 0 4 0;
-#X connect 17 1 4 1;
-#X connect 18 0 20 0;
-#X connect 19 0 23 0;
-#X connect 20 0 25 0;
-#X connect 23 0 20 0;
-#X connect 23 1 20 1;
-#X connect 25 0 26 0;
-#X connect 26 0 0 0;
-#X connect 26 1 1 0;
-#X connect 26 2 8 0;
diff --git a/externals/pdvjtools/colorgrid/colorgrid.c b/externals/pdvjtools/colorgrid/colorgrid.c
deleted file mode 100644
index cbff1eba1..000000000
--- a/externals/pdvjtools/colorgrid/colorgrid.c
+++ /dev/null
@@ -1,1655 +0,0 @@
-/* Copyright (c) 1997-1999 Miller Puckette.
- * For information on usage and redistribution, and for a DISCLAIMER OF ALL
- * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
-
-/* g_colorgrid.c written by Yves Degoyon 2002                                       */
-/* colorgrid control object : two dimensionnal colorgrid                                 */
-/* thanks to Thomas Musil, Miller Puckette, Guenther Geiger and Krzystof Czaja */
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <ctype.h>
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-
-
-#ifdef NT
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
-#define COLORGRID_IMG "/usr/local/lib/pd/externs/colorgrid/colorgrid.pnm"
-#define DEFAULT_COLORGRID_WIDTH 256
-#define DEFAULT_COLORGRID_HEIGHT 50
-#define DEFAULT_COLORGRID_NBLINES 10
-
-typedef struct _colorgrid
-{
-    t_object x_obj;
-    t_glist *x_glist;
-    t_symbol *x_name; 
-    t_outlet *x_xoutlet; 
-    t_outlet *x_youtlet; 
-    t_outlet *x_zoutlet; 
-    int x_null; 	/* To dissable resize                             */
-    int x_height; 	/* height of the colorgrid                        */
-    t_float x_min; 	/* minimum value of x                        */
-    t_float x_max; 	/* max value of x                            */
-    int x_width; 	/* width of the colorgrid                         */
-    t_float y_min; 	/* minimum value of y                        */
-    t_float y_max; 	/* max value of y                            */
-    t_float x_current; 	/* x coordinate of current position          */
-    t_float y_current; 	/* y coordinate of current position          */
-    int x_selected; 	/* stores selected state                     */
-    int x_point; 	/* indicates if a point is plotted           */
-    int x_colorgrid; 	/* indicates if a colorgrid is requested          */
-    t_float x_xstep; 	/* sets the step ( grain ) for x             */
-    t_float x_ystep; 	/* sets the step ( grain ) for y             */
-    int x_xlines; 	/* number of vertical lines                  */
-    int x_ylines; 	/* number of horizontal lines                */
-    t_symbol*  x_fname;
-} t_colorgrid;
-
-
-t_widgetbehavior colorgrid_widgetbehavior;
-static t_class *colorgrid_class;
-static int colorgridcount=0;
-
-static int guidebug=0;
-static int pointsize = 5;
-
-static char   *colorgrid_version = "colorgrid: version 0.4, written by Yves Degoyon (ydegoyon@free.fr) & Lluis Gomez i Bigorda (lluis@artefacte.org)";
-
-#define COLORGRID_SYS_VGUI2(a,b) if (guidebug) \
-                         post(a,b);\
-                         sys_vgui(a,b)
-
-#define COLORGRID_SYS_VGUI3(a,b,c) if (guidebug) \
-                         post(a,b,c);\
-                         sys_vgui(a,b,c)
-
-#define COLORGRID_SYS_VGUI4(a,b,c,d) if (guidebug) \
-                         post(a,b,c,d);\
-                         sys_vgui(a,b,c,d)
-
-#define COLORGRID_SYS_VGUI5(a,b,c,d,e) if (guidebug) \
-                         post(a,b,c,d,e);\
-                         sys_vgui(a,b,c,d,e)
-
-#define COLORGRID_SYS_VGUI6(a,b,c,d,e,f) if (guidebug) \
-                         post(a,b,c,d,e,f);\
-                         sys_vgui(a,b,c,d,e,f)
-
-#define COLORGRID_SYS_VGUI7(a,b,c,d,e,f,g) if (guidebug) \
-                         post(a,b,c,d,e,f,g );\
-                         sys_vgui(a,b,c,d,e,f,g)
-
-#define COLORGRID_SYS_VGUI8(a,b,c,d,e,f,g,h) if (guidebug) \
-                         post(a,b,c,d,e,f,g,h );\
-                         sys_vgui(a,b,c,d,e,f,g,h)
-
-#define COLORGRID_SYS_VGUI9(a,b,c,d,e,f,g,h,i) if (guidebug) \
-                         post(a,b,c,d,e,f,g,h,i );\
-                         sys_vgui(a,b,c,d,e,f,g,h,i)
-
-/* drawing functions */
-static void colorgrid_draw_update(t_colorgrid *x, t_glist *glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    t_int xpoint=x->x_current, ypoint=x->y_current;
-
-    // later : try to figure out what's this test for ??  
-    // if (glist_isvisible(glist))
-    // {
-       // delete previous point if existing
-       if (x->x_point)  
-       {
-          COLORGRID_SYS_VGUI3(".x%x.c delete %xPOINT\n", canvas, x);
-       }
-        
-       if ( x->x_current < x->x_obj.te_xpix ) xpoint = x->x_obj.te_xpix;
-       if ( x->x_current > x->x_obj.te_xpix + x->x_width - pointsize ) 
-			xpoint = x->x_obj.te_xpix + x->x_width - pointsize;
-       if ( x->y_current < x->x_obj.te_ypix ) ypoint = x->x_obj.te_ypix;
-       if ( x->y_current > x->x_obj.te_ypix + x->x_height - pointsize ) 
-			ypoint = x->x_obj.te_ypix + x->x_height - pointsize;
-       // draw the selected point
-       COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -outline {} -fill #FF0000 -tags %xPOINT\n",
-	     canvas, xpoint, ypoint, xpoint+5, ypoint+5, x);
-       x->x_point = 1;
-    // }  
-    // else 
-    // {
-    //    post( "colorgrid : position updated in an invisible colorgrid" );
-    // }
-}
-
-static void colorgrid_draw_new(t_colorgrid *x, t_glist *glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    char *tagRoot;
-    char fname[MAXPDSTRING]=COLORGRID_IMG;
-
-    char *fdata="UDYKIyBDUkVBVE9SOiBUaGUgR0lNUCdzIFBOTSBGaWx0ZXIgVmVyc2lvbiAx\
-LjAKMjU2IDUwCjI1NQpMBwdMCQdMCgdMDAdMDgdMDwdMEQdMEwdMFAdMFgdM\
-FwdMGQdMGwdMHAdMHgdMHwdMIQdMIwdMJAdMJgdMKAdMKQdMKwdMLAdMLgdM\
-MAdMMQdMMwdMNQdMNgdMOAdMOQdMOwdMPQdMPgdMQAdMQgdMQwdMRQdMRgdM\
-SAdMSgdMSwdMTAdKTAdJTAdHTAdFTAdETAdCTAdATAc/TAc9TAc8TAc6TAc4\
-TAc3TAc1TAczTAcyTAcwTAcvTActTAcrTAcqTAcoTAcnTAclTAcjTAciTAcg\
-TAceTAcdTAcbTAcaTAcYTAcWTAcVTAcTTAcRTAcQTAcOTAcNTAcLTAcJTAcI\
-TAcHTAgHTAoHTAwHTA0HTA8HTBAHTBIHTBQHTBUHTBcHTBgHTBoHTBwHTB0H\
-TB8HTCEHTCIHTCQHTCUHTCcHTCkHTCoHTCwHTC4HTC8HTDEHTDIHTDQHTDYH\
-TDcHTDkHTDoHTDwHTD4HTD8HTEEHTEMHTEQHTEYHTEcHTEkHTEsHTEwHS0wH\
-SUwHR0wHRkwHREwHQ0wHQUwHP0wHPkwHPEwHOkwHOUwHN0wHNkwHNEwHMkwH\
-MUwHL0wHLkwHLEwHKkwHKUwHJ0wHJUwHJEwHIkwHIUwHH0wHHUwHHEwHGkwH\
-GEwHF0wHFUwHFEwHEkwHEEwHD0wHDUwHDEwHCkwHCEwIB0wJB0wLB0wNB0wO\
-B0wQB0wRB0wTB0wVB0wWB0wYB0waB0wbB0wdB0weB0wgB0wiB0wjB0wlB0wn\
-B0woB0wqB0wrB0wtB0wvB0wwB0wyB0wzB0w1B0w3B0w4B0w6B0w8B0w9B0w/\
-B0xAB0xCB0xEB0xFB0xHB0xJB0xKB0xMB0xMB0tMB0pMB0hMB0ZMB0VMB0NM\
-B0JMB0BMBz5MBz1MBztMBzlMBzhMBzZMBzVMBzNMBzFMBzBMBy5MByxMBytM\
-BylMByhMByZMByRMByNMByFMBx9MBx5MBxxMBxtMBxlMBxdMBxZMBxRMBxNM\
-BxFMBw9MBw5MBwxMBwpMBwlTCAhTCghTCwhTDQhTDwhTEQhTEwhTFAhTFghT\
-GAhTGghTGwhTHQhTHwhTIQhTIghTJAhTJghTKAhTKghTKwhTLQhTLwhTMQhT\
-MghTNAhTNghTOAhTOQhTOwhTPQhTPwhTQQhTQghTRAhTRghTSAhTSQhTSwhT\
-TQhTTwhTUQhTUghTUwhRUwhPUwhOUwhMUwhKUwhIUwhGUwhFUwhDUwhBUwg/\
-Uwg+Uwg8Uwg6Uwg4Uwg3Uwg1UwgzUwgxUwgvUwguUwgsUwgqUwgoUwgnUwgl\
-UwgjUwghUwggUwgeUwgcUwgaUwgYUwgXUwgVUwgTUwgRUwgQUwgOUwgMUwgK\
-UwgIUwgIUwkIUwsIUw0IUw4IUxAIUxIIUxQIUxUIUxcIUxkIUxsIUx0IUx4I\
-UyAIUyIIUyQIUyUIUycIUykIUysIUy0IUy4IUzAIUzIIUzQIUzUIUzcIUzkI\
-UzsIUzwIUz4IU0AIU0IIU0QIU0UIU0cIU0kIU0sIU0wIU04IU1AIU1IIU1MI\
-UlMIUFMITlMITFMIS1MISVMIR1MIRVMIRFMIQlMIQFMIPlMIPFMIO1MIOVMI\
-N1MINVMINFMIMlMIMFMILlMILVMIK1MIKVMIJ1MIJVMIJFMIIlMIIFMIHlMI\
-HVMIG1MIGVMIF1MIFVMIFFMIElMIEFMIDlMIDVMIC1MICVMICFMKCFMMCFMO\
-CFMQCFMRCFMTCFMVCFMXCFMYCFMaCFMcCFMeCFMgCFMhCFMjCFMlCFMnCFMo\
-CFMqCFMsCFMuCFMvCFMxCFMzCFM1CFM3CFM4CFM6CFM8CFM+CFM/CFNBCFND\
-CFNFCFNGCFNICFNKCFNMCFNOCFNPCFNRCFNTCFNTCFJTCFFTCE9TCE1TCEtT\
-CElTCEhTCEZTCERTCEJTCEFTCD9TCD1TCDtTCDlTCDhTCDZTCDRTCDJTCDFT\
-CC9TCC1TCCtTCCpTCChTCCZTCCRTCCJTCCFTCB9TCB1TCBtTCBpTCBhTCBZT\
-CBRTCBNTCBFTCA9TCA1TCAtTCApbCQlbCwlbDAlbDglbEAlbEglbFAlbFglb\
-GAlbGglbHAlbHglbIAlbIglbJAlbJQlbJwlbKQlbKwlbLQlbLwlbMQlbMwlb\
-NQlbNwlbOQlbOwlbPQlbPglbQAlbQglbRAlbRglbSAlbSglbTAlbTglbUAlb\
-UglbVAlbVglbVwlbWQlaWwlYWwlWWwlUWwlSWwlQWwlOWwlNWwlLWwlJWwlH\
-WwlFWwlDWwlBWwk/Wwk9Wwk7Wwk5Wwk3Wwk1Wwk0WwkyWwkwWwkuWwksWwkq\
-WwkoWwkmWwkkWwkiWwkgWwkeWwkcWwkbWwkZWwkXWwkVWwkTWwkRWwkPWwkN\
-WwkLWwkJWwkJWwoJWwwJWw4JWxAJWxIJWxQJWxUJWxcJWxkJWxsJWx0JWx8J\
-WyEJWyMJWyUJWycJWykJWysJWywJWy4JWzAJWzIJWzQJWzYJWzgJWzoJWzwJ\
-Wz4JW0AJW0IJW0QJW0UJW0cJW0kJW0sJW00JW08JW1EJW1MJW1UJW1cJW1kJ\
-W1sJWVsJV1sJVVsJU1sJUVsJT1sJTVsJS1sJSVsJR1sJRVsJRFsJQlsJQFsJ\
-PlsJPFsJOlsJOFsJNlsJNFsJMlsJMFsJLlsJLFsJK1sJKVsJJ1sJJVsJI1sJ\
-IVsJH1sJHVsJG1sJGVsJF1sJFVsJFFsJElsJEFsJDlsJDFsJClsJCVsLCVsN\
-CVsPCVsRCVsTCVsVCVsXCVsZCVsbCVscCVseCVsgCVsiCVskCVsmCVsoCVsq\
-CVssCVsuCVswCVsyCVs0CVs1CVs3CVs5CVs7CVs9CVs/CVtBCVtDCVtFCVtH\
-CVtJCVtLCVtNCVtOCVtQCVtSCVtUCVtWCVtYCVtaCVtbCVlbCVdbCVZbCVRb\
-CVJbCVBbCU5bCUxbCUpbCUhbCUZbCURbCUJbCUBbCT5bCT1bCTtbCTlbCTdb\
-CTVbCTNbCTFbCS9bCS1bCStbCSlbCSdbCSVbCSRbCSJbCSBbCR5bCRxbCRpb\
-CRhbCRZbCRRbCRJbCRBbCQ5bCQxbCQtiCQliCwliDQliEAliEgliFAliFgli\
-GAliGgliHAliHgliIAliIgliJAliJgliKAliKwliLQliLwliMQliMwliNQli\
-NwliOQliOwliPQliPwliQQliQwliRQliSAliSgliTAliTgliUAliUgliVAli\
-VgliWAliWgliXAliXgliYAlhYglfYgldYglbYglZYglXYglVYglTYglRYglO\
-YglMYglKYglIYglGYglEYglCYglAYgk+Ygk8Ygk6Ygk4Ygk2YgkzYgkxYgkv\
-YgktYgkrYgkpYgknYgklYgkjYgkhYgkfYgkdYgkbYgkZYgkWYgkUYgkSYgkQ\
-YgkOYgkMYgkKYgkJYgsJYg0JYg8JYhEJYhMJYhUJYhcJYhkJYhsJYh0JYh8J\
-YiIJYiQJYiYJYigJYioJYiwJYi4JYjAJYjIJYjQJYjYJYjgJYjoJYjwJYj8J\
-YkEJYkMJYkUJYkcJYkkJYksJYk0JYk8JYlEJYlMJYlUJYlcJYloJYlwJYl4J\
-YmAJYmIJYGIJXmIJXGIJWmIJV2IJVWIJU2IJUWIJT2IJTWIJS2IJSWIJR2IJ\
-RWIJQ2IJQWIJP2IJPGIJOmIJOGIJNmIJNGIJMmIJMGIJLmIJLGIJKmIJKGIJ\
-JmIJJGIJImIJH2IJHWIJG2IJGWIJF2IJFWIJE2IJEWIJD2IJDWIJC2IKCWIM\
-CWIOCWIQCWISCWIUCWIWCWIZCWIbCWIdCWIfCWIhCWIjCWIlCWInCWIpCWIr\
-CWItCWIvCWIxCWIzCWI2CWI4CWI6CWI8CWI+CWJACWJCCWJECWJGCWJICWJK\
-CWJMCWJOCWJRCWJTCWJVCWJXCWJZCWJbCWJdCWJfCWJhCWJiCWBiCV5iCVxi\
-CVpiCVhiCVZiCVRiCVJiCVBiCU5iCUxiCUpiCUhiCUViCUNiCUFiCT9iCT1i\
-CTtiCTliCTdiCTViCTNiCTFiCS9iCS1iCStiCShiCSZiCSRiCSJiCSBiCR5i\
-CRxiCRpiCRhiCRZiCRRiCRJiCRBiCQ1iCQtpCgppDAppDgppEQppEwppFQpp\
-FwppGgppHAppHgppIAppIwppJQppJwppKQppKwppLgppMAppMgppNAppNwpp\
-OQppOwppPQppPwppQgppRAppRgppSAppSwppTQppTwppUQppUwppVgppWApp\
-WgppXAppXwppYQppYwppZQppZwpoaQpmaQpkaQpiaQpfaQpdaQpbaQpZaQpW\
-aQpUaQpSaQpQaQpOaQpLaQpJaQpHaQpFaQpCaQpAaQo+aQo8aQo6aQo3aQo1\
-aQozaQoxaQouaQosaQoqaQooaQolaQojaQohaQofaQodaQoaaQoYaQoWaQoU\
-aQoRaQoPaQoNaQoLaQoKaQwKaQ4KaRAKaRIKaRQKaRcKaRkKaRsKaR0KaSAK\
-aSIKaSQKaSYKaSgKaSsKaS0KaS8KaTEKaTQKaTYKaTgKaToKaTwKaT8KaUEK\
-aUMKaUUKaUgKaUoKaUwKaU4KaVAKaVMKaVUKaVcKaVkKaVwKaV4KaWAKaWIK\
-aWUKaWcKaWkKZ2kKZWkKYmkKYGkKXmkKXGkKWWkKV2kKVWkKU2kKUGkKTmkK\
-TGkKSmkKSGkKRWkKQ2kKQWkKP2kKPGkKOmkKOGkKNmkKNGkKMWkKL2kKLWkK\
-K2kKKGkKJmkKJGkKImkKIGkKHWkKG2kKGWkKF2kKFGkKEmkKEGkKDmkKDGkL\
-CmkNCmkPCmkRCmkUCmkWCmkYCmkaCmkdCmkfCmkhCmkjCmklCmkoCmkqCmks\
-CmkuCmkxCmkzCmk1Cmk3Cmk6Cmk8Cmk+CmlACmlCCmlFCmlHCmlJCmlLCmlO\
-CmlQCmlSCmlUCmlWCmlZCmlbCmldCmlfCmliCmlkCmlmCmloCmlpCmdpCmVp\
-CmNpCmFpCl9pClxpClppClhpClZpClNpClFpCk9pCk1pCktpCkhpCkZpCkRp\
-CkJpCj9pCj1pCjtpCjlpCjdpCjRpCjJpCjBpCi5pCitpCilpCidpCiVpCiNp\
-CiBpCh5pChxpChppChdpChVpChNpChFpCg5pCgxwCwtwDQtwEAtwEgtwFAtw\
-FwtwGQtwGwtwHgtwIAtwIwtwJQtwJwtwKgtwLAtwLgtwMQtwMwtwNgtwOAtw\
-OgtwPQtwPwtwQQtwRAtwRgtwSQtwSwtwTQtwUAtwUgtwVAtwVwtwWQtwXAtw\
-XgtwYAtwYwtwZQtwZwtwagtwbAtwbwtvcAttcAtrcAtocAtmcAtjcAthcAtf\
-cAtccAtacAtYcAtVcAtTcAtQcAtOcAtMcAtJcAtHcAtFcAtCcAtAcAs9cAs7\
-cAs5cAs2cAs0cAsycAsvcAstcAsqcAsocAsmcAsjcAshcAsfcAsccAsacAsX\
-cAsVcAsTcAsQcAsOcAsMcAsLcAwLcA8LcBELcBMLcBYLcBgLcBsLcB0LcB8L\
-cCILcCQLcCYLcCkLcCsLcC4LcDALcDILcDULcDcLcDkLcDwLcD4LcEELcEML\
-cEULcEgLcEoLcE0LcE8LcFELcFQLcFYLcFgLcFsLcF0LcGALcGILcGQLcGcL\
-cGkLcGsLcG4LcHALbnALa3ALaXALZ3ALZHALYnALYHALXXALW3ALWHALVnAL\
-VHALUXALT3ALTXALSnALSHALRXALQ3ALQXALPnALPHALOXALN3ALNXALMnAL\
-MHALLnALK3ALKXALJnALJHALInALH3ALHXALG3ALGHALFnALE3ALEXALD3AL\
-DHAMC3AOC3AQC3ATC3AVC3AXC3AaC3AcC3AfC3AhC3AjC3AmC3AoC3AqC3At\
-C3AvC3AyC3A0C3A2C3A5C3A7C3A9C3BAC3BCC3BFC3BHC3BJC3BMC3BOC3BQ\
-C3BTC3BVC3BYC3BaC3BcC3BfC3BhC3BjC3BmC3BoC3BrC3BtC3BvC3BwC29w\
-C2xwC2pwC2dwC2VwC2NwC2BwC15wC1xwC1lwC1dwC1RwC1JwC1BwC01wC0tw\
-C0lwC0ZwC0RwC0FwCz9wCz1wCzpwCzhwCzZwCzNwCzFwCy5wCyxwCypwCydw\
-CyVwCyNwCyBwCx5wCxtwCxlwCxdwCxRwCxJwCxBwCw13Cwt3Dgt3EQt3Ewt3\
-Fgt3GAt3Gwt3HQt3IAt3Igt3JQt3Jwt3Kgt3LAt3Lwt3MQt3NAt3Ngt3OQt3\
-Owt3Pgt3QQt3Qwt3Rgt3SAt3Swt3TQt3UAt3Ugt3VQt3Vwt3Wgt3XAt3Xwt3\
-YQt3ZAt3Zgt3aQt3bAt3bgt3cQt3cwt3dgt2dwt0dwtxdwtvdwtsdwtqdwtn\
-dwtldwtidwtgdwtddwtbdwtYdwtWdwtTdwtRdwtOdwtMdwtJdwtGdwtEdwtB\
-dws/dws8dws6dws3dws1dwsydwswdwstdwsrdwsodwsmdwsjdwshdwsedwsb\
-dwsZdwsWdwsUdwsRdwsPdwsMdwsLdw0LdxALdxILdxULdxcLdxoLdxwLdx8L\
-dyELdyQLdyYLdykLdysLdy4LdzELdzMLdzYLdzgLdzsLdz0Ld0ALd0ILd0UL\
-d0cLd0oLd0wLd08Ld1ELd1QLd1YLd1kLd1wLd14Ld2ELd2MLd2YLd2gLd2sL\
-d20Ld3ALd3ILd3ULd3cLdXcLcncLcHcLbXcLa3cLaHcLZncLY3cLYXcLXncL\
-XHcLWXcLVncLVHcLUXcLT3cLTHcLSncLR3cLRXcLQncLQHcLPXcLO3cLOHcL\
-NncLM3cLMXcLLncLK3cLKXcLJncLJHcLIXcLH3cLHHcLGncLF3cLFXcLEncL\
-EHcLDXcMC3cPC3cRC3cUC3cWC3cZC3cbC3ceC3chC3cjC3cmC3coC3crC3ct\
-C3cwC3cyC3c1C3c3C3c6C3c8C3c/C3dBC3dEC3dGC3dJC3dMC3dOC3dRC3dT\
-C3dWC3dYC3dbC3ddC3dgC3diC3dlC3dnC3dqC3dsC3dvC3dxC3d0C3d2C3d3\
-C3Z3C3N3C3F3C253C2x3C2l3C2Z3C2R3C2F3C193C1x3C1p3C1d3C1V3C1J3\
-C1B3C013C0t3C0h3C0Z3C0N3C0F3Cz53Czt3Czl3CzZ3CzR3CzF3Cy93Cyx3\
-Cyp3Cyd3CyV3CyJ3CyB3Cx13Cxt3Cxh3CxZ3CxN3CxF3Cw5+DAx+Dwx+Egx+\
-FAx+Fwx+Ggx+HAx+Hwx+Igx+JAx+Jwx+Kgx+LAx+Lwx+Mgx+NAx+Nwx+Ogx+\
-PAx+Pwx+Qgx+RAx+Rwx+Sgx+TAx+Twx+Ugx+VQx+Vwx+Wgx+XQx+Xwx+Ygx+\
-ZQx+Zwx+agx+bQx+bwx+cgx+dQx+dwx+egx+fQx+fgx7fgx4fgx2fgxzfgxw\
-fgxufgxrfgxofgxlfgxjfgxgfgxdfgxbfgxYfgxVfgxTfgxQfgxNfgxLfgxI\
-fgxFfgxDfgxAfgw9fgw7fgw4fgw1fgwzfgwwfgwtfgwrfgwofgwlfgwjfgwg\
-fgwdfgwafgwYfgwVfgwSfgwQfgwNfgwMfg4MfhEMfhMMfhYMfhkMfhsMfh4M\
-fiEMfiMMfiYMfikMfisMfi4MfjEMfjMMfjYMfjkMfjwMfj4MfkEMfkQMfkYM\
-fkkMfkwMfk4MflEMflQMflYMflkMflwMfl4MfmEMfmQMfmYMfmkMfmwMfm4M\
-fnEMfnQMfnYMfnkMfnwMfn4MfH4MeX4Mdn4MdH4McX4Mbn4MbH4MaX4MZn4M\
-ZH4MYX4MXn4MXH4MWX4MVn4MVH4MUX4MTn4MTH4MSX4MRn4MRH4MQX4MPn4M\
-PH4MOX4MNn4MM34MMX4MLn4MK34MKX4MJn4MI34MIX4MHn4MG34MGX4MFn4M\
-E34MEX4MDn4NDH4QDH4SDH4VDH4YDH4aDH4dDH4gDH4jDH4lDH4oDH4rDH4t\
-DH4wDH4zDH41DH44DH47DH49DH5ADH5DDH5FDH5IDH5LDH5NDH5QDH5TDH5V\
-DH5YDH5bDH5dDH5gDH5jDH5lDH5oDH5rDH5uDH5wDH5zDH52DH54DH57DH5+\
-DH5+DH1+DHp+DHd+DHV+DHJ+DG9+DG1+DGp+DGd+DGV+DGJ+DF9+DF1+DFp+\
-DFd+DFV+DFJ+DE9+DEx+DEp+DEd+DER+DEJ+DD9+DDx+DDp+DDd+DDR+DDJ+\
-DC9+DCx+DCp+DCd+DCR+DCJ+DB9+DBx+DBp+DBd+DBR+DBJ+DA+GDQ2GEA2G\
-Ew2GFQ2GGA2GGw2GHg2GIQ2GJA2GJg2GKQ2GLA2GLw2GMg2GNQ2GNw2GOg2G\
-PQ2GQA2GQw2GRg2GSA2GSw2GTg2GUQ2GVA2GVg2GWQ2GXA2GXw2GYg2GZQ2G\
-Zw2Gag2GbQ2GcA2Gcw2Gdg2GeA2Gew2Gfg2GgQ2GhA2Fhg2Chg1/hg18hg15\
-hg13hg10hg1xhg1uhg1rhg1ohg1mhg1jhg1ghg1dhg1ahg1Xhg1Vhg1Shg1P\
-hg1Mhg1Jhg1Ghg1Ehg1Bhg0+hg07hg04hg01hg0zhg0whg0thg0qhg0nhg0k\
-hg0ihg0fhg0chg0Zhg0Whg0Uhg0Rhg0Ohg0Nhg8NhhINhhQNhhcNhhoNhh0N\
-hiANhiMNhiUNhigNhisNhi4NhjENhjQNhjYNhjkNhjwNhj8NhkINhkUNhkcN\
-hkoNhk0NhlANhlMNhlYNhlgNhlsNhl4NhmENhmQNhmcNhmkNhmwNhm8NhnIN\
-hnUNhncNhnoNhn0NhoANhoMNhoYNg4YNgIYNfYYNeoYNd4YNdYYNcoYNb4YN\
-bIYNaYYNZ4YNZIYNYYYNXoYNW4YNWIYNVoYNU4YNUIYNTYYNSoYNR4YNRYYN\
-QoYNP4YNPIYNOYYNNoYNNIYNMYYNLoYNK4YNKIYNJYYNI4YNIIYNHYYNGoYN\
-F4YNFIYNEoYND4YODYYRDYYUDYYWDYYZDYYcDYYfDYYiDYYkDYYnDYYqDYYt\
-DYYwDYYzDYY1DYY4DYY7DYY+DYZBDYZEDYZGDYZJDYZMDYZPDYZSDYZVDYZX\
-DYZaDYZdDYZgDYZjDYZmDYZoDYZrDYZuDYZxDYZ0DYZ3DYZ5DYZ8DYZ/DYaC\
-DYaFDYaGDYSGDYGGDX6GDXuGDXiGDXaGDXOGDXCGDW2GDWqGDWeGDWWGDWKG\
-DV+GDVyGDVmGDVaGDVSGDVGGDU6GDUuGDUiGDUaGDUOGDUCGDT2GDTqGDTeG\
-DTWGDTKGDS+GDSyGDSmGDSaGDSSGDSGGDR6GDRuGDRiGDRWGDROGDRCNDg6N\
-EQ6NFA6NFw6NGg6NHQ6NIA6NIg6NJQ6NKA6NKw6NLg6NMQ6NNA6NNw6NOg6N\
-PQ6NQA6NQw6NRg6NSQ6NTA6NTw6NUg6NVQ6NWA6NWw6NXg6NYQ6NZA6NZw6N\
-ag6NbQ6NcA6Ncw6Ndg6NeQ6NfA6Nfw6Ngg6NhQ6NiA6Niw6MjQ6JjQ6GjQ6D\
-jQ6AjQ59jQ56jQ53jQ50jQ5xjQ5ujQ5rjQ5ojQ5ljQ5ijQ5fjQ5cjQ5ZjQ5W\
-jQ5TjQ5QjQ5NjQ5KjQ5HjQ5EjQ5BjQ4+jQ47jQ44jQ41jQ4yjQ4vjQ4sjQ4p\
-jQ4mjQ4jjQ4hjQ4ejQ4bjQ4YjQ4VjQ4SjQ4PjQ4OjRAOjRMOjRYOjRkOjRwO\
-jR8OjSIOjSQOjScOjSoOjS0OjTAOjTMOjTYOjTkOjTwOjT8OjUIOjUUOjUgO\
-jUsOjU4OjVEOjVQOjVcOjVoOjV0OjWAOjWMOjWYOjWkOjWwOjW8OjXIOjXUO\
-jXgOjXsOjX4OjYEOjYQOjYcOjYoOjY0Oio0Oh40OhI0OgY0Ofo0Oe40OeI0O\
-dY0Oco0Ob40ObI0OaY0OZo0OY40OYI0OXY0OWo0OV40OVI0OUY0OTo0OS40O\
-SI0ORY0OQo0OP40OPI0OOY0ONo0OM40OMI0OLY0OKo0OJ40OJI0OIo0OH40O\
-HI0OGY0OFo0OE40OEI0PDo0SDo0VDo0YDo0bDo0eDo0hDo0jDo0mDo0pDo0s\
-Do0vDo0yDo01Do04Do07Do0+Do1BDo1EDo1HDo1KDo1NDo1QDo1TDo1WDo1Z\
-Do1cDo1fDo1iDo1lDo1oDo1rDo1uDo1xDo10Do13Do16Do19Do2ADo2DDo2G\
-Do2JDo2MDo2NDouNDoiNDoWNDoKNDn+NDnyNDnmNDnaNDnONDnCNDm2NDmqN\
-DmeNDmSNDmGNDl6NDluNDliNDlWNDlKNDk+NDkyNDkmNDkaNDkONDkCNDj2N\
-DjqNDjeNDjSNDjGNDi6NDiuNDiiNDiWNDiKNDiCNDh2NDhqNDheNDhSNDhGU\
-Dg6UEQ6UFQ6UGA6UGw6UHg6UIQ6UJA6UJw6UKw6ULg6UMQ6UNA6UNw6UOg6U\
-PQ6UQA6URA6URw6USg6UTQ6UUA6UUw6UVg6UWg6UXQ6UYA6UYw6UZg6UaQ6U\
-bA6Ubw6Ucw6Udg6UeQ6UfA6Ufw6Ugg6UhQ6UiA6UjA6Ujw6Ukg6TlA6QlA6N\
-lA6KlA6GlA6DlA6AlA59lA56lA53lA50lA5wlA5tlA5qlA5nlA5klA5hlA5e\
-lA5blA5XlA5UlA5RlA5OlA5LlA5IlA5FlA5ClA4+lA47lA44lA41lA4ylA4v\
-lA4slA4olA4llA4ilA4flA4clA4ZlA4WlA4TlA4PlA4OlBAOlBQOlBcOlBoO\
-lB0OlCAOlCMOlCYOlCkOlC0OlDAOlDMOlDYOlDkOlDwOlD8OlEMOlEYOlEkO\
-lEwOlE8OlFIOlFUOlFgOlFwOlF8OlGIOlGUOlGgOlGsOlG4OlHIOlHUOlHgO\
-lHsOlH4OlIEOlIQOlIcOlIsOlI4OlJEOlJQOkZQOjpQOi5QOh5QOhJQOgZQO\
-fpQOe5QOeJQOdZQOcpQObpQOa5QOaJQOZZQOYpQOX5QOXJQOWJQOVZQOUpQO\
-T5QOTJQOSZQORpQOQ5QOP5QOPJQOOZQONpQOM5QOMJQOLZQOKZQOJpQOI5QO\
-IJQOHZQOGpQOF5QOFJQOEJQPDpQTDpQWDpQZDpQcDpQfDpQiDpQlDpQoDpQs\
-DpQvDpQyDpQ1DpQ4DpQ7DpQ+DpRCDpRFDpRIDpRLDpRODpRRDpRUDpRXDpRb\
-DpReDpRhDpRkDpRnDpRqDpRtDpRwDpR0DpR3DpR6DpR9DpSADpSDDpSGDpSK\
-DpSNDpSQDpSTDpSUDpKUDo+UDoyUDoiUDoWUDoKUDn+UDnyUDnmUDnaUDnOU\
-Dm+UDmyUDmmUDmaUDmOUDmCUDl2UDlqUDlaUDlOUDlCUDk2UDkqUDkeUDkSU\
-DkCUDj2UDjqUDjeUDjSUDjGUDi6UDiuUDieUDiSUDiGUDh6UDhuUDhiUDhWU\
-DhGbDw+bEg+bFg+bGQ+bHA+bHw+bIw+bJg+bKQ+bLQ+bMA+bMw+bNg+bOg+b\
-PQ+bQA+bRA+bRw+bSg+bTQ+bUQ+bVA+bVw+bWw+bXg+bYQ+bZA+baA+baw+b\
-bg+bcg+bdQ+beA+bew+bfw+bgg+bhQ+biQ+bjA+bjw+bkg+blg+bmQ+amw+X\
-mw+Tmw+Qmw+Nmw+Kmw+Gmw+Dmw+Amw99mw95mw92mw9zmw9vmw9smw9pmw9m\
-mw9imw9fmw9cmw9Ymw9Vmw9Smw9Pmw9Lmw9Imw9Fmw9Bmw8+mw87mw84mw80\
-mw8xmw8umw8qmw8nmw8kmw8hmw8dmw8amw8Xmw8Tmw8Qmw8PmxEPmxUPmxgP\
-mxsPmx4PmyIPmyUPmygPmywPmy8PmzIPmzUPmzkPmzwPmz8Pm0MPm0YPm0kP\
-m0wPm1APm1MPm1YPm1kPm10Pm2APm2MPm2cPm2oPm20Pm3APm3QPm3cPm3oP\
-m34Pm4EPm4QPm4cPm4sPm44Pm5EPm5UPm5gPm5sPmJsPlZsPkZsPjpsPi5sP\
-h5sPhJsPgZsPfpsPepsPd5sPdJsPcJsPbZsPapsPZ5sPY5sPYJsPXZsPWZsP\
-VpsPU5sPUJsPTJsPSZsPRpsPQ5sPP5sPPJsPOZsPNZsPMpsPL5sPLJsPKJsP\
-JZsPIpsPHpsPG5sPGJsPFZsPEZsQD5sTD5sXD5saD5sdD5shD5skD5snD5sq\
-D5suD5sxD5s0D5s4D5s7D5s+D5tBD5tFD5tID5tLD5tPD5tSD5tVD5tYD5tc\
-D5tfD5tiD5tmD5tpD5tsD5tvD5tzD5t2D5t5D5t9D5uAD5uDD5uGD5uKD5uN\
-D5uQD5uTD5uXD5uaD5ubD5mbD5abD5KbD4+bD4ybD4mbD4WbD4KbD3+bD3ub\
-D3ibD3WbD3KbD26bD2ubD2ibD2SbD2GbD16bD1ubD1ebD1SbD1GbD02bD0qb\
-D0ebD0SbD0CbDz2bDzqbDzabDzObDzCbDy2bDymbDyabDyObDx+bDxybDxmb\
-DxabDxKiEBCiExCiFxCiGhCiHhCiIRCiJBCiKBCiKxCiLxCiMhCiNhCiORCi\
-PBCiQBCiQxCiRxCiShCiThCiURCiVBCiWBCiWxCiXxCiYhCiZhCiaRCibRCi\
-cBCicxCidxCiehCifhCigRCihRCiiBCiixCijxCikhCilhCimRCinRCioBCh\
-ohCeohCaohCXohCTohCQohCNohCJohCGohCCohB/ohB7ohB4ohB1ohBxohBu\
-ohBqohBnohBjohBgohBcohBZohBWohBSohBPohBLohBIohBEohBBohA+ohA6\
-ohA3ohAzohAwohAsohApohAmohAiohAfohAbohAYohAUohARohAQohIQohYQ\
-ohkQohwQoiAQoiMQoicQoioQoi4QojEQojQQojgQojsQoj8QokIQokYQokkQ\
-okwQolAQolMQolcQoloQol4QomEQomQQomgQomsQom8QonIQonYQonkQon0Q\
-ooAQooMQoocQoooQoo4QopEQopUQopgQopsQop8QoqIQn6IQm6IQmKIQlaIQ\
-kaIQjqIQiqIQh6IQg6IQgKIQfaIQeaIQdqIQcqIQb6IQa6IQaKIQZKIQYaIQ\
-XqIQWqIQV6IQU6IQUKIQTKIQSaIQRqIQQqIQP6IQO6IQOKIQNKIQMaIQLqIQ\
-KqIQJ6IQI6IQIKIQHKIQGaIQFqIQEqIREKIUEKIYEKIbEKIfEKIiEKImEKIp\
-EKIsEKIwEKIzEKI3EKI6EKI+EKJBEKJEEKJIEKJLEKJPEKJSEKJWEKJZEKJc\
-EKJgEKJjEKJnEKJqEKJuEKJxEKJ1EKJ4EKJ7EKJ/EKKCEKKGEKKJEKKNEKKQ\
-EKKTEKKXEKKaEKKeEKKhEKKiEKCiEJ2iEJmiEJaiEJKiEI+iEIuiEIiiEIWi\
-EIGiEH6iEHqiEHeiEHOiEHCiEG2iEGmiEGaiEGKiEF+iEFuiEFiiEFSiEFGi\
-EE6iEEqiEEeiEEOiEECiEDyiEDmiEDaiEDKiEC+iECuiECiiECSiECGiEB6i\
-EBqiEBeiEBOpEBCpFBCpGBCpGxCpHxCpIhCpJhCpKhCpLRCpMRCpNBCpOBCp\
-PBCpPxCpQxCpRhCpShCpTRCpURCpVRCpWBCpXBCpXxCpYxCpZxCpahCpbhCp\
-cRCpdRCpeBCpfBCpgBCpgxCphxCpihCpjhCpkhCplRCpmRCpnBCpoBCppBCp\
-pxCoqRClqRChqRCeqRCaqRCWqRCTqRCPqRCMqRCIqRCEqRCBqRB9qRB6qRB2\
-qRBzqRBvqRBrqRBoqRBkqRBhqRBdqRBZqRBWqRBSqRBPqRBLqRBHqRBEqRBA\
-qRA9qRA5qRA2qRAyqRAuqRArqRAnqRAkqRAgqRAcqRAZqRAVqRASqRAQqRMQ\
-qRYQqRoQqR4QqSEQqSUQqSgQqSwQqTAQqTMQqTcQqToQqT4QqUIQqUUQqUkQ\
-qUwQqVAQqVMQqVcQqVsQqV4QqWIQqWUQqWkQqW0QqXAQqXQQqXcQqXsQqX4Q\
-qYIQqYYQqYkQqY0QqZAQqZQQqZgQqZsQqZ8QqaIQqaYQqakQpqkQoqkQn6kQ\
-m6kQmKkQlKkQkKkQjakQiakQhqkQgqkQfqkQe6kQd6kQdKkQcKkQbakQaakQ\
-ZakQYqkQXqkQW6kQV6kQU6kQUKkQTKkQSakQRakQQqkQPqkQOqkQN6kQM6kQ\
-MKkQLKkQKKkQJakQIakQHqkQGqkQFqkQE6kSEKkVEKkZEKkcEKkgEKkkEKkn\
-EKkrEKkuEKkyEKk2EKk5EKk9EKlAEKlEEKlHEKlLEKlPEKlSEKlWEKlZEKld\
-EKlhEKlkEKloEKlrEKlvEKlzEKl2EKl6EKl9EKmBEKmEEKmIEKmMEKmPEKmT\
-EKmWEKmaEKmeEKmhEKmlEKmoEKmpEKepEKSpEKCpEJypEJmpEJWpEJKpEI6p\
-EIqpEIepEIOpEICpEHypEHipEHWpEHGpEG6pEGqpEGepEGOpEF+pEFypEFip\
-EFWpEFGpEE2pEEqpEEapEEOpED+pEDypEDipEDSpEDGpEC2pECqpECapECKp\
-EB+pEBupEBipEBSxERGxFRGxGRGxHBGxIBGxJBGxKBGxKxGxLxGxMxGxNxGx\
-OhGxPhGxQhGxRhGxSRGxTRGxURGxVBGxWBGxXBGxYBGxYxGxZxGxaxGxbxGx\
-chGxdhGxehGxfhGxgRGxhRGxiRGxjRGxkBGxlBGxmBGxmxGxnxGxoxGxpxGx\
-qhGxrhGvsRGssRGosRGksRGgsRGdsRGZsRGVsRGSsRGOsRGKsRGGsRGDsRF/\
-sRF7sRF3sRF0sRFwsRFssRFosRFlsRFhsRFdsRFZsRFWsRFSsRFOsRFLsRFH\
-sRFDsRE/sRE8sRE4sRE0sREwsREtsREpsRElsREhsREesREasREWsRESsRER\
-sRQRsRcRsRsRsR8RsSMRsSYRsSoRsS4RsTIRsTURsTkRsT0RsUERsUQRsUgR\
-sUwRsU8RsVMRsVcRsVsRsV4RsWIRsWYRsWoRsW0RsXERsXURsXkRsXwRsYAR\
-sYQRsYgRsYsRsY8RsZMRsZYRsZoRsZ4RsaIRsaURsakRsa0RsbERrbERqbER\
-pbERorERnrERmrERlrERk7ERj7ERi7ERiLERhLERgLERfLERebERdbERcbER\
-bbERarERZrERYrERXrERW7ERV7ERU7ERT7ERTLERSLERRLERQbERPbERObER\
-NbERMrERLrERKrERJrERI7ERH7ERG7ERF7ERFLESEbEWEbEaEbEeEbEhEbEl\
-EbEpEbEtEbEwEbE0EbE4EbE8EbE/EbFDEbFHEbFLEbFOEbFSEbFWEbFZEbFd\
-EbFhEbFlEbFoEbFsEbFwEbF0EbF3EbF7EbF/EbGDEbGGEbGKEbGOEbGSEbGV\
-EbGZEbGdEbGgEbGkEbGoEbGsEbGvEbGxEa6xEaqxEaexEaOxEZ+xEZuxEZix\
-EZSxEZCxEY2xEYmxEYWxEYGxEX6xEXqxEXaxEXKxEW+xEWuxEWexEWOxEWCx\
-EVyxEVixEVSxEVGxEU2xEUmxEUaxEUKxET6xETqxETexETOxES+xESuxESix\
-ESSxESCxERyxERmxERW4EhK4FhK4GhK4HhK4IRK4JRK4KRK4LRK4MRK4NRK4\
-ORK4PRK4QRK4RBK4SBK4TBK4UBK4VBK4WBK4XBK4YBK4ZBK4ZxK4axK4bxK4\
-cxK4dxK4exK4fxK4gxK4hxK4ihK4jhK4khK4lhK4mhK4nhK4ohK4phK4qhK4\
-rRK4sRK4tRK3uBKzuBKvuBKruBKnuBKjuBKfuBKbuBKXuBKUuBKQuBKMuBKI\
-uBKEuBKAuBJ8uBJ4uBJ0uBJxuBJtuBJpuBJluBJhuBJduBJZuBJVuBJRuBJO\
-uBJKuBJGuBJCuBI+uBI6uBI2uBIyuBIuuBIruBInuBIjuBIfuBIbuBIXuBIT\
-uBISuBUSuBgSuBwSuCASuCQSuCgSuCwSuDASuDQSuDgSuDsSuD8SuEMSuEcS\
-uEsSuE8SuFMSuFcSuFsSuF4SuGISuGYSuGoSuG4SuHISuHYSuHoSuH4SuIES\
-uIUSuIkSuI0SuJESuJUSuJkSuJ0SuKASuKQSuKgSuKwSuLASuLQSuLgStLgS\
-sLgSrLgSqLgSpLgSoLgSnbgSmbgSlbgSkbgSjbgSibgShbgSgbgSfrgSergS\
-drgScrgSbrgSargSZrgSYrgSXrgSW7gSV7gSU7gST7gSS7gSR7gSQ7gSP7gS\
-O7gSOLgSNLgSMLgSLLgSKLgSJLgSILgSHLgSGLgSFbgTErgXErgbErgfErgj\
-ErgnErgrErguErgyErg2Erg6Erg+ErhCErhGErhKErhOErhRErhVErhZErhd\
-ErhhErhlErhpErhtErhxErh0Erh4Erh8EriAEriEEriIEriMEriQEriUEriX\
-EribErifErijErinErirErivErizEri3Eri4ErW4ErG4Eq24Eqq4Eqa4EqK4\
-Ep64Epq4Epa4EpK4Eo64Eoq4Eoe4EoO4En+4Enu4Ene4EnO4Em+4Emu4Eme4\
-EmS4EmC4Ely4Eli4ElS4ElC4Eky4Eki4EkS4EkG4Ej24Ejm4EjW4EjG4Ei24\
-Eim4EiW4EiG4Eh64Ehq4Eha/ExO/FxO/GxO/HxO/IxO/JxO/KxO/LxO/MxO/\
-NxO/OxO/PxO/QxO/RxO/SxO/TxO/UxO/VxO/WxO/XxO/YxO/ZxO/bBO/cBO/\
-dBO/eBO/fBO/gBO/hBO/iBO/jBO/kBO/lBO/mBO/nBO/oBO/pBO/qBO/rBO/\
-sBO/tBO/uBO/vBO+vxO6vxO2vxOyvxOtvxOpvxOlvxOhvxOdvxOZvxOVvxOR\
-vxONvxOJvxOFvxOBvxN9vxN5vxN1vxNxvxNtvxNpvxNlvxNhvxNdvxNZvxNV\
-vxNRvxNNvxNJvxNEvxNAvxM8vxM4vxM0vxMwvxMsvxMovxMkvxMgvxMcvxMY\
-vxMUvxMTvxUTvxkTvx0TvyETvyUTvyoTvy4TvzITvzYTvzoTvz4Tv0ITv0YT\
-v0oTv04Tv1ITv1YTv1oTv14Tv2ITv2YTv2oTv24Tv3ITv3YTv3oTv34Tv4IT\
-v4YTv4oTv48Tv5MTv5cTv5sTv58Tv6MTv6cTv6sTv68Tv7MTv7cTv7sTv78T\
-u78Tt78Ts78Tr78Tq78Tp78To78Tn78Tm78Tl78Tk78Tj78Tir8Thr8Tgr8T\
-fr8Ter8Tdr8Tcr8Tbr8Tar8TZr8TYr8TXr8TWr8TVr8TUr8TTr8TSr8TRr8T\
-Qr8TPr8TOr8TNr8TMr8TLr8TKr8TJb8TIb8THb8TGb8TFb8UE78YE78cE78g\
-E78kE78oE78sE78wE780E784E788E79AE79EE79JE79NE79RE79VE79ZE79d\
-E79hE79lE79pE79tE79xE791E795E799E7+BE7+FE7+JE7+NE7+RE7+VE7+Z\
-E7+dE7+hE7+lE7+pE7+tE7+yE7+2E7+6E7++E7+/E7y/E7i/E7S/E7C/E6y/\
-E6i/E6S/E6C/E5y/E5i/E5S/E5C/E4y/E4i/E4S/E4C/E3y/E3i/E3S/E3C/\
-E2y/E2e/E2O/E1+/E1u/E1e/E1O/E0+/E0u/E0e/E0O/Ez+/Ezu/Eze/EzO/\
-Ey+/Eyu/Eye/EyO/Ex+/Exu/ExfGExPGGBPGHBPGIBPGJBPGKBPGLRPGMRPG\
-NRPGORPGPRPGQRPGRhPGShPGThPGUhPGVhPGWxPGXxPGYxPGZxPGaxPGcBPG\
-dBPGeBPGfBPGgBPGhRPGiRPGjRPGkRPGlRPGmRPGnhPGohPGphPGqhPGrhPG\
-sxPGtxPGuxPGvxPGwxPFxhPBxhO8xhO4xhO0xhOwxhOsxhOnxhOjxhOfxhOb\
-xhOXxhOSxhOOxhOKxhOGxhOCxhN+xhN5xhN1xhNxxhNtxhNpxhNkxhNgxhNc\
-xhNYxhNUxhNPxhNLxhNHxhNDxhM/xhM6xhM2xhMyxhMuxhMqxhMmxhMhxhMd\
-xhMZxhMVxhMTxhYTxhoTxh8TxiMTxicTxisTxi8TxjMTxjgTxjwTxkATxkQT\
-xkgTxk0TxlETxlUTxlkTxl0TxmITxmYTxmoTxm4TxnITxncTxnsTxn8TxoMT\
-xocTxosTxpATxpQTxpgTxpwTxqATxqUTxqkTxq0TxrETxrUTxroTxr4TxsIT\
-xsYTwsYTvsYTusYTtcYTscYTrcYTqcYTpcYToMYTnMYTmMYTlMYTkMYTi8YT\
-h8YTg8YTf8YTe8YTd8YTcsYTbsYTasYTZsYTYsYTXcYTWcYTVcYTUcYTTcYT\
-SMYTRMYTQMYTPMYTOMYTM8YTL8YTK8YTJ8YTI8YTH8YTGsYTFsYVE8YZE8Yd\
-E8YhE8YmE8YqE8YuE8YyE8Y2E8Y6E8Y/E8ZDE8ZHE8ZLE8ZPE8ZUE8ZYE8Zc\
-E8ZgE8ZkE8ZpE8ZtE8ZxE8Z1E8Z5E8Z+E8aCE8aGE8aKE8aOE8aSE8aXE8ab\
-E8afE8ajE8anE8asE8awE8a0E8a4E8a8E8bBE8bFE8bGE8PGE7/GE7vGE7fG\
-E7PGE67GE6rGE6bGE6LGE57GE5nGE5XGE5HGE43GE4nGE4XGE4DGE3zGE3jG\
-E3TGE3DGE2vGE2fGE2PGE1/GE1vGE1bGE1LGE07GE0rGE0bGE0HGEz3GEznG\
-EzXGEzHGEy3GEyjGEyTGEyDGExzGExjNFBTNGBTNHRTNIRTNJRTNKhTNLhTN\
-MhTNNxTNOxTNPxTNRBTNSBTNTRTNURTNVRTNWhTNXhTNYhTNZxTNaxTNbxTN\
-dBTNeBTNfBTNgRTNhRTNiRTNjhTNkhTNlhTNmxTNnxTNoxTNqBTNrBTNsBTN\
-tRTNuRTNvRTNwhTNxhTNyhTMzRTIzRTDzRS/zRS7zRS2zRSyzRStzRSpzRSl\
-zRSgzRSczRSYzRSTzRSPzRSLzRSGzRSCzRR+zRR5zRR1zRRxzRRszRRozRRk\
-zRRfzRRbzRRXzRRSzRROzRRKzRRFzRRBzRQ9zRQ4zRQ0zRQwzRQrzRQnzRQj\
-zRQezRQazRQWzRQUzRcUzRsUzSAUzSQUzSgUzS0UzTEUzTUUzToUzT4UzUIU\
-zUcUzUsUzU8UzVQUzVgUzVwUzWEUzWUUzWkUzW4UzXIUzXYUzXsUzX8UzYQU\
-zYgUzYwUzZEUzZUUzZkUzZ4UzaIUzaYUzasUza8UzbMUzbgUzbwUzcAUzcUU\
-zckUzc0Uyc0Uxc0UwM0UvM0UuM0Us80Ur80Uq80Ups0Uos0Uns0Umc0Ulc0U\
-kc0UjM0UiM0UhM0Uf80Ue80Uds0Ucs0Ubs0Uac0UZc0UYc0UXM0UWM0UVM0U\
-T80US80UR80UQs0UPs0UOs0UNc0UMc0ULc0UKM0UJM0UIM0UG80UF80WFM0a\
-FM0eFM0jFM0nFM0rFM0wFM00FM04FM09FM1BFM1FFM1KFM1OFM1SFM1XFM1b\
-FM1fFM1kFM1oFM1sFM1xFM11FM15FM1+FM2CFM2GFM2LFM2PFM2TFM2YFM2c\
-FM2gFM2lFM2pFM2tFM2yFM22FM27FM2/FM3DFM3IFM3MFM3NFMrNFMbNFMLN\
-FL3NFLnNFLXNFLDNFKzNFKjNFKPNFJ/NFJvNFJbNFJLNFI7NFInNFIXNFIHN\
-FHzNFHjNFHTNFG/NFGvNFGfNFGLNFF7NFFrNFFXNFFHNFE3NFEjNFETNFD/N\
-FDvNFDfNFDLNFC7NFCrNFCXNFCHNFB3NFBjUFRXUGRXUHhXUIhXUJxXUKxXU\
-MBXUNBXUORXUPRXUQhXURhXUSxXUTxXUVBXUWBXUXRXUYRXUZhXUahXUbxXU\
-cxXUeBXUfBXUgRXUhRXUihXUjhXUkxXUlxXUnBXUoBXUpRXUqRXUrhXUshXU\
-txXUuxXUwBXUxBXUyRXUzRXU0RXT1BXP1BXK1BXG1BXB1BW91BW41BW01BWv\
-1BWr1BWm1BWi1BWd1BWZ1BWU1BWQ1BWL1BWH1BWC1BV+1BV51BV11BVw1BVs\
-1BVn1BVj1BVe1BVa1BVV1BVR1BVM1BVI1BVD1BU/1BU61BU21BUx1BUt1BUo\
-1BUk1BUf1BUb1BUW1BUV1BgV1BwV1CEV1CUV1CoV1C4V1DMV1DcV1DwV1EAV\
-1EUV1EkV1E4V1FIV1FcV1FsV1GAV1GQV1GkV1G0V1HIV1HYV1HsV1H8V1IQV\
-1IgV1I0V1JEV1JYV1JoV1J8V1KMV1KgV1KwV1LEV1LUV1LoV1L4V1MMV1McV\
-1MwV1NAV1NQV0NQVzNQVx9QVw9QVvtQVutQVtdQVsdQVrNQVqNQVo9QVn9QV\
-mtQVltQVkdQVjdQViNQVhNQVf9QVe9QVdtQVctQVbdQVadQVZNQVYNQVW9QV\
-V9QVUtQVTtQVSdQVRdQVQNQVPNQVN9QVM9QVLtQVKtQVJdQVIdQVHNQVGNQW\
-FdQbFdQfFdQkFdQoFdQtFdQxFdQ2FdQ6FdQ/FdRDFdRIFdRMFdRRFdRVFdRa\
-FdReFdRjFdRnFdRsFdRwFdR1FdR5FdR+FdSCFdSHFdSLFdSQFdSUFdSZFdSd\
-FdSiFdSmFdSrFdSvFdS0FdS4FdS9FdTBFdTGFdTKFdTPFdTTFdTUFdHUFc3U\
-FcnUFcTUFcDUFbvUFbfUFbLUFa7UFanUFaXUFaDUFZzUFZfUFZPUFY7UFYrU\
-FYXUFYHUFXzUFXjUFXPUFW/UFWrUFWbUFWHUFV3UFVjUFVTUFU/UFUvUFUbU\
-FULUFT3UFTnUFTTUFTDUFSvUFSfUFSLUFR7UFRncFhbcGhbcHxbcIxbcKBbc\
-LRbcMRbcNhbcOxbcPxbcRBbcSRbcTRbcUhbcVxbcWxbcYBbcZBbcaRbcbhbc\
-chbcdxbcfBbcgBbchRbcihbcjhbckxbcmBbcnBbcoRbcpRbcqhbcrxbcsxbc\
-uBbcvRbcwRbcxhbcyxbczxbc1Bbc2Rba3BbV3BbR3BbM3BbI3BbD3Ba+3Ba6\
-3Ba13Baw3Bas3Ban3Bai3Bae3BaZ3BaU3BaQ3BaL3BaH3BaC3BZ93BZ53BZ0\
-3BZv3BZr3BZm3BZh3BZd3BZY3BZT3BZP3BZK3BZG3BZB3BY83BY43BYz3BYu\
-3BYq3BYl3BYg3BYc3BYX3BYW3BkW3B0W3CIW3CcW3CsW3DAW3DQW3DkW3D4W\
-3EIW3EcW3EwW3FAW3FUW3FoW3F4W3GMW3GgW3GwW3HEW3HUW3HoW3H8W3IMW\
-3IgW3I0W3JEW3JYW3JsW3J8W3KQW3KkW3K0W3LIW3LcW3LsW3MAW3MQW3MkW\
-3M4W3NIW3NcW3NwW19wW0twWztwWydwWxNwWwNwWu9wWt9wWstwWrdwWqdwW\
-pNwWn9wWm9wWltwWkdwWjdwWiNwWg9wWf9wWetwWddwWcdwWbNwWaNwWY9wW\
-XtwWWtwWVdwWUNwWTNwWR9wWQtwWPtwWOdwWNNwWMNwWK9wWJ9wWItwWHdwW\
-GdwXFtwcFtwgFtwlFtwqFtwuFtwzFtw4Ftw8FtxBFtxGFtxKFtxPFtxTFtxY\
-FtxdFtxhFtxmFtxrFtxvFtx0Ftx5Ftx9FtyCFtyHFtyLFtyQFtyUFtyZFtye\
-FtyiFtynFtysFtywFty1Fty6Fty+FtzDFtzIFtzMFtzRFtzVFtzaFtzcFtnc\
-FtTcFs/cFsvcFsbcFsHcFr3cFrjcFrPcFq/cFqrcFqXcFqHcFpzcFpjcFpPc\
-Fo7cForcFoXcFoDcFnzcFnfcFnLcFm7cFmncFmTcFmDcFlvcFlfcFlLcFk3c\
-FkncFkTcFj/cFjvcFjbcFjHcFi3cFijcFiPcFh/cFhrjFhbjGxbjIBbjJRbj\
-KRbjLhbjMxbjOBbjPRbjQRbjRhbjSxbjUBbjVRbjWRbjXhbjYxbjaBbjbRbj\
-cRbjdhbjexbjgBbjhRbjiRbjjhbjkxbjmBbjnBbjoRbjphbjqxbjsBbjtBbj\
-uRbjvhbjwxbjyBbjzBbj0Rbj1hbj2xbj4Bbh4xbc4xbY4xbT4xbO4xbJ4xbE\
-4xbA4xa74xa24xax4xas4xao4xaj4xae4xaZ4xaV4xaQ4xaL4xaG4xaB4xZ9\
-4xZ44xZz4xZu4xZp4xZl4xZg4xZb4xZW4xZR4xZN4xZI4xZD4xY+4xY54xY1\
-4xYw4xYr4xYm4xYh4xYd4xYY4xYW4xkW4x4W4yMW4ygW4y0W4zEW4zYW4zsW\
-40AW40UW40kW404W41MW41gW410W42EW42YW42sW43AW43UW43kW434W44MW\
-44gW440W45EW45YW45sW46AW46QW46kW464W47MW47gW47wW48EW48YW48sW\
-49AW49QW49kW494W4+MW3uMW2eMW1OMW0OMWy+MWxuMWweMWvOMWuOMWs+MW\
-ruMWqeMWpOMWoOMWm+MWluMWkeMWjeMWiOMWg+MWfuMWeeMWdeMWcOMWa+MW\
-ZuMWYeMWXeMWWOMWU+MWTuMWSeMWReMWQOMWO+MWNuMWMeMWLeMWKOMWI+MW\
-HuMWGeMYFuMdFuMhFuMmFuMrFuMwFuM1FuM5FuM+FuNDFuNIFuNNFuNRFuNW\
-FuNbFuNgFuNlFuNpFuNuFuNzFuN4FuN9FuOBFuOGFuOLFuOQFuOVFuOZFuOe\
-FuOjFuOoFuOsFuOxFuO2FuO7FuPAFuPEFuPJFuPOFuPTFuPYFuPcFuPhFuPj\
-FuDjFtvjFtbjFtHjFszjFsjjFsPjFr7jFrnjFrTjFrDjFqvjFqbjFqHjFpzj\
-FpjjFpPjFo7jFonjFoXjFoDjFnvjFnbjFnHjFm3jFmjjFmPjFl7jFlnjFlXj\
-FlDjFkvjFkbjFkHjFj3jFjjjFjPjFi7jFinjFiXjFiDjFhvqFxfqHBfqIRfq\
-JhfqKxfqMBfqNRfqOhfqPxfqQxfqSBfqTRfqUhfqVxfqXBfqYRfqZhfqaxfq\
-cBfqdRfqehfqfxfqhBfqiRfqjhfqkxfqmBfqnRfqoRfqphfqqxfqsBfqtRfq\
-uhfqvxfqxBfqyRfqzhfq0xfq2Bfq3Rfq4hfq5xfo6hfj6hfe6hfa6hfV6hfQ\
-6hfL6hfG6hfB6he86he36hey6het6heo6hej6hee6heZ6heU6heP6heK6heF\
-6heA6hd86hd36hdy6hdt6hdo6hdj6hde6hdZ6hdU6hdP6hdK6hdF6hdA6hc7\
-6hc26hcx6hcs6hcn6hci6hce6hcZ6hcX6hoX6h8X6iQX6ikX6i4X6jMX6jgX\
-6j0X6kIX6kcX6kwX6lEX6lYX6lsX6l8X6mQX6mkX6m4X6nMX6ngX6n0X6oIX\
-6ocX6owX6pEX6pYX6psX6qAX6qUX6qoX6q8X6rQX6rkX6r0X6sIX6scX6swX\
-6tEX6tYX6tsX6uAX6uUX6uoX5eoX4OoX2+oX1uoX0eoXzOoXx+oXwuoXveoX\
-ueoXtOoXr+oXquoXpeoXoOoXm+oXluoXkeoXjOoXh+oXguoXfeoXeOoXc+oX\
-buoXaeoXZOoXX+oXW+oXVuoXUeoXTOoXR+oXQuoXPeoXOOoXM+oXLuoXKeoX\
-JOoXH+oXGuoZF+oeF+oiF+onF+osF+oxF+o2F+o7F+pAF+pFF+pKF+pPF+pU\
-F+pZF+peF+pjF+poF+ptF+pyF+p3F+p8F+qAF+qFF+qKF+qPF+qUF+qZF+qe\
-F+qjF+qoF+qtF+qyF+q3F+q8F+rBF+rGF+rLF+rQF+rVF+raF+reF+rjF+ro\
-F+rqF+fqF+LqF93qF9jqF9PqF87qF8nqF8TqF7/qF7rqF7XqF7DqF6vqF6bq\
-F6HqF53qF5jqF5PqF47qF4nqF4TqF3/qF3rqF3XqF3DqF2vqF2bqF2HqF1zq\
-F1fqF1LqF03qF0jqF0PqFz/qFzrqFzXqFzDqFyvqFybqFyHqFxzxGBjxHRjx\
-IhjxJxjxLBjxMRjxNhjxOxjxQBjxRhjxSxjxUBjxVRjxWhjxXxjxZBjxaRjx\
-bhjxcxjxeRjxfhjxgxjxiBjxjRjxkhjxlxjxnBjxoRjxphjxqxjxsRjxthjx\
-uxjxwBjxxRjxyhjxzxjx1Bjx2Rjx3hjx5Bjx6Rjx7hjv8Rjq8Rjl8Rjg8Rjb\
-8RjW8RjR8RjM8RjH8RjC8Ri88Ri38Riy8Rit8Rio8Rij8Rie8RiZ8RiU8RiP\
-8RiK8RiE8Rh/8Rh68Rh18Rhw8Rhr8Rhm8Rhh8Rhc8RhX8RhR8RhM8RhH8RhC\
-8Rg98Rg48Rgz8Rgu8Rgp8Rgk8Rge8RgZ8RgY8RsY8SAY8SUY8SoY8S8Y8TUY\
-8ToY8T8Y8UQY8UkY8U4Y8VMY8VgY8V0Y8WIY8WgY8W0Y8XIY8XcY8XwY8YEY\
-8YYY8YsY8ZAY8ZUY8ZsY8aAY8aUY8aoY8a8Y8bQY8bkY8b4Y8cMY8cgY8c0Y\
-8dMY8dgY8d0Y8eIY8ecY8ewY8fEY7PEY5/EY4vEY3fEY2PEY0/EYzfEYyPEY\
-w/EYvvEYufEYtPEYr/EYqvEYpfEYoPEYm/EYlfEYkPEYi/EYhvEYgfEYfPEY\
-d/EYcvEYbfEYaPEYYvEYXfEYWPEYU/EYTvEYSfEYRPEYP/EYOvEYNfEYL/EY\
-KvEYJfEYIPEYG/EZGPEeGPEkGPEpGPEuGPEzGPE4GPE9GPFCGPFHGPFMGPFR\
-GPFXGPFcGPFhGPFmGPFrGPFwGPF1GPF6GPF/GPGEGPGKGPGPGPGUGPGZGPGe\
-GPGjGPGoGPGtGPGyGPG3GPG8GPHCGPHHGPHMGPHRGPHWGPHbGPHgGPHlGPHq\
-GPHvGPHxGO7xGOnxGOTxGN7xGNnxGNTxGM/xGMrxGMXxGMDxGLvxGLbxGLHx\
-GKvxGKbxGKHxGJzxGJfxGJLxGI3xGIjxGIPxGH7xGHnxGHPxGG7xGGnxGGTx\
-GF/xGFrxGFXxGFDxGEvxGEbxGEDxGDvxGDbxGDHxGCzxGCfxGCLxGB34GBj4\
-Hhj4Ixj4KBj4LRj4Mxj4OBj4PRj4Qhj4SBj4TRj4Uhj4Vxj4XRj4Yhj4Zxj4\
-bBj4chj4dxj4fBj4gRj4hxj4jBj4kRj4lhj4nBj4oRj4phj4qxj4sRj4thj4\
-uxj4wBj4xhj4yxj40Bj41Rj42xj44Bj45Rj46hj48Bj49Rj3+Bjx+Bjs+Bjn\
-+Bji+Bjc+BjX+BjS+BjN+BjH+BjC+Bi9+Bi4+Biy+Bit+Bio+Bij+Bid+BiY\
-+BiT+BiO+BiI+BiD+Bh++Bh5+Bhz+Bhu+Bhp+Bhk+Bhe+BhZ+BhU+BhP+BhJ\
-+BhE+Bg/+Bg6+Bg0+Bgv+Bgq+Bgl+Bgf+Bga+BgY+BwY+CEY+CYY+CwY+DEY\
-+DYY+DsY+EEY+EYY+EsY+FAY+FYY+FsY+GAY+GUY+GsY+HAY+HUY+HoY+IAY\
-+IUY+IoY+I8Y+JUY+JoY+J8Y+KQY+KoY+K8Y+LQY+LkY+L8Y+MQY+MkY+M4Y\
-+NQY+NkY+N4Y+OMY+OkY+O4Y+PMY+PgY8/gY7vgY6fgY4/gY3vgY2fgY1PgY\
-zvgYyfgYxPgYv/gYufgYtPgYr/gYqvgYpPgYn/gYmvgYlfgYj/gYivgYhfgY\
-gPgYevgYdfgYcPgYa/gYZfgYYPgYW/gYVvgYUPgYS/gYRvgYQfgYO/gYNvgY\
-MfgYLPgYJvgYIfgYHPgaGPgfGPglGPgqGPgvGPg0GPg6GPg/GPhEGPhJGPhP\
-GPhUGPhZGPheGPhkGPhpGPhuGPhzGPh5GPh+GPiDGPiIGPiOGPiTGPiYGPid\
-GPijGPioGPitGPiyGPi4GPi9GPjCGPjHGPjNGPjSGPjXGPjcGPjiGPjnGPjs\
-GPjxGPj3GPj4GPX4GPD4GOr4GOX4GOD4GNv4GNX4GND4GMv4GMb4GMD4GLv4\
-GLb4GLH4GKv4GKb4GKH4GJz4GJb4GJH4GIz4GIf4GIH4GHz4GHf4GHL4GGz4\
-GGf4GGL4GF34GFf4GFL4GE34GEj4GEL4GD34GDj4GDP4GC34GCj4GCP4GB74\
-GBj4Hhj4Ixj4KBj4LRj4Mxj4OBj4PRj4Qhj4SBj4TRj4Uhj4Vxj4XRj4Yhj4\
-Zxj4bBj4chj4dxj4fBj4gRj4hxj4jBj4kRj4lhj4nBj4oRj4phj4qxj4sRj4\
-thj4uxj4wBj4xhj4yxj40Bj41Rj42xj44Bj45Rj46hj48Bj49Rj3+Bjx+Bjs\
-+Bjn+Bji+Bjc+BjX+BjS+BjN+BjH+BjC+Bi9+Bi4+Biy+Bit+Bio+Bij+Bid\
-+BiY+BiT+BiO+BiI+BiD+Bh++Bh5+Bhz+Bhu+Bhp+Bhk+Bhe+BhZ+BhU+BhP\
-+BhJ+BhE+Bg/+Bg6+Bg0+Bgv+Bgq+Bgl+Bgf+Bga+BgY+BwY+CEY+CYY+CwY\
-+DEY+DYY+DsY+EEY+EYY+EsY+FAY+FYY+FsY+GAY+GUY+GsY+HAY+HUY+HoY\
-+IAY+IUY+IoY+I8Y+JUY+JoY+J8Y+KQY+KoY+K8Y+LQY+LkY+L8Y+MQY+MkY\
-+M4Y+NQY+NkY+N4Y+OMY+OkY+O4Y+PMY+PgY8/gY7vgY6fgY4/gY3vgY2fgY\
-1PgYzvgYyfgYxPgYv/gYufgYtPgYr/gYqvgYpPgYn/gYmvgYlfgYj/gYivgY\
-hfgYgPgYevgYdfgYcPgYa/gYZfgYYPgYW/gYVvgYUPgYS/gYRvgYQfgYO/gY\
-NvgYMfgYLPgYJvgYIfgYHPgaGPgfGPglGPgqGPgvGPg0GPg6GPg/GPhEGPhJ\
-GPhPGPhUGPhZGPheGPhkGPhpGPhuGPhzGPh5GPh+GPiDGPiIGPiOGPiTGPiY\
-GPidGPijGPioGPitGPiyGPi4GPi9GPjCGPjHGPjNGPjSGPjXGPjcGPjiGPjn\
-GPjsGPjxGPj3GPj4GPX4GPD4GOr4GOX4GOD4GNv4GNX4GND4GMv4GMb4GMD4\
-GLv4GLb4GLH4GKv4GKb4GKH4GJz4GJb4GJH4GIz4GIf4GIH4GHz4GHf4GHL4\
-GGz4GGf4GGL4GF34GFf4GFL4GE34GEj4GEL4GD34GDj4GDP4GC34GCj4GCP4\
-GB74ISH4JiH4KyH4MCH4NSH4OyH4QCH4RSH4SiH4TyH4VCH4WSH4XiH4YyH4\
-aCH4bSH4ciH4dyH4fCH4gSH4hiH4iyH4kCH4lSH4miH4nyH4pCH4qSH4riH4\
-syH4uSH4viH4wyH4yCH4zSH40iH41yH43CH44SH45iH46yH48CH49SH3+CHy\
-+CHt+CHo+CHi+CHd+CHY+CHT+CHO+CHJ+CHE+CG/+CG6+CG1+CGw+CGr+CGm\
-+CGh+CGc+CGX+CGS+CGN+CGI+CGD+CF++CF5+CF0+CFv+CFq+CFl+CFf+CFa\
-+CFV+CFQ+CFL+CFG+CFB+CE8+CE3+CEy+CEt+CEo+CEj+CEh+CUh+Coh+C8h\
-+DQh+Dkh+D4h+EMh+Egh+E0h+FIh+Fch+Fwh+GEh+GYh+Gsh+HAh+HUh+Hoh\
-+H8h+IQh+Ikh+I8h+JQh+Jkh+J4h+KMh+Kgh+K0h+LIh+Lch+Lwh+MEh+MYh\
-+Msh+NAh+NUh+Noh+N8h+OQh+Okh+O4h+PMh+Pgh8/gh7vgh6fgh5Pgh3/gh\
-2vgh1fgh0Pghy/ghxvghwfghvPght/ghsvghrfghqPgho/ghnvghmfghlPgh\
-j/ghifghhPghf/ghevghdfghcPgha/ghZvghYfghXPghV/ghUvghTfghSPgh\
-Q/ghPvghOfghNPghL/ghKvghJfgjIfgoIfgtIfgyIfg3Ifg8IfhBIfhGIfhL\
-IfhQIfhVIfhaIfhfIfhlIfhqIfhvIfh0Ifh5Ifh+IfiDIfiIIfiNIfiSIfiX\
-IficIfihIfimIfirIfiwIfi1Ifi6Ifi/IfjEIfjJIfjOIfjTIfjYIfjdIfji\
-IfjoIfjtIfjyIfj3Ifj4IfX4IfD4Iev4Ieb4IeH4Idz4Idf4IdL4Ic34Icj4\
-IcP4Ib74Ibn4IbP4Ia74Ian4IaT4IZ/4IZr4IZX4IZD4IYv4IYb4IYH4IXz4\
-IXf4IXL4IW34IWj4IWP4IV74IVn4IVT4IU/4IUr4IUX4IUD4ITv4ITX4ITD4\
-ISv4ISb4Kir4Lyr4NCr4OSr4Pir4Qir4Ryr4TCr4USr4Vir4Wyr4Xyr4ZCr4\
-aSr4bir4cyr4eCr4fCr4gSr4hir4iyr4kCr4lSr4mSr4nir4oyr4qCr4rSr4\
-sir4tir4uyr4wCr4xSr4yir4zir40yr42Cr43Sr44ir45yr46yr48Cr49Sr3\
-+Cry+Crt+Cro+Crj+Crf+Cra+CrV+CrQ+CrL+CrG+CrC+Cq9+Cq4+Cqz+Cqu\
-+Cqp+Cql+Cqg+Cqb+CqW+CqR+CqM+CqI+CqD+Cp++Cp5+Cp0+Cpw+Cpr+Cpm\
-+Cph+Cpc+CpX+CpT+CpO+CpJ+CpE+Co/+Co6+Co2+Cox+Cos+Coq+C4q+DIq\
-+Dcq+Dwq+EEq+EYq+Eoq+E8q+FQq+Fkq+F4q+GMq+Gcq+Gwq+HEq+HYq+Hsq\
-+IAq+IQq+Ikq+I4q+JMq+Jgq+J0q+KEq+KYq+Ksq+LAq+LUq+Loq+L4q+MMq\
-+Mgq+M0q+NIq+Ncq+Nsq+OAq+OUq+Ooq+O8q+PQq+Pgq9Pgq7/gq6vgq5fgq\
-4Pgq2/gq1/gq0vgqzfgqyPgqw/gqvvgquvgqtfgqsPgqq/gqpvgqofgqnfgq\
-mPgqk/gqjvgqifgqhPgqgPgqe/gqdvgqcfgqbPgqZ/gqY/gqXvgqWfgqVPgq\
-T/gqSvgqRvgqQfgqPPgqN/gqMvgqLvgsKvgxKvg2Kvg6Kvg/KvhEKvhJKvhO\
-KvhTKvhXKvhcKvhhKvhmKvhrKvhwKvh0Kvh5Kvh+KviDKviIKviMKviRKviW\
-KvibKvigKvilKvipKviuKvizKvi4Kvi9KvjCKvjGKvjLKvjQKvjVKvjaKvjf\
-KvjjKvjoKvjtKvjyKvj3Kvj4KvX4KvD4Kuv4Kuf4KuL4Kt34Ktj4KtP4Ks74\
-Ksr4KsX4KsD4Krv4Krb4KrL4Kq34Kqj4KqP4Kp74Kpn4KpX4KpD4Kov4Kob4\
-KoH4Knz4Knj4KnP4Km74Kmn4KmT4Kl/4Klv4Klb4KlH4Kkz4Kkf4KkL4Kj74\
-Kjn4KjT4Ki/4MzP4ODP4PDP4QTP4RjP4SjP4TzP4VDP4WDP4XTP4YTP4ZjP4\
-azP4bzP4dDP4eTP4fTP4gjP4hjP4izP4kDP4lDP4mTP4nTP4ojP4pzP4qzP4\
-sDP4tTP4uTP4vjP4wjP4xzP4zDP40DP41TP42jP43jP44zP45zP47DP48TP4\
-9TP3+DPy+DPu+DPp+DPk+DPg+DPb+DPW+DPS+DPN+DPJ+DPE+DO/+DO7+DO2\
-+DOy+DOt+DOo+DOk+DOf+DOa+DOW+DOR+DON+DOI+DOD+DN/+DN6+DN1+DNx\
-+DNs+DNo+DNj+DNe+DNa+DNV+DNR+DNM+DNH+DND+DM++DM5+DM1+DMz+DYz\
-+Dsz+EAz+EQz+Ekz+E0z+FIz+Fcz+Fsz+GAz+GUz+Gkz+G4z+HIz+Hcz+Hwz\
-+IAz+IUz+Ikz+I4z+JMz+Jcz+Jwz+KEz+KUz+Koz+K4z+LMz+Lgz+Lwz+MEz\
-+MYz+Moz+M8z+NMz+Ngz+N0z+OEz+OYz+Ooz+O8z+PQz+Pgz9Pgz7/gz6vgz\
-5vgz4fgz3fgz2Pgz0/gzz/gzyvgzxvgzwfgzvPgzuPgzs/gzrvgzqvgzpfgz\
-ofgznPgzl/gzk/gzjvgzifgzhfgzgPgzfPgzd/gzcvgzbvgzafgzZfgzYPgz\
-W/gzV/gzUvgzTfgzSfgzRPgzQPgzO/gzNvg1M/g5M/g+M/hDM/hHM/hMM/hR\
-M/hVM/haM/heM/hjM/hoM/hsM/hxM/h1M/h6M/h/M/iDM/iIM/iNM/iRM/iW\
-M/iaM/ifM/ikM/ioM/itM/iyM/i2M/i7M/i/M/jEM/jJM/jNM/jSM/jWM/jb\
-M/jgM/jkM/jpM/juM/jyM/j3M/j4M/X4M/H4M+z4M+f4M+P4M974M9r4M9X4\
-M9D4M8z4M8f4M8L4M774M7n4M7X4M7D4M6v4M6f4M6L4M534M5n4M5T4M5D4\
-M4v4M4b4M4L4M334M3n4M3T4M2/4M2v4M2b4M2H4M134M1j4M1T4M0/4M0r4\
-M0b4M0H4Mzz4Mzj4PDz4QTz4RTz4STz4Tjz4Ujz4Vzz4Wzz4Xzz4ZDz4aDz4\
-bTz4cTz4djz4ejz4fjz4gzz4hzz4jDz4kDz4lDz4mTz4nTz4ojz4pjz4qjz4\
-rzz4szz4uDz4vDz4wDz4xTz4yTz4zjz40jz41zz42zz43zz45Dz46Dz47Tz4\
-8Tz49Tz3+Dzy+Dzu+Dzq+Dzl+Dzh+Dzc+DzY+DzU+DzP+DzL+DzG+DzC+Dy+\
-+Dy5+Dy1+Dyw+Dys+Dyo+Dyj+Dyf+Dya+DyW+DyR+DyN+DyJ+DyE+DyA+Dx7\
-+Dx3+Dxz+Dxu+Dxq+Dxl+Dxh+Dxd+DxY+DxU+DxP+DxL+DxH+DxC+Dw++Dw8\
-+D88+EQ8+Eg8+Ew8+FE8+FU8+Fo8+F48+GI8+Gc8+Gs8+HA8+HQ8+Hg8+H08\
-+IE8+IY8+Io8+I88+JM8+Jc8+Jw8+KA8+KU8+Kk8+K08+LI8+LY8+Ls8+L88\
-+MM8+Mg8+Mw8+NE8+NU8+Nk8+N48+OI8+Oc8+Os8+PA8+PQ8+Pg89Pg88Pg8\
-6/g85/g84vg83vg82fg81fg80fg8zPg8yPg8w/g8v/g8u/g8tvg8svg8rfg8\
-qfg8pfg8oPg8nPg8l/g8k/g8j/g8ivg8hvg8gfg8ffg8ePg8dPg8cPg8a/g8\
-Z/g8Yvg8Xvg8Wvg8Vfg8Ufg8TPg8SPg8RPg8P/g+PPhCPPhHPPhLPPhPPPhU\
-PPhYPPhdPPhhPPhlPPhqPPhuPPhzPPh3PPh7PPiAPPiEPPiJPPiNPPiRPPiW\
-PPiaPPifPPijPPioPPisPPiwPPi1PPi5PPi+PPjCPPjGPPjLPPjPPPjUPPjY\
-PPjcPPjhPPjlPPjqPPjuPPjyPPj3PPj4PPX4PPH4PO34POj4POT4PN/4PNv4\
-PNf4PNL4PM74PMn4PMX4PMD4PLz4PLj4PLP4PK/4PKr4PKb4PKL4PJ34PJn4\
-PJT4PJD4PIz4PIf4PIP4PH74PHr4PHb4PHH4PG34PGj4PGT4PF/4PFv4PFf4\
-PFL4PE74PEn4PEX4PEH4RUX4SUX4TkX4UkX4VkX4WkX4XkX4Y0X4Z0X4a0X4\
-b0X4c0X4eEX4fEX4gEX4hEX4iEX4jUX4kUX4lUX4mUX4nUX4okX4pkX4qkX4\
-rkX4skX4t0X4u0X4v0X4w0X4x0X4zEX40EX41EX42EX43EX44UX45UX46UX4\
-7UX48UX49kX3+EXz+EXv+EXq+EXm+EXi+EXe+EXa+EXV+EXR+EXN+EXJ+EXF\
-+EXA+EW8+EW4+EW0+EWw+EWr+EWn+EWj+EWf+EWb+EWW+EWS+EWO+EWK+EWG\
-+EWB+EV9+EV5+EV1+EVx+EVs+EVo+EVk+EVg+EVc+EVX+EVT+EVP+EVL+EVH\
-+EVF+EhF+ExF+FBF+FVF+FlF+F1F+GFF+GVF+GpF+G5F+HJF+HZF+HpF+H9F\
-+INF+IdF+ItF+I9F+JRF+JhF+JxF+KBF+KRF+KlF+K1F+LFF+LVF+LlF+L5F\
-+MJF+MZF+MpF+M5F+NNF+NdF+NtF+N9F+ONF+OhF+OxF+PBF+PRF+PhF9PhF\
-8PhF7PhF6PhF4/hF3/hF2/hF1/hF0/hFzvhFyvhFxvhFwvhFvvhFufhFtfhF\
-sfhFrfhFqfhFpPhFoPhFnPhFmPhFlPhFj/hFi/hFh/hFg/hFf/hFevhFdvhF\
-cvhFbvhFavhFZfhFYfhFXfhFWfhFVfhFUPhFTPhFSPhHRfhLRfhPRfhTRfhX\
-RfhcRfhgRfhkRfhoRfhsRfhxRfh1Rfh5Rfh9RfiBRfiGRfiKRfiORfiSRfiW\
-RfibRfifRfijRfinRfirRfiwRfi0Rfi4Rfi8RfjARfjFRfjJRfjNRfjRRfjV\
-RfjaRfjeRfjiRfjmRfjqRfjvRfjzRfj3Rfj4Rfb4RfH4Re34Ren4ReX4ReH4\
-Rdz4Rdj4RdT4RdD4Rcz4Rcf4RcP4Rb/4Rbv4Rbf4RbL4Ra74Rar4Rab4RaL4\
-RZ34RZn4RZX4RZH4RY34RYj4RYT4RYD4RXz4RXj4RXP4RW/4RWv4RWf4RWP4\
-RV74RVr4RVb4RVL4RU74RUn4Tk74Uk74Vk74Wk74Xk74Yk74Zk74ak74bk74\
-ck74dk74ek74fk74gk74hk74ik74jk74kk74lk74mk74nk74ok74pk74qk74\
-rk74sk74tk74uk74vk74wk74xk74yk74zk740k741k742k743k744k745k74\
-6k747k748k749k73+E7z+E7v+E7r+E7n+E7j+E7f+E7b+E7X+E7T+E7P+E7L\
-+E7H+E7D+E6/+E67+E63+E6z+E6v+E6r+E6n+E6j+E6f+E6b+E6X+E6T+E6P\
-+E6L+E6H+E6D+E5/+E57+E53+E5z+E5v+E5r+E5n+E5j+E5f+E5b+E5X+E5T\
-+E5P+E5O+FFO+FVO+FlO+F1O+GFO+GVO+GlO+G1O+HFO+HVO+HlO+H1O+IFO\
-+IVO+IlO+I1O+JFO+JVO+JlO+J1O+KFO+KVO+KlO+K1O+LFO+LVO+LlO+LxO\
-+MBO+MRO+MhO+MxO+NBO+NRO+NhO+NxO+OBO+ORO+OhO+OxO+PBO+PRO+PhO\
-9PhO8PhO7PhO6PhO5PhO4PhO3PhO2PhO1PhO0PhOzPhOyPhOxPhOwPhOvPhO\
-ufhOtfhOsfhOrfhOqfhOpfhOofhOnfhOmfhOlfhOkfhOjfhOifhOhfhOgfhO\
-ffhOefhOdfhOcfhObfhOafhOZfhOYfhOXfhOWfhOVfhOUfhPTvhTTvhXTvhb\
-TvhfTvhjTvhnTvhrTvhvTvhzTvh3Tvh7Tvh/TviDTviHTviLTviPTviTTviX\
-TvibTvifTvijTvinTvirTvivTvizTvi3Tvi7Tvi/TvjDTvjHTvjLTvjPTvjT\
-TvjXTvjbTvjfTvjjTvjnTvjrTvjvTvjzTvj3Tvj4Tvb4TvL4Tu74Tur4Tub4\
-TuL4Tt74Ttr4Ttb4TtL4Ts74Tsr4Tsb4TsL4Tr74Trr4Trb4TrL4Tq74Tqr4\
-Tqb4TqL4Tp74Tpr4Tpb4TpL4To74Tor4Tob4ToL4Tn74Tnr4Tnb4TnL4Tm74\
-Tmr4Tmb4TmL4Tl74Tlr4Tlb4TlL4V1f4W1f4X1f4Ylf4Zlf4alf4blf4clf4\
-dVf4eVf4fVf4gVf4hFf4iFf4jFf4kFf4lFf4l1f4m1f4n1f4o1f4plf4qlf4\
-rlf4slf4tlf4uVf4vVf4wVf4xVf4yFf4zFf40Ff41Ff42Ff421f431f441f4\
-51f46lf47lf48lf49lf3+Ffz+Ffw+Ffs+Ffo+Ffk+Ffg+Ffd+FfZ+FfV+FfR\
-+FfO+FfK+FfG+FfC+Fe++Fe7+Fe3+Fez+Fev+Fer+Feo+Fek+Feg+Fec+FeZ\
-+FeV+FeR+FeN+FeJ+FeG+FeC+Fd++Fd6+Fd3+Fdz+Fdv+Fdr+Fdn+Fdk+Fdg\
-+Fdc+FdY+FdX+FpX+F1X+GFX+GVX+GlX+G1X+HBX+HRX+HhX+HxX+H9X+INX\
-+IdX+ItX+I9X+JJX+JZX+JpX+J5X+KFX+KVX+KlX+K1X+LFX+LRX+LhX+LxX\
-+MBX+MNX+MdX+MtX+M9X+NNX+NZX+NpX+N5X+OJX+OVX+OlX+O1X+PFX+PVX\
-+PhX9fhX8fhX7fhX6fhX5fhX4vhX3vhX2vhX1vhX0/hXz/hXy/hXx/hXw/hX\
-wPhXvPhXuPhXtPhXsfhXrfhXqfhXpfhXofhXnvhXmvhXlvhXkvhXj/hXi/hX\
-h/hXg/hXf/hXfPhXePhXdPhXcPhXbfhXafhXZfhXYfhXXfhXWvhYV/hcV/hg\
-V/hkV/hnV/hrV/hvV/hzV/h3V/h6V/h+V/iCV/iGV/iJV/iNV/iRV/iVV/iZ\
-V/icV/igV/ikV/ioV/irV/ivV/izV/i3V/i7V/i+V/jCV/jGV/jKV/jOV/jR\
-V/jVV/jZV/jdV/jgV/jkV/joV/jsV/jwV/jzV/j3V/j4V/b4V/L4V+74V+r4\
-V+f4V+P4V9/4V9v4V9j4V9T4V9D4V8z4V8j4V8X4V8H4V734V7n4V7b4V7L4\
-V674V6r4V6b4V6P4V5/4V5v4V5f4V5T4V5D4V4z4V4j4V4T4V4H4V334V3n4\
-V3X4V3L4V274V2r4V2b4V2L4V1/4V1v4YGD4ZGD4Z2D4a2D4bmD4cmD4dWD4\
-eWD4fWD4gGD4hGD4h2D4i2D4jmD4kmD4lmD4mWD4nWD4oGD4pGD4p2D4q2D4\
-r2D4smD4tmD4uWD4vWD4wGD4xGD4yGD4y2D4z2D40mD41mD42WD43WD44WD4\
-5GD46GD462D472D48mD49mD3+GD0+GDw+GDs+GDp+GDl+GDi+GDe+GDb+GDX\
-+GDT+GDQ+GDM+GDJ+GDF+GDC+GC++GC6+GC3+GCz+GCw+GCs+GCp+GCl+GCh\
-+GCe+GCa+GCX+GCT+GCQ+GCM+GCI+GCF+GCB+GB++GB6+GB3+GBz+GBw+GBs\
-+GBo+GBl+GBh+GBg+GJg+GZg+Gpg+G1g+HFg+HRg+Hhg+Htg+H9g+INg+IZg\
-+Ipg+I1g+JFg+JRg+Jhg+Jxg+J9g+KNg+KZg+Kpg+K1g+LFg+LVg+Lhg+Lxg\
-+L9g+MNg+MZg+Mpg+M5g+NFg+NVg+Nhg+Nxg+N9g+ONg+OZg+Opg+O5g+PFg\
-+PVg+Phg9fhg8fhg7vhg6vhg5vhg4/hg3/hg3Phg2Phg1fhg0fhgzvhgyvhg\
-xvhgw/hgv/hgvPhguPhgtfhgsfhgrfhgqvhgpvhgo/hgn/hgnPhgmPhglPhg\
-kfhgjfhgivhghvhgg/hgf/hge/hgePhgdPhgcfhgbfhgavhgZvhgYvhhYPhl\
-YPhoYPhsYPhwYPhzYPh3YPh6YPh+YPiBYPiFYPiIYPiMYPiQYPiTYPiXYPia\
-YPieYPihYPilYPipYPisYPiwYPizYPi3YPi6YPi+YPjCYPjFYPjJYPjMYPjQ\
-YPjTYPjXYPjbYPjeYPjiYPjlYPjpYPjsYPjwYPj0YPj3YPj4YPb4YPL4YO/4\
-YOv4YOj4YOT4YOH4YN34YNn4YNb4YNL4YM/4YMv4YMj4YMT4YMD4YL34YLn4\
-YLb4YLL4YK/4YKv4YKf4YKT4YKD4YJ34YJn4YJb4YJL4YI74YIv4YIf4YIT4\
-YID4YH34YHn4YHX4YHL4YG74YGv4YGf4YGT4aWn4bGn4cGn4c2n4dmn4emn4\
-fWn4gWn4hGn4h2n4i2n4jmn4kWn4lWn4mGn4m2n4n2n4omn4pWn4qWn4rGn4\
-sGn4s2n4tmn4umn4vWn4wGn4xGn4x2n4ymn4zmn40Wn41Wn42Gn422n432n4\
-4mn45Wn46Wn47Gn472n482n49mn3+Gn0+Gnw+Gnt+Gnq+Gnm+Gnj+Gng+Gnc\
-+GnZ+GnW+GnS+GnP+GnM+GnI+GnF+GnB+Gm++Gm7+Gm3+Gm0+Gmx+Gmt+Gmq\
-+Gmn+Gmj+Gmg+Gmd+GmZ+GmW+GmS+GmP+GmM+GmI+GmF+GmC+Gl++Gl7+Gl4\
-+Gl0+Glx+Glt+Glq+Glp+Gtp+G9p+HJp+HVp+Hlp+Hxp+H9p+INp+IZp+Ilp\
-+I1p+JBp+JRp+Jdp+Jpp+J5p+KFp+KRp+Khp+Ktp+K5p+LJp+LVp+Llp+Lxp\
-+L9p+MNp+MZp+Mlp+M1p+NBp+NNp+Ndp+Npp+N1p+OFp+ORp+Ohp+Otp+O5p\
-+PJp+PVp+Php9fhp8vhp7vhp6/hp6Php5Php4fhp3fhp2vhp1/hp0/hp0Php\
-zfhpyfhpxvhpw/hpv/hpvPhpufhptfhpsvhprvhpq/hpqPhppPhpofhpnvhp\
-mvhpl/hplPhpkPhpjfhpifhphvhpg/hpf/hpfPhpefhpdfhpcvhpb/hpa/hq\
-afhtafhxafh0afh4afh7afh+afiCafiFafiIafiMafiPafiSafiWafiZafid\
-afigafijafinafiqafitafixafi0afi3afi7afi+afjBafjFafjIafjMafjP\
-afjSafjWafjZafjcafjgafjjafjmafjqafjtafjwafj0afj3afj4afb4afP4\
-ae/4aez4aen4aeX4aeL4ad/4adv4adj4adX4adH4ac74acr4acf4acT4acD4\
-ab34abr4abb4abP4abD4aaz4aan4aaX4aaL4aZ/4aZv4aZj4aZX4aZH4aY74\
-aYv4aYf4aYT4aYH4aX34aXr4aXb4aXP4aXD4aWz4cnL4dXL4eHL4e3L4f3L4\
-gnL4hXL4iHL4i3L4jnL4kXL4lXL4mHL4m3L4nnL4oXL4pHL4qHL4q3L4rnL4\
-sXL4tHL4t3L4unL4vnL4wXL4xHL4x3L4ynL4zXL40HL41HL413L42nL43XL4\
-4HL443L45nL46nL47XL48HL483L49nL3+HL0+HLx+HLu+HLr+HLo+HLk+HLh\
-+HLe+HLb+HLY+HLV+HLR+HLO+HLL+HLI+HLF+HLC+HK/+HK7+HK4+HK1+HKy\
-+HKv+HKs+HKp+HKl+HKi+HKf+HKc+HKZ+HKW+HKT+HKP+HKM+HKJ+HKG+HKD\
-+HKA+HJ8+HJ5+HJ2+HJz+HJy+HRy+Hdy+Hpy+H5y+IFy+IRy+Idy+Ipy+I1y\
-+JBy+JRy+Jdy+Jpy+J1y+KBy+KNy+KZy+Kpy+K1y+LBy+LNy+LZy+Lly+Lxy\
-+MBy+MNy+MZy+Mly+Mxy+M9y+NNy+NZy+Nly+Nxy+N9y+OJy+OVy+Oly+Oxy\
-+O9y+PJy+PVy+Phy9fhy8vhy7/hy7Phy6fhy5fhy4vhy3/hy3Phy2fhy1vhy\
-0/hyz/hyzPhyyfhyxvhyw/hywPhyvPhyufhytvhys/hysPhyrfhyqvhypvhy\
-o/hyoPhynfhymvhyl/hylPhykPhyjfhyivhyh/hyhPhygfhyfvhyevhyd/hy\
-dPhzcvh2cvh5cvh8cviAcviDcviGcviJcviMcviPcviTcviWcviZcviccvif\
-cviicvilcvipcviscvivcviycvi1cvi4cvi7cvi/cvjCcvjFcvjIcvjLcvjO\
-cvjRcvjVcvjYcvjbcvjecvjhcvjkcvjocvjrcvjucvjxcvj0cvj3cvj4cvb4\
-cvP4cvD4cu34cur4cub4cuP4cuD4ct34ctr4ctf4ctT4ctD4cs34csr4csf4\
-csT4csH4cr74crr4crf4crT4crH4cq74cqv4cqj4cqT4cqH4cp74cpv4cpj4\
-cpX4cpH4co74cov4coj4coX4coL4cn/4cnv4cnj4cnX4e3v4fnv4gXv4hHv4\
-h3v4inv4jXv4j3v4knv4lXv4mHv4m3v4nnv4oXv4pHv4p3v4qnv4rXv4sHv4\
-s3v4tnv4uXv4vHv4v3v4wXv4xHv4x3v4ynv4zXv40Hv403v41nv42Xv43Hv4\
-33v44nv45Xv46Hv463v47nv48Hv483v49nv3+Hv0+Hvx+Hvv+Hvs+Hvp+Hvm\
-+Hvj+Hvg+Hvd+Hva+HvX+HvU+HvR+HvO+HvL+HvI+HvF+HvC+HvA+Hu9+Hu6\
-+Hu3+Hu0+Hux+Huu+Hur+Huo+Hul+Hui+Huf+Huc+HuZ+HuW+HuT+HuQ+HuO\
-+HuL+HuI+HuF+HuC+Ht/+Ht8+Ht7+H17+IB7+IN7+IZ7+Il7+Ix7+I97+JF7\
-+JR7+Jd7+Jp7+J17+KB7+KN7+KZ7+Kl7+Kx7+K97+LJ7+LV7+Lh7+Lt7+L57\
-+MB7+MN7+MZ7+Ml7+Mx7+M97+NJ7+NV7+Nh7+Nt7+N57+OF7+OR7+Od7+Op7\
-+O17+PB7+PJ7+PV7+Ph79fh78vh78Ph77fh76vh75/h75Ph74fh73vh72/h7\
-2Ph71fh70vh7z/h7zPh7yfh7xvh7w/h7wPh7vvh7u/h7uPh7tfh7svh7r/h7\
-rPh7qfh7pvh7o/h7oPh7nfh7mvh7l/h7lPh7kfh7j/h7jPh7ifh7hvh7g/h7\
-gPh7ffh8e/h/e/iCe/iFe/iIe/iLe/iOe/iQe/iTe/iWe/iZe/ice/ife/ii\
-e/ile/ioe/ire/iue/ixe/i0e/i3e/i6e/i9e/jAe/jCe/jFe/jIe/jLe/jO\
-e/jRe/jUe/jXe/jae/jde/jge/jje/jme/jpe/jse/jve/jxe/j0e/j3e/j4\
-e/b4e/P4e/D4e+74e+v4e+j4e+X4e+L4e9/4e9z4e9n4e9b4e9P4e9D4e834\
-e8r4e8f4e8T4e8H4e7/4e7z4e7n4e7b4e7P4e7D4e634e6r4e6f4e6T4e6H4\
-e574e5v4e5j4e5X4e5L4e4/4e434e4r4e4f4e4T4e4H4e374hIT4h4T4iYT4\
-jIT4j4T4koT4lIT4l4T4moT4nIT4n4T4ooT4pYT4p4T4qoT4rYT4sIT4soT4\
-tYT4uIT4uoT4vYT4wIT4w4T4xYT4yIT4y4T4zoT40IT404T41oT42IT424T4\
-3oT44YT444T45oT46YT47IT47oT48YT49IT494T3+IT1+ITy+ITv+ITt+ITq\
-+ITn+ITk+ITi+ITf+ITc+ITZ+ITX+ITU+ITR+ITO+ITM+ITJ+ITG+ITE+ITB\
-+IS++IS7+IS5+IS2+ISz+ISw+ISu+ISr+ISo+ISm+ISj+ISg+ISd+ISb+ISY\
-+ISV+ISS+ISQ+ISN+ISK+ISI+ISF+ISE+IaE+IiE+IuE+I6E+JGE+JOE+JaE\
-+JmE+JyE+J6E+KGE+KSE+KaE+KmE+KyE+K+E+LGE+LSE+LeE+LqE+LyE+L+E\
-+MKE+MSE+MeE+MqE+M2E+M+E+NKE+NWE+NiE+NqE+N2E+OCE+OKE+OWE+OiE\
-+OuE+O2E+PCE+POE+PaE+PiE9viE8/iE8PiE7fiE6/iE6PiE5fiE4viE4PiE\
-3fiE2viE2PiE1fiE0viEz/iEzfiEyviEx/iExPiEwviEv/iEvPiEuviEt/iE\
-tPiEsfiEr/iErPiEqfiEpviEpPiEofiEnviEnPiEmfiElviEk/iEkfiEjviE\
-i/iEiPiEhviFhPiIhPiKhPiNhPiQhPiShPiVhPiYhPibhPidhPighPijhPim\
-hPiohPirhPiuhPiwhPizhPi2hPi5hPi7hPi+hPjBhPjEhPjGhPjJhPjMhPjO\
-hPjRhPjUhPjXhPjZhPjchPjfhPjihPjkhPjnhPjqhPjthPjvhPjyhPj1hPj3\
-hPj4hPf4hPT4hPH4hO74hOz4hOn4hOb4hOP4hOH4hN74hNv4hNj4hNb4hNP4\
-hND4hM74hMv4hMj4hMX4hMP4hMD4hL34hLr4hLj4hLX4hLL4hLD4hK34hKr4\
-hKf4hKX4hKL4hJ/4hJz4hJr4hJf4hJT4hJL4hI/4hIz4hIn4hIf4jY34j434\
-ko34lI34l434mY34nI34no34oY34pI34po34qY34q434ro34sI34s434tY34\
-uI34uo34vY34v434wo34xI34x434yY34zI34zo340Y3404341o342I342434\
-3Y344I344o345Y346I346o347Y3474348o349I349433+I31+I3y+I3w+I3t\
-+I3r+I3o+I3m+I3j+I3h+I3e+I3c+I3Z+I3X+I3U+I3S+I3P+I3N+I3K+I3I\
-+I3F+I3D+I3A+I2++I27+I25+I22+I2z+I2x+I2u+I2s+I2p+I2n+I2k+I2i\
-+I2f+I2d+I2a+I2Y+I2V+I2T+I2Q+I2O+I2N+I+N+JGN+JSN+JaN+JmN+JuN\
-+J6N+KCN+KON+KWN+KiN+KqN+K2N+K+N+LKN+LSN+LeN+LmN+LyN+L6N+MGN\
-+MON+MaN+MiN+MuN+M6N+NCN+NON+NWN+NiN+NqN+N2N+N+N+OKN+OSN+OeN\
-+OmN+OyN+O6N+PGN+PON+PaN+PiN9viN8/iN8fiN7viN7PiN6fiN5/iN5PiN\
-4viN3/iN3fiN2viN2PiN1fiN0/iN0PiNzviNy/iNyPiNxviNw/iNwfiNvviN\
-vPiNufiNt/iNtPiNsviNr/iNrfiNqviNqPiNpfiNo/iNoPiNnviNm/iNmfiN\
-lviNlPiNkfiNj/iOjfiQjfiTjfiVjfiYjfiajfidjfifjfiijfikjfinjfip\
-jfisjfiujfixjfizjfi2jfi5jfi7jfi+jfjAjfjDjfjFjfjIjfjKjfjNjfjP\
-jfjSjfjUjfjXjfjZjfjcjfjejfjhjfjjjfjmjfjojfjrjfjtjfjwjfjyjfj1\
-jfj3jfj4jff4jfT4jfL4je/4je34jer4jej4jeX4jeL4jeD4jd34jdv4jdj4\
-jdb4jdP4jdH4jc74jcz4jcn4jcf4jcT4jcL4jb/4jb34jbr4jbj4jbX4jbP4\
-jbD4ja74jav4jan4jab4jaT4jaH4jZ74jZz4jZn4jZf4jZT4jZL4jY/4lpb4\
-mJb4mpb4nZb4n5b4oZb4pJb4ppb4qJb4q5b4rZb4r5b4spb4tJb4tpb4uJb4\
-u5b4vZb4v5b4wpb4xJb4xpb4yZb4y5b4zZb40Jb40pb41Jb41pb42Zb425b4\
-3Zb44Jb44pb45Jb455b46Zb465b47pb48Jb48pb49Jb495b4+Jb1+Jbz+Jbx\
-+Jbu+Jbs+Jbq+Jbn+Jbl+Jbj+Jbg+Jbe+Jbc+Jba+JbX+JbV+JbT+JbQ+JbO\
-+JbM+JbJ+JbH+JbF+JbC+JbA+Ja++Ja8+Ja5+Ja3+Ja1+Jay+Jaw+Jau+Jar\
-+Jap+Jan+Jak+Jai+Jag+Jad+Jab+JaZ+JaX+JaW+JeW+JqW+JyW+J6W+KGW\
-+KOW+KWW+KiW+KqW+KyW+K6W+LGW+LOW+LWW+LiW+LqW+LyW+L+W+MGW+MOW\
-+MaW+MiW+MqW+MyW+M+W+NGW+NOW+NaW+NiW+NqW+N2W+N+W+OGW+OSW+OaW\
-+OiW+OqW+O2W+O+W+PGW+PSW+PaW+PiW9viW9PiW8fiW7/iW7fiW6viW6PiW\
-5viW5PiW4fiW3/iW3fiW2viW2PiW1viW0/iW0fiWz/iWzPiWyviWyPiWxviW\
-w/iWwfiWv/iWvPiWuviWuPiWtfiWs/iWsfiWrviWrPiWqviWqPiWpfiWo/iW\
-ofiWnviWnPiWmviWl/iXlviZlviblvidlviglviilviklvinlviplvirlviu\
-lviwlviylvi1lvi3lvi5lvi8lvi+lvjAlvjClvjFlvjHlvjJlvjMlvjOlvjQ\
-lvjTlvjVlvjXlvjalvjclvjelvjglvjjlvjllvjnlvjqlvjslvjulvjxlvjz\
-lvj1lvj4lvj4lvf4lvT4lvL4lvD4lu74luv4lun4luf4luT4luL4luD4lt34\
-ltv4ltn4ltb4ltT4ltL4ltD4ls34lsv4lsn4lsb4lsT4lsL4lr/4lr34lrv4\
-lrj4lrb4lrT4lrL4lq/4lq34lqv4lqj4lqb4lqT4lqH4lp/4lp34lpr4lpj4\
-n5/4oZ/4o5/4pZ/4p5/4qZ/4q5/4rZ/4sJ/4sp/4tJ/4tp/4uJ/4up/4vJ/4\
-vp/4wJ/4wp/4xZ/4x5/4yZ/4y5/4zZ/4z5/40Z/405/41Z/415/42p/43J/4\
-3p/44J/44p/45J/45p/46J/46p/47J/475/48Z/485/49Z/495/4+J/2+J/z\
-+J/x+J/v+J/t+J/r+J/p+J/n+J/l+J/j+J/h+J/e+J/c+J/a+J/Y+J/W+J/U\
-+J/S+J/Q+J/O+J/M+J/J+J/H+J/F+J/D+J/B+J+/+J+9+J+7+J+5+J+3+J+0\
-+J+y+J+w+J+u+J+s+J+q+J+o+J+m+J+k+J+i+J+f+J+f+KCf+KKf+KSf+Kaf\
-+Kmf+Kuf+K2f+K+f+LGf+LOf+LWf+Lef+Lmf+Luf+L6f+MCf+MKf+MSf+Maf\
-+Mif+Mqf+Myf+M6f+NCf+NOf+NWf+Nef+Nmf+Nuf+N2f+N+f+OGf+OOf+OWf\
-+Oif+Oqf+Oyf+O6f+PCf+PKf+PSf+Paf+Pif9vif9Pif8vif8Pif7vif7Pif\
-6vif6Pif5fif4/if4fif3/if3fif2/if2fif1/if1fif0/if0PifzvifzPif\
-yvifyPifxvifxPifwvifwPifvvifu/ifufift/iftfifs/ifsfifr/ifrfif\
-q/ifqfifpvifpPifovifoPifn/iin/ikn/imn/ion/iqn/isn/iun/iwn/iy\
-n/i0n/i3n/i5n/i7n/i9n/i/n/jBn/jDn/jFn/jHn/jJn/jMn/jOn/jQn/jS\
-n/jUn/jWn/jYn/jan/jcn/jen/jhn/jjn/jln/jnn/jpn/jrn/jtn/jvn/jx\
-n/jzn/j2n/j4n/j4n/f4n/X4n/P4n/H4n+/4n+z4n+r4n+j4n+b4n+T4n+L4\
-n+D4n974n9z4n9r4n9f4n9X4n9P4n9H4n8/4n834n8v4n8n4n8f4n8X4n8L4\
-n8D4n774n7z4n7r4n7j4n7b4n7T4n7L4n7D4n634n6v4n6n4n6f4n6X4n6P4\
-n6H4qKj4qqj4q6j4raj4r6j4saj4s6j4taj4t6j4uaj4u6j4vKj4vqj4wKj4\
-wqj4xKj4xqj4yKj4yqj4zKj4zqj4z6j40aj406j41aj416j42aj426j43aj4\
-36j44Kj44qj45Kj45qj46Kj46qj47Kj47qj48Kj48aj486j49aj496j4+Kj2\
-+Kj0+Kjy+Kjw+Kju+Kjs+Kjq+Kjp+Kjn+Kjl+Kjj+Kjh+Kjf+Kjd+Kjb+KjZ\
-+KjY+KjW+KjU+KjS+KjQ+KjO+KjM+KjK+KjI+KjH+KjF+KjD+KjB+Ki/+Ki9\
-+Ki7+Ki5+Ki3+Ki2+Ki0+Kiy+Kiw+Kiu+Kis+Kiq+Kio+Kio+Kmo+Kuo+K2o\
-+K+o+LGo+LKo+LSo+Lao+Lio+Lqo+Lyo+L6o+MCo+MKo+MOo+MWo+Meo+Mmo\
-+Muo+M2o+M+o+NGo+NOo+NSo+Nao+Nio+Nqo+Nyo+N6o+OCo+OKo+OSo+OWo\
-+Oeo+Omo+Ouo+O2o+O+o+PGo+POo+PWo+Pao+Pio9vio9fio8/io8fio7/io\
-7fio6/io6fio5/io5fio5Pio4vio4Pio3vio3Pio2vio2Pio1vio1Pio0/io\
-0fioz/iozfioy/ioyfiox/ioxfiow/iowviowPiovviovPiouviouPiotvio\
-tPiosviosfior/iorfioq/ioqfioqPiqqPisqPiuqPiwqPiyqPi0qPi2qPi3\
-qPi5qPi7qPi9qPi/qPjBqPjDqPjFqPjHqPjIqPjKqPjMqPjOqPjQqPjSqPjU\
-qPjWqPjYqPjZqPjbqPjdqPjfqPjhqPjjqPjlqPjnqPjpqPjqqPjsqPjuqPjw\
-qPjyqPj0qPj2qPj4qPj4qPf4qPX4qPP4qPH4qPD4qO74qOz4qOr4qOj4qOb4\
-qOT4qOL4qOD4qN/4qN34qNv4qNn4qNf4qNX4qNP4qNH4qM/4qM74qMz4qMr4\
-qMj4qMb4qMT4qML4qMD4qL74qLz4qLv4qLn4qLf4qLX4qLP4qLH4qK/4qK34\
-qKv4qKr4sbH4srH4tLH4trH4t7H4ubH4u7H4vLH4vrH4wLH4wbH4w7H4xbH4\
-x7H4yLH4yrH4zLH4zbH4z7H40bH40rH41LH41rH417H42bH427H43LH43rH4\
-4LH44bH447H45bH45rH46LH46rH467H47bH477H48LH48rH49LH49rH497H4\
-+LH2+LH0+LHz+LHx+LHv+LHu+LHs+LHq+LHp+LHn+LHl+LHk+LHi+LHg+LHf\
-+LHd+LHb+LHa+LHY+LHW+LHV+LHT+LHR+LHP+LHO+LHM+LHK+LHJ+LHH+LHF\
-+LHE+LHC+LHA+LG/+LG9+LG7+LG6+LG4+LG2+LG1+LGz+LGx+LGx+LKx+LOx\
-+LWx+Lex+Lmx+Lqx+Lyx+L6x+L+x+MGx+MOx+MSx+Max+Mix+Mmx+Mux+M2x\
-+M6x+NCx+NKx+NOx+NWx+Nex+Nix+Nqx+Nyx+N2x+N+x+OGx+OKx+OSx+Oax\
-+Oix+Omx+Oux+O2x+O6x+PCx+PKx+POx+PWx+Pex+Pix9/ix9fix8/ix8vix\
-8Pix7vix7fix6/ix6fix6Pix5vix5Pix4vix4fix3/ix3fix3Pix2vix2Pix\
-1/ix1fix0/ix0vix0Pixzvixzfixy/ixyfixyPixxvixxPixw/ixwfixv/ix\
-vvixvPixuvixufixt/ixtfixs/ixsvixsfizsfi1sfi2sfi4sfi6sfi7sfi9\
-sfi/sfjAsfjCsfjEsfjFsfjHsfjJsfjKsfjMsfjOsfjPsfjRsfjTsfjVsfjW\
-sfjYsfjasfjbsfjdsfjfsfjgsfjisfjksfjlsfjnsfjpsfjqsfjssfjusfjv\
-sfjxsfjzsfj0sfj2sfj4sfj4sff4sfb4sfT4sfL4sfD4se/4se34sev4ser4\
-sej4seb4seX4seP4seH4seD4sd74sdz4sdv4sdn4sdf4sdb4sdT4sdL4sdH4\
-sc/4sc34scz4scr4scj4scf4scX4scP4scH4scD4sb74sbz4sbv4sbn4sbf4\
-sbb4sbT4sbL4urr4u7r4vbr4vrr4wLr4wbr4wrr4xLr4xbr4x7r4yLr4yrr4\
-y7r4zbr4zrr40Lr40br407r41Lr41rr417r42Lr42rr427r43br43rr44Lr4\
-4br447r45Lr45rr457r46br46rr47Lr47br477r48Lr48br487r49Lr49rr4\
-97r4+Lr2+Lr1+Lrz+Lry+Lrw+Lrv+Lru+Lrs+Lrr+Lrp+Lro+Lrm+Lrl+Lrj\
-+Lri+Lrg+Lrf+Lrd+Lrc+Lra+LrZ+LrY+LrW+LrV+LrT+LrS+LrQ+LrP+LrN\
-+LrM+LrK+LrJ+LrH+LrG+LrE+LrD+LrB+LrA+Lq/+Lq9+Lq8+Lq6+Lq6+Lu6\
-+Ly6+L66+L+6+MC6+MK6+MO6+MW6+Ma6+Mi6+Mm6+Mu6+My6+M66+M+6+NG6\
-+NK6+NS6+NW6+Ne6+Ni6+Nm6+Nu6+Ny6+N66+N+6+OG6+OK6+OS6+OW6+Oe6\
-+Oi6+Oq6+Ou6+O26+O66+PC6+PG6+PK6+PS6+PW6+Pe6+Pi69/i69fi69Pi6\
-8vi68fi68Pi67vi67fi66/i66vi66Pi65/i65fi65Pi64vi64fi63/i63vi6\
-3Pi62/i62fi62Pi61/i61fi61Pi60vi60fi6z/i6zvi6zPi6y/i6yfi6yPi6\
-xvi6xfi6w/i6wvi6wPi6v/i6vvi6vPi6u/i6uvi8uvi9uvi/uvjAuvjBuvjD\
-uvjEuvjGuvjHuvjJuvjKuvjMuvjNuvjPuvjQuvjSuvjTuvjVuvjWuvjYuvjZ\
-uvjauvjcuvjduvjfuvjguvjiuvjjuvjluvjmuvjouvjpuvjruvjsuvjuuvjv\
-uvjwuvjyuvjzuvj1uvj2uvj4uvj4uvf4uvb4uvT4uvP4uvH4uvD4uu/4uu34\
-uuz4uur4uun4uuf4uub4uuT4uuP4uuH4uuD4ut74ut34utv4utr4utj4utf4\
-utb4utT4utP4utH4utD4us74us34usv4usr4usj4usf4usX4usT4usL4usH4\
-usD4ur74ur34urv4w8P4xMP4xcP4xsP4yMP4ycP4ysP4y8P4zcP4zsP4z8P4\
-0MP40sP408P41MP41cP418P42MP42cP428P43MP43cP43sP44MP44cP44sP4\
-48P45cP45sP458P46MP46sP468P47MP47cP478P48MP48cP48sP49MP49cP4\
-9sP498P4+MP3+MP1+MP0+MPz+MPy+MPw+MPv+MPu+MPt+MPr+MPq+MPp+MPo\
-+MPm+MPl+MPk+MPi+MPh+MPg+MPf+MPd+MPc+MPb+MPa+MPY+MPX+MPW+MPV\
-+MPT+MPS+MPR+MPQ+MPO+MPN+MPM+MPL+MPJ+MPI+MPH+MPG+MPE+MPD+MPD\
-+MPD+MXD+MbD+MfD+MjD+MrD+MvD+MzD+M7D+M/D+NDD+NHD+NPD+NTD+NXD\
-+NbD+NjD+NnD+NrD+NvD+N3D+N7D+N/D+ODD+OLD+OPD+OTD+OXD+OfD+OjD\
-+OnD+OrD+OzD+O3D+O7D+PDD+PHD+PLD+PPD+PXD+PbD+PfD+PjD9/jD9vjD\
-9fjD8/jD8vjD8fjD8PjD7vjD7fjD7PjD6vjD6fjD6PjD5/jD5fjD5PjD4/jD\
-4vjD4PjD3/jD3vjD3fjD2/jD2vjD2fjD2PjD1vjD1fjD1PjD0/jD0fjD0PjD\
-z/jDzvjDzPjDy/jDyvjDyPjDx/jDxvjDxfjDw/jDw/jEw/jGw/jHw/jIw/jJ\
-w/jLw/jMw/jNw/jOw/jQw/jRw/jSw/jTw/jVw/jWw/jXw/jYw/jaw/jbw/jc\
-w/jdw/jfw/jgw/jhw/jiw/jkw/jlw/jmw/jow/jpw/jqw/jrw/jtw/juw/jv\
-w/jww/jyw/jzw/j0w/j1w/j3w/j4w/j4w/f4w/b4w/X4w/T4w/L4w/H4w/D4\
-w+/4w+34w+z4w+v4w+r4w+j4w+f4w+b4w+X4w+P4w+L4w+H4w+D4w974w934\
-w9z4w9v4w9n4w9j4w9f4w9X4w9T4w9P4w9L4w9D4w8/4w874w834w8v4w8r4\
-w8n4w8j4w8b4w8X4w8T4zMz4zcz4zsz4z8z40Mz40cz40sz408z41Mz41cz4\
-1sz418z42Mz42cz42sz428z43Mz43cz43sz438z44cz44sz448z45Mz45cz4\
-5sz458z46Mz46cz46sz468z47Mz47cz47sz478z48Mz48cz48sz488z49Mz4\
-9sz498z4+Mz4+Mz3+Mz2+Mz1+Mz0+Mzz+Mzy+Mzx+Mzw+Mzv+Mzt+Mzs+Mzr\
-+Mzq+Mzp+Mzo+Mzn+Mzm+Mzl+Mzk+Mzj+Mzi+Mzh+Mzg+Mzf+Mze+Mzd+Mzc\
-+Mzb+Mza+MzY+MzX+MzW+MzV+MzU+MzT+MzS+MzR+MzQ+MzP+MzO+MzN+MzM\
-+MzM+MzM+M3M+M7M+M/M+NDM+NHM+NPM+NTM+NXM+NbM+NfM+NjM+NnM+NrM\
-+NvM+NzM+N3M+N7M+N/M+ODM+OHM+OLM+OPM+OTM+OXM+ObM+OjM+OnM+OrM\
-+OvM+OzM+O3M+O7M+O/M+PDM+PHM+PLM+PPM+PTM+PXM+PbM+PfM+PjM9/jM\
-9vjM9fjM9PjM8/jM8vjM8fjM8PjM7/jM7vjM7fjM7PjM6/jM6vjM6fjM6PjM\
-5vjM5fjM5PjM4/jM4vjM4fjM4PjM3/jM3vjM3fjM3PjM2/jM2vjM2fjM2PjM\
-1/jM1vjM1fjM1PjM0/jM0fjM0PjMz/jMzvjMzfjMzPjMzPjNzPjOzPjPzPjQ\
-zPjRzPjSzPjTzPjUzPjVzPjWzPjXzPjYzPjazPjbzPjczPjdzPjezPjfzPjg\
-zPjhzPjizPjjzPjkzPjlzPjmzPjnzPjozPjpzPjqzPjrzPjszPjtzPjvzPjw\
-zPjxzPjyzPjzzPj0zPj1zPj2zPj3zPj4zPj4zPj4zPf4zPb4zPT4zPP4zPL4\
-zPH4zPD4zO/4zO74zO34zOz4zOv4zOr4zOn4zOj4zOf4zOb4zOX4zOT4zOP4\
-zOL4zOH4zN/4zN74zN34zNz4zNv4zNr4zNn4zNj4zNf4zNb4zNX4zNT4zNP4\
-zNL4zNH4zND4zM/4zM74zM341dX41dX41tX419X42NX42dX42tX42tX429X4\
-3NX43dX43tX439X439X44NX44dX44tX449X45NX45NX45dX45tX459X46NX4\
-6dX46dX46tX469X47NX47dX47tX479X479X48NX48dX48tX489X49NX49NX4\
-9dX49tX499X4+NX4+NX3+NX2+NX2+NX1+NX0+NXz+NXy+NXx+NXw+NXw+NXv\
-+NXu+NXt+NXs+NXr+NXr+NXq+NXp+NXo+NXn+NXm+NXm+NXl+NXk+NXj+NXi\
-+NXh+NXh+NXg+NXf+NXe+NXd+NXc+NXb+NXb+NXa+NXZ+NXY+NXX+NXW+NXW\
-+NXV+NXV+NXV+NbV+NfV+NjV+NjV+NnV+NrV+NvV+NzV+N3V+N3V+N7V+N/V\
-+ODV+OHV+OLV+OLV+OPV+OTV+OXV+ObV+OfV+OjV+OjV+OnV+OrV+OvV+OzV\
-+O3V+O3V+O7V+O/V+PDV+PHV+PLV+PLV+PPV+PTV+PXV+PbV+PfV+PfV+PjV\
-9/jV9/jV9vjV9fjV9PjV8/jV8vjV8vjV8fjV8PjV7/jV7vjV7fjV7fjV7PjV\
-6/jV6vjV6fjV6PjV6PjV5/jV5vjV5fjV5PjV4/jV4vjV4vjV4fjV4PjV3/jV\
-3vjV3fjV3fjV3PjV2/jV2vjV2fjV2PjV2PjV1/jV1vjV1fjV1fjW1fjW1fjX\
-1fjY1fjZ1fja1fjb1fjb1fjc1fjd1fje1fjf1fjg1fjh1fjh1fji1fjj1fjk\
-1fjl1fjm1fjm1fjn1fjo1fjp1fjq1fjr1fjr1fjs1fjt1fju1fjv1fjw1fjw\
-1fjx1fjy1fjz1fj01fj11fj21fj21fj31fj41fj41fj41ff41fb41fX41fT4\
-1fT41fP41fL41fH41fD41e/41e/41e741e341ez41ev41er41en41en41ej4\
-1ef41eb41eX41eT41eT41eP41eL41eH41eD41d/41d/41d741d341dz41dv4\
-1dr41dr41dn41dj41df41db41dX43d343t34393439344N344d344d344t34\
-4t3449345N345N345d345t345t3459346N346N346d346d346t3469346934\
-7N347d347d347t347t3479348N348N348d348t348t3489349N349N349d34\
-9d349t3499349934+N34+N33+N33+N32+N32+N31+N30+N30+N3z+N3y+N3y\
-+N3x+N3x+N3w+N3v+N3v+N3u+N3t+N3t+N3s+N3s+N3r+N3q+N3q+N3p+N3o\
-+N3o+N3n+N3m+N3m+N3l+N3l+N3k+N3j+N3j+N3i+N3h+N3h+N3g+N3g+N3f\
-+N3e+N3e+N3d+N7d+N/d+N/d+ODd+ODd+OHd+OLd+OLd+OPd+OTd+OTd+OXd\
-+OXd+Obd+Ofd+Ofd+Ojd+Ond+Ond+Ord+Ord+Ovd+Ozd+Ozd+O3d+O7d+O7d\
-+O/d+PDd+PDd+PHd+PHd+PLd+PPd+PPd+PTd+PXd+PXd+Pbd+Pbd+Pfd+Pjd\
-+Pjd+Pjd9/jd9vjd9vjd9fjd9fjd9Pjd8/jd8/jd8vjd8fjd8fjd8Pjd8Pjd\
-7/jd7vjd7vjd7fjd7Pjd7Pjd6/jd6vjd6vjd6fjd6fjd6Pjd5/jd5/jd5vjd\
-5fjd5fjd5Pjd5Pjd4/jd4vjd4vjd4fjd4Pjd4Pjd3/jd3/jd3vje3fje3fjf\
-3fjg3fjg3fjh3fjh3fji3fjj3fjj3fjk3fjl3fjl3fjm3fjm3fjn3fjo3fjo\
-3fjp3fjq3fjq3fjr3fjs3fjs3fjt3fjt3fju3fjv3fjv3fjw3fjx3fjx3fjy\
-3fjy3fjz3fj03fj03fj13fj23fj23fj33fj33fj43fj43fj43ff43ff43fb4\
-3fX43fX43fT43fT43fP43fL43fL43fH43fD43fD43e/43e743e743e343e34\
-3ez43ev43ev43er43en43en43ej43ej43ef43eb43eb43eX43eT43eT43eP4\
-3eL43eL43eH43eH43eD43d/43d/43d745ub45+b45+b46Ob46Ob46eb46eb4\
-6eb46ub46ub46+b46+b46+b47Ob47Ob47eb47eb47ub47ub47ub47+b47+b4\
-8Ob48Ob48Ob48eb48eb48ub48ub48+b48+b48+b49Ob49Ob49eb49eb49ub4\
-9ub49ub49+b49+b4+Ob4+Ob4+Ob4+Ob3+Ob3+Ob3+Ob2+Ob2+Ob1+Ob1+Ob0\
-+Ob0+Ob0+Obz+Obz+Oby+Oby+Obx+Obx+Obx+Obw+Obw+Obv+Obv+Obv+Obu\
-+Obu+Obt+Obt+Obs+Obs+Obs+Obr+Obr+Obq+Obq+Obp+Obp+Obp+Obo+Obo\
-+Obn+Obn+Obn+Obm+Ofm+Ofm+Ojm+Ojm+Ojm+Onm+Onm+Orm+Orm+Orm+Ovm\
-+Ovm+Ozm+Ozm+O3m+O3m+O3m+O7m+O7m+O/m+O/m+PDm+PDm+PDm+PHm+PHm\
-+PLm+PLm+PLm+PPm+PPm+PTm+PTm+PXm+PXm+PXm+Pbm+Pbm+Pfm+Pfm+Pfm\
-+Pjm+Pjm+Pjm9/jm9/jm9/jm9vjm9vjm9fjm9fjm9fjm9Pjm9Pjm8/jm8/jm\
-8vjm8vjm8vjm8fjm8fjm8Pjm8Pjm8Pjm7/jm7/jm7vjm7vjm7fjm7fjm7fjm\
-7Pjm7Pjm6/jm6/jm6vjm6vjm6vjm6fjm6fjm6Pjm6Pjm6Pjm5/jm5/jn5vjn\
-5vjn5vjo5vjo5vjp5vjp5vjp5vjq5vjq5vjr5vjr5vjs5vjs5vjs5vjt5vjt\
-5vju5vju5vjv5vjv5vjv5vjw5vjw5vjx5vjx5vjx5vjy5vjy5vjz5vjz5vj0\
-5vj05vj05vj15vj15vj25vj25vj35vj35vj35vj45vj45vj45vj45vj45vf4\
-5vf45vb45vb45vb45vX45vX45vT45vT45vP45vP45vP45vL45vL45vH45vH4\
-5vD45vD45vD45u/45u/45u745u745u745u345u345uz45uz45uv45uv45uv4\
-5ur45ur45un45un45un45uj45uj45uf45uf47+/48O/48O/48O/48O/48O/4\
-8e/48e/48e/48e/48e/48u/48u/48u/48u/48+/48+/48+/48+/48+/49O/4\
-9O/49O/49O/49O/49e/49e/49e/49e/49e/49u/49u/49u/49u/49+/49+/4\
-9+/49+/49+/4+O/4+O/4+O/4+O/4+O/4+O/4+O/4+O/3+O/3+O/3+O/3+O/3\
-+O/2+O/2+O/2+O/2+O/2+O/1+O/1+O/1+O/1+O/0+O/0+O/0+O/0+O/0+O/z\
-+O/z+O/z+O/z+O/z+O/y+O/y+O/y+O/y+O/y+O/x+O/x+O/x+O/x+O/w+O/w\
-+O/w+O/w+O/w+O/v+O/v+PDv+PDv+PDv+PDv+PDv+PHv+PHv+PHv+PHv+PHv\
-+PLv+PLv+PLv+PLv+PLv+PPv+PPv+PPv+PPv+PTv+PTv+PTv+PTv+PTv+PXv\
-+PXv+PXv+PXv+PXv+Pbv+Pbv+Pbv+Pbv+Pbv+Pfv+Pfv+Pfv+Pfv+Pfv+Pjv\
-+Pjv+Pjv+Pjv+Pjv+Pjv+Pjv9/jv9/jv9/jv9/jv9/jv9vjv9vjv9vjv9vjv\
-9vjv9fjv9fjv9fjv9fjv9fjv9Pjv9Pjv9Pjv9Pjv9Pjv8/jv8/jv8/jv8/jv\
-8vjv8vjv8vjv8vjv8vjv8fjv8fjv8fjv8fjv8fjv8Pjv8Pjv8Pjv8Pjv8Pjv\
-7/jw7/jw7/jw7/jw7/jw7/jx7/jx7/jx7/jx7/jy7/jy7/jy7/jy7/jy7/jz\
-7/jz7/jz7/jz7/jz7/j07/j07/j07/j07/j07/j17/j17/j17/j17/j27/j2\
-7/j27/j27/j27/j37/j37/j37/j37/j37/j47/j47/j47/j47/j47/j47/j4\
-7/j47/j47/f47/f47/f47/f47/f47/b47/b47/b47/b47/X47/X47/X47/X4\
-7/X47/T47/T47/T47/T47/T47/P47/P47/P47/P47/P47/L47/L47/L47/L4\
-7/H47/H47/H47/H47/H47/D47/D47/D47/D47/A=";
-
-
-    rtext_new(glist, (t_text *)x);
-    tagRoot = rtext_gettag(glist_findrtext(glist,(t_text *)x));
-
-    //post("%s",tagRoot);
-
-    COLORGRID_SYS_VGUI3("image create photo img%x -data [base64::decode {%s}]\n",x,fdata);
-    
-    COLORGRID_SYS_VGUI6(".x%x.c create image %d %d -image img%x -tags %sS\n", canvas,text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),x,tagRoot);
-    COLORGRID_SYS_VGUI5(".x%x.c coords %sS %d %d \n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix + 128, x->x_obj.te_ypix + 25);
-				  
-    COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -tags %so0\n",
-	     canvas, x->x_obj.te_xpix, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+7, x->x_obj.te_ypix + x->x_height+2,
-	     tagRoot);
-    COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -tags %so1\n",
-	     canvas, x->x_obj.te_xpix+x->x_width-7, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width, x->x_obj.te_ypix + x->x_height+2,
-	     tagRoot);
-    COLORGRID_SYS_VGUI7(".x%x.c create rectangle %d %d %d %d -tags %so2\n",
-	     canvas, x->x_obj.te_xpix+x->x_width-131, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width-126, x->x_obj.te_ypix + x->x_height+2,
-	     tagRoot);
-
-    if ( x->x_colorgrid ) 
-    {
-       int xlpos = x->x_obj.te_xpix+x->x_width/x->x_xlines;
-       int ylpos = x->x_obj.te_ypix+x->x_height/x->x_ylines;
-       int xcount = 1;
-       int ycount = 1;
-       while ( xlpos < x->x_obj.te_xpix+x->x_width )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c create line %d %d %d %d -fill #FFFFFF -tags %xLINE%d%d\n",
-	     canvas, xlpos, x->x_obj.te_ypix,
-	     xlpos, x->x_obj.te_ypix+x->x_height,
-	     x, xcount, 0 );
-         xlpos+=x->x_width/x->x_xlines;
-         xcount++;
-       }
-       while ( ylpos < x->x_obj.te_ypix+x->x_height )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c create line %d %d %d %d -fill #FFFFFF -tags %xLINE%d%d\n",
-	     canvas, x->x_obj.te_xpix, ylpos,
-	     x->x_obj.te_xpix+x->x_width, ylpos,
-	     x, 0, ycount);
-         ylpos+=x->x_height/x->x_ylines;
-         ycount++;
-       }
-    }
-    canvas_fixlinesfor( canvas, (t_text*)x );
-}
-
-static void colorgrid_draw_move(t_colorgrid *x, t_glist *glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    char *tagRoot;
-
-    tagRoot = rtext_gettag(glist_findrtext(glist,(t_text *)x)); 
-    COLORGRID_SYS_VGUI7(".x%x.c coords %xCOLORGRID %d %d %d %d\n",
-	     canvas, x,
-	     x->x_obj.te_xpix, x->x_obj.te_ypix,
-	     x->x_obj.te_xpix+x->x_width, x->x_obj.te_ypix+x->x_height);
-    COLORGRID_SYS_VGUI5(".x%x.c coords %sS %d %d \n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix + 128, x->x_obj.te_ypix + 25);
-    COLORGRID_SYS_VGUI7(".x%x.c coords %so0 %d %d %d %d\n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+7, x->x_obj.te_ypix + x->x_height+2 );
-    COLORGRID_SYS_VGUI7(".x%x.c coords %so1 %d %d %d %d\n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix+x->x_width-7, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width, x->x_obj.te_ypix + x->x_height+2 );
-    COLORGRID_SYS_VGUI7(".x%x.c coords %so2 %d %d %d %d\n",
-	     canvas, tagRoot,
-	     x->x_obj.te_xpix+x->x_width-131, x->x_obj.te_ypix + x->x_height+1,
-	     x->x_obj.te_xpix+x->x_width-126, x->x_obj.te_ypix + x->x_height+2 );
-    if ( x->x_point ) 
-    {
-       colorgrid_draw_update(x, glist);
-    }
-    if ( x->x_colorgrid ) 
-    {
-       int xlpos = x->x_obj.te_xpix+x->x_width/x->x_xlines;
-       int ylpos = x->x_obj.te_ypix+x->x_height/x->x_ylines;
-       int xcount = 1;
-       int ycount = 1;
-       while ( xlpos < x->x_obj.te_xpix+x->x_width )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c coords %xLINE%d%d %d %d %d %d\n",
-	     canvas, x, xcount, 0, xlpos, x->x_obj.te_ypix,
-	     xlpos, x->x_obj.te_ypix + x->x_height);
-         xlpos+=x->x_width/x->x_xlines;
-         xcount++;
-       }
-       while ( ylpos < x->x_obj.te_ypix+x->x_height )
-       {
-         COLORGRID_SYS_VGUI9(".x%x.c coords %xLINE%d%d %d %d %d %d\n",
-	     canvas, x, 0, ycount, x->x_obj.te_xpix, ylpos,
-	     x->x_obj.te_xpix + x->x_width, ylpos);
-         ylpos+=x->x_height/x->x_ylines;
-         ycount++;
-       }
-    }
-    canvas_fixlinesfor( canvas, (t_text*)x );
-}
-
-static void colorgrid_draw_erase(t_colorgrid* x,t_glist* glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-    int i;
-    char *tagRoot;
-
-    tagRoot = rtext_gettag(glist_findrtext(glist,(t_text *)x));
-    COLORGRID_SYS_VGUI3(".x%x.c delete %xCOLORGRID\n", canvas, x);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %sS\n", canvas, tagRoot);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %so0\n", canvas, tagRoot);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %so1\n", canvas, tagRoot);
-    COLORGRID_SYS_VGUI3(".x%x.c delete %so2\n", canvas, tagRoot);
-    if (x->x_colorgrid)  
-    {
-       for (i=1; i<x->x_xlines; i++ )
-       {
-           COLORGRID_SYS_VGUI4(".x%x.c delete %xLINE%d0\n", canvas, x, i);
-       }
-       for (i=1; i<x->x_ylines; i++ )
-       {
-           COLORGRID_SYS_VGUI4(".x%x.c delete %xLINE0%d\n", canvas, x, i);
-       }
-    }
-    if (x->x_point)  
-    {
-          COLORGRID_SYS_VGUI3(".x%x.c delete %xPOINT\n", canvas, x);
-          x->x_point = 0;
-    }
-    rtext_free(glist_findrtext(glist, (t_text *)x));
-}
-
-static void colorgrid_draw_select(t_colorgrid* x,t_glist* glist)
-{
-    t_canvas *canvas=glist_getcanvas(glist);
-
-    if(x->x_selected)
-    {
-	pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* sets the item in blue */
-	COLORGRID_SYS_VGUI3(".x%x.c itemconfigure %xCOLORGRID -outline #0000FF\n", canvas, x);
-    }
-    else
-    {
-	pd_unbind(&x->x_obj.ob_pd, x->x_name);
-	COLORGRID_SYS_VGUI3(".x%x.c itemconfigure %xCOLORGRID -outline #000000\n", canvas, x);
-    }
-}
-
-static void colorgrid_hsv2rgb(t_float hue, t_float saturation, t_float value, t_float *red, t_float *green, t_float *blue)
-{
-   t_float i=0, f=0, p=0, q=0, t=0;
-	
-   if (saturation == 0) {
-       *red = value;
-       *green = value;
-       *blue = value;
-   } else {
-   if (hue == 6) hue = 0;
-   i = (int)hue ;  /* the integer part of hue */
-   f = hue - i;
-   p = value * (1 - saturation);
-   q = value * (1 - (saturation * f));
-   t = value * (1 - (saturation * (1 - f)));
-   switch ((int)i) {
-           case 0:
-            *red = value;
-            *green = t;
-            *blue = p;
-            break;
-           case 1:
-            *red = q;
-            *green = value;
-            *blue = p;
-            break;
-           case 2:
-            *red = p;
-            *green = value;
-            *blue = t;
-            break;
-           case 3:
-            *red = p;
-            *green = q;
-            *blue = value;
-            break;
-           case 4:
-            *red = t;
-            *green = p;
-            *blue = value;
-	    break;
-	   case 5:
-	    *red = value;
-            *green = p;
-            *blue = q;
-            break;
-   } 
-   }
-}
-
-static void colorgrid_output_current(t_colorgrid* x)
-{
-  t_float ox=0, oy=0, hue, saturation, value, red=0, green=0, blue=0;
-
-/* These values need to be the same as those that produced the spectrum image:*/
-
-  t_float box_x = 256;
-  t_float box_y = 25;
-
-  t_float min_value = 0.3;
-  t_float max_value = 1.0;
-  t_float value_inc = (max_value - min_value) / box_y;
-
-  t_float min_hue = 0;
-  t_float max_hue = 6;
-  t_float hue_inc = (max_hue - min_hue) / box_x;
-
-  t_float max_saturation = 0.9;
-  t_float min_saturation = 0.0;
-  t_float saturation_inc = (max_saturation - min_saturation) / box_y;
-
-  t_float xvalue, yvalue, rvalue, gvalue, bvalue;
-  t_float xmodstep, ymodstep;
-
-  xvalue = x->x_min + (x->x_current - x->x_obj.te_xpix) * (x->x_max-x->x_min) / x->x_width ;
-  if (xvalue < x->x_min ) xvalue = x->x_min;
-  if (xvalue > x->x_max ) xvalue = x->x_max;
-  xmodstep = ((float)((int)(xvalue*10000) % (int)(x->x_xstep*10000))/10000.);
-  xvalue = xvalue - xmodstep;
-  yvalue = x->y_max - (x->y_current - x->x_obj.te_ypix ) * (x->y_max-x->y_min) / x->x_height ;
-  if (yvalue < x->y_min ) yvalue = x->y_min;
-  if (yvalue > x->y_max ) yvalue = x->y_max;
-  ymodstep = ((float)((int)(yvalue*10000) % (int)(x->x_ystep*10000))/10000.);
-  yvalue = yvalue - ymodstep;
-  yvalue = 50 - yvalue;
-
-  /* Use the coordinates only if they are non-zero: */
-
-  if ((xvalue >= 0) && (yvalue >= 0)) {
-    ox = xvalue;
-    oy = yvalue;
-  } else {
-    xvalue = ox;
-    yvalue = oy;
-  } 
-
-  if ((yvalue != 0)&&(yvalue!=50))
-  {
-   /* Calculate HSV based on given coordinates and convert to RGB: */
-   hue = hue_inc * xvalue;
-   if (yvalue <= box_y) {
-    saturation = max_saturation;
-    value = min_value + (value_inc * yvalue);
-   } else {
-    value = max_value - value_inc;
-    saturation = max_saturation - (saturation_inc * (yvalue - box_y));
-   } 
-
-   colorgrid_hsv2rgb(hue, saturation, value, &red, &green, &blue);
- } else {
-  if (yvalue == 0) {
-    red     = 0;
-    green   = 0;
-    blue    = 0;
-  } else {
-    red     = 1;
-    green   = 1;
-    blue    = 1;
-  }
- }
-  
- /* The RGB values are returned in the interval [0..1] so we
-    need to multiply by 256 to get "normal" color values.*/
-
-  red     = red * 256;
-  green   = green * 256;
-  blue    = blue * 256;
-
-    outlet_float( x->x_xoutlet, red );
-    outlet_float( x->x_youtlet, green );
-    outlet_float( x->x_zoutlet, blue );
-}
-
-/* ------------------------ colorgrid widgetbehaviour----------------------------- */
-
-
-static void colorgrid_getrect(t_gobj *z, t_glist *owner,
-			    int *xp1, int *yp1, int *xp2, int *yp2)
-{
-   t_colorgrid* x = (t_colorgrid*)z;
-
-   *xp1 = x->x_obj.te_xpix;
-   *yp1 = x->x_obj.te_ypix;
-   *xp2 = x->x_obj.te_xpix+x->x_width;
-   *yp2 = x->x_obj.te_ypix+x->x_height;
-}
-
-static void colorgrid_save(t_gobj *z, t_binbuf *b)
-{
-   t_colorgrid *x = (t_colorgrid *)z;
-
-   // post( "saving colorgrid : %s", x->x_name->s_name );
-   binbuf_addv(b, "ssiissiffiffiffiiff", gensym("#X"),gensym("obj"),
-		(t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix,
-		gensym("colorgrid"), x->x_name, x->x_width, x->x_min,
-		x->x_max, x->x_height,
-                x->y_min, x->y_max,
-                x->x_colorgrid, x->x_xstep, 
-                x->x_ystep, x->x_xlines, x->x_ylines, 
-                x->x_current, x->y_current );
-   binbuf_addv(b, ";");
-}
-
-static void colorgrid_properties(t_gobj *z, t_glist *owner)
-{
-   char buf[800];
-   t_colorgrid *x=(t_colorgrid *)z;
-
-   sprintf(buf, "pdtk_colorgrid_dialog %%s %d %d %d\n",
-                 x->x_xlines, x->x_ylines, x->x_colorgrid );
-   // post("colorgrid_properties : %s", buf );
-   gfxstub_new(&x->x_obj.ob_pd, x, buf);
-}
-
-static void colorgrid_select(t_gobj *z, t_glist *glist, int selected)
-{
-   t_colorgrid *x = (t_colorgrid *)z;
-
-   x->x_selected = selected;
-   colorgrid_draw_select( x, glist );
-}
-
-static void colorgrid_vis(t_gobj *z, t_glist *glist, int vis)
-{
-   t_colorgrid *x = (t_colorgrid *)z;
-
-   if (vis)
-   {
-      colorgrid_draw_new( x, glist );
-      colorgrid_draw_update( x, glist );
-      colorgrid_output_current(x);
-   }
-   else
-   {
-      colorgrid_draw_erase( x, glist );
-   }
-}
-
-static void colorgrid_dialog(t_colorgrid *x, t_symbol *s, int argc, t_atom *argv)
-{
-   if ( !x ) {
-     post( "colorgrid : error :tried to set properties on an unexisting object" );
-   }
-   if ( argv[0].a_type != A_FLOAT || argv[1].a_type != A_FLOAT ||
-           argv[2].a_type != A_FLOAT ) 
-   { 
-      post( "colorgrid : wrong arguments" );
-      return;
-   }
-   x->x_xlines = argv[0].a_w.w_float;
-   x->x_ylines = argv[1].a_w.w_float;
-   x->x_colorgrid = argv[2].a_w.w_float;
-   colorgrid_draw_erase(x, x->x_glist);
-   colorgrid_draw_new(x, x->x_glist);
-}
-
-static void colorgrid_delete(t_gobj *z, t_glist *glist)
-{
-    canvas_deletelinesfor( glist_getcanvas(glist), (t_text *)z);
-}
-
-static void colorgrid_displace(t_gobj *z, t_glist *glist, int dx, int dy)
-{
-    t_colorgrid *x = (t_colorgrid *)z;
-    int xold = x->x_obj.te_xpix;
-    int yold = x->x_obj.te_ypix;
-
-    // post( "colorgrid_displace dx=%d dy=%d", dx, dy );
-
-    x->x_obj.te_xpix += dx;
-    x->x_current += dx;
-    x->x_obj.te_ypix += dy;
-    x->y_current += dy;
-    if(xold != x->x_obj.te_xpix || yold != x->x_obj.te_ypix)
-    {
-	colorgrid_draw_move(x, x->x_glist);
-    }
-}
-
-static void colorgrid_motion(t_colorgrid *x, t_floatarg dx, t_floatarg dy)
-{
-    int xold = x->x_current;
-    int yold = x->y_current;
-
-    // post( "colorgrid_motion dx=%f dy=%f", dx, dy );
-
-    x->x_current += dx;
-    x->y_current += dy;
-    if(xold != x->x_current || yold != x->y_current)
-    {
-        colorgrid_output_current(x);
-	colorgrid_draw_update(x, x->x_glist);
-    }
-}
-
-static int colorgrid_click(t_gobj *z, struct _glist *glist,
-			    int xpix, int ypix, int shift, int alt, int dbl, int doit)
-{
-    t_colorgrid* x = (t_colorgrid *)z;
-
-    // post( "colorgrid_click doit=%d x=%d y=%d", doit, xpix, ypix );
-    if ( doit) 
-    {
-      x->x_current = xpix;
-      x->y_current = ypix;
-      colorgrid_output_current(x);
-      colorgrid_draw_update(x, glist);
-      glist_grab(glist, &x->x_obj.te_g, (t_glistmotionfn)colorgrid_motion,
-	       0, xpix, ypix);
-    }
-    return (1);
-}
-
-static void colorgrid_goto(t_colorgrid *x, t_floatarg newx, t_floatarg newy)
-{
-    int xold = x->x_current;
-    int yold = x->y_current;
-
-    if ( newx > x->x_width-1 ) newx = x->x_width-1;
-    if ( newx < 0 ) newx = 0;
-    if ( newy > x->x_height-1 ) newy = x->x_height-1;
-    if ( newy < 0 ) newy = 0;
-
-    // post( "colorgrid_set x=%f y=%f", newx, newy );
-
-    x->x_current = newx + x->x_obj.te_xpix;
-    x->y_current = newy + x->x_obj.te_ypix;
-    if(xold != x->x_current || yold != x->y_current)
-    {
-        colorgrid_output_current(x);
-        colorgrid_draw_update(x, x->x_glist);
-    }
-}
-
-static void colorgrid_xgoto(t_colorgrid *x, t_floatarg newx, t_floatarg newy)
-{
-    int xold = x->x_current;
-    int yold = x->y_current;
-
-    if ( newx > x->x_width-1 ) newx = x->x_width-1;
-    if ( newx < 0 ) newx = 0;
-    if ( newy > x->x_height-1 ) newy = x->x_height-1;
-    if ( newy < 0 ) newy = 0;
-
-    // post( "colorgrid_set x=%f y=%f", newx, newy );
-
-    x->x_current = newx + x->x_obj.te_xpix;
-    x->y_current = newy + x->x_obj.te_ypix;
-    if(xold != x->x_current || yold != x->y_current)
-    {
-        colorgrid_draw_update(x, x->x_glist);
-    }
-}
-
-static void colorgrid_bang(t_colorgrid *x) {
-  colorgrid_output_current(x);
-}
-
-static t_colorgrid *colorgrid_new(t_symbol *s, int argc, t_atom *argv)
-{
-    int i, zz;
-    t_colorgrid *x;
-    t_pd *x2;
-    char *str;
- 
-    // post( "colorgrid_new : create : %s argc =%d", s->s_name, argc );
-
-    x = (t_colorgrid *)pd_new(colorgrid_class);
-    // new colorgrid created from the gui 
-    if ( argc != 0 )
-    {
-      if ( argc != 14 )
-      {
-        post( "colorgrid : error in the number of arguments ( %d instead of 14 )", argc );
-        return NULL;
-      }
-      if ( argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT ||
-        argv[2].a_type != A_FLOAT || argv[3].a_type != A_FLOAT ||
-        argv[4].a_type != A_FLOAT || argv[5].a_type != A_FLOAT ||
-        argv[6].a_type != A_FLOAT || argv[7].a_type != A_FLOAT || 
-        argv[8].a_type != A_FLOAT || argv[9].a_type != A_FLOAT || 
-        argv[10].a_type != A_FLOAT || argv[11].a_type != A_FLOAT || 
-        argv[12].a_type != A_FLOAT || argv[13].a_type != A_FLOAT ) {
-        post( "colorgrid : wrong arguments" );
-        return NULL;
-      }
-
-      // update colorgrid count
-      if (!strncmp((str = argv[0].a_w.w_symbol->s_name), "colorgrid", 5)
-    	 && (zz = atoi(str + 5)) > colorgridcount) 
-      {
-        colorgridcount = zz;
-      }
-      x->x_name = argv[0].a_w.w_symbol;
-      pd_bind(&x->x_obj.ob_pd, x->x_name);
-      x->x_width = argv[1].a_w.w_float;
-      x->x_min = argv[2].a_w.w_float;
-      x->x_max = argv[3].a_w.w_float;
-      x->x_height = argv[4].a_w.w_float;
-      x->y_min = argv[5].a_w.w_float;
-      x->y_max = argv[6].a_w.w_float;
-      x->x_colorgrid = argv[7].a_w.w_float;
-      x->x_xstep = argv[8].a_w.w_float;
-      x->x_ystep = argv[9].a_w.w_float;
-      x->x_xlines = argv[10].a_w.w_float;
-      x->x_ylines = argv[11].a_w.w_float;
-      x->x_current = argv[12].a_w.w_float;
-      x->y_current = argv[13].a_w.w_float;
-      x->x_point = 1;
-    }
-    else
-    {
-      char buf[40];
-
-      sprintf(buf, "colorgrid%d", ++colorgridcount);
-      s = gensym(buf);    	
-
-      x->x_name = s;
-      pd_bind(&x->x_obj.ob_pd, x->x_name);
-
-      x->x_width = DEFAULT_COLORGRID_WIDTH;
-      x->x_min = 0;
-      x->x_max = DEFAULT_COLORGRID_WIDTH;
-      x->x_height = DEFAULT_COLORGRID_HEIGHT;
-      x->y_min = 0;
-      x->y_max = DEFAULT_COLORGRID_HEIGHT;
-      x->x_colorgrid = 0;	
-      x->x_xstep = 1.0;	
-      x->x_ystep = 1.0;	
-      x->x_xlines = DEFAULT_COLORGRID_NBLINES;	
-      x->x_ylines = DEFAULT_COLORGRID_NBLINES;	
-      x->x_current = 0;
-      x->y_current = 0;	
-
-    }
-
-    // common fields for new and restored colorgrids
-    x->x_point = 0;	
-    x->x_selected = 0;	
-    x->x_glist = (t_glist *) canvas_getcurrent();
-    x->x_xoutlet = outlet_new(&x->x_obj, &s_float ); 
-    x->x_youtlet = outlet_new(&x->x_obj, &s_float ); 
-    x->x_zoutlet = outlet_new(&x->x_obj, &s_float ); 
-
-    // post( "colorgrid_new name : %s width: %d height : %d", x->x_name->s_name, x->x_width, x->x_height );
-
-    return (x);
-}
-
-static void colorgrid_free(t_colorgrid *x)
-{
-    post( "colorgrid~: freeing ressources [NULL]" );
-}
-
-void colorgrid_setup(void)
-{
-	// ########### colorgrid procedures -- ydegoyon@free.fr #########
-	// package require Img
-	sys_gui("package require base64\n");
-	sys_gui("proc colorgrid_apply {id} {\n");
-	// strip "." from the TK id to make a variable name suffix
-	sys_gui("set vid [string trimleft $id .]\n");
-	// for each variable, make a local variable to hold its name...
-	sys_gui("set var_graph_colorgrid [concat graph_colorgrid_$vid]\n");
-	sys_gui("global $var_graph_colorgrid\n");
-	sys_gui("set var_graph_xlines [concat graph_xlines_$vid]\n");
-	sys_gui("global $var_graph_xlines\n");
-	sys_gui("set var_graph_ylines [concat graph_ylines_$vid]\n");
-	sys_gui("global $var_graph_ylines\n");
-	sys_gui("set cmd [concat $id dialog [eval concat $$var_graph_xlines] [eval concat $$var_graph_ylines] [eval concat $$var_graph_colorgrid] \\;]\n");
-	// puts stderr $cmd
-	sys_gui("pd $cmd\n");
-	sys_gui("}\n");
-	sys_gui("proc colorgrid_cancel {id} {\n");
-	sys_gui("set cmd [concat $id cancel \\;]\n");
-	// puts stderr $cmd
-	sys_gui("pd $cmd\n");
-	sys_gui("}\n");
-	sys_gui("proc colorgrid_ok {id} {\n");
-	sys_gui("colorgrid_apply $id\n");
-	sys_gui("colorgrid_cancel $id\n");
-	sys_gui("}\n");
-	sys_gui("proc pdtk_colorgrid_dialog {id xlines ylines colorgrid} {\n");
-	sys_gui("set vid [string trimleft $id .]\n");
-	sys_gui("set var_graph_colorgrid [concat graph_colorgrid_$vid]\n");
-	sys_gui("global $var_graph_colorgrid\n");
-	sys_gui("set var_graph_xlines [concat graph_xlines_$vid]\n");
-	sys_gui("global $var_graph_xlines\n");
-	sys_gui("set var_graph_ylines [concat graph_ylines_$vid]\n");
-	sys_gui("global $var_graph_ylines\n");
-	sys_gui("set $var_graph_colorgrid $colorgrid\n");
-	sys_gui("set $var_graph_xlines $xlines\n");
-	sys_gui("set $var_graph_ylines $ylines\n");
-	sys_gui("toplevel $id -class [winfo class .]\n");
-	sys_gui("wm title $id {colorgrid}\n");
-	sys_gui("wm protocol $id WM_DELETE_WINDOW [concat colorgrid_cancel $id]\n");
-	sys_gui("label $id.label -text {COLORGRID PROPERTIES}\n");
-	sys_gui("pack $id.label -side top\n");
-	sys_gui("frame $id.buttonframe\n");
-	sys_gui("pack $id.buttonframe -side bottom -fill x -pady 2m\n");
-	sys_gui("button $id.buttonframe.cancel -text {Cancel} -command \"colorgrid_cancel $id\"\n");
-	sys_gui("button $id.buttonframe.apply -text {Apply} -command \"colorgrid_apply $id\"\n");
-	sys_gui("button $id.buttonframe.ok -text {OK} -command \"colorgrid_ok $id\"\n");
-	sys_gui("pack $id.buttonframe.cancel -side left -expand 1\n");
-	sys_gui("pack $id.buttonframe.apply -side left -expand 1\n");
-	sys_gui("pack $id.buttonframe.ok -side left -expand 1\n");
-	sys_gui("frame $id.42rangef\n");
-	sys_gui("pack $id.42rangef -side top\n");
-	sys_gui("label $id.42rangef.lxlines -text \"X sections :\"\n");
-	sys_gui("entry $id.42rangef.xlines -textvariable $var_graph_xlines -width 7\n");
-	sys_gui("pack $id.42rangef.lxlines $id.42rangef.xlines -side left\n");
-	sys_gui("frame $id.72rangef\n");
-	sys_gui("pack $id.72rangef -side top\n");
-	sys_gui("label $id.72rangef.lylines -text \"Y sections :\"\n");
-	sys_gui("entry $id.72rangef.ylines -textvariable $var_graph_ylines -width 7\n");
-	sys_gui("pack $id.72rangef.lylines $id.72rangef.ylines -side left\n");
-	sys_gui("checkbutton $id.showcolorgrid -text {Show Grid} -variable $var_graph_colorgrid -anchor w\n");
-	sys_gui("pack $id.showcolorgrid -side top\n");
-	sys_gui("bind $id.42rangef.xlines <KeyPress-Return> [concat colorgrid_ok $id]\n");
-	sys_gui("bind $id.72rangef.ylines <KeyPress-Return> [concat colorgrid_ok $id]\n");
-	sys_gui("focus $id.42rangef.xlines\n");
-	sys_gui("}\n");
-	// ########### colorgrid procedures END -- lluis@artefacte.org #########
-
-    post ( colorgrid_version );
-    colorgrid_class = class_new(gensym("colorgrid"), (t_newmethod)colorgrid_new,
-			      (t_method)colorgrid_free, sizeof(t_colorgrid), 0, A_GIMME, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_motion, gensym("motion"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_bang, gensym("bang"), 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_goto, gensym("goto"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_xgoto, gensym("xgoto"), A_FLOAT, A_FLOAT, 0);
-    class_addmethod(colorgrid_class, (t_method)colorgrid_dialog, gensym("dialog"), A_GIMME, 0);
-    colorgrid_widgetbehavior.w_getrectfn =    colorgrid_getrect;
-    colorgrid_widgetbehavior.w_displacefn =   colorgrid_displace;
-    colorgrid_widgetbehavior.w_selectfn =     colorgrid_select;
-    colorgrid_widgetbehavior.w_activatefn =   NULL;
-    colorgrid_widgetbehavior.w_deletefn =     colorgrid_delete;
-    colorgrid_widgetbehavior.w_visfn =        colorgrid_vis;
-    colorgrid_widgetbehavior.w_clickfn =      colorgrid_click;
-    class_setwidget(colorgrid_class, &colorgrid_widgetbehavior);
-    class_setpropertiesfn(colorgrid_class, colorgrid_properties);
-    class_setsavefn(colorgrid_class, colorgrid_save);
-    class_sethelpsymbol(colorgrid_class, gensym("colorgrid-help.pd"));
-}
diff --git a/externals/pdvjtools/pdp_1394L/Makefile b/externals/pdvjtools/pdp_1394L/Makefile
deleted file mode 100644
index 71e207093..000000000
--- a/externals/pdvjtools/pdp_1394L/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-current: all
-
-include Makefile.config
-
-PDP_MOD = pdp_1394L.o 
-
-all: $(PDP_MOD)
-	$(CC) -Wl,--export-dynamic -shared -o pdp_1394L.pd_linux *.o $(PDP_LIBS)
-
-clean:
-	rm -f *~
-	rm -f *.o
-	rm -f *.pd_linux
-
diff --git a/externals/pdvjtools/pdp_1394L/Makefile.config b/externals/pdvjtools/pdp_1394L/Makefile.config
deleted file mode 100644
index 53a5f1174..000000000
--- a/externals/pdvjtools/pdp_1394L/Makefile.config
+++ /dev/null
@@ -1,21 +0,0 @@
-# if configure can't find the m_pd.h header         
-# specify pd's include path here and ignore the warning
-#
-PD_CPPFLAGS=-I/usr/src/pd-0.40-2/src
-PDP_CFLAGS=-I/usr/src/pdp-0.12.5-test-7/include -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -ffast-math -freg-struct-return -DLINUX 
-
-prefix=/usr/local
-PDPV4L2_VERSION = 0.1
-PDPV4L2_TARGET = linux
-PDPV4L2_LIBRARY_NAME = pdp_v4l2.pd_linux
-
-PDP_CPPFLAGS =  -I. -I/usr/X11R6/include  -I../include -I../../include -I/usr/include/libdv/ $(PD_CPPFLAGS)  
-
-PDP_CFLAGS += -DPDPV4L2_VERSION=\"$(PDPV4L2_VERSION)\"
-
-CC = gcc
-
-# build rules
-
-.c.o:
-	$(CC) $(PDP_CFLAGS) $(PDP_CPPFLAGS) -o $*.o -c $*.c
diff --git a/externals/pdvjtools/pdp_1394L/dv1394.h b/externals/pdvjtools/pdp_1394L/dv1394.h
deleted file mode 100755
index f928e4d57..000000000
--- a/externals/pdvjtools/pdp_1394L/dv1394.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * dv1394.h - DV input/output over IEEE 1394 on OHCI chips
- *   Copyright (C)2001 Daniel Maas <dmaas@dcine.com>
- *     receive, proc_fs by Dan Dennedy <dan@dennedy.org>
- *
- * based on:
- *   video1394.h - driver for OHCI 1394 boards
- *   Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>
- *                          Peter Schlaile <udbz@rz.uni-karlsruhe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser Public License as published by
- * the Free Software Foundation; either version 2.1 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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-#ifndef _DV_1394_H
-#define _DV_1394_H
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-
-/* This is the public user-space interface. Try not to break it. */
-
-#define DV1394_API_VERSION 0x20011127
-
-/* ********************
-   **                **
-   **   DV1394 API   **
-   **                **
-   ********************
-
-   There are two methods of operating the DV1394 DV output device.
-
-   1)
-
-   The simplest is an interface based on write(): simply write
-   full DV frames of data to the device, and they will be transmitted
-   as quickly as possible. The FD may be set for non-blocking I/O,
-   in which case you can use select() or poll() to wait for output
-   buffer space.
-
-   To set the DV output parameters (e.g. whether you want NTSC or PAL
-   video), use the DV1394_INIT ioctl, passing in the parameters you
-   want in a struct dv1394_init.
- 
-   Example 1:
-         To play a raw .DV file:   cat foo.DV > /dev/dv1394
-	 (cat will use write() internally)
-
-   Example 2:
-           static struct dv1394_init init = {
-	      0x63,        (broadcast channel)
-              4,           (four-frame ringbuffer)
-	      DV1394_NTSC, (send NTSC video)
-	      0, 0         (default empty packet rate)
-           }
-
-	   ioctl(fd, DV1394_INIT, &init);
-
-	   while(1) {
-	          read( <a raw DV file>, buf, DV1394_NTSC_FRAME_SIZE );
-		  write( <the dv1394 FD>, buf, DV1394_NTSC_FRAME_SIZE );
-           }
-
-   2)
-
-   For more control over buffering, and to avoid unnecessary copies
-   of the DV data, you can use the more sophisticated the mmap() interface. 
-   First, call the DV1394_INIT ioctl to specify your parameters, 
-   including the number of frames in the ringbuffer. Then, calling mmap() 
-   on the dv1394 device will give you direct access to the ringbuffer
-   from which the DV card reads your frame data.
-
-   The ringbuffer is simply one large, contiguous region of memory
-   containing two or more frames of packed DV data. Each frame of DV data
-   is 120000 bytes (NTSC) or 144000 bytes (PAL).
-
-   Fill one or more frames in the ringbuffer, then use the DV1394_SUBMIT_FRAMES
-   ioctl to begin I/O. You can use either the DV1394_WAIT_FRAMES ioctl
-   or select()/poll() to wait until the frames are transmitted. Next, you'll
-   need to call the DV1394_GET_STATUS ioctl to determine which ringbuffer
-   frames are clear (ready to be filled with new DV data). Finally, use
-   DV1394_SUBMIT_FRAMES again to send the new data to the DV output.
-
-
-   Example: here is what a four-frame ringbuffer might look like
-            during DV transmission:
-
-
-         frame 0   frame 1   frame 2   frame 3
-
-        *--------------------------------------*
-        | CLEAR   | DV data | DV data | CLEAR  |
-        *--------------------------------------*
-                   <ACTIVE> 
-
-	transmission goes in this direction --->>>
-
-
-   The DV hardware is currently transmitting the data in frame 1.
-   Once frame 1 is finished, it will automatically transmit frame 2.
-   (if frame 2 finishes before frame 3 is submitted, the device
-   will continue to transmit frame 2, and will increase the dropped_frames
-   counter each time it repeats the transmission).
-
- 
-   If you called DV1394_GET_STATUS at this instant, you would
-   receive the following values:
-   
-          n_frames          = 4
-          active_frame      = 1
-          first_clear_frame = 3
-          n_clear_frames    = 2
-
-   At this point, you should write new DV data into frame 3 and optionally
-   frame 0. Then call DV1394_SUBMIT_FRAMES to inform the device that
-   it may transmit the new frames.
-
-*/
-
-
-/* maximum number of frames in the ringbuffer */
-#define DV1394_MAX_FRAMES 32
-
-/* number of *full* isochronous packets per DV frame */
-#define DV1394_NTSC_PACKETS_PER_FRAME 250
-#define DV1394_PAL_PACKETS_PER_FRAME  300
-
-/* size of one frame's worth of DV data, in bytes */
-#define DV1394_NTSC_FRAME_SIZE (480 * DV1394_NTSC_PACKETS_PER_FRAME)
-#define DV1394_PAL_FRAME_SIZE  (480 * DV1394_PAL_PACKETS_PER_FRAME)
-
-
-enum pal_or_ntsc {
-	DV1394_NTSC = 0,
-	DV1394_PAL
-};
-
-
-/* this is the argument to DV1394_INIT */
-struct dv1394_init {
-	/* DV1394_API_VERSION */
-	unsigned int api_version;
-	
-	/* isochronous transmission channel to use */
-	unsigned int channel;
-
-	/* number of frames in the ringbuffer. Must be at least 2
-	   and at most DV1394_MAX_FRAMES. */
-	unsigned int n_frames;
-
-	/* send/receive PAL or NTSC video format */
-	enum pal_or_ntsc format;
-
-	/* the following are used only for transmission */
- 
-	/* set these to zero unless you want a
-	   non-default empty packet rate (see below) */
-	unsigned long cip_n;
-	unsigned long cip_d;
-
-	/* set this to zero unless you want a
-	   non-default SYT cycle offset (default = 3 cycles) */
-	unsigned int syt_offset;
-};
-
-/* Q: What are cip_n and cip_d? */
-
-/*
-  A: DV video streams do not utilize 100% of the potential bandwidth offered
-  by IEEE 1394 (FireWire). To achieve the correct rate of data transmission,
-  DV devices must periodically insert empty packets into the 1394 data stream.
-  Typically there is one empty packet per 14-16 data-carrying packets.
-
-  Some DV devices will accept a wide range of empty packet rates, while others
-  require a precise rate. If the dv1394 driver produces empty packets at
-  a rate that your device does not accept, you may see ugly patterns on the
-  DV output, or even no output at all.
-
-  The default empty packet insertion rate seems to work for many people; if
-  your DV output is stable, you can simply ignore this discussion. However,
-  we have exposed the empty packet rate as a parameter to support devices that
-  do not work with the default rate. 
-
-  The decision to insert an empty packet is made with a numerator/denominator
-  algorithm. Empty packets are produced at an average rate of CIP_N / CIP_D.
-  You can alter the empty packet rate by passing non-zero values for cip_n
-  and cip_d to the INIT ioctl.
-  
- */
-
-struct dv1394_status {
-	/* this embedded init struct returns the current dv1394
-	   parameters in use */
-	struct dv1394_init init;
-
-	/* the ringbuffer frame that is currently being
-	   displayed. (-1 if the device is not transmitting anything) */
-	int active_frame;
-
-	/* index of the first buffer (ahead of active_frame) that
-	   is ready to be filled with data */
-	unsigned int first_clear_frame;
-
-	/* how many buffers, including first_clear_buffer, are
-	   ready to be filled with data */
-	unsigned int n_clear_frames;
-
-	/* how many times the DV output has underflowed
-	   since the last call to DV1394_GET_STATUS */
-	unsigned int dropped_frames;
-
-	/* N.B. The dropped_frames counter is only a lower bound on the actual
-	   number of dropped frames, with the special case that if dropped_frames
-	   is zero, then it is guaranteed that NO frames have been dropped
-	   since the last call to DV1394_GET_STATUS.
-	*/
-};
-
-/* Get the driver ready to transmit video.  pass a struct dv1394_init* as
- * the parameter (see below), or NULL to get default parameters */
-#define DV1394_INIT			_IOW('#', 0x06, struct dv1394_init)
-
-/* Stop transmitting video and free the ringbuffer */
-#define DV1394_SHUTDOWN		_IO ('#', 0x07)
-
-/* Submit N new frames to be transmitted, where the index of the first new
- * frame is first_clear_buffer, and the index of the last new frame is
- * (first_clear_buffer + N) % n_frames */
-#define DV1394_SUBMIT_FRAMES	_IO ('#', 0x08)
-
-/* Block until N buffers are clear (pass N as the parameter) Because we
- * re-transmit the last frame on underrun, there will at most be n_frames
- * - 1 clear frames at any time */
-#define DV1394_WAIT_FRAMES		_IO ('#', 0x09)
-
-/* Capture new frames that have been received, where the index of the
- * first new frame is first_clear_buffer, and the index of the last new
- * frame is (first_clear_buffer + N) % n_frames */
-#define DV1394_RECEIVE_FRAMES	_IO ('#', 0x0a)
-
-/* Tell card to start receiving DMA */
-#define DV1394_START_RECEIVE	_IO ('#', 0x0b)
-
-/* Pass a struct dv1394_status* as the parameter */
-#define DV1394_GET_STATUS		_IOR('#', 0x0c, struct dv1394_status)
-
-#endif /* _DV_1394_H */
diff --git a/externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd b/externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd
deleted file mode 100644
index a725e6c0a..000000000
--- a/externals/pdvjtools/pdp_1394L/pdp_1394L-help.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#N canvas 431 67 1247 665 10;
-#X obj 106 99 pdp_1394L;
-#X msg 163 -1 open /dev/dv1394/0;
-#X obj 104 217 pdp_xv;
-#X obj 54 -4 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
-;
-#X obj 54 23 metro 40;
-#X msg 206 65 norm PAL;
-#X msg 176 28 close;
-#X msg 129 170 destroy;
-#X obj 276 199 pdp_glx;
-#X connect 0 0 8 0;
-#X connect 1 0 0 0;
-#X connect 3 0 4 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 2 0;
diff --git a/externals/pdvjtools/pdp_1394L/pdp_1394L.c b/externals/pdvjtools/pdp_1394L/pdp_1394L.c
deleted file mode 100644
index cedfc3159..000000000
--- a/externals/pdvjtools/pdp_1394L/pdp_1394L.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- *   Pure Data Packet module.
- *   Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
- *
- *   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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-
-#include "pdp_config.h"
-#include "pdp.h"
-#include "pdp_llconv.h"
-#include "pdp_imageproc.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <string.h>
-#include <assert.h>
-#include <getopt.h>             /* getopt_long() */
-#include <ctype.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/mman.h>
-#include <linux/types.h>
-#include <sched.h>
-#include <pthread.h>
-
-#include "dv1394.h"
-#include <libdv/dv.h>
-
-#define N_BUF 2 /*DV1394_MAX_FRAMES/4*/
-#define PAL 0
-#define NTSC 1
-
-
-typedef struct pdp_1394L_struct
-{
-  t_object x_obj;
-  
-  t_outlet *x_outlet0;
-
-  int x_width;
-  int x_height;
-
-  int dvfd;
-  unsigned char *videobuf;
-  unsigned char *decodedbuf;
-  bool x_frame_ready;
-  int  x_frame, x_lastframe;
-  bool x_continue_thread;
-  pthread_t x_thread_id;
-
-  int x_framesize;
-  unsigned char *x_mmapbuf;
-
-  dv_decoder_t *x_decoder;
-
-  bool x_haveVideo;
-  bool x_capturing;
-  bool x_norm;
-  char* x_devicename;
-  int x_devicenum;
-
-} t_pdp_1394L;
-
-
-
-static void
-process_image                   (t_pdp_1394L *x)
-{
-	
-    unsigned int w,h;
-    int object,length,pos,i,encoding;
-    t_pdp* header;
-    t_image* image;
-    short int * data;
-	
-    //fputc ('.', stdout);
-    //fflush (stdout);
-	
-	
-	
-    /* create new packet */
-    w = x->x_width;
-    h = x->x_height;
-
-
-    object = pdp_packet_new_image(PDP_IMAGE_YV12, w, h);
-    header = pdp_packet_header(object);
-    image = pdp_packet_image_info(object);
-
-    if (!header){
-	post("pdp_v4l: ERROR: can't allocate packet");
-	return;
-    }
-
-    data = (short int *) pdp_packet_data(object);
-	
-    /* convert data to pdp packet */
-    //pdp_llconv(x->decodedbuf, RIF_YVYU_P____U8, data, RIF_YVU__P411_S16, w, h); 
-    pdp_llconv(x->decodedbuf, RIF_RGB__P____U8, data, RIF_YVU__P411_S16, w, h); //
-
-
-    pdp_packet_pass_if_valid(x->x_outlet0, &object);
-}
-
-static int pdp_1394L_read_frame(t_pdp_1394L *x)
-{
-
-  if (!x->x_decoder)return 0;
-  if (!x->x_frame_ready) {
-	//x->x_image.newimage = 0;
-  }
-  else {
-    dv_parse_header(x->x_decoder, x->videobuf);
-    dv_parse_packs (x->x_decoder, x->videobuf);
-    if(dv_frame_changed(x->x_decoder)) {
-      int pitches[3] = {0,0,0};
-      //      pitches[0]=x_decoder->width*3; // rgb
-      //      pitches[0]=x_decoder->width*((x_reqFormat==GL_RGBA)?3:2);
-      pitches[0]=x->x_decoder->width*3;
-      x->x_height=x->x_decoder->height;
-      x->x_width=x->x_decoder->width;
-      
-      /* decode the DV-data to something we can handle and that is similar to the wanted format */
-      //      dv_report_video_error(x_decoder, videobuf);  // do we need this ?
-      // gosh, this(e_dv_color_rgb) is expansive:: the decoding is done in software only...
-      //      dv_decode_full_frame(x_decoder, videobuf, ((x_reqFormat==GL_RGBA)?e_dv_color_rgb:e_dv_color_yuv), &decodedbuf, pitches);
-      dv_decode_full_frame(x->x_decoder, x->videobuf, e_dv_color_rgb, &x->decodedbuf, pitches);
-
-      //     post("sampling %d", x_decoder->sampling);
-
-      /* convert the colour-space to the one we want */
-      /*
-       * btw. shouldn't this be done in [pix_video] rather than here ?
-       * no because [pix_video] knows nothing about the possible colourspaces in here
-       */
-
-      // letting the library do the conversion to RGB and then doing the conversion to RGBA
-      // is really stupid.
-      // let's do it all ourselfes:
-      //      if (x_reqFormat==GL_RGBA)x_image.image.fromRGB(decodedbuf); else
-      //x_image.image.fromYVYU(decodedbuf);
-    	process_image (x);
-	
-    }
-
-    x->x_frame_ready = false;
-  }
-	
-  return 1;
-}
-
-
-static void *pdp_1394L_thread(void *voidx)
-{
-    t_pdp_1394L *x = ((t_pdp_1394L *)voidx);
-
-  int fd=x->dvfd;
-  int framesize = x->x_framesize;
-  struct dv1394_status dvst;
-  int n_frames = N_BUF;
-  unsigned char* mmapbuf = x->x_mmapbuf;
-
-  /* this will hang if no ieee1394-device is present, what to do about it ??? */
-  x->x_haveVideo=false;
-  if(ioctl(fd, DV1394_WAIT_FRAMES, 1)) {
-    perror("error: ioctl WAIT_FRAMES");
-    x->x_capturing=false; return NULL;
-  }
-  if (ioctl(fd, DV1394_GET_STATUS, &dvst))   {
-    perror("ioctl GET_STATUS");
-    x->x_capturing=false; return NULL;
-  }
-  x->x_haveVideo=true;
-  x->x_capturing=true;
-
-  //fprintf(stderr,"aqui1");
-  while(x->x_continue_thread){
-  //fprintf(stderr,"aqui2");
-    if(ioctl(fd, DV1394_WAIT_FRAMES, n_frames - 1)) {
-      perror("error: ioctl WAIT_FRAMES");
-      x->x_capturing=false; return NULL;
-    }
-    if (ioctl(fd, DV1394_GET_STATUS, &dvst))   {
-      perror("ioctl GET_STATUS");
-      x->x_capturing=false; return NULL;
-    }
-  //fprintf(stderr,"aqui3");
-    /*
-      dvst.init
-      dvst.active_frame
-      dvst.first_clear_frame
-      dvst.n_clear_frames
-      dvst.dropped_frames
-    */	
-    if (dvst.dropped_frames > 0) {
-      verbose(1,"dv1394: dropped at least %d frames", dvst.dropped_frames);
-    }
-    /*
-      memcpy( g_current_frame->data, 
-      (g_dv1394_map + (dvst.first_clear_frame * DV1394_PAL_FRAME_SIZE)),
-      DV1394_PAL_FRAME_SIZE );
-    */
-    x->videobuf = mmapbuf + (dvst.first_clear_frame * framesize);
-
-    //post("thread %d\t%x %x", me->frame, me->tvfd, me->vmmap);
-    if (ioctl(fd, DV1394_RECEIVE_FRAMES, 1) < 0)    {
-      perror("receiving...");
-    }
-    x->x_lastframe=x->x_frame;
-    x->x_frame++;
-    x->x_frame%=N_BUF;
-    x->x_frame_ready = true;
-  }
-  x->x_capturing=false;
-
-  //process_image  (x, x->videobuf);
-
-    return 0;
-}
-
-static void
-close_device                    (t_pdp_1394L *x)
-{
-  if(x->x_mmapbuf!=NULL)munmap(x->x_mmapbuf, N_BUF*x->x_framesize);
-  if(x->dvfd>=0)close(x->dvfd);
-  x->x_haveVideo=false;
-
-}
-
-
-static int
-startTransfer (t_pdp_1394L *x)
-{
-  //if ((x->dvfd=openDevice(format))<0){
-  //  verbose(1, "DV4L: closed");
-  //  return(0);
-  //}
-  //x->x_image.newimage=0;
-  //x->x_image.image.data=0;
-  //x->x_image.image.xsize=720;
-  //x->x_image.image.ysize=576;
-  //x->x_image.image.setCsizeByFormat(x->x_reqFormat);
-  //x->x_image.image.reallocate();
-  x->videobuf=NULL;
-
-  x->x_frame_ready = false; 
-
-  if(x->x_decoder!=NULL)dv_decoder_free(x->x_decoder);
-  if (!(x->x_decoder=dv_decoder_new(1, 1, 1))){
-    //error("DV4L: unable to create DV-decoder...closing");
-    close_device(x);
-    return(0);
-  }
-  //x->x_decoder->quality=x->x_quality;
-  x->x_decoder->quality = DV_QUALITY_BEST;
-  verbose(1, "DV4L: DV decoding quality %d ", x->x_decoder->quality);
-  //fprintf(stderr,"before");
-  x->x_continue_thread = true;
-  pthread_create(&x->x_thread_id, 0, pdp_1394L_thread, x);
-  return 1;
-}
-
-static int
-stopTransfer                   (t_pdp_1394L *x)
-{
-  /* close the dv4l device and dealloc buffer */
-  /* terminate thread if there is one */
-  x->x_continue_thread=false;
-  int i=0;
-  if(x->x_haveVideo){
-    while(x->x_capturing){
-      struct timeval sleep;
-      sleep.tv_sec=0;  sleep.tv_usec=10; /* 10us */
-      select(0,0,0,0,&sleep);
-      i++;
-    }
-    verbose(1, "DV4L: shutting down dv1394 after %d usec", i*10);
-    ioctl(x->dvfd, DV1394_SHUTDOWN);
-  }
-  close_device(x);
-  return(1);
-}
-
-
-static void pdp_1394L_close(t_pdp_1394L *x)
-{
-  /* close the v4l device and dealloc buffer */
-
-    void *dummy;
-    //x->x_initialized = false;
-    /* terminate thread if there is one */
-    if(x->x_continue_thread){
-	x->x_continue_thread = 0;
-	pthread_join (x->x_thread_id, &dummy);
-    }
-
-
-        //stop_capturing (x);
-
-        //uninit_device (x);
-
-        close_device (x);
-	
-	if (-1 == close (x->dvfd))
-	        post ("close");
-
-        x->dvfd = -1;
-}
-
-
-static int pdp_1394L_open(t_pdp_1394L *x, t_symbol *name)
-{
-  x->x_devicename = name->s_name;
-
-  if(x->x_haveVideo){
-    verbose(1, "Stream already going on. Doing some clean-up...");
-    stopTransfer(x);
-  }
-
-  /*
-  All of the errors in this method return -1 anyhow, so fd should be 0 to allow
-  successful open if everything goes ok.
-
-  Ico Bukvic ico@vt.edu 2-18-07
-  */
-  int fd = 0; 
-  struct dv1394_init init = {
-    DV1394_API_VERSION, // api version 
-    0x63,              // isochronous transmission channel
-    N_BUF,             // number of frames in ringbuffer
-    (x->x_norm==NTSC)?DV1394_NTSC:DV1394_PAL,         // PAL or NTSC
-    //DV1394_PAL,         // PAL or NTSC
-    0, 0 , 0                // default packet rate
-  };
-
-  x->x_framesize=(x->x_norm==NTSC)?DV1394_NTSC_FRAME_SIZE:DV1394_PAL_FRAME_SIZE;
-  //x->x_framesize=DV1394_PAL_FRAME_SIZE;
-
-  if(x->x_devicename){
-    if ((fd = open(x->x_devicename, O_RDWR)) < 0) {
-        perror(x->x_devicename);
-        return -1;
-    }
-  } else {
-    signed char devnum=(x->x_devicenum<0)?0:(signed char)x->x_devicenum;
-    char buf[256];
-    buf[255]=0;buf[32]=0;buf[33]=0;
-    if (devnum<0)devnum=0;
-    snprintf(buf, 32, "/dev/ieee1394/dv/host%d/%s/in", devnum, (x->x_norm==NTSC)?"NTSC":"PAL");
-    //snprintf(buf, 32, "/dev/ieee1394/dv/host%d/%s/in", devnum, "PAL");
-    if ((fd = open(buf, O_RDWR)) < 0)    {
-      snprintf(buf, 32, "/dev/dv1394/%d", devnum);
-      if ((fd = open(buf, O_RDWR)) < 0) {
-	if ((fd=open("/dev/dv1394", O_RDWR)) < 0)    {
-	  perror(buf);
-	  return -1;
-	}
-      }
-    }
-  }
-  if (ioctl(fd, DV1394_INIT, &init) < 0)    {
-    perror("initializing");
-    close(fd);
-    return -1;
-  }
-  
-  x->x_mmapbuf = (unsigned char *) mmap( NULL, N_BUF*x->x_framesize,
-				       PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-  if(x->x_mmapbuf == MAP_FAILED) {
-    perror("mmap frame buffers");
-    close(fd);
-    return -1;
-  }
-  
-  if(ioctl(fd, DV1394_START_RECEIVE, NULL)) {
-    perror("dv1394 START_RECEIVE ioctl");
-    close(fd);
-    return -1;
-  }
-  /*Extra verbosity never hurt anyone...
-
-  Ico Bukvic ico@vt.edu 2-18-07
-  */
-  post("DV4L: Successfully opened...");
-  startTransfer(x);
-  x->dvfd=fd;
-
-  return 1;
-	
-}
-
-
-static int pdp_1394L_norm(t_pdp_1394L *x, t_symbol *s)
-{
-  int inorm = x->x_norm;
-  char* norm=s->s_name;
-  switch(norm[0]){
-  case 'N': case 'n':
-    inorm=NTSC;
-    break;
-  case 'P': case 'p':
-    inorm=PAL;
-    break;
-  }
-  if (inorm==x->x_norm)return 0;
-  x->x_norm=inorm;
-  return 0;
-}
-
-
-static void pdp_1394L_bang(t_pdp_1394L *x)
-{
-   
-  /* if initialized, grab a frame and output it */
-
-
-
-    /* convert data to pdp packet */
-/*
-    switch(x->x_v4l_palette){
-    case  VIDEO_PALETTE_YUV420P:
-	pdp_llconv(newimage, RIF_YUV__P411_U8, data, RIF_YVU__P411_S16, w, h); 
-	break;*/
-	
-	/* long live standards. v4l's rgb is in fact ogl's bgr */
-/*    case  VIDEO_PALETTE_RGB24:
-	pdp_llconv(newimage, RIF_BGR__P____U8, data, RIF_YVU__P411_S16, w, h); 
-	break;
-
-    case  VIDEO_PALETTE_RGB32:
-	pdp_llconv(newimage, RIF_BGRA_P____U8, data, RIF_YVU__P411_S16, w, h); 
-	break;
-
-    case  VIDEO_PALETTE_YUV422:
-	pdp_llconv(newimage, RIF_YUYV_P____U8, data, RIF_YVU__P411_S16, w, h); 
-	break;*/
-
-
-    /*default:
-	post("pdp_1394L: unsupported palette");
-	break;
-    }*/
-
-/*
-    if (PDP_IMAGE_YV12 == x->x_pdp_image_type){
-	pixel_unpack_u8s16_y(&newimage[0], data, nbpixels>>3, x->x_state_data->gain);
-	pixel_unpack_u8s16_uv(&newimage[plane1], &data[plane2], nbpixels>>5, x->x_state_data->gain);
-	pixel_unpack_u8s16_uv(&newimage[plane2], &data[plane1], nbpixels>>5, x->x_state_data->gain);
-    }
-*/
-    //x->x_v4l_palette = VIDEO_PALETTE_YUV420P;
-    //x->x_v4l_palette = VIDEO_PALETTE_RGB24;
-
-/*
-
-    else if(PDP_IMAGE_GREY == x->x_pdp_image_type){
-	pixel_unpack_u8s16_y(&newimage[0], data, nbpixels>>3, x->x_state_data->gain);
-    }
-*/
-    //post("pdp_1394L: mark unused %d", object);
-
-    /*pdp_packet_pass_if_valid(x->x_outlet0, &object);*/
-
-}
-
-
-
-static void pdp_1394L_free(t_pdp_1394L *x)
-{
-  //pdp_1394L_close(x);
-  if(x->x_haveVideo)stopTransfer(x);
-  //if(x->decodedbuf)delete[]decodedbuf;
-  if(x->x_decoder!=NULL)dv_decoder_free(x->x_decoder);
-}
-
-t_class *pdp_1394L_class;
-
-
-
-void *pdp_1394L_new(t_symbol *vdef, t_symbol *format)
-{
-    t_pdp_1394L *x = (t_pdp_1394L *)pd_new(pdp_1394L_class);
-
-    x->x_outlet0 = outlet_new(&x->x_obj, &s_anything);
-
-    //x->x_channel = 0;//0x63;
-    x->x_devicenum  = 0;
-    x->x_norm = PAL;
-    x->x_decoder=NULL;
-    x->x_frame_ready=false;
-    x->x_width=720;
-    x->x_height=576;
-    x->x_framesize=DV1394_PAL_FRAME_SIZE;
-    //x->x_quality = DV_QUALITY_BEST;
-    //x->decodedbuf = new unsigned char[720*576*3];
-    x->decodedbuf = malloc (720*576*3*sizeof(unsigned char));
-    x->x_haveVideo=false;
-
-    return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_1394L_setup(void)
-{
-
-
-    pdp_1394L_class = class_new(gensym("pdp_1394L"), (t_newmethod)pdp_1394L_new,
-    	(t_method)pdp_1394L_free, sizeof(t_pdp_1394L), 0, A_DEFSYMBOL, A_DEFSYMBOL, A_NULL);
-
-
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_read_frame, gensym("bang"), A_NULL);
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_close, gensym("close"), A_NULL);
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_open, gensym("open"), A_SYMBOL, A_NULL);
-    class_addmethod(pdp_1394L_class, (t_method)pdp_1394L_norm, gensym("norm"), A_SYMBOL, A_NULL);
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/externals/pdvjtools/pdp_freeframe/CHANGES.LOG b/externals/pdvjtools/pdp_freeframe/CHANGES.LOG
deleted file mode 100755
index 46f7ad7a8..000000000
--- a/externals/pdvjtools/pdp_freeframe/CHANGES.LOG
+++ /dev/null
@@ -1,6 +0,0 @@
-0.3
-  added parameters details
-0.2
-  simplified RGB conversions
-0.1
-  initial release
diff --git a/externals/pdvjtools/pdp_freeframe/FreeFrame.h b/externals/pdvjtools/pdp_freeframe/FreeFrame.h
deleted file mode 100644
index 1536f4cbc..000000000
--- a/externals/pdvjtools/pdp_freeframe/FreeFrame.h
+++ /dev/null
@@ -1,228 +0,0 @@
-#ifndef __FREEFRAME_H__
-#define __FREEFRAME_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* 
- *  FreeFrame.h
- * 
- *  FreeFrame Open Video Plugin Prototype
- *  C Version
- * 
- *  www.freeframe.org
- *  marcus@freeframe.org
- * 
- * 	
- * 
- * Copyright (c) 2002, Marcus Clements www.freeframe.org
- * All rights reserved.
- * 
- * FreeFrame 1.0 upgrade by Pete Warden
- * www.petewarden.com
- * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- *    * Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *    * Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in
- *      the documentation and/or other materials provided with the
- *      distribution.
- *    * Neither the name of FreeFrame nor the names of its
- *      contributors may be used to endorse or promote products derived
- *      from this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- *	includes
- */
-
-#ifdef _WIN32
-
-#if _MSC_VER > 1000
-#pragma once
-#endif /* _MSC_VER > 1000 */
-
-#define WIN32_LEAN_AND_MEAN		/* Exclude rarely-used stuff from Windows headers */
-#include <windows.h>
-
-#elif defined(__linux__) || defined(__APPLE__)
-
-    typedef unsigned int DWORD;
-    typedef void *LPVOID;
-    typedef unsigned char BYTE;
-
-#endif
-
-
-/*
- *	#defines
- */
-
-#define FF_EFFECT			0
-#define FF_SOURCE			1
-
-#define FF_FAIL				0xFFFFFFFF
-#define FF_SUCCESS			0
-#define FF_TRUE				1
-#define FF_FALSE			0
-#define FF_SUPPORTED			1
-#define FF_UNSUPPORTED			0
-
-#define FF_GETINFO			0
-#define FF_INITIALISE			1
-#define FF_DEINITIALISE			2
-#define FF_PROCESSFRAME			3
-#define FF_GETNUMPARAMETERS		4
-#define FF_GETPARAMETERNAME		5
-#define FF_GETPARAMETERDEFAULT		6
-#define FF_GETPARAMETERDISPLAY		7
-#define FF_SETPARAMETER			8
-#define FF_GETPARAMETER			9
-#define FF_GETPLUGINCAPS		10
-#define FF_INSTANTIATE			11
-#define FF_DEINSTANTIATE		12
-#define FF_GETEXTENDEDINFO		13
-#define FF_PROCESSFRAMECOPY		14
-#define FF_GETPARAMETERTYPE		15
-
-#define FF_CAP_16BITVIDEO		0
-#define FF_CAP_24BITVIDEO		1
-#define FF_CAP_32BITVIDEO		2
-#define FF_CAP_PROCESSFRAMECOPY		3
-#define FF_CAP_MINIMUMINPUTFRAMES	10
-#define FF_CAP_MAXIMUMINPUTFRAMES	11
-#define FF_CAP_COPYORINPLACE		15
-
-#define FF_CAP_PREFER_NONE		0
-#define FF_CAP_PREFER_INPLACE		1
-#define FF_CAP_PREFER_COPY		2
-#define	FF_CAP_PREFER_BOTH		3
-
-#define FF_TYPE_BOOLEAN			0    
-#define FF_TYPE_EVENT			1
-#define FF_TYPE_RED			2 
-#define FF_TYPE_GREEN			3
-#define FF_TYPE_BLUE			4
-#define FF_TYPE_XPOS			5
-#define FF_TYPE_YPOS			6
-#define FF_TYPE_STANDARD		10
-#define FF_TYPE_TEXT			100
-
-/*
- *	FreeFrame types
- */
-
-    typedef struct PlugInfoStructTag {
-        DWORD	APIMajorVersion;
-        DWORD	APIMinorVersion;
-        BYTE	uniqueID[4];			/* 4 chars uniqueID - not null terminated */
-        BYTE	pluginName[16];			/* 16 chars plugin friendly name - not null terminated */
-        DWORD	pluginType;			/* Effect or source */
-    } PlugInfoStruct;
-
-    typedef struct PlugExtendedInfoStructTag {
-        DWORD PluginMajorVersion;
-        DWORD PluginMinorVersion;
-        char* Description;
-        char* About;
-        DWORD FreeFrameExtendedDataSize;
-        void* FreeFrameExtendedDataBlock;
-    } PlugExtendedInfoStruct;
-
-    typedef struct VideoInfoStructTag {
-        DWORD frameWidth;			/* width of frame in pixels */
-        DWORD frameHeight;			/* height of frame in pixels */
-        DWORD bitDepth;				/* enumerated indicator of bit depth of video */
-        /* 0 = 16 bit 5-6-5   1 = 24bit packed   2 = 32bit */
-        DWORD orientation;			/* video frame orientation meaningful values:
-                                       1 = origin at top left 2 = origin at bottom left */
-	
-    } VideoInfoStruct;
-
-    typedef struct ProcessFrameCopyStructTag {
-        DWORD numInputFrames;
-        void** InputFrames;
-        void* OutputFrame;
-    } ProcessFrameCopyStruct;
-
-    typedef struct SetParameterStructTag {
-        DWORD index;
-        float value;
-    } SetParameterStruct;
-
-    typedef union {
-        DWORD ivalue;
-        float fvalue;
-        char *svalue;
-    } ParameterValue;
-
-    typedef union plugMainUnionTag {
-        DWORD ivalue;
-        float fvalue;
-        VideoInfoStruct *VISvalue;
-        PlugInfoStruct *PISvalue;
-        char *svalue;
-    } plugMainUnion;
-
-    typedef plugMainUnion plugMainType(DWORD, LPVOID, DWORD);
-
-/*
- *	Function prototypes
- */
-
-/*
- * plugMain - The one and only exposed function
- * parameters: 
- *	functionCode - tells the plugin which function is being called
- *  pParam - 32-bit parameter or 32-bit pointer to parameter structure
- *
- * PLUGIN DEVELOPERS:  you shouldn't need to change this function
- *
- * All parameters are cast as 32-bit untyped pointers and cast to appropriate
- * types here
- * 
- * All return values are cast to 32-bit untyped pointers here before return to 
- * the host
- *
- *
- */
-
-#ifdef _WIN32
-
-    BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, DWORD lpReserved );
-
-    __declspec(dllexport) LPVOID __stdcall plugMain(DWORD functionCode, LPVOID pParam, DWORD reserved);
-
-    typedef __declspec(dllimport) LPVOID (__stdcall *FF_Main_FuncPtr)(DWORD, LPVOID, DWORD);
-
-#elif __linux__
-
-    plugMainUnion plugMain(DWORD functionCode, LPVOID pParam, DWORD reserved);
-
-
-#elif __APPLE__
-
-    typedef LPVOID (*FF_Main_FuncPtr)(DWORD, LPVOID, DWORD);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/externals/pdvjtools/pdp_freeframe/INSTALL b/externals/pdvjtools/pdp_freeframe/INSTALL
deleted file mode 100644
index 74dc31e20..000000000
--- a/externals/pdvjtools/pdp_freeframe/INSTALL
+++ /dev/null
@@ -1,21 +0,0 @@
-1. Download FreeFrame1.0-05.tar.gz from http://sourceforge.net/projects/freeframe/
-   
-   untar and cd to the FreeFrame1.0-05 directory
-   you have the binary plugins in the plugins_bin directory but you will need to compile the plugins to be sure that work.
-   compile the plugins::
-   cd to plugins_src/PetesPluginsLinux/ and type 'make'
-
-2. Download pdp_freeframe.tar.gz from http://www.artefacte.org/pd/pdp_freeframe.tar.gz
-   
-   untar the pdp_freeframe.tar.gz file
-   cd in to the pdp_freeframe directory
-   
-   edit the Makefile.config file and change the path to the pd and pdp sources i
-   and to the Free Frame plugins (*.so files)
-
-   type 'make'
-
-   to load the pdp_freeframe help file type 'pd -nrt -lib pdp:pdp_freeframe help_pdp_freeframe.pd'
-   
-
-
diff --git a/externals/pdvjtools/pdp_freeframe/Makefile b/externals/pdvjtools/pdp_freeframe/Makefile
deleted file mode 100644
index 188e54182..000000000
--- a/externals/pdvjtools/pdp_freeframe/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-current: all
-
-include Makefile.config
-
-PDP_MOD = pdp_freeframe.o 
-
-
-# build basic image processing modules (derived from base class)
-all: $(PDP_MOD)
-	$(CC) -Wl,--export-dynamic -shared -o pdp_freeframe.pd_linux *.o $(PDP_LIBS)
-
-clean:
-	rm -f *~
-	rm -f *.o
-	rm -f *.pd_linux
-
diff --git a/externals/pdvjtools/pdp_freeframe/Makefile.config b/externals/pdvjtools/pdp_freeframe/Makefile.config
deleted file mode 100644
index 0ab269f4f..000000000
--- a/externals/pdvjtools/pdp_freeframe/Makefile.config
+++ /dev/null
@@ -1,25 +0,0 @@
-# if configure can't find the m_pd.h header         
-# specify pd's include path here and ignore the warning
-#
-FF_PLUGIN_DIR=/usr/lib/FreeFrame
-PD_CPPFLAGS=-I../../../pd/src
-PDP_CFLAGS=-I../../pdp/include -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -ffast-math -freg-struct-return -DLINUX
-
-prefix=/usr
-PDP_VERSION = 0.0.1
-PDP_TARGET = linux
-PDP_LIBRARY_NAME = pdp_freeframe.pd_linux
-
-PDP_CPPFLAGS =  -fPIC -I. -I/usr/X11R6/include  -I/usr/include $(PD_CPPFLAGS)  $(PDP_CFLAGS)
-#--gstabs
-
-PDP_CFLAGS += -fPIC -DPDP_VERSION=\"$(PDP_VERSION)\" -DFF_PLUGIN_DIR=\"$(FF_PLUGIN_DIR)\"
-
-CC = gcc
-
-# build rules
-
-.c.o:
-	$(CC) $(PDP_CFLAGS) $(PDP_CPPFLAGS) -o $*.o -c $*.c
-.s.o:
-	$(AS) -o $*.o $*.s $(PDP_AFLAGS)
diff --git a/externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd b/externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd
deleted file mode 100644
index bb459e8c5..000000000
--- a/externals/pdvjtools/pdp_freeframe/pdp_freeframe-help.pd
+++ /dev/null
@@ -1,206 +0,0 @@
-#N canvas 0 0 996 665 10;
-#X obj 43 335 pdp_freeframe;
-#X floatatom 337 104 5 0 0 0 - - -;
-#X obj 46 115 pdp_qt;
-#X obj 46 45 metro 40;
-#X msg 46 -17 bang;
-#X msg 107 45 loop 1;
-#X obj 41 507 pdp_xv;
-#X obj 46 179 pdp_scale 320 240;
-#X obj 382 102 hradio 15 1 0 44 empty empty empty 0 -6 0 8 -262144
--1 -1 0;
-#X obj 391 228 hsl 128 15 0 1 0 0 empty vparam3 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 531 228 hsl 128 15 0 1 0 0 empty vparam4 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 671 228 hsl 128 15 0 1 0 0 empty vparam5 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 388 248 param 3 \$1;
-#X msg 528 247 param 4 \$1;
-#X msg 669 247 param 5 \$1;
-#X text 384 82 Select the plugin;
-#X text 388 129 Adjust plugin parameters.;
-#X msg 164 45 open \$1;
-#X obj 164 23 openpanel;
-#X text 95 -17 Load a mov file;
-#X symbolatom 96 488 20 0 0 0 - - -;
-#X text 249 488 <-- plugin name;
-#X floatatom 115 466 5 0 0 0 - - -;
-#X text 163 464 <-- number of parameters;
-#X obj 241 47 pdp_v4l;
-#X obj 241 20 metro 40;
-#X msg 241 -8 bang;
-#X text 214 438 <-- parameter name;
-#X text 241 410 <-- parameter type;
-#X text 257 381 <-- parameter default;
-#X obj 393 169 hsl 128 15 0 1 0 0 empty vparam0 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 531 169 hsl 128 15 0 1 0 0 empty vparam1 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 672 169 hsl 128 15 0 1 0 0 empty vparam2 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 391 291 hsl 128 15 0 1 0 0 empty vparam6 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 532 291 hsl 128 15 0 1 0 0 empty vparam7 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 674 291 hsl 128 15 0 1 0 0 empty vparam8 empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 390 188 param 0 \$1;
-#X msg 528 188 param 1 \$1;
-#X msg 669 188 param 2 \$1;
-#X msg 390 311 param 6 \$1;
-#X msg 529 310 param 7 \$1;
-#X msg 671 310 param 8 \$1;
-#N canvas 0 0 996 665 pname 0;
-#X obj 51 119 l2s;
-#X obj 80 119 l2s;
-#X obj 111 119 l2s;
-#X obj 143 119 l2s;
-#X obj 207 120 l2s;
-#X obj 236 120 l2s;
-#X obj 267 120 l2s;
-#X obj 298 119 l2s;
-#X obj 97 86 route 0 1 2 3 4 5 6 7 8;
-#X obj 327 119 l2s;
-#X obj 97 51 inlet;
-#X obj 51 154 s ffparam0;
-#X obj 79 178 s ffparam1;
-#X obj 118 205 s ffparam2;
-#X obj 148 227 s ffparam3;
-#X obj 185 157 s ffparam4;
-#X obj 213 181 s ffparam5;
-#X obj 255 206 s ffparam6;
-#X obj 283 230 s ffparam7;
-#X obj 305 155 s ffparam8;
-#X obj 391 53 inlet;
-#X msg 390 79 symbol;
-#X connect 0 0 11 0;
-#X connect 1 0 12 0;
-#X connect 2 0 13 0;
-#X connect 3 0 14 0;
-#X connect 4 0 15 0;
-#X connect 5 0 16 0;
-#X connect 6 0 17 0;
-#X connect 7 0 18 0;
-#X connect 8 0 0 0;
-#X connect 8 1 1 0;
-#X connect 8 2 2 0;
-#X connect 8 3 3 0;
-#X connect 8 4 4 0;
-#X connect 8 5 5 0;
-#X connect 8 6 6 0;
-#X connect 8 7 7 0;
-#X connect 8 8 9 0;
-#X connect 9 0 19 0;
-#X connect 10 0 8 0;
-#X connect 20 0 21 0;
-#X connect 21 0 11 0;
-#X connect 21 0 12 0;
-#X connect 21 0 13 0;
-#X connect 21 0 14 0;
-#X connect 21 0 15 0;
-#X connect 21 0 16 0;
-#X connect 21 0 17 0;
-#X connect 21 0 18 0;
-#X connect 21 0 19 0;
-#X restore 146 438 pd pname;
-#X symbolatom 390 150 18 0 0 0 - ffparam0 -;
-#X symbolatom 529 149 18 0 0 0 - ffparam1 -;
-#X symbolatom 668 149 18 0 0 0 - ffparam2 -;
-#X symbolatom 391 211 18 0 0 0 - ffparam3 -;
-#X symbolatom 530 210 18 0 0 0 - ffparam4 -;
-#X symbolatom 669 210 18 0 0 0 - ffparam5 -;
-#X symbolatom 391 271 18 0 0 0 - ffparam6 -;
-#X symbolatom 530 270 18 0 0 0 - ffparam7 -;
-#X symbolatom 669 270 18 0 0 0 - ffparam8 -;
-#N canvas 0 0 996 665 default 0;
-#X obj 97 86 route 0 1 2 3 4 5 6 7 8;
-#X obj 97 51 inlet;
-#X obj 391 53 inlet;
-#X obj 51 154 s vparam0;
-#X obj 393 114 float 0;
-#X msg 392 88 bang;
-#X obj 79 178 s vparam1;
-#X obj 118 205 s vparam2;
-#X obj 148 227 s vparam3;
-#X obj 184 159 s vparam4;
-#X obj 213 181 s vparam5;
-#X obj 255 206 s vparam6;
-#X obj 283 230 s vparam7;
-#X obj 304 155 s vparam8;
-#X connect 0 0 3 0;
-#X connect 0 1 6 0;
-#X connect 0 2 7 0;
-#X connect 0 3 8 0;
-#X connect 0 4 9 0;
-#X connect 0 5 10 0;
-#X connect 0 6 11 0;
-#X connect 0 7 12 0;
-#X connect 0 8 13 0;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 4 0 3 0;
-#X connect 4 0 6 0;
-#X connect 4 0 7 0;
-#X connect 4 0 8 0;
-#X connect 4 0 9 0;
-#X connect 4 0 10 0;
-#X connect 4 0 11 0;
-#X connect 4 0 12 0;
-#X connect 4 0 13 0;
-#X connect 5 0 4 0;
-#X restore 180 380 pd default;
-#X text 493 440 FreeFrame host for Pure Data Packet version 0.3;
-#X text 495 455 by Lluis Gomez i Bigorda (lluis@artefacte.org);
-#X text 514 468 & Yves Degoyon (ydegoyon@free.fr);
-#X text 495 483 using GPL code from http://freeframe.sf.net;
-#X text 495 498 and Pete Warden http://petewarden.com;
-#X obj 164 410 print type;
-#X msg 344 46 pluginsdir /usr/lib/FreeFrame;
-#X text 341 -10 You need the FreeFrame plugins to use with this object.
-Install them from http://sourceforge.net/projects/freeframe/ And then
-use this message to load.;
-#X msg 551 46 pluginsdir /data/plugins_video/ubuntustudio/FreeFrame1.0-05/plugins_binary
-;
-#X connect 0 0 6 0;
-#X connect 0 1 20 0;
-#X connect 0 2 22 0;
-#X connect 0 3 42 0;
-#X connect 0 4 58 0;
-#X connect 0 5 52 0;
-#X connect 1 0 0 1;
-#X connect 2 0 7 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
-#X connect 4 0 5 0;
-#X connect 4 0 18 0;
-#X connect 5 0 2 0;
-#X connect 7 0 0 0;
-#X connect 8 0 1 0;
-#X connect 9 0 12 0;
-#X connect 10 0 13 0;
-#X connect 11 0 14 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 14 0 0 0;
-#X connect 17 0 2 0;
-#X connect 18 0 17 0;
-#X connect 22 0 42 1;
-#X connect 22 0 52 1;
-#X connect 24 0 7 0;
-#X connect 25 0 24 0;
-#X connect 26 0 25 0;
-#X connect 30 0 36 0;
-#X connect 31 0 37 0;
-#X connect 32 0 38 0;
-#X connect 33 0 39 0;
-#X connect 34 0 40 0;
-#X connect 35 0 41 0;
-#X connect 36 0 0 0;
-#X connect 37 0 0 0;
-#X connect 38 0 0 0;
-#X connect 39 0 0 0;
-#X connect 40 0 0 0;
-#X connect 41 0 0 0;
-#X connect 59 0 0 0;
-#X connect 61 0 0 0;
diff --git a/externals/pdvjtools/pdp_freeframe/pdp_freeframe.c b/externals/pdvjtools/pdp_freeframe/pdp_freeframe.c
deleted file mode 100644
index 717fd98f8..000000000
--- a/externals/pdvjtools/pdp_freeframe/pdp_freeframe.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- *   Pure Data Packet module.
- *   Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
- *
- *   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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <dlfcn.h>
-
-#include "pdp.h"
-
-#include "FreeFrame.h"
-
-#define PLUGINDIR "plugins"
-#define FREEFRAME_PNAME_LENGTH 16
-#define FREEFRAME_ID_LENGTH 4
-#define FREEFRAME_PARAM_DETAILS_LENGTH 128
-
-#define FF_CAP_V_BITS_VIDEO	FF_CAP_24BITVIDEO
-
-typedef struct
-{
-    char	name[FREEFRAME_PNAME_LENGTH+1];
-    plugMainType *plugmain;
-    unsigned	instance;
-    unsigned	numparameters;
-} PLUGIN;
-
-typedef struct pdp_freeframe_struct
-{
-    t_object x_obj;
-    t_float x_f;
-
-    t_outlet *x_outlet0;
-    t_outlet *x_pname;
-    t_outlet *x_nparams;
-    t_outlet *x_parname;
-    t_outlet *x_partype;
-    t_outlet *x_pardefault;
-    int x_packet0;
-    int x_packet1;
-    int x_dropped;
-    int x_queue_id;
-
-    int x_width;
-    int x_height;
-    int x_size;
-
-    int x_plugin_count;
-    struct dirent **x_filename_list;
-    int x_filename_count;
-
-    int x_plugin; 
-    int x_infosok; 
-    char x_pdetails[FREEFRAME_PARAM_DETAILS_LENGTH]; 
-    t_symbol *plugindir;
-
-    PLUGIN *plugins;
-    
-} t_pdp_freeframe;
-
-
-void panic(const char *panicstr, ...)
-{
-    post("pdp_freeframe :: PANIC!! %s\n", panicstr);
-    exit(1);
-}
-
-static int selector(const struct dirent *dp)
-{    
-    return (strstr(dp->d_name, ".so") != NULL);
-}
-
-static void scan_plugins(t_pdp_freeframe *x, char *plugindir)
-{
-    x->x_filename_count = scandir(plugindir, &x->x_filename_list, selector, alphasort);
-    if (x->x_filename_count < 0)
-        x->x_filename_count = 0;
-}
-
-void ff_loadplugins(t_pdp_freeframe *x, t_symbol *plugindirsymbol)
-{
-    char* plugindir = plugindirsymbol->s_name;
-    char libname[PATH_MAX];
-    plugMainType *plugmain;
-    unsigned instance, numparameters;
-    int i;
-    char *pluginname;
-    void *plugin_handle;
-    
-    scan_plugins(x, plugindir);
-
-    x->x_plugin_count = 0;
-    x->plugins = (PLUGIN *)getbytes(x->x_filename_count*sizeof(PLUGIN));
-    if (x->plugins == NULL)
-    {
-        panic("no memory for loading plugins\n");
-    }  
-    else
-    {
-        post( "allocated plugins : %x", x->plugins );
-    }
-
-    for (i=0; i<x->x_filename_count; i++)
-    {
-        pluginname = x->x_filename_list[i]->d_name;
-	
-        snprintf(libname, PATH_MAX, "%s/%s", plugindir, pluginname);
-	
-        plugin_handle = dlopen(libname, RTLD_NOW);
-        dlerror();
-        plugmain = (plugMainType *)(unsigned)dlsym(plugin_handle, "plugMain");
-        if (plugmain == NULL)
-            panic("plugin %s: %s", x->x_filename_list[i]->d_name, dlerror());
-	
-        PlugInfoStruct *pis = (plugmain(FF_GETINFO, NULL, 0)).PISvalue;
-
-        if ((plugmain(FF_GETPLUGINCAPS, (LPVOID)FF_CAP_V_BITS_VIDEO, 0)).ivalue != FF_TRUE)
-            panic("plugin %s: no 24 bit support", pluginname);
-
-        if (pis->APIMajorVersion < 1)
-            panic("plugin %s: old api version", pluginname);
-	
-        if ((plugmain(FF_INITIALISE, NULL, 0)).ivalue == FF_FAIL)
-            panic("plugin %s: init failed", pluginname);
-	
-        VideoInfoStruct vidinfo;
-        vidinfo.frameWidth = x->x_width;
-        vidinfo.frameHeight = x->x_height;
-        vidinfo.orientation = 1;
-        vidinfo.bitDepth = FF_CAP_V_BITS_VIDEO;
-
-        instance = plugmain(FF_INSTANTIATE, &vidinfo, 0).ivalue;
-        if (instance == FF_FAIL)
-            panic("plugin %s: init failed",  pluginname);
-	
-        numparameters = plugmain(FF_GETNUMPARAMETERS, NULL, 0).ivalue;
-        if (numparameters == FF_FAIL)
-            panic("plugin %s: numparameters failed",  pluginname);
-	
-        x->plugins[x->x_plugin_count].plugmain = plugmain;
-	
-        strncpy(x->plugins[x->x_plugin_count].name, (char *)(pis->pluginName), 16);
-        x->plugins[x->x_plugin_count].name[16] = 0;
-	
-        x->plugins[x->x_plugin_count].instance = instance;
-        x->plugins[x->x_plugin_count].numparameters = numparameters;
-	
-        post("%s [%s] is loaded", x->plugins[x->x_plugin_count].name, pluginname);
-        x->x_plugin_count++;
-    }
-}
-
-void ff_processframe(t_pdp_freeframe *x, int plugin, void *buffer)
-{
-    x->plugins[plugin].plugmain(FF_PROCESSFRAME, buffer,  x->plugins[plugin].instance);
-}
-
-void ff_freeplugins(t_pdp_freeframe *x)
-{
-    t_int i;
-
-    for (i=0; i<x->x_plugin_count; i++)
-    {
-        plugMainType *plugmain = x->plugins[i].plugmain;
-    
-        plugmain(FF_DEINITIALISE, NULL, 0);
-        plugmain(FF_DEINSTANTIATE, NULL, x->plugins[i].instance);
-    }
-    post("freeing plugin resources : %x", x->plugins);
-    freebytes( x->plugins, x->x_filename_count*sizeof(PLUGIN) );
-    x->plugins = NULL;
-}
-
-static void pdp_freeframe_plugindir(t_pdp_freeframe *x, t_symbol *s)
-{
-    x->plugindir = s;
-    if( s != &s_)
-        ff_loadplugins(x, x->plugindir);
-}
-
-static void pdp_freeframe_process_rgb(t_pdp_freeframe *x)
-{
-    t_pdp     *header = pdp_packet_header(x->x_packet0);
-    short int *data   = (short int *)pdp_packet_data(x->x_packet0);
-    t_pdp     *newheader = pdp_packet_header(x->x_packet1);
-    short int *newdata = (short int *)pdp_packet_data(x->x_packet1); 
-      
-    if ( x->x_plugin_count <= 0 )
-    {
-        return;
-    }
-
-    if ((x->x_width != (t_int)header->info.image.width) || 
-        (x->x_height != (t_int)header->info.image.height)) 
-    {
-
-    	post("pdp_freeframe :: resizing plugins");
-	
-    	ff_freeplugins(x);
-
-    	x->x_width = header->info.image.width;
-    	x->x_height = header->info.image.height;
-    	x->x_size = x->x_width*x->x_height;
-    
-    	//load the plugins
-        ff_loadplugins(x, x->plugindir);
-    }
-    
-    newheader->info.image.encoding = header->info.image.encoding;
-    newheader->info.image.width = x->x_width;
-    newheader->info.image.height = x->x_height;
-
-    memcpy( newdata, data, x->x_size*3 );
-
-    ff_processframe(x, x->x_plugin, newdata);
-   
-    return;
-}
-
-static void pdp_freeframe_param(t_pdp_freeframe *x, t_floatarg f1, t_floatarg f2)
-{
-    int i=0;
-    plugMainType *plugmain = x->plugins[x->x_plugin].plugmain;
-    unsigned instance = x->plugins[x->x_plugin].instance;
-    unsigned numparameters = x->plugins[x->x_plugin].numparameters;
-
-    SetParameterStruct sps;
-    
-    //for (i=0; i<numparameters; i++)
-    //{
-	//if (plugmain(FF_GETPARAMETERTYPE, (LPVOID)i, 0).ivalue == FF_TYPE_TEXT)
-	//    continue;
-
-	//sps.value = plugmain(FF_GETPARAMETER, (LPVOID)i, instance).fvalue;
-
-	//post ("%d param.value %d", i, sps.value);
-	
-    //if((f2<=1)&&(f2>=0))
-    sps.value = f2;
-    //sps.value += .01;
-	//if (sps.value > 1.0) sps.value = 1.0;
-	//else
-	//if (sps.value < 0.0) sps.value = 0.0;
-	    
-	sps.index = f1;
-	plugmain(FF_SETPARAMETER, &sps, instance);
-    //}
-}
-
-static void pdp_freeframe_plugin(t_pdp_freeframe *x, t_floatarg f)
-{
-    unsigned pi;
-    char *parname;
-    int partype;
-    float pardefault;
-    t_atom plist[2];
-    t_atom tlist[2];
-    t_atom vlist[2];
-
-    if ( x->x_plugin_count <= 0 )
-    {
-        post( "freeframe : no plugins loaded, check your plugin directory setup" );
-        return;
-    }
-    if((f<x->x_plugin_count)&&(f>-1)) 
-    {
-        x->x_plugin = f;
-    }
-    else
-    {
-        post( "freeframe : plugin out of range : %d", (t_int)f );
-        return;
-    }
-    post ("pdp_freeframe :: %s selected, %d parameters", x->plugins[x->x_plugin].name, x->plugins[x->x_plugin].numparameters);
-    outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-    outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-    for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-    {
-        parname = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERNAME, (LPVOID)pi, 0)).svalue;
-        SETFLOAT(&plist[0], pi);
-        SETSYMBOL(&plist[1], gensym(parname) );
-        outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-    }  
-    for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-    {
-        partype = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERTYPE, (LPVOID)pi, 0)).ivalue;
-        SETFLOAT(&tlist[0], pi);
-        SETFLOAT(&tlist[1], partype );
-        outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-        if ( ( partype != FF_TYPE_TEXT ) &&  ( partype > 0 ) ) 
-        {
-            pardefault = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERDEFAULT, (LPVOID)pi, 0)).fvalue;
-            SETFLOAT(&vlist[0], pi);
-            SETFLOAT(&vlist[1], pardefault );
-            outlet_list( x->x_pardefault, &s_list, 2, &vlist[0] );
-        }
-    }  
-}
-
-static void pdp_freeframe_sendpacket(t_pdp_freeframe *x)
-{
-    /* release the packet */
-    pdp_packet_mark_unused(x->x_packet0);
-    x->x_packet0 = -1;
-
-    /* unregister and propagate if valid dest packet */
-    pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet1);
-}
-
-static void pdp_freeframe_process(t_pdp_freeframe *x)
-{
-    int encoding;
-    t_pdp *header = 0;
-    char *parname;
-    unsigned pi;
-    int partype;
-    float pardefault;
-    t_atom plist[2];
-    t_atom tlist[2];
-    t_atom vlist[2];
-
-    /* check if image data packets are compatible */
-    if ( (header = pdp_packet_header(x->x_packet0))
-         && (PDP_BITMAP == header->type)){
-    
-        /* pdp_freeframe_process inputs and write into active inlet */
-        switch(pdp_packet_header(x->x_packet0)->info.image.encoding){
-
-        case PDP_BITMAP_RGB:
-            x->x_packet1 = pdp_packet_clone_rw(x->x_packet0);
-            pdp_queue_add(x, pdp_freeframe_process_rgb, pdp_freeframe_sendpacket, &x->x_queue_id);
-            break;
-
-        default:
-            /* don't know the type, so dont pdp_freeframe_process */
-            break;
-	    
-        }
-    }
-
-    // hack to display infos of first loaded plugin
-    if ( (x->x_plugin_count > 0) && (!x->x_infosok) )
-    {
-        x->x_infosok = 1;
-        outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-        outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-        for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-        {
-            parname = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERNAME, (LPVOID)pi, 0)).svalue;
-            SETFLOAT(&plist[0], pi);
-            SETSYMBOL(&plist[1], gensym(parname) );
-            outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-        }  
-        for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-        {
-            partype = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERTYPE, (LPVOID)pi, 0)).ivalue;
-            SETFLOAT(&tlist[0], pi);
-            SETFLOAT(&tlist[1], partype );
-            outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-            if ( ( partype != FF_TYPE_TEXT ) &&  ( partype > 0 ) ) 
-            {
-                pardefault = (x->plugins[x->x_plugin].plugmain(FF_GETPARAMETERDEFAULT, (LPVOID)pi, 0)).fvalue;
-                SETFLOAT(&vlist[0], pi);
-                SETFLOAT(&vlist[1], pardefault );
-                outlet_list( x->x_pardefault, &s_list, 2, &vlist[0] );
-            }
-        }  
-    }
-}
-
-static void pdp_freeframe_input_0(t_pdp_freeframe *x, t_symbol *s, t_floatarg f)
-{
-    /* if this is a register_ro message or register_rw message, register with packet factory */
-
-    if (s == gensym("register_rw")) 
-        x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("bitmap/rgb/*") );
-
-    if ((s == gensym("process")) && (-1 != x->x_packet0) && (!x->x_dropped))
-    {
-        /* add the process method and callback to the process queue */
-        pdp_freeframe_process(x);
-    }
-}
-
-static void pdp_freeframe_free(t_pdp_freeframe *x)
-{
-    int i;
-
-    pdp_queue_finish(x->x_queue_id);
-    pdp_packet_mark_unused(x->x_packet0);
-    ff_freeplugins(x);
-}
-
-t_class *pdp_freeframe_class;
-
-
-void *pdp_freeframe_new(t_floatarg f)
-{
-    int i;
-
-    t_pdp_freeframe *x = (t_pdp_freeframe *)pd_new(pdp_freeframe_class);
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("plugin"));
-
-    x->x_outlet0 = outlet_new(&x->x_obj, &s_anything); 
-    x->x_pname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_nparams = outlet_new(&x->x_obj, &s_anything); 
-    x->x_parname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_partype = outlet_new(&x->x_obj, &s_anything); 
-    x->x_pardefault = outlet_new(&x->x_obj, &s_anything); 
-
-    x->x_packet0 = -1;
-    x->x_packet1 = -1;
-    x->x_queue_id = -1;
-
-    x->x_width  = 320;
-    x->x_height = 240;
-    x->x_size   = x->x_width * x->x_height;
-
-    //load the plugins
-    x->x_plugin_count = 0;
-    x->x_infosok = 0;
-
-    char ff_plugin_dir[FILENAME_MAX];
-    char *home = getenv("HOME");
-    int home_len;
-    if(home != NULL)
-    {
-        home_len = strlen(home);
-        if(home_len >= FILENAME_MAX)
-            home_len = FILENAME_MAX - 1;
-        memcpy(ff_plugin_dir, home, home_len);
-        ff_plugin_dir[home_len] = '\0';
-        strncpy(ff_plugin_dir, "/.frf", FILENAME_MAX - home_len);
-        pdp_freeframe_plugindir(x, gensym(ff_plugin_dir));
-    }
-    pdp_freeframe_plugin(x, f);
-
-    return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-    void pdp_freeframe_setup(void)
-    {
-
-        post( "pdp_freeframe :: FreeFrame host for Pure Data Packet version 0.3\n                 by Lluis Gomez i Bigorda (lluis@artefacte.org) \n                 & Yves Degoyon (ydegoyon@free.fr)\n                 using GPL code from http://freeframe.sf.net\n                 and Pete Warden http://petewarden.com" );
-        pdp_freeframe_class = class_new(gensym("pdp_freeframe"), (t_newmethod)pdp_freeframe_new,
-                                        (t_method)pdp_freeframe_free, sizeof(t_pdp_freeframe), 0, A_DEFFLOAT, A_NULL);
-
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_input_0, gensym("pdp"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_plugin, gensym("plugin"),  A_FLOAT, A_NULL);   
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_param, gensym("param"),  A_FLOAT, A_FLOAT, A_NULL);   
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_plugindir, gensym("plugindir"),  A_SYMBOL, A_NULL);   
-        class_addmethod(pdp_freeframe_class, (t_method)pdp_freeframe_plugindir, gensym("pluginsdir"),  A_SYMBOL, A_NULL);   
-
-
-    }
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/externals/pdvjtools/pdp_frei0r/CHANGES.LOG b/externals/pdvjtools/pdp_frei0r/CHANGES.LOG
deleted file mode 100644
index a273448a8..000000000
--- a/externals/pdvjtools/pdp_frei0r/CHANGES.LOG
+++ /dev/null
@@ -1,2 +0,0 @@
-0.1
-  initial release
diff --git a/externals/pdvjtools/pdp_frei0r/INSTALL b/externals/pdvjtools/pdp_frei0r/INSTALL
deleted file mode 100644
index 551090b87..000000000
--- a/externals/pdvjtools/pdp_frei0r/INSTALL
+++ /dev/null
@@ -1,20 +0,0 @@
-1. Download Frei0r specs and plugins, here: http://www.piksel.org/frei0r
-   
-   darcs get http://darcs.gephex.org/frei0r/frei0r--main--1.1
-   cd to the frei0r-plugins-x.y.z directory
-   compile the plugins::
-   cd to plugins and type 'scons'
-   install the plugins::
-   type 'scons install'
-
-2. Download pdp_frei0r-0.1.tar.gz from http://www.artefacte.org/pd/pdp_frei0r-0.1.tar.gz
-   
-   untar the pdp_frei0r-0.1.tar.gz file
-   cd in to the pdp_frei0r-0.1 directory
-   
-   edit the Makefile.config file and change the path to the pd (m_pd.h), pdp (pdp.h) sources 
-   and frei0r plugin directory (.so) if needed.
-
-   type 'make'
-
-   to load the pdp_frei0r help file type 'pd -nrt -lib pdp:pdp_frei0r help_pdp_frei0r.pd'
diff --git a/externals/pdvjtools/pdp_frei0r/Makefile b/externals/pdvjtools/pdp_frei0r/Makefile
deleted file mode 100644
index 3282768ce..000000000
--- a/externals/pdvjtools/pdp_frei0r/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-current: all
-
-include Makefile.config
-
-PDP_MOD = pdp_frei0r.o 
-
-all: $(PDP_MOD)
-	$(CC) --export-dynamic -shared -o pdp_frei0r.pd_linux *.o $(PDP_LIBS)
-
-clean:
-	rm -f *~
-	rm -f *.o
-	rm -f *.pd_linux
-
diff --git a/externals/pdvjtools/pdp_frei0r/Makefile.config b/externals/pdvjtools/pdp_frei0r/Makefile.config
deleted file mode 100644
index d1a4bd66f..000000000
--- a/externals/pdvjtools/pdp_frei0r/Makefile.config
+++ /dev/null
@@ -1,22 +0,0 @@
-# if configure can't find the m_pd.h header         
-# specify pd's include path here and ignore the warning
-#
-FR_PLUGIN_DIR=/usr/local/lib/frei0r-1/
-PD_CPPFLAGS=-I../../../pd/src
-PDP_CFLAGS=-I../../pdp/include -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -O2 -funroll-loops -fomit-frame-pointer -ffast-math -freg-struct-return -DLINUX
-
-prefix=/usr/local
-PDPF_VERSION = 0.1
-PDPF_TARGET = linux
-PDPF_LIBRARY_NAME = pdp_frei0r.pd_linux
-
-PDP_CPPFLAGS =  -fPIC -I. -I/usr/X11R6/include  -I/usr/include $(PD_CPPFLAGS)  $(PDP_CFLAGS)
-
-PDP_CFLAGS += -fPIC -DPDPF_VERSION=\"$(PDPF_VERSION)\" -DFR_PLUGIN_DIR=\"$(FR_PLUGIN_DIR)\"
-
-CC = gcc
-
-# build rules
-
-.c.o:
-	$(CC) $(PDP_CFLAGS) $(PDP_CPPFLAGS) -o $*.o -c $*.c
diff --git a/externals/pdvjtools/pdp_frei0r/frei0r.h b/externals/pdvjtools/pdp_frei0r/frei0r.h
deleted file mode 100644
index 2e0911330..000000000
--- a/externals/pdvjtools/pdp_frei0r/frei0r.h
+++ /dev/null
@@ -1,567 +0,0 @@
-/** @mainpage frei0r - a minimalistic plugin API for video effects
- *
- * @section sec_intro Introduction
- *
- * This is frei0r - a minimalistic plugin API for video effects.
- *
- * The main emphasis is on simplicity - there are many different applications
- * that use video effects, and they all have different requirements regarding
- * their internal plugin API. And that's why frei0r does not try to be a
- * one-in-all general video plugin API, but instead an API for the most
- * common video effects: simple filters, sources and mixers that can be
- * controlled by parameters.
- *
- * It's our hope that this way these simple effects can be shared between
- * many applications, avoiding their reimplementation by different
- * projects.
- *
- * On the other hand, this is not meant as a competing standard to
- * more ambitious efforts that try to satisfy the needs of many different
- * applications and more complex effects.
- *
- *
- * @section sec_overview Overview
- *
- * If you are new to frei0r, the best thing is probably to have
- * a look at the <a href="frei0r_8h-source.html">frei0r header</a>,
- * which is quite simple.
- *
- * After that, you might want to look at the 
- * <a href="frei0r_8h.html">frei0r functions</a> in more detail.
- *
- * When developing a new frei0r effect, you have to choose
- *  - which effect type to use (\ref PLUGIN_TYPE),
- *  - which color model to use (\ref COLOR_MODEL), and
- *  - which parameter types (\ref PARAM_TYPE) your effect will support.
- *
- * To round things up, you should decide whether your effect should have
- * an associated icon (\ref icons), and where it will be installed
- * (\ref pluglocations).
- *
- * @section sec_changes Changes
- *
- * @subsection sec_changes_1_0_1_1 From frei0r 1.0 to frei0r 1.1
- *
- *   - added specifications for plugin locations
- *   - added specifications for frei0r icons
- *   - added RGBA8888 color model
- *   - added packed32 color model
- *   - added better specification of color models
- *   - added string type
- *   - added bounds to resolution (8 <= width, height <= 2048)
- *   - width and height must be an integer multiple of 8
- *   - frame data must be 16 byte aligned
- *   - improved update specification (must not change parameters,
- *      must restore fpu state)
- *   - added note for applications to ignore effects with unknown fields
- *   - added new plugin types mixer2 and mixer3
- *   - added section about \ref concurrency
- */
-
-
-/**
- * \addtogroup pluglocations Plugin Locations
- * @section sec_pluglocations Plugin Locations
- *
- * For Unix platforms there are rules for the location of frei0r plugins.
- *
- * frei0r 1.x plugin files should be located in
- *
- * - (1) /usr/lib/frei0r-1/\<vendor\>
- * - (2) /usr/local/lib/frei0r-1/\<vendor\>
- * - (3) $HOME/.frei0r-1/lib/\<vendor\>
- *
- * Examples:
- *
- * - /usr/lib/frei0r-1/mob/flippo.so
- * - /usr/lib/frei0r-1/drone/flippo.so
- * - /usr/local/lib/frei0r-1/gephex/coma/invert0r.so
- * - /home/martin/.frei0r-1/lib/martin/test.so
- *
- * Like in these examples plugins should be placed in "vendor" subdirs
- * to reduce name clashes.
- *
- * @subsection sec_order Plugin Loading Order
- *
- * The application shall load plugins in the following order: 3, 2, 1.
- * If a name clash occurs (two or more frei0r plugins with identical
- * effect name), the plugins in directory 3 have precedence over plugins
- * in directory 2, and those in directory 2 have precedence over plugins
- * in directory 1.
- *
- * This makes it possible for users to "override" effects that are
- * installed in system wide directories by placing plugins in their
- * home directory.
- *
- * The order of loading plugins inside each of the directories 
- * 1, 2, and 3 is not defined.
- */
-
-/**
- *\addtogroup icons Icons for frei0r effects
- * @section sec_icons Icons for frei0r effects
- *
- * Each frei0r effect can have an associated icon.
- *
- * @subsection sec_icon_format Icon Format
- *
- * The format of frei0r icons must be png.
- * Recommended resolution is 64x64.
- * The icon filename of an effect with effect name "frei0r"
- * must be "frei0r.png".
- *
- * @subsection sec_icon_location Icon location
- *
- * The exact location where the application should look for the
- * plugin is platform dependant.
- *
- * For Windows platforms, the icon should be at the same place as
- * the plugin containing the effect.
- *
- * For Unix platforms, the following mapping from plugin location
- * to icon location must be used:
- *
- * Let \<plugin_path\>/\<plugin\> be a frei0r plugin with name \<effect_name\>.
- * Then the corresponding icon (if any) shall be located in
- * \<icon_path\>/\<effect_name\>.png.
- * \<icon_path\> can be obtained in the following way:
- *
- * @verbatim
-  <plugin_path>                   |     <icon_path>                   
- ----------------------------------------------------------------------------
- $HOME/.frei0r-1/lib/<vendor>     | $HOME/.frei0r-1/icons/<vendor>    
- /usr/local/lib/frei0r-1/<vendor> | /usr/local/share/frei0r-1/icons/<vendor>
- /usr/lib/frei0r-1/<vendor>       | /usr/share/frei0r-1/icons/<vendor>
-          *                       | <plugin_path>
- @endverbatim
- *
- * (The wildcard '*' stands for any other plugin_path)
- *
- * For other platforms, no location is defined. We recommend to use the
- * plugin path where possible.
- */
-
-/**
- * \addtogroup concurrency Concurrency
- * @section sec_concurrency Concurrency
- *
- * - \ref f0r_init
- * - \ref f0r_deinit
- *
- * These methods must not be called more than once. It is obvious that no
- * concurrent calls are allowed.
- *
- *
- * - \ref f0r_get_plugin_info
- * - \ref f0r_get_param_info
- * - \ref f0r_construct
- * - \ref f0r_destruct
- *
- * Concurrent calls of these functions are allowed.
- *
- *
- * - \ref f0r_set_param_value
- * - \ref f0r_get_param_value
- * - \ref f0r_update
- * - \ref f0r_update2
- *
- * If a thread is in one of these methods its allowed for another thread to
- * enter one of theses methods for a different effect instance. But for one
- * effect instance only one thread is allowed to execute any of these methods. 
- */
-
-
-
-/** \file
- * \brief This file defines the frei0r api, version 1.1.
- *
- * A conforming plugin must implement and export all functions declared in
- * this header.
- *
- * A conforming application must accept only those plugins which use
- * allowed values for the described fields.
- */
-
-#ifndef INCLUDED_FREI0R_H
-#define INCLUDED_FREI0R_H
-
-#include <inttypes.h>
-
-/**
- * The frei0r API major version
- */
-#define FREI0R_MAJOR_VERSION 1
-
-/**
- * The frei0r API minor version
- */
-#define FREI0R_MINOR_VERSION 1
-
-//---------------------------------------------------------------------------
-
-/**
- * f0r_init() is called once when the plugin is loaded by the application.
- * \see f0r_deinit
- */
-int f0r_init(void);
-
-/**
- * f0r_deinit is called once when the plugin is unloaded by the application.
- * \see f0r_init
- */
-void f0r_deinit(void);
-
-//---------------------------------------------------------------------------
-
-/** \addtogroup PLUGIN_TYPE Type of the Plugin
- * These defines determine whether the plugin is a
- * source, a filter or one of the two mixer types
- *  @{
- */
-
-/** one input and one output */
-#define F0R_PLUGIN_TYPE_FILTER 0
-/** just one output */
-#define F0R_PLUGIN_TYPE_SOURCE 1
-/** two inputs and one output */
-#define F0R_PLUGIN_TYPE_MIXER2 2
-/** three inputs and one output */
-#define F0R_PLUGIN_TYPE_MIXER3 3
-
-/** @} */
-
-//---------------------------------------------------------------------------
-
-/** \addtogroup COLOR_MODEL Color Models
- * List of supported color models.
- *
- * Note: the color models are endian independent, because the
- * color components are defined by their positon in memory, not
- * by their significance in an uint32_t value.
- * 
- * For effects that work on the color components,
- * RGBA8888 is the recommended color model for frei0r-1.1 effects.
- * For effects that only work on pixels, PACKED32 is the recommended
- * color model since it helps the application to avoid unnecessary
- * color conversions.
- *
- * Effects can choose an appropriate color model, applications must support
- * all color models and do conversions if necessary. Source effects
- * must not use the PACKED32 color model because the application must know
- * in which color model the created framebuffers are represented.
- *
- * For each color model, a frame consists of width*height pixels which
- * are stored row-wise and consecutively in memory. The size of a pixel is
- * 4 bytes. There is no extra pitch parameter
- * (i.e. the pitch is simply width*4).
- *
- * The following additional constraints must be honored:
- *   - The top-most line of a frame is stored first in memory.
- *   - A frame must be aligned to a 16 byte border in memory.
- *   - The width and height of a frame must be positive
- *   - The width and height of a frame must be integer multiples of 8
- *
- * These constraints make sure that each line is stored at an address aligned
- * to 16 byte.
- */
-/*@{*/
-/**
- * In BGRA8888, each pixel is represented by 4 consecutive
- * unsigned bytes, where the first byte value represents
- * the blue, the second the green, and the third the red color
- * component of the pixel. The last value represents the
- * alpha value.
- */
-#define F0R_COLOR_MODEL_BGRA8888 0
-
-/**
- * In RGBA8888, each pixel is represented by 4 consecutive
- * unsigned bytes, where the first byte value represents
- * the red, the second the green, and the third the blue color
- * component of the pixel. The last value represents the
- * alpha value.
- */
-#define F0R_COLOR_MODEL_RGBA8888 1
-
-/**
- * In PACKED32, each pixel is represented by 4 consecutive
- * bytes, but it is not defined how the color componets are
- * stored. The true color format could be RGBA8888,
- * BGRA8888, a packed 32 bit YUV format, or any other
- * color format that stores pixels in 32 bit.
- *
- * This is useful for effects that don't work on color but
- * only on pixels (for example a mirror effect).
- *
- * Note that source effects must not use this color model.
- */
-#define F0R_COLOR_MODEL_PACKED32 2
-/*@}*/
-
-/**
- * The f0r_plugin_info_t structure is filled in by the plugin
- * to tell the application about its name, type, number of parameters,
- * and version. 
- *
- * An application should ignore (i.e. not use) frei0r effects that
- * have unknown values in the plugin_type or color_model field.
- * It should also ignore effects with a too high frei0r_version.
- *
- * This is necessary to be able to extend the frei0r spec (e.g.
- * by adding new color models or plugin types) in a way that does not
- * result in crashes when loading effects that make use of these
- * extensions into an older application.
- *
- * All strings are unicode, 0-terminated, and the encoding is utf-8.
- */
-typedef struct f0r_plugin_info
-{
-  const char* name;    /**< The (short) name of the plugin                   */
-  const char* author;  /**< The plugin author                                */
-  /** The plugin type
-   * \see PLUGIN_TYPE
-   */
-  int plugin_type;    
-  int color_model;     /**< The color model used                             */
-  int frei0r_version;  /**< The frei0r major version this plugin is built for*/
-  int major_version;   /**< The major version of the plugin                  */
-  int minor_version;   /**< The minor version of the plugin                  */
-  int num_params;      /**< The number of parameters of the plugin           */
-  const char* explanation; /**< An optional explanation string               */
-} f0r_plugin_info_t;
-
-
-/**
- * Is called once after init. The plugin has to fill in the values in info.
- *
- * \param info Pointer to an info struct allocated by the application.
- */
-void f0r_get_plugin_info(f0r_plugin_info_t* info);
-
-//---------------------------------------------------------------------------
-
-/** \addtogroup PARAM_TYPE Parameter Types
- *
- *  @{
- */
-
-
-/**
- * Parameter type for boolean values
- * \see f0r_param_bool
- */
-#define F0R_PARAM_BOOL      0
-
-/**
- * Parameter type for doubles
- * \see f0r_param_double
- */
-#define F0R_PARAM_DOUBLE    1
-
-/**
- * Parameter type for color
- * \see f0r_param_color
- */
-#define F0R_PARAM_COLOR     2
-/**
- * Parameter type for position
- * \see f0r_param_position
- */
-#define F0R_PARAM_POSITION  3
-
-/**
- * Parameter type for string
- * \see f0r_param_string
- */
-#define F0R_PARAM_STRING  4
-
-/**
- * The boolean type. The allowed range of values is [0, 1].
- * [0, 0.5[ is mapped to false and [0.5, 1] is mapped to true.
- */
-typedef double f0r_param_bool;
-
-/**
- * The double type. The allowed range of values is [0, 1].
- */
-typedef double f0r_param_double;
-
-/**
- * The color type. All three color components are in the range [0, 1].
- */
-typedef struct f0r_param_color
-{
-  float r; /**< red color component */
-  float g; /**< green color component */
-  float b; /**< blue color component */
-} f0r_param_color_t;
-
-/**
- * The position type. Both position coordinates are in the range [0, 1].
- */
-typedef struct f0r_param_position
-{
-  double x; /**< x coordinate */
-  double y; /**< y coordinate */
-} f0r_param_position_t;
-
-
-/**
- * The string type. 
- * Zero terminated array of 8-bit values in utf-8 encoding
- */
-typedef char f0r_param_string;
-
-/**  @} */
-
-
-/**
- * Similar to f0r_plugin_info_t, this structure is filled by the plugin
- * for every parameter.
- *
- * All strings are unicode, 0-terminated, and the encoding is utf-8.
- */
-typedef struct f0r_param_info
-{
-  const char* name;         /**<The (short) name of the param */
-  int type;                 /**<The type (see the F0R_PARAM_* defines) */
-  const char* explanation;  /**<Optional explanation (can be 0) */
-} f0r_param_info_t;
-
-/**
- * f0r_get_param_info is called by the application to query the type of
- * each parameter.
- *
- * \param info is allocated by the application and filled by the plugin
- * \param param_index the index of the parameter to be queried (from 0 to
- *   num_params-1)
- */
-void f0r_get_param_info(f0r_param_info_t* info, int param_index);
-
-//---------------------------------------------------------------------------
-
-/**
- * Transparent instance pointer of the frei0r effect.
- */
-typedef void* f0r_instance_t;
-
-/**
- * Constructor for effect instances. The plugin returns a pointer to
- * its internal instance structure.
- *
- * The resolution has to be an integer multiple of 8,
- * must be greater than 0 and be at most 2048 in both dimensions.
- *
- * \param width The x-resolution of the processed video frames
- * \param height The y-resolution of the processed video frames
- * \returns 0 on failure or a pointer != 0 on success
- *
- * \see f0r_destruct
- */
-f0r_instance_t f0r_construct(unsigned int width, unsigned int height);
-
-/**
- * Destroys an effect instance.
- *
- * \param instance The pointer to the plugins internal instance structure.
- *
- * \see f0r_construct
- */
-void f0r_destruct(f0r_instance_t instance);
-
-//---------------------------------------------------------------------------
-
-/**
- * Transparent parameter handle.
- */
-typedef void* f0r_param_t;
-
-/**
- * This function allows the application to set the parameter values of an
- * effect instance. Validity of the parameter pointer is handled by the
- * application thus the data must be copied by the effect.
- *
- * \param instance the effect instance
- * \param param pointer to the parameter value
- * \param param_index index of the parameter
- *
- * \see f0r_get_param_value
- */
-void f0r_set_param_value(f0r_instance_t instance, 
-			 f0r_param_t param, int param_index);
-
-/**
- * This function allows the application to query the parameter values of an
- * effect instance.
- *
- * \param instance the effect instance
- * \param param pointer to the parameter value
- * \param param_index index of the parameter
- *
-  * \see f0r_set_param_value
- */
-void f0r_get_param_value(f0r_instance_t instance,
-			 f0r_param_t param, int param_index);
-
-//---------------------------------------------------------------------------
-
-/**
- * This is where the core effect processing happens. The application calls it
- * after it has set the necessary parameter values.
- * inframe and outframe must be aligned to an integer multiple of 16 bytes
- * in memory.
- *
- * This funcition should not alter the parameters of the effect in any
- * way (\ref f0r_get_param_value should return the same values after a call
- * to \ref f0r_update as before the call).
- *
- * The function is responsible to restore the fpu state (e.g. rounding mode)
- * and mmx state if applicable before it returns to the caller.
- *
- * The host mustn't call \ref f0r_update for effects of type
- * \ref F0R_PLUGIN_TYPE_MIXER2 and \ref F0R_PLUGIN_TYPE_MIXER3.
- *
- * \param instance the effect instance
- * \param time the application time in seconds but with subsecond resolution
- *        (e.g. milli-second resolution). The resolution should be at least
- *        the inter-frame period of the application.
- * \param inframe the incoming video frame (can be zero for sources)
- * \param outframe the resulting video frame
- *
- * \see f0r_update2
- */
-void f0r_update(f0r_instance_t instance, 
-		double time, const uint32_t* inframe, uint32_t* outframe);
-
-//---------------------------------------------------------------------------
-
-/**
- * For effects of type \ref F0R_PLUGIN_TYPE_SOURCE or
- * \ref F0R_PLUGIN_TYPE_FILTER this method is optional. The \ref f0r_update
- * method must still be exported for these two effect types. If both are
- * provided the behavior of them must be the same.
- *
- * Effects of type \ref F0R_PLUGIN_TYPE_MIXER2 or \ref F0R_PLUGIN_TYPE_MIXER3 must provide the new \ref f0r_update2 method.
-
- * \param instance the effect instance
- * \param time the application time in seconds but with subsecond resolution
- *        (e.g. milli-second resolution). The resolution should be at least
- *        the inter-frame period of the application.
- * \param inframe1 the first incoming video frame (can be zero for sources)
- * \param inframe2 the second incoming video frame
-          (can be zero for sources and filters)
- * \param inframe3 the third incoming video frame
-          (can be zero for sources, filters and mixer3) 
- * \param outframe the resulting video frame
- *
- * \see f0r_update
- */
-void f0r_update2(f0r_instance_t instance,
-		 double time,
-		 const uint32_t* inframe1,
-		 const uint32_t* inframe2,
-		 const uint32_t* inframe3,
-		 uint32_t* outframe);
-//---------------------------------------------------------------------------
-
-#endif
diff --git a/externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd b/externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd
deleted file mode 100644
index 648339785..000000000
--- a/externals/pdvjtools/pdp_frei0r/pdp_frei0r-help.pd
+++ /dev/null
@@ -1,330 +0,0 @@
-#N canvas 528 22 996 665 10;
-#X floatatom 151 379 5 0 0 0 - - -;
-#X obj 196 377 hradio 15 1 0 49 empty empty empty 0 -6 0 8 -262144
--1 -1 0;
-#X obj 261 171 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 401 171 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 541 171 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 258 191 param 3 \$1;
-#X msg 398 190 param 4 \$1;
-#X msg 539 190 param 5 \$1;
-#X text 197 358 Select the plugin;
-#X text 258 72 Adjust plugin parameters.;
-#X symbolatom 87 501 20 0 0 0 - - -;
-#X text 240 501 <-- plugin name;
-#X floatatom 106 479 5 0 0 0 - - -;
-#X text 154 477 <-- number of parameters;
-#X text 205 451 <-- parameter name;
-#X text 232 423 <-- parameter type;
-#X obj 263 112 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 401 112 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 542 112 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 261 234 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 402 234 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 544 234 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 260 131 param 0 \$1;
-#X msg 398 131 param 1 \$1;
-#X msg 539 131 param 2 \$1;
-#X msg 260 254 param 6 \$1;
-#X msg 399 253 param 7 \$1;
-#X msg 541 253 param 8 \$1;
-#N canvas 0 22 996 665 pname 0;
-#X obj 51 119 l2s;
-#X obj 80 119 l2s;
-#X obj 111 119 l2s;
-#X obj 143 119 l2s;
-#X obj 207 120 l2s;
-#X obj 236 120 l2s;
-#X obj 267 120 l2s;
-#X obj 298 119 l2s;
-#X obj 327 119 l2s;
-#X obj 97 51 inlet;
-#X obj 51 154 s ffparam0;
-#X obj 79 178 s ffparam1;
-#X obj 118 205 s ffparam2;
-#X obj 148 227 s ffparam3;
-#X obj 185 157 s ffparam4;
-#X obj 213 181 s ffparam5;
-#X obj 255 206 s ffparam6;
-#X obj 283 230 s ffparam7;
-#X obj 305 155 s ffparam8;
-#X obj 391 53 inlet;
-#X msg 390 79 symbol;
-#X obj 359 118 l2s;
-#X obj 391 118 l2s;
-#X obj 97 79 route 0 1 2 3 4 5 6 7 8 9 10;
-#X obj 357 178 s ffparam9;
-#X obj 414 202 s ffparam10;
-#X connect 0 0 10 0;
-#X connect 1 0 11 0;
-#X connect 2 0 12 0;
-#X connect 3 0 13 0;
-#X connect 4 0 14 0;
-#X connect 5 0 15 0;
-#X connect 6 0 16 0;
-#X connect 7 0 17 0;
-#X connect 8 0 18 0;
-#X connect 9 0 23 0;
-#X connect 19 0 20 0;
-#X connect 20 0 10 0;
-#X connect 20 0 11 0;
-#X connect 20 0 12 0;
-#X connect 20 0 13 0;
-#X connect 20 0 14 0;
-#X connect 20 0 15 0;
-#X connect 20 0 16 0;
-#X connect 20 0 17 0;
-#X connect 20 0 18 0;
-#X connect 20 0 24 0;
-#X connect 20 0 25 0;
-#X connect 21 0 24 0;
-#X connect 22 0 25 0;
-#X connect 23 0 0 0;
-#X connect 23 1 1 0;
-#X connect 23 2 2 0;
-#X connect 23 3 3 0;
-#X connect 23 4 4 0;
-#X connect 23 5 5 0;
-#X connect 23 6 6 0;
-#X connect 23 7 7 0;
-#X connect 23 8 8 0;
-#X connect 23 9 21 0;
-#X connect 23 10 22 0;
-#X restore 137 451 pd pname;
-#X symbolatom 260 93 18 0 0 0 - ffparam0 -;
-#X symbolatom 399 92 18 0 0 0 - ffparam1 -;
-#X symbolatom 538 92 18 0 0 0 - ffparam2 -;
-#X symbolatom 261 154 18 0 0 0 - ffparam3 -;
-#X symbolatom 400 153 18 0 0 0 - ffparam4 -;
-#X symbolatom 539 153 18 0 0 0 - ffparam5 -;
-#X symbolatom 261 214 18 0 0 0 - ffparam6 -;
-#X symbolatom 400 213 18 0 0 0 - ffparam7 -;
-#X symbolatom 539 213 18 0 0 0 - ffparam8 -;
-#X text 489 424 frei0r host for Pure Data Packet version 0.1;
-#X text 491 439 by Lluis Gomez i Bigorda (lluis@artefacte.org);
-#X text 510 452 & Yves Degoyon (ydegoyon@free.fr);
-#X text 491 495 made at piksel yearly gathering : http://www.piksel.no
-;
-#X obj 155 423 print type;
-#X text 491 467 using frei0r specification 1.1 by Georg Seidel \, Phillip
-Promesberger and Martin Bayer;
-#X obj 261 304 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 404 304 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X symbolatom 261 283 18 0 0 0 - ffparam9 -;
-#X symbolatom 400 283 18 0 0 0 - ffparam10 -;
-#X msg 259 323 param 9 \$1;
-#X msg 401 323 param 10 \$1;
-#X obj 46 545 pdp_xv;
-#N canvas 222 59 450 300 input1 0;
-#X obj 49 181 pdp_qt;
-#X msg 49 49 bang;
-#X msg 110 111 loop 1;
-#X obj 50 214 pdp_scale 320 240;
-#X msg 167 111 open \$1;
-#X obj 167 89 openpanel;
-#X text 98 49 Load a mov file;
-#X obj 244 113 pdp_v4l;
-#X msg 244 58 bang;
-#X obj 49 250 outlet;
-#X obj 49 5 inlet;
-#X obj 251 7 inlet;
-#X obj 247 33 route 0;
-#X msg 298 59 stop;
-#X obj 50 28 route 0;
-#X msg 14 79 stop;
-#X obj 49 111 metro 80;
-#X obj 244 86 metro 80;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 16 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 17 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 8 0;
-#X connect 13 0 17 0;
-#X connect 14 0 15 0;
-#X connect 14 1 1 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 17 0 7 0;
-#X restore 44 44 pd input1;
-#X text 49 24 .mov;
-#X text 115 24 cam;
-#X obj 102 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 44 10 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X text 85 89 .mov;
-#X text 151 89 cam;
-#X obj 138 75 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj 80 75 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#N canvas 222 59 450 300 input2 0;
-#X obj 49 181 pdp_qt;
-#X msg 49 49 bang;
-#X msg 110 111 loop 1;
-#X obj 50 214 pdp_scale 320 240;
-#X msg 167 111 open \$1;
-#X obj 167 89 openpanel;
-#X text 98 49 Load a mov file;
-#X obj 244 113 pdp_v4l;
-#X msg 244 58 bang;
-#X obj 49 250 outlet;
-#X obj 49 5 inlet;
-#X obj 251 7 inlet;
-#X obj 247 33 route 0;
-#X msg 298 59 stop;
-#X obj 50 28 route 0;
-#X msg 14 79 stop;
-#X obj 49 111 metro 80;
-#X obj 244 86 metro 80;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 16 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 17 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 8 0;
-#X connect 13 0 17 0;
-#X connect 14 0 15 0;
-#X connect 14 1 1 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 17 0 7 0;
-#X restore 80 109 pd input2;
-#X text 116 148 .mov;
-#X text 182 148 cam;
-#X obj 169 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 111 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#N canvas 222 59 450 300 input3 0;
-#X obj 49 181 pdp_qt;
-#X msg 49 49 bang;
-#X msg 110 111 loop 1;
-#X obj 50 214 pdp_scale 320 240;
-#X msg 167 111 open \$1;
-#X obj 167 89 openpanel;
-#X text 98 49 Load a mov file;
-#X obj 244 113 pdp_v4l;
-#X msg 244 58 bang;
-#X obj 49 250 outlet;
-#X obj 49 5 inlet;
-#X obj 251 7 inlet;
-#X obj 247 33 route 0;
-#X msg 298 59 stop;
-#X obj 50 28 route 0;
-#X msg 14 79 stop;
-#X obj 49 111 metro 80;
-#X obj 244 86 metro 80;
-#X connect 0 0 3 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 16 0;
-#X connect 2 0 0 0;
-#X connect 3 0 9 0;
-#X connect 4 0 0 0;
-#X connect 5 0 4 0;
-#X connect 7 0 3 0;
-#X connect 8 0 17 0;
-#X connect 10 0 14 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 1 8 0;
-#X connect 13 0 17 0;
-#X connect 14 0 15 0;
-#X connect 14 1 1 0;
-#X connect 15 0 16 0;
-#X connect 16 0 0 0;
-#X connect 17 0 7 0;
-#X restore 111 168 pd input3;
-#X obj 43 202 pdp_scale 320 240;
-#X obj 69 232 pdp_scale 320 240;
-#X obj 93 262 pdp_scale 320 240;
-#X obj 905 409 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 905 461 pdp_control;
-#X msg 905 434 thread \$1;
-#X floatatom 905 522 5 0 0 0 - - -;
-#X obj 905 493 route pdp_drop;
-#X text 498 547 constructor : pdp_frei0r <index>;
-#X obj 46 376 pdp_frei0r 16;
-#X text 499 562 you can get the index from the list of loaded plugins
-;
-#X text 498 575 at startup ( check pd window );
-#X text 13 290 WARNING : sizes of inputs;
-#X text 12 302 _must_ be the same;
-#X msg 290 18 plugindir /usr/local/lib/frei0r-1;
-#X connect 0 0 75 3;
-#X connect 1 0 0 0;
-#X connect 2 0 5 0;
-#X connect 3 0 6 0;
-#X connect 4 0 7 0;
-#X connect 5 0 75 0;
-#X connect 6 0 75 0;
-#X connect 7 0 75 0;
-#X connect 12 0 28 1;
-#X connect 16 0 22 0;
-#X connect 17 0 23 0;
-#X connect 18 0 24 0;
-#X connect 19 0 25 0;
-#X connect 20 0 26 0;
-#X connect 21 0 27 0;
-#X connect 22 0 75 0;
-#X connect 23 0 75 0;
-#X connect 24 0 75 0;
-#X connect 25 0 75 0;
-#X connect 26 0 75 0;
-#X connect 27 0 75 0;
-#X connect 44 0 48 0;
-#X connect 45 0 49 0;
-#X connect 48 0 75 0;
-#X connect 49 0 75 0;
-#X connect 51 0 66 0;
-#X connect 54 0 51 1;
-#X connect 55 0 51 0;
-#X connect 58 0 60 1;
-#X connect 59 0 60 0;
-#X connect 60 0 67 0;
-#X connect 63 0 65 1;
-#X connect 64 0 65 0;
-#X connect 65 0 68 0;
-#X connect 66 0 75 0;
-#X connect 67 0 75 1;
-#X connect 68 0 75 2;
-#X connect 69 0 71 0;
-#X connect 70 0 73 0;
-#X connect 71 0 70 0;
-#X connect 73 0 72 0;
-#X connect 75 0 50 0;
-#X connect 75 1 10 0;
-#X connect 75 2 12 0;
-#X connect 75 3 28 0;
-#X connect 75 4 42 0;
-#X connect 80 0 75 0;
diff --git a/externals/pdvjtools/pdp_frei0r/pdp_frei0r.c b/externals/pdvjtools/pdp_frei0r/pdp_frei0r.c
deleted file mode 100644
index 7e6c17647..000000000
--- a/externals/pdvjtools/pdp_frei0r/pdp_frei0r.c
+++ /dev/null
@@ -1,660 +0,0 @@
-/*
- *   Pure Data Packet module.
- *   Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org>
- *
- *   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., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <dlfcn.h>
-
-#include "pdp.h"
-#include "frei0r.h"
-
-#define FREI0R_PNAME_LENGTH 128
-
-typedef struct
-{
-    char name[FREI0R_PNAME_LENGTH+1];
-    unsigned numparameters;
-    int plugin_type;
-    f0r_instance_t instance;
-    f0r_plugin_info_t plugin_info;
-    int (*f0r_init)(void);
-    void (*f0r_get_plugin_info)(f0r_plugin_info_t* pluginInfo);
-    void (*f0r_get_param_info)(f0r_param_info_t* info, int param_index);
-    f0r_instance_t (*f0r_construct)(unsigned int width, unsigned int height);
-    void (*f0r_destruct)(f0r_instance_t instance);
-    void (*f0r_set_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index);
-    void (*f0r_get_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index);
-    void (*f0r_update)(f0r_instance_t instance, double time, const uint32_t* inframe, uint32_t* outframe);
-    void (*f0r_update2)(f0r_instance_t instance, double time,
-                      const uint32_t* inframe1, const uint32_t* inframe2, const uint32_t* inframe3, uint32_t* outframe);
-    int (*f0r_deinit)(void);
-} PLUGIN;
-
-typedef struct pdp_frei0r_struct
-{
-    t_object x_obj;
-    t_float x_f;
-
-    t_outlet *x_outlet0;
-    t_outlet *x_pname;
-    t_outlet *x_nparams;
-    t_outlet *x_parname;
-    t_outlet *x_partype;
-    int x_packet0;
-    int x_packet1;
-    int x_packet2;
-    int x_packet3;
-
-    // middle input packets
-    int x_packetm0;
-    int x_packetm1;
-
-    // right input packets
-    int x_packetr0;
-    int x_packetr1;
-
-    int x_dropped;
-    int x_queue_id;
-
-    int x_width;
-    int x_height;
-    int x_size;
-
-    int x_plugin_count;
-    struct dirent **x_filename_list;
-    int x_filename_count;
-
-    int x_plugin; 
-    int x_infosok; 
-
-    t_symbol *plugindir;
-
-    PLUGIN *plugins;
-    
-} t_pdp_frei0r;
-
-void panic(const char *panicstr, ...)
-{
-    post("pdp_frei0r :: PANIC!! %s\n", panicstr);
-    exit(1);
-}
-
-static int selector(const struct dirent *dp)
-{    
-    return (strstr(dp->d_name, ".so") != NULL);
-}
-
-static void scan_plugins(t_pdp_frei0r *x, char *plugindir)
-{
-    x->x_filename_count = scandir(plugindir, &x->x_filename_list, selector, alphasort);
-    if (x->x_filename_count < 0)
-    {
-       x->x_filename_count = 0;
-    }
-}
-
-void fr_loadplugins(t_pdp_frei0r *x, t_symbol *plugindirsymbol)
-{
-    char* plugindir = plugindirsymbol->s_name;
-    char libname[PATH_MAX];
-    int i;
-    char *pluginname;
-    void *plugin_handle;
-    
-    scan_plugins(x, plugindir);
-
-    x->x_plugin_count = 0;
-    x->plugins = (PLUGIN *)getbytes(x->x_filename_count*sizeof(PLUGIN));
-    if (x->plugins == NULL)
-    {
-	panic("no memory for loading plugins\n");
-    }  
-    else
-    {
-        post( "allocated plugins : %x", x->plugins );
-    }
-
-    for (i=0; i<x->x_filename_count; i++)
-    {
-	pluginname = x->x_filename_list[i]->d_name;
-	
-	snprintf(libname, PATH_MAX, "%s/%s", plugindir, pluginname);
-	
-        post( "pdp_frei0r : opening : %s", pluginname );
-
-	plugin_handle = dlopen(libname, RTLD_NOW);
-	dlerror();
-
-        // get functions pointers
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_init) = dlsym(plugin_handle, "f0r_init");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_get_plugin_info) = dlsym(plugin_handle, "f0r_get_plugin_info");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_get_param_info) = dlsym(plugin_handle, "f0r_get_param_info");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_construct) = dlsym(plugin_handle, "f0r_construct");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_destruct) = dlsym(plugin_handle, "f0r_destruct");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_set_param_value) = dlsym(plugin_handle, "f0r_set_param_value");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_get_param_value) = dlsym(plugin_handle, "f0r_get_param_value");
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_update) = dlsym(plugin_handle, "f0r_update");
-	dlerror();
-
-        // check for special function update2
-        *(void**) (&x->plugins[x->x_plugin_count].f0r_update2) = dlsym(plugin_handle, "f0r_update2");
-        if (!dlerror())
-        {
-           // continue;
-        }
-
-        // init plugin
-        (*x->plugins[x->x_plugin_count].f0r_init)();
-
-        // instantiate
-        x->plugins[x->x_plugin_count].instance = (*x->plugins[x->x_plugin_count].f0r_construct)(x->x_width, x->x_height);
-
-        // get plugin infos
-        (*x->plugins[x->x_plugin_count].f0r_get_plugin_info)(&x->plugins[x->x_plugin_count].plugin_info); 
-        strcpy( x->plugins[x->x_plugin_count].name, x->plugins[x->x_plugin_count].plugin_info.name );
-        x->plugins[x->x_plugin_count].numparameters=x->plugins[x->x_plugin_count].plugin_info.num_params;
-        x->plugins[x->x_plugin_count].plugin_type=x->plugins[x->x_plugin_count].plugin_info.plugin_type;
-
-        if ( ( x->plugins[x->x_plugin_count].plugin_info.color_model != F0R_COLOR_MODEL_RGBA8888 ) &&
-             ( x->plugins[x->x_plugin_count].plugin_info.color_model != F0R_COLOR_MODEL_BGRA8888 ) &&
-             ( x->plugins[x->x_plugin_count].plugin_info.color_model != F0R_COLOR_MODEL_PACKED32 ) )
-        {
-           post( "pdp_frei0r : warning : plugin : %s use unsupported color model (%d) : ignored ...", 
-                              pluginname, x->plugins[x->x_plugin_count].plugin_info.color_model );
-           continue;
-        }
- 
-        x->x_plugin_count++;
-    }
-}
-
-void fr_processframe(t_pdp_frei0r *x, int plugin, void *ibuffer, void *imbuffer, void *irbuffer, void *obuffer)
-{
-   double time = 0.0;
-
-      if ( x->x_plugin_count <= 0 )
-      {
-           return;
-      }
-
-      if ( ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_FILTER ) ||
-           ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_SOURCE ) )
-      {
-         // process frame
-         (*x->plugins[x->x_plugin].f0r_update)(x->plugins[x->x_plugin].instance, time, ibuffer, obuffer);
-      }
-      if ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_MIXER2 )
-      {
-         if ( ( x->x_packet1 != -1 ) && ( x->x_packet2 != -1 ) && ( x->x_packetm1 != -1 ) )
-         {
-           // process frame
-           (*x->plugins[x->x_plugin].f0r_update2)(x->plugins[x->x_plugin].instance, time, ibuffer, imbuffer, irbuffer, obuffer);
-         }
-      }
-      if ( x->plugins[x->x_plugin].plugin_type == F0R_PLUGIN_TYPE_MIXER3 )
-      {
-         if ( ( x->x_packet1 != -1 ) && ( x->x_packet2 != -1 ) && ( x->x_packetm1 != -1 ) && ( x->x_packetr1 != -1 ) )
-         {
-           // process frame
-           (*x->plugins[x->x_plugin].f0r_update2)(x->plugins[x->x_plugin].instance, time, ibuffer, imbuffer, irbuffer, obuffer);
-         }
-      }
-}
-
-void fr_freeplugins(t_pdp_frei0r *x)
-{
-  t_int i;
-
-    for (i=0; i<x->x_plugin_count; i++)
-    {
-       // destroy plugin
-       (*x->plugins[i].f0r_destruct)(x->plugins[i].instance);
-    }
-    post("freeing plugin resources : %x", x->plugins);
-    freebytes( x->plugins, x->x_filename_count*sizeof(PLUGIN) );
-    x->plugins = NULL;
-}
-
-static void pdp_frei0r_plugindir(t_pdp_frei0r *x, t_symbol *s)
-{
-    x->plugindir = s;
-    if( s != &s_)
-        fr_loadplugins(x, x->plugindir);
-}
-
-static void pdp_frei0r_process_rgba(t_pdp_frei0r *x)
-{
-    t_pdp     *newheader = pdp_packet_header(x->x_packet2);
-    char *newdata = (char *)pdp_packet_data(x->x_packet2); 
-    t_pdp     *lheader = pdp_packet_header(x->x_packet1);
-    char *ldata   = (char *)pdp_packet_data(x->x_packet1);
-    t_pdp     *mheader = pdp_packet_header(x->x_packetm1);
-    char *mdata = (char *)pdp_packet_data(x->x_packetm1); 
-    t_pdp     *rheader = pdp_packet_header(x->x_packetr1);
-    char *rdata = (char *)pdp_packet_data(x->x_packetr1); 
-
-    if ((x->x_width != (t_int)lheader->info.image.width) || 
-        (x->x_height != (t_int)lheader->info.image.height)) 
-    {
-
-    	post("pdp_frei0r :: resizing plugins");
-	
-    	fr_freeplugins(x);
-
-    	x->x_width = lheader->info.image.width;
-    	x->x_height = lheader->info.image.height;
-    	x->x_size = x->x_width*x->x_height;
-
-    	//load the plugins
-    	fr_loadplugins(x, x->plugindir);
-    }
-    
-    newheader->info.image.encoding = lheader->info.image.encoding;
-    newheader->info.image.width = x->x_width;
-    newheader->info.image.height = x->x_height;
-
-    memcpy( newdata, ldata, x->x_size*sizeof(uint32_t) );
-
-    fr_processframe(x, x->x_plugin, ldata, mdata, rdata, newdata);
-   
-
-}
-
-static void pdp_frei0r_param(t_pdp_frei0r *x, t_symbol *s, int argc, t_atom *argv)
-{
-  int pnumber;
-  f0r_param_info_t param_infos;
- 
-      if ( x->x_plugin_count <= 0 )
-      {
-        post( "frei0r : set parameter : no plugins loaded, check your plugin directory setup" );
-        return;
-      }
-
-      if ( argc < 2 )
-      {
-         post("pdp_frei0r : set parameter : insufficient parameters (%d)", argc );
-         return;
-      }
-
-      if ( argv[0].a_type != A_FLOAT )
-      {
-         post("pdp_frei0r : set parameter : wrong parameter number" );
-         return;
-      }
-      pnumber = (int)argv[0].a_w.w_float;
-      // post("pdp_frei0r : setting parameter : %d", pnumber );
-
-      if ( (pnumber<0) || (pnumber>=(int)x->plugins[x->x_plugin].numparameters) )
-      {
-         post("pdp_frei0r : set parameter : wrong parameter number : %d : max : %d", pnumber, x->plugins[x->x_plugin].numparameters );
-         return;
-      }
-
-      (*x->plugins[x->x_plugin].f0r_get_param_info)(&param_infos, pnumber);
-
-      // set parameter
-      switch (param_infos.type)
-      {
-        case F0R_PARAM_BOOL:
-          {
-           f0r_param_bool fvalue;
- 
-            if ( argc != 2 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for boolean", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            if ( argv[1].a_w.w_float != 0. && argv[1].a_w.w_float != 1. )
-            {
-               // post("pdp_frei0r : wrong parameter value for boolean" );
-               return;
-            }
-            fvalue=argv[1].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &fvalue, pnumber);
-          }
-          break;
-        case F0R_PARAM_DOUBLE:
-          {
-           f0r_param_double fvalue;
-
-            if ( argc != 2 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for double", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            fvalue=argv[1].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &fvalue, pnumber);
-          }
-          break;
-        case F0R_PARAM_COLOR:
-          {
-           struct f0r_param_color color;
-
-            if ( argc != 4 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for color", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT ||
-                 argv[2].a_type != A_FLOAT ||
-                 argv[3].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            color.r = argv[1].a_w.w_float;
-            color.g = argv[2].a_w.w_float;
-            color.b = argv[3].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &color, pnumber);
-          }
-          break;
-        case F0R_PARAM_POSITION:
-          {
-           struct f0r_param_position position;
-
-            if ( argc != 3 )
-            {
-              post("pdp_frei0r : wrong parameter arguments (%d) for position", argc );
-              return;
-            }
-            if ( argv[1].a_type != A_FLOAT ||
-                 argv[2].a_type != A_FLOAT )
-            {
-               post("pdp_frei0r : wrong parameter value" );
-               return;
-            }
-            position.x = argv[1].a_w.w_float;
-            position.y = argv[2].a_w.w_float;
-            (*x->plugins[x->x_plugin].f0r_set_param_value)(x->plugins[x->x_plugin].instance, &position, pnumber);
-          }
-          break;
-        default:
-          post("pdp_frei0r : unsupported parameter type (%d)", param_infos.type );
-          return;
-      }
-}
-
-static void pdp_frei0r_plugin(t_pdp_frei0r *x, t_floatarg f)
-{
-  unsigned pi;
-  char *parname;
-  int partype;
-  t_atom plist[2];
-  t_atom tlist[2];
-  t_atom vlist[2];
-  f0r_param_info_t param_infos;
-
-    if ( x->x_plugin_count <= 0 )
-    {
-      post( "frei0r : no plugins loaded, check your plugin directory setup" );
-      return;
-    }
-    if((f<x->x_plugin_count)&&(f>-1)) 
-    {
-      x->x_plugin = f;
-    }
-    else
-    {
-      post( "frei0r : plugin out of range : %d", (t_int)f );
-      return;
-    }
-    post ("pdp_frei0r :: %s selected, %d parameters", x->plugins[x->x_plugin].name, x->plugins[x->x_plugin].numparameters);
-    outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-    outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-    for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-    {
-      (*x->plugins[x->x_plugin].f0r_get_param_info)(&param_infos, pi);
-      SETFLOAT(&plist[0], pi);
-      SETSYMBOL(&plist[1], gensym(param_infos.name) );
-      outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-      SETFLOAT(&tlist[0], pi);
-      SETFLOAT(&tlist[1], param_infos.type );
-      outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-    }
-}
-
-static void pdp_frei0r_sendpacket(t_pdp_frei0r *x)
-{
-    /* release the incoming packets */
-    pdp_packet_mark_unused(x->x_packet0);
-    x->x_packet0 = -1;
-    pdp_packet_mark_unused(x->x_packet1);
-    x->x_packet1 = -1;
-    pdp_packet_mark_unused(x->x_packetr0);
-    x->x_packetr0 = -1;
-    pdp_packet_mark_unused(x->x_packetr1);
-    x->x_packetr1 = -1;
-    pdp_packet_mark_unused(x->x_packetm0);
-    x->x_packetm0 = -1;
-    pdp_packet_mark_unused(x->x_packetm1);
-    x->x_packetm1 = -1;
-
-    x->x_packet3=-1;
-    x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet3, x->x_packet2, pdp_gensym("bitmap/rgb/*") );
-    pdp_packet_mark_unused(x->x_packet2);
-    x->x_packet2 = -1;
-
-    /* unregister and propagate if valid dest packet */
-    pdp_packet_pass_if_valid(x->x_outlet0, &x->x_packet3);
-}
-
-static void pdp_frei0r_process(t_pdp_frei0r *x)
-{
-   int encoding;
-   t_pdp *header = 0;
-   char *parname;
-   unsigned pi;
-   int partype;
-   t_atom plist[2];
-   t_atom tlist[2];
-   t_atom vlist[2];
-   f0r_param_info_t param_infos;
-
-   /* check if image data packets are compatible */
-   if ( (header = pdp_packet_header(x->x_packet1))
-	&& (PDP_BITMAP == header->type)){
-    
-	/* pdp_frei0r_process inputs and write into active inlet */
-	switch(pdp_packet_header(x->x_packet1)->info.image.encoding){
-
-	case PDP_BITMAP_RGBA:
-            x->x_packet2 = pdp_packet_clone_rw(x->x_packet1);
-            pdp_queue_add(x, pdp_frei0r_process_rgba, pdp_frei0r_sendpacket, &x->x_queue_id);
-	    break;
-
-	default:
-	    /* don't know the type, so dont pdp_frei0r_process */
-	    break;
-	    
-	}
-    }
-
-    // hack to display infos of first loaded plugin
-    if ( ( x->x_plugin_count>0 ) && ( !x->x_infosok ) )
-    {
-       outlet_symbol(x->x_pname, gensym( x->plugins[x->x_plugin].name ) );
-       outlet_float(x->x_nparams, (float)x->plugins[x->x_plugin].numparameters);
-       for ( pi=0; pi<x->plugins[x->x_plugin].numparameters; pi++ )
-       {
-         (*x->plugins[x->x_plugin].f0r_get_param_info)(&param_infos, pi);
-         SETFLOAT(&plist[0], pi);
-         SETSYMBOL(&plist[1], gensym(param_infos.name) );
-         outlet_list( x->x_parname, &s_list, 2, &plist[0] );
-         SETFLOAT(&tlist[0], pi);
-         SETFLOAT(&tlist[1], param_infos.type );
-         outlet_list( x->x_partype, &s_list, 2, &tlist[0] );
-       }
-       x->x_infosok = 1;
-    }
-}
-
-static void pdp_frei0r_input_0(t_pdp_frei0r *x, t_symbol *s, t_floatarg f)
-{
-    if (s == gensym("register_rw")) 
-    {
-       x->x_packet0=-1;
-       x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet0, (int)f, pdp_gensym("bitmap/rgb/*") );
-       // post("pdp_freiOr : drop 1 : %d", x->x_dropped );
-       x->x_packet1=-1;
-       x->x_dropped = pdp_packet_convert_ro_or_drop(&x->x_packet1, x->x_packet0, pdp_gensym("bitmap/rgba/*") );
-       // post("pdp_freiOr : drop 2 : %d", x->x_dropped );
-    }
-
-    if ((s == gensym("process")) && (-1 != x->x_packet1) && (!x->x_dropped))
-    {
-        /* add the process method and callback to the process queue */
-        pdp_frei0r_process(x);
-    }
-}
-
-static void pdp_frei0r_input_1(t_pdp_frei0r *x, t_symbol *s, t_floatarg f)
-{
-  char *ddata;
-  char *sdata;
-
-    if ( x->x_packetm0 != -1 )
-    {
-       return;
-    }
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetm0, (int)f, pdp_gensym("bitmap/rgb/*") );
-    // post("pdp_freiOr : middle drop 1 : %d", x->x_dropped );
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetm1, x->x_packetm0, pdp_gensym("bitmap/rgba/*") );
-    // post("pdp_freiOr : middle drop 2 : %d", x->x_dropped );
-}
-
-static void pdp_frei0r_input_2(t_pdp_frei0r *x, t_symbol *s, t_floatarg f)
-{
-  char *ddata;
-  char *sdata;
-
-    if ( x->x_packetr0 != -1 )
-    {
-       return;
-    }
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetr0, (int)f, pdp_gensym("bitmap/rgb/*") );
-    // post("pdp_freiOr : right drop 1 : %d", x->x_dropped );
-    x->x_dropped = pdp_packet_convert_rw_or_drop(&x->x_packetr1, x->x_packetr0, pdp_gensym("bitmap/rgba/*") );
-    // post("pdp_freiOr : right drop 2 : %d", x->x_dropped );
-}
-
-static void pdp_frei0r_free(t_pdp_frei0r *x)
-{
-  int i;
-
-    pdp_queue_finish(x->x_queue_id);
-    pdp_packet_mark_unused(x->x_packet0);
-    fr_freeplugins(x);
-}
-
-t_class *pdp_frei0r_class;
-
-void *pdp_frei0r_new(t_floatarg f)
-{
-    int i;
-
-    t_pdp_frei0r *x = (t_pdp_frei0r *)pd_new(pdp_frei0r_class);
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("pdp"), gensym("pdp1") );
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("pdp"), gensym("pdp2") );
-    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("plugin"));
-
-    x->x_outlet0 = outlet_new(&x->x_obj, &s_anything); 
-    x->x_pname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_nparams = outlet_new(&x->x_obj, &s_anything); 
-    x->x_parname = outlet_new(&x->x_obj, &s_anything); 
-    x->x_partype = outlet_new(&x->x_obj, &s_anything); 
-
-    x->x_packet0 = -1;
-    x->x_packet1 = -1;
-    x->x_packet2 = -1;
-    x->x_packet3 = -1;
-    x->x_packetm0 = -1;
-    x->x_packetm1 = -1;
-    x->x_packetr0 = -1;
-    x->x_packetr1 = -1;
-    x->x_queue_id = -1;
-
-    x->x_width  = 320;
-    x->x_height = 240;
-    x->x_size   = x->x_width * x->x_height;
-
-    //load the plugins
-    x->x_plugin_count = 0;
-    x->x_infosok = 0;
-    
-    char fr_plugin_dir[FILENAME_MAX];
-    char *home = getenv("HOME");
-    int home_len;
-    if(home != NULL)
-    {
-        home_len = strlen(home);
-        if(home_len >= FILENAME_MAX)
-            home_len = FILENAME_MAX - 1;
-        memcpy(fr_plugin_dir, home, home_len);
-        fr_plugin_dir[home_len] = '\0';
-        strncpy(fr_plugin_dir, "/.frf", FILENAME_MAX - home_len);
-        pdp_frei0r_plugindir(x, gensym(fr_plugin_dir));
-    }
-
-    //select plugin
-    pdp_frei0r_plugin(x, f);
-
-    return (void *)x;
-}
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-void pdp_frei0r_setup(void)
-{
-
-    post( "pdp_frei0r :: frei0r host for Pure Data Packet version 0.1\n                 by Lluis Gomez i Bigorda (lluis@artefacte.org) \n                 & Yves Degoyon (ydegoyon@free.fr)\n                 using frei0r specification 1.1 by Georg Seidel,\n		 Phillip Promesberger and Martin Bayer\n                 made at piksel yearly gathering : http://www.piksel.no" );
-    pdp_frei0r_class = class_new(gensym("pdp_frei0r"), (t_newmethod)pdp_frei0r_new,
-    	(t_method)pdp_frei0r_free, sizeof(t_pdp_frei0r), 0, A_DEFFLOAT, A_NULL);
-
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_input_0, gensym("pdp"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_input_1, gensym("pdp1"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_input_2, gensym("pdp2"),  A_SYMBOL, A_DEFFLOAT, A_NULL);
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_plugin, gensym("plugin"),  A_FLOAT, A_NULL);   
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_param, gensym("param"),  A_GIMME, A_NULL);   
-    class_addmethod(pdp_frei0r_class, (t_method)pdp_frei0r_plugindir, gensym("plugindir"),  A_SYMBOL, A_NULL);   
-
-}
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/externals/pdvjtools/pix_preview/.pix_2pnm.cpp.swp b/externals/pdvjtools/pix_preview/.pix_2pnm.cpp.swp
deleted file mode 100644
index 86fde9756871f681c76c1699c4a0a33735715729..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 81920
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

diff --git a/externals/pdvjtools/pix_preview/.pix_2pnm.h.swp b/externals/pdvjtools/pix_preview/.pix_2pnm.h.swp
deleted file mode 100644
index 32ddb97af67bc1d29680e57bf4bf015d3d9145cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12288
zcmeI2&u<$=6vwB4D5kVPIRLlURBF>Swv!am##N;_wwoI4II@$r5eRp@JGQ6UU+m60
zN%?W;r78l1IKlx@5C<eGR3rpa1&CY_a6y~_A@LWWazns(*G|Z<{!)6XX5>$HJ@e*y
z-uKN9E8fP?$zqufr-m5HBaHpidG~nu`c7s%!I<y5DyqI&Y4AXC-@KU_ONW7<4tyis
zIqR9qb*&)n$%VS-i;fiY@%@PB*s1nSJ!u22fL7pk6tK9G&hSolXk>V3Z{HqzZ1>FV
zbl0|80j+>mKr5gX&<bb;v;tZIt-xKNfbzDne-Xz$zyaHO;G&CGKr5gX&<bb;v;tZI
zt$<cQE1(t73TOqi0(Xf596#H?cpqcO?nglQ{XhC2z}1Ht`vSZP-T?C;1mj>gxU!3}
z^I#PGwUe<w!Da9Xkl+lcgJWPn*bbH+V(eS+5qJ$;1U9fhKloz@W50r5z|Y_(@Fn;h
zd<;GS?}4|$Tc8aD*aNOTh%ta4z<1yq@D;cME`dcb4=ivNyZ|a-6dVQz!S4yiJ_VP-
zCEx%HoB?G}0%PDHcoaMg?giH#fL`Doa2`ld0cCIqJP95LJHX%D5hwT&d=I_`?}Llr
z0(cqBf^m=qN5Ioy0PF(4AxEEq3*dS195@Y5fhd3dU_a1BE1(t73fxHr_6o<8%|tp)
zP1mQk;HL0t)5@l_1Y@rpWh{Zm!jv?q<4QA;s7{QRMG)k;Wi_}l*B{l=fEn7}fukEu
zv$twHQ7z2gs;%;6t0nv!m?OSgchI)58wk<p4L4wjeYvm%^L*LiN@N%#l!U6cEEy;o
zu)8;i2(C({nF?hxG%wATP^9K4Hu7BQDB-X22#1N#31rI=CK+w+M~+Occ-K#_11XnO
zTadJQOHkCj&PCI5xr)XU7rVX~DB;1y`uc@lJ%;G;j%*=IuCvNlIvNkgxa<j6*D~Xe
zU4*;MTNco=zRj*T!e$`P3ACv?SFYW2iSW?U6#fQxcHQW8So<+{eIcqJB#Pqdx?F3~
zYwtF8KL-JNzU#RGWL-!vCZm3FCSx7DBUm4|s=J}GkS>%&FAbGYVW99f4fze%!V>5j
zt?A4X-I<=~&9nY!VlU5`bS!E|`YPmByd)@ru^Ctrvoj})QA+z`g=@+W4MqFnH@E2F
z#@#7vSu`(bo+G6)h-1ftm%<|HU^Uxu`Ufe9W*3_A;t10AAc7#bBYa<)B6Yn`UX7mN
zjGo)<g-dx6#38t=XLuAn!d1dh!puZ7Wu=>{$Mci>Eov?d((1R1-S{czI@j|VHY{nt
zAw1@$rV6L03)RW`i9$ACsP->^#2`%wdrB@;8fOo%mzZJkAfSmtx!yIWWjo4{7yJ9)
zo+Y<h1`s;o7438@+9#vcOFU9K4nFB&OT-k2gvl3bxoUB0x>%WHn1c}*V03x5Fng*}
z&DU^`*97J$8rG(fp=CK7#&V@>t+w?Ll1Y{x*s2am#`a3butHN%-#8CMdL=2Tb{`r|
z(Ugv$;$*HglP}b#il^)OnetTqL>(QQ4w^S@+j@A&5Ox(VE#+p;*{-l0*&36=PR)g_
z6gN^_p}kmXbH@<@*|cnf+M%b0Ml)DLp`FPzm#+GmOlVt6ABH#?Muvv)Q1wbK?udX}
z&OvuFp2}9M*~#f*p@vm2M7$wH$MzugVO69`#av;sR!Ctfm1}+2B)a>8i384;jW9Ya
zQtUYPz*XA^xekQ^W-xKbBwwsH9*pav?+u*t#Tq7Mv0SK9<v3+aC6;r&MV!lRMg7JB
zf@&l547VZlv{cxKX&>d<KK7)XB|HzO<_7!WWZY?!1f`-cD;rajq9USPN#nXyuk}B%
zbk)I`>tnS^e04}sE542iZ!u-K(bQOLKRh~mIEg<;sLcI2%5!HfNMUmMb7N+F@A@q)
r^3B&SgZh-D37>myX#`Yoa9+5MEwFD#@|8nNNgLX7R;o<gku~`rh<6((

diff --git a/externals/pdvjtools/pix_preview/.tm_project.cache b/externals/pdvjtools/pix_preview/.tm_project.cache
deleted file mode 100644
index e69de29bb..000000000
diff --git a/externals/pdvjtools/pix_preview/BUGS b/externals/pdvjtools/pix_preview/BUGS
deleted file mode 100644
index c25246af5..000000000
--- a/externals/pdvjtools/pix_preview/BUGS
+++ /dev/null
@@ -1,3 +0,0 @@
-if you open a patch with two pix_preview objects pd crashes
-if you click in the 0,0 coordinate of a pix_preview pd crashes
-
diff --git a/externals/pdvjtools/pix_preview/Makefile b/externals/pdvjtools/pix_preview/Makefile
deleted file mode 100644
index e45384909..000000000
--- a/externals/pdvjtools/pix_preview/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-PD_DIR = ../../../pd
-GEM_DIR = ../../../Gem
-
-LIBS =  -lm
-GEM2PNM_VERSION = 0.6
-
-GEM2PNM_DISTRO = /mnt/c/ydegoyon.free.fr/gem2pdp-$(GEM2PNM_VERSION)
-GEM2PNM_TARBALL = $(GEM2PNM_DISTRO).tar.gz
-# build flags
-
-GEM2PNM_INCLUDE =  -I$(PD_DIR)/src -I.  -I$(GEM_DIR)/src -I$(PD_DIR)/src
-GEM2PNM_CPPFLAGS  = -fPIC -DPD -O2 -funroll-loops -fomit-frame-pointer  -ffast-math \
-    -Wall -W -Wno-unused -Wno-parentheses -Wno-switch \
-    -DGEM2PNM_VERSION=\"$(GEM2PNM_VERSION)\" -g
-
-all: pix_preview.pd_linux
-
-
-pix_preview.pd_linux: pix_preview.o 
-	rm -f pix_preview.pd_linux
-	gcc -Wl,--export-dynamic -shared -o pix_preview.pd_linux pix_preview.o $(LIBS)
-
-clean:
-	rm -f *.o
-	rm -f pix_preview.pd_linux
-
-distro: clean all
-	rm *.o
-
-.cc.o:
-	g++ $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.cc
-
-.c.o:
-	gcc $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.c
-
-install:
-	cp -f --remove-destination *.pd $(PD_DIR)/doc/5.reference
diff --git a/externals/pdvjtools/pix_preview/Makefile.in b/externals/pdvjtools/pix_preview/Makefile.in
deleted file mode 100755
index 9faf2d230..000000000
--- a/externals/pdvjtools/pix_preview/Makefile.in
+++ /dev/null
@@ -1,37 +0,0 @@
-PD_DIR = @PD_DIR@
-GEM_DIR = @GEM_DIR@
-
-LIBS = @LIBS@
-GEM2PNM_VERSION = @GEM2PNM_VERSION@
-
-GEM2PNM_DISTRO = /mnt/c/ydegoyon.free.fr/gem2pdp-$(GEM2PNM_VERSION)
-GEM2PNM_TARBALL = $(GEM2PNM_DISTRO).tar.gz
-# build flags
-
-GEM2PNM_INCLUDE =  -I$(PD_DIR)/src -I.  -I$(GEM_DIR)/src -I$(PD_DIR)/src
-GEM2PNM_CPPFLAGS  = -DPD -O2 -funroll-loops -fomit-frame-pointer  -ffast-math \
-    -Wall -W -Wno-unused -Wno-parentheses -Wno-switch \
-    -DGEM2PNM_VERSION=\"$(GEM2PNM_VERSION)\" -g
-
-all: pix_preview.pd_linux
-
-
-pix_preview.pd_linux: pix_preview.o 
-	rm -f pix_preview.pd_linux
-	gcc -Wl,--export-dynamic -shared -o pix_preview.pd_linux pix_preview.o $(LIBS)
-
-clean:
-	rm -f *.o
-	rm -f pix_preview.pd_linux
-
-distro: clean all
-	rm *.o
-
-.cpp.o:
-	g++ $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.cpp
-
-.c.o:
-	gcc $(GEM2PNM_CPPFLAGS) $(GEM2PNM_INCLUDE) -o $*.o -c $*.c
-
-install:
-	cp -f --remove-destination *.pd $(PD_DIR)/doc/5.reference
diff --git a/externals/pdvjtools/pix_preview/configure b/externals/pdvjtools/pix_preview/configure
deleted file mode 100755
index fe2c0e00e..000000000
--- a/externals/pdvjtools/pix_preview/configure
+++ /dev/null
@@ -1,4735 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT GEM2PNM_VERSION GEM_DIR PD_DIR LIBOBJS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_ACEOF
-
-  cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-maintainer-mode enable make rules and dependencies not useful
-                          (and sometimes confusing) to the casual installer
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-dmalloc          use dmalloc, as in
-                          ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz
-  --with-pddir=<dir>      specify an alternate pd source tree
-  --with-gemdir=<dir>     specify an alternate gem source tree
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd "$ac_popdir"
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h | sort
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-GEM2PNM_VERSION=0.6
-
-if test -d /usr/local/pd;
-then
-	PD_DIR=/usr/local/pd
-elif test -d ../../pd;
-then
-	PD_DIR=../../pd
-else
-   echo "Pd sources not found"
-fi
-
-
-if test -d /win/Georg/pd-cvs/gem/Gem;
-then
-   GEM_DIR=/win/Georg/pd-cvs/gem/Gem
-elif test -d ../../gem/Gem;
-then
-	GEM_DIR=../../gem/Gem
-elif  test -d ../../gem/Gem;
-then
-	GEM_DIR=../../gem/Gem
-else
-   echo "Gem sources not found"
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
-	break;;
-    * )
-	break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-        echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
-echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
-if test "${ac_cv_lib_cposix_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char strerror ();
-int
-main ()
-{
-strerror ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_cposix_strerror=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_cposix_strerror=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6
-if test $ac_cv_lib_cposix_strerror = yes; then
-  LIBS="$LIBS -lcposix"
-fi
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5
-echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6
-if test "${am_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  am_cv_prog_cc_stdc=no
-ac_save_CC="$CC"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX			-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-
-int
-main ()
-{
-
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  am_cv_prog_cc_stdc="$ac_arg"; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-CC="$ac_save_CC"
-
-fi
-
-if test -z "$am_cv_prog_cc_stdc"; then
-  echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6
-else
-  echo "$as_me:$LINENO: result: $am_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$am_cv_prog_cc_stdc" >&6
-fi
-case "x$am_cv_prog_cc_stdc" in
-  x|xno) ;;
-  *) CC="$CC $am_cv_prog_cc_stdc" ;;
-esac
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f $ac_dir/shtool; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-done
-
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL=$ac_install_sh
-  fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.make <<\_ACEOF
-all:
-	@echo 'ac_maketemp="$(MAKE)"'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
-  eval ac_cv_prog_make_${ac_make}_set=yes
-else
-  eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-  SET_MAKE=
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
-# Just in case
-sleep 1
-echo timestamp > conftestfile
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftestfile`
-   fi
-   if test "$*" != "X $srcdir/configure conftestfile" \
-      && test "$*" != "X conftestfile $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
-   fi
-
-   test "$2" = conftestfile
-   )
-then
-   # Ok.
-   :
-else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-rm -f conftest*
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
-    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
-  enableval="$enable_maintainer_mode"
-  USE_MAINTAINER_MODE=$enableval
-else
-  USE_MAINTAINER_MODE=no
-fi;
-  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
-
-
-if test $USE_MAINTAINER_MODE = yes; then
-  MAINTAINER_MODE_TRUE=
-  MAINTAINER_MODE_FALSE='#'
-else
-  MAINTAINER_MODE_TRUE='#'
-  MAINTAINER_MODE_FALSE=
-fi
-  MAINT=$MAINTAINER_MODE_TRUE
-
-
-echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5
-echo $ECHO_N "checking if malloc debugging is wanted... $ECHO_C" >&6
-
-# Check whether --with-dmalloc or --without-dmalloc was given.
-if test "${with_dmalloc+set}" = set; then
-  withval="$with_dmalloc"
-  if test "$withval" = yes; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-cat >>confdefs.h <<\_ACEOF
-#define WITH_DMALLOC 1
-_ACEOF
-
-  LIBS="$LIBS -ldmalloc"
-  LDFLAGS="$LDFLAGS -g"
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi;
-
-
-
-
-
-# Check whether --with-pddir or --without-pddir was given.
-if test "${with_pddir+set}" = set; then
-  withval="$with_pddir"
-
-fi;
-
-if test "$with_pddir" != ""
-then
- PD_DIR=$with_pddir
-fi
-
-# Check whether --with-gemdir or --without-gemdir was given.
-if test "${with_gemdir+set}" = set; then
-  withval="$with_gemdir"
-
-fi;
-
-if test "$with_gemdir" != ""
-then
- GEM_DIR=$with_gemdir
-fi
-
-
-echo -n "looking for gem sources (required) ... "
-if test -f $GEM_DIR/src/Base/GemMan.h
-then
-
-  echo "ok."
-else
-  echo "gem source tree not found... use ./configure --with-gemdir= option"
-  exit -1
-fi
-
-echo -n "looking for pd sources (required) ... "
-if test -f $PD_DIR/src/m_imp.h
-then
-  echo "ok." 
-else
-  echo "pd source tree not found... use ./configure --with-pddir= option"
-  exit -1
-fi
-
-
-
-LIBS="$LIBS -lm"
-CFLAGS="$CFLAGS -Wall"
-
-          ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section.  Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\_ACEOF
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\),-D\1=\2,g
-t quote
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[	 `~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-_ACEOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output.  A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-s,@MAINT@,$MAINT,;t t
-s,@GEM2PNM_VERSION@,$GEM2PNM_VERSION,;t t
-s,@GEM_DIR@,$GEM_DIR,;t t
-s,@PD_DIR@,$PD_DIR,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-  esac
-
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/externals/pdvjtools/pix_preview/configure.ac b/externals/pdvjtools/pix_preview/configure.ac
deleted file mode 100755
index 22cb86a6a..000000000
--- a/externals/pdvjtools/pix_preview/configure.ac
+++ /dev/null
@@ -1,83 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-AC_INIT
-GEM2PNM_VERSION=0.6
-
-if test -d /usr/local/pd; 
-then
-	PD_DIR=/usr/local/pd
-elif test -d ../../pd; 
-then
-	PD_DIR=../../pd
-else
-   echo "Pd sources not found"
-fi
-
-
-if test -d /win/Georg/pd-cvs/gem/Gem; 
-then
-   GEM_DIR=/win/Georg/pd-cvs/gem/Gem
-elif test -d ../../gem/Gem; 
-then
-	GEM_DIR=../../gem/Gem
-elif  test -d ../../gem/Gem; 
-then
-	GEM_DIR=../../gem/Gem
-else
-   echo "Gem sources not found"
-fi
-
-AC_ISC_POSIX
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_HEADER_STDC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-AM_SANITY_CHECK
-
-AM_MAINTAINER_MODE
-AM_WITH_DMALLOC
-
-AC_SUBST(GEM2PNM_VERSION)
-
-AC_ARG_WITH(pddir,       [  --with-pddir=<dir>      specify an alternate pd source tree])
-AC_ARG_WITH(gemdir,      [  --with-gemdir=<dir>     specify an alternate gem source tree])
-
-if test "$with_gemdir" != ""
-then
- GEM_DIR=$with_gemdir
-fi
-
-if test "$with_pddir" != ""
-then
- PD_DIR=$with_pddir
-fi
-
-echo -n "looking for gem sources (required) ... "
-if test -f $GEM_DIR/src/Base/GemMan.h
-then
-  AC_SUBST(GEM_DIR)
-  echo "ok." 
-else
-  echo "gem source tree not found... use ./configure --with-gemdir= option"
-  exit -1
-fi
-
-
-echo -n "looking for pd sources (required) ... "
-if test -f $PD_DIR/src/m_imp.h
-then
-  AC_SUBST(PD_DIR)
-  echo "ok." 
-else
-  echo "pd source tree not found... use ./configure --with-pddir= option"
-  exit -1
-fi
-
-LIBS="$LIBS -lm"
-CFLAGS="$CFLAGS -Wall"
-
-AC_CONFIG_FILES([
-Makefile
-])
-AC_OUTPUT
diff --git a/externals/pdvjtools/pix_preview/install b/externals/pdvjtools/pix_preview/install
deleted file mode 100755
index 3999a4a2c..000000000
--- a/externals/pdvjtools/pix_preview/install
+++ /dev/null
@@ -1,18 +0,0 @@
-first, install gem and pd sources (if you don't have them)
-
-you will need libtk-img also 
-
-Use the configure script and specify the directories:
-e.g.: ./configure --with-pddir=../../pd --with-gemdir=../../gem/Gem 
-
-make clean 
-
-make
-
-pix_preview requires the loading of gem library, of course.
-
-Enjoy!!
-
-Thanx for getting here.
-lluis/
-comments and bugs @ lluis@hangar.org
diff --git a/externals/pdvjtools/pix_preview/install-sh b/externals/pdvjtools/pix_preview/install-sh
deleted file mode 100755
index e9de23842..000000000
--- a/externals/pdvjtools/pix_preview/install-sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
-
-	-d) dir_arg=true
-	    shift
-	    continue;;
-
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
-
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
-
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
-
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
-
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-		chmodcmd=""
-	else
-		instcmd=mkdir
-	fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
-	shift
-
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
-
-	pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
-
-# don't allow the sed command to completely eliminate the filename
-
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
-
-# Make a temp file name in the proper directory.
-
-	dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-	$doit $instcmd $src $dsttmp &&
-
-	trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0
diff --git a/externals/pdvjtools/pix_preview/pix_preview-help.pd b/externals/pdvjtools/pix_preview/pix_preview-help.pd
deleted file mode 100644
index ae88f7ce3..000000000
--- a/externals/pdvjtools/pix_preview/pix_preview-help.pd
+++ /dev/null
@@ -1,81 +0,0 @@
-#N canvas 33 25 727 665 10;
-#N canvas 0 0 450 300 gemwin 0;
-#X obj 132 136 gemwin;
-#X obj 67 89 outlet;
-#X obj 67 10 inlet;
-#X msg 67 70 set destroy;
-#X msg 132 112 create \, 1;
-#X msg 198 112 destroy;
-#X msg 156 71 set create;
-#X obj 67 41 route create;
-#X connect 2 0 7 0;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 1 0;
-#X connect 7 0 3 0;
-#X connect 7 0 4 0;
-#X connect 7 1 6 0;
-#X connect 7 1 5 0;
-#X restore 186 -300 pd gemwin;
-#X msg 186 -319 create;
-#X obj 126 -262 gemhead;
-#X obj 22 -61 pix_texture;
-#X obj 224 -264 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144
--1 -1;
-#X obj 195 -122 bng 15 250 50 0 empty empty empty 20 7 0 10 -262144
--1 -1;
-#X floatatom 187 -142 5 0 10000 1 - - -;
-#X obj 181 -235 openpanel;
-#X msg 181 -215 open \$1;
-#X obj 22 -39 rectangle 4 3;
-#X obj 126 -139 pix_film;
-#X obj 126 126 pix_preview;
-#X obj 175 -185 loadbang;
-#X obj 213 2 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
-;
-#X msg 215 87 connect;
-#X obj 126 -63 pix_resize 168 128;
-#X obj 213 23 metro 80;
-#X floatatom 234 3 5 0 0 0 - - -;
-#X obj 126 -91 pix_separator;
-#X obj 22 -89 pix_separator;
-#X text 233 -15 fps;
-#X obj 170 -24 loadbang;
-#X obj 215 54 del 250;
-#X msg 175 -165 auto 1;
-#X text 252 -321 <<<---- 1 :: First of all create the Gem window;
-#X text 344 -305 pix_preview doues not work if Gem is not rendering
-;
-#X text 256 -259 <<<---- 2 :: Load a video file;
-#X text 355 -48 big previews are too much CPU expensives;
-#X text 278 2 <<<---- :: You can change the framerate of the preview
-;
-#X text 270 -62 <<<---- :: Resize your pix to a preview size;
-#X text 357 16 hi framerates are too much CPU expensives;
-#X text 276 87 <<<---- 3 :: You must connect to tcl with a socket.
-;
-#X connect 0 0 1 0;
-#X connect 1 0 0 0;
-#X connect 2 0 10 0;
-#X connect 3 0 9 0;
-#X connect 4 0 7 0;
-#X connect 5 0 6 0;
-#X connect 6 0 10 1;
-#X connect 7 0 8 0;
-#X connect 8 0 10 0;
-#X connect 10 0 18 0;
-#X connect 10 0 19 0;
-#X connect 10 2 5 0;
-#X connect 12 0 23 0;
-#X connect 13 0 16 0;
-#X connect 14 0 11 0;
-#X connect 15 0 11 0;
-#X connect 16 0 11 0;
-#X connect 17 0 16 1;
-#X connect 18 0 15 0;
-#X connect 19 0 3 0;
-#X connect 21 0 13 0;
-#X connect 21 0 22 0;
-#X connect 22 0 14 0;
-#X connect 23 0 10 0;
diff --git a/externals/pdvjtools/pix_preview/pix_preview.cc b/externals/pdvjtools/pix_preview/pix_preview.cc
deleted file mode 100644
index 82ab42799..000000000
--- a/externals/pdvjtools/pix_preview/pix_preview.cc
+++ /dev/null
@@ -1,478 +0,0 @@
-
-/////////////////////////////////////////////////////////
-//
-//  pix_preview
-//
-//  Lluis Gomez i Bigorda
-//  mailto:lluis@artefacte.org
-//
-/////////////////////////////////////////////////////////
-
-#include <iostream>
-#include <string>
-#include <sstream>
-using namespace std;
-#include "stdio.h"
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <errno.h>
-
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-
-
-#include "pix_preview.h"
-
-#define initialport 1234
-
-int guidebug=1;
-
-char *fdata="R0lGODlhHAAcAIABAAAAAP///ywAAAAAHAAcAAACGoSPqcvtD6OctNqLs968+w+G4kiW5omm6ooUADs=";
-
-int pix_preview::counter;
-
-/* base64 conversion*/
-static const std::string base64_chars = 
-             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-             "abcdefghijklmnopqrstuvwxyz"
-             "0123456789+/";
-
-std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
-  std::string ret;
-  int i = 0;
-  int j = 0;
-  unsigned char char_array_3[3];
-  unsigned char char_array_4[4];
-
-  while (in_len--) {
-    char_array_3[i++] = *(bytes_to_encode++);
-    if (i == 3) {
-      char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
-      char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
-      char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
-      char_array_4[3] = char_array_3[2] & 0x3f;
-
-      for(i = 0; (i <4) ; i++)
-        ret += base64_chars[char_array_4[i]];
-      i = 0;
-    }
-  }
-
-  if (i)
-  {
-    for(j = i; j < 3; j++)
-      char_array_3[j] = '\0';
-
-    char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
-    char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
-    char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
-    char_array_4[3] = char_array_3[2] & 0x3f;
-
-    for (j = 0; (j < i + 1); j++)
-      ret += base64_chars[char_array_4[j]];
-
-    while((i++ < 3))
-      ret += '=';
-
-  }
-
-  return ret;
-
-}
-
-
-CPPEXTERN_NEW_WITH_TWO_ARGS(pix_preview, t_floatarg, A_DEFFLOAT, t_floatarg, A_DEFFLOAT)
-
-
-  /////////////////////////////////////////////////////////
-  //
-  // pix_preview
-  //
-  /////////////////////////////////////////////////////////
-  // Constructor
-  //
-  /////////////////////////////////////////////////////////
-  pix_preview :: pix_preview(t_floatarg fx, t_floatarg fy)
-{ 
-    counter++;
-    whoami = counter;
-  #include "pix_preview.tk2c"
-  sys_vgui("Echo_Server%d %d\n",whoami, 1233+whoami);
-  xsize = (int)fx;
-  ysize = (int)fy;
-  m_csize = 3;
-
-
-    image_widgetbehavior.w_getrectfn =     image_getrect;
-    image_widgetbehavior.w_displacefn =    image_displace;
-    image_widgetbehavior.w_selectfn =   image_select;
-    image_widgetbehavior.w_activatefn =   image_activate;
-    image_widgetbehavior.w_deletefn =   image_delete;
-    image_widgetbehavior.w_visfn =   image_vis;
-#if (PD_VERSION_MINOR > 31) 
-    image_widgetbehavior.w_clickfn = NULL;
-    image_widgetbehavior.w_propertiesfn = NULL; 
-#endif
-#if PD_MINOR_VERSION < 37
-    image_widgetbehavior.w_savefn =   image_save;
-#endif
-    
-
-  class_setwidget(pix_preview_class,&image_widgetbehavior);
-
-  if (xsize < 0) xsize = 0;
-  if (ysize < 0) ysize = 0;
-
-  m_xsize = xsize;
-  m_ysize = ysize;
-
-  oldimagex = xsize;
-  oldimagey = ysize;
-
-  m_bufsize = m_xsize * m_ysize * m_csize;
-
-  m_buffer = new t_atom[m_bufsize];
-
-    widgetwidth = 0;
-    widgetheight = 0;
-
-  //m_dataOut = outlet_new(this->x_obj, &s_list);
-
-  // Try to connect (not working now , using connectMes)
-  memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_STREAM;
-
-    std::ostringstream ostr;
-    ostr << 1233+whoami;
-    std::string str;
-    str = ostr.str();
-    
-    getaddrinfo("localhost", reinterpret_cast<const char*>(str.c_str()), &hints, &res); 
-
-	fprintf(stderr,"trying to connect...\n");
-  	s = socket(res->ai_family, res->ai_socktype, 0);
-  	connect(s, res->ai_addr, res->ai_addrlen);
-
-    //fprintf(stderr,"We have %d pixpreviews\n",counter);
-}
-
-/////////////////////////////////////////////////////////
-// Destructor
-//
-/////////////////////////////////////////////////////////
-pix_preview :: ~pix_preview()
-{
-}
-
-/////////////////////////////////////////////////////////
-// processImage
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: connectMess() 
-{
-  memset(&hints, 0, sizeof hints);
-    hints.ai_family = AF_UNSPEC;
-    hints.ai_socktype = SOCK_STREAM;
-
-    std::ostringstream ostr;
-    ostr << 1233+whoami;
-    std::string str;
-    str = ostr.str();
-    
-    getaddrinfo("localhost", reinterpret_cast<const char*>(str.c_str()), &hints, &res); 
-
-	fprintf(stderr,"trying to connect...\n");
-  	s = socket(res->ai_family, res->ai_socktype, 0);
-  	connect(s, res->ai_addr, res->ai_addrlen);
-}
-
-void pix_preview :: processImage(imageStruct &image)
-{
-  int x = m_xsize, y = m_ysize, c = m_csize;
-
-  if (image.xsize != oldimagex) {
-    oldimagex = image.xsize;
-    m_xsize = ((!xsize) || (xsize > oldimagex))?oldimagex:xsize;
-  }
-  if (image.ysize != oldimagey) {
-    oldimagey = image.ysize;
-    m_ysize = ((!ysize) || (ysize > oldimagey))?oldimagey:ysize;
-  }
-
-  if (image.csize != m_csize) m_csize = image.csize;
-
-  if ( (m_xsize != x) || (m_ysize != y) || (m_csize != c) ) {
-    // resize the image buffer
-    if(m_buffer)delete [] m_buffer;
-    m_bufsize = m_xsize * m_ysize * m_csize;
-    m_buffer = new t_atom[m_bufsize];
-
-    m_xstep = m_csize * ((float)image.xsize/(float)m_xsize);
-    m_ystep = m_csize * ((float)image.ysize/(float)m_ysize) * image.xsize;
-  }
-
-  m_data = image.data;
-}
-
-/////////////////////////////////////////////////////////
-// processYUVImage
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: processYUVImage(imageStruct &image)
-{
-    int x = m_xsize, y = m_ysize, c = m_csize;
-
-  if (image.xsize != oldimagex) {
-    oldimagex = image.xsize;
-    m_xsize = ((!xsize) || (xsize > oldimagex))?oldimagex:xsize;
-  }
-  if (image.ysize != oldimagey) {
-    oldimagey = image.ysize;
-    m_ysize = ((!ysize) || (ysize > oldimagey))?oldimagey:ysize;
-  }
-
-  if (image.csize != m_csize) m_csize = image.csize;
-
-  if ( (m_xsize != x) || (m_ysize != y) || (m_csize != c) ) {
-    // resize the image buffer
-    if(m_buffer)delete [] m_buffer;
-    m_bufsize = m_xsize * m_ysize * m_csize;
-    m_buffer = new t_atom[m_bufsize];
-
-    m_xstep = m_csize * ((float)image.xsize/(float)m_xsize);
-    m_ystep = m_csize * ((float)image.ysize/(float)m_ysize) * image.xsize;
-  }
-
-  m_data = image.data;
-}
-
-/////////////////////////////////////////////////////////
-// trigger
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: trigger()
-{
-  if (!m_data) return;
-
-  
-  int n = m_ysize, m = 0;
-  int i = 0;
-
-  unsigned char *data, *line;
-  stringstream sx,sy;
-
-	//fprintf (stderr,"%d %d %d %d %d %d \n",xsize, ysize,m_xsize,  m_ysize,oldimagex,oldimagey);
-
-	std::string pnm;
-	std::string pnm64;
-	pnm += "P6\n";
-		sx << m_xsize;
-	pnm += sx.str();
-	pnm += " ";
-		sy << m_ysize;
-	pnm += sy.str();
-	pnm += "\n255\n";
-
-  data = line = m_data;
-  switch(m_csize){
-  case 4:
-    while (n > 0) {
-      while (m < m_xsize) {
-	int r, g, b, a;
-	r = (int)data[chRed];
-                pnm += (char)r;
-	i++;
-	g = (int)data[chGreen];
-                pnm += (char)g;
-	i++;
-	b = (int)data[chBlue];
-                pnm += (char)b;
-	i++;
-	a = (int)data[chAlpha];
-	i++;
-	m++;
-	data = line + (int)(m_xstep * (float)m);
-      }
-      m = 0;
-      n--;
-      line = m_data + (int)(m_ystep*n);
-      data = line;
-    }
-
-	
-	//std::cout << "NOT encoded: " << pnm << std::endl;
-
-	pnm64 = base64_encode(reinterpret_cast<const unsigned char*>(pnm.c_str()), pnm.length());
-	//std::cout << "encoded: " << pnm64 << std::endl;
-	
-	pnm64 += "\n";
-
-	send(s, reinterpret_cast<const unsigned char*>(pnm64.c_str()), pnm64.length(), 0);
-		
-	//m_glist = (t_glist *) canvas_getcurrent();
-
-	sys_vgui(".x%x.c coords %xS %d %d\n",
-		   this->getCanvas(), this->x_obj,
-		   text_xpix(this->x_obj, (t_glist *)this->getCanvas()) + (m_xsize/2), text_ypix(this->x_obj, (t_glist *)this->getCanvas()) + (m_ysize/2));
-	
-    break;
-  case 2:
-    while (n < m_ysize) {
-      while (m < m_xsize/2) {
-	float y,u,y1,v;
-	u = (float)data[0] / 255.f;
-	SETFLOAT(&m_buffer[i], u);
-	i++;
-	y = (float)data[1] / 255.f;
-	SETFLOAT(&m_buffer[i], y);
-	i++;
-	v = (float)data[2] / 255.f;
-	SETFLOAT(&m_buffer[i], v);
-	i++;
-	y1 = (float)data[3] / 255.f;
-	SETFLOAT(&m_buffer[i], y1);
-	i++;
-	m++;
-	data = line + (int)(m_xstep * (float)m);
-      }
-      m = 0;
-      n++;
-      line = m_data + (int)(m_ystep*n);
-      data = line;
-    }
-  case 1:  default:
-    int datasize=m_xsize*m_ysize*m_csize/4;
-      while (datasize--) {
-	float v;
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i], v);
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i+1], v);
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i+2], v);
-	v = (float)(*data++) / 255.f;	  SETFLOAT(&m_buffer[i+3], v);
-	i+=4;
-      }
-  }
-  //outlet_list(m_dataOut, gensym("list"), i, m_buffer);
-}
-
-/////////////////////////////////////////////////////////
-// static member function
-//
-/////////////////////////////////////////////////////////
-void pix_preview :: obj_setupCallback(t_class *classPtr)
-{
-  class_addbang(classPtr, (t_method)&pix_preview::triggerMessCallback);
-  class_addmethod(classPtr, (t_method)&pix_preview::connectMessCallback, gensym("connect"), A_NULL);
-}
-
-void pix_preview :: triggerMessCallback(void *data)
-{
-  GetMyClass(data)->trigger();
-}
-
-void pix_preview :: connectMessCallback(void *data)
-{
-  GetMyClass(data)->connectMess();
-}
-
-
-
-
-/* widget helper functions */
-void pix_preview :: image_drawme(pix_preview *x, t_glist *glist, int firsttime, int m_xsize, int m_ysize)
-{
-       if (firsttime) {
-	  sys_vgui("image create photo imgPREVIEW%d -data {%s}\n",x->counter,fdata);
-	  fprintf(stderr,"image create photo imgPREVIEW%d -data {%s}\n",x->counter,fdata);
-	  sys_vgui(".x%x.c create image %d %d -image imgPREVIEW%d -tags %xS\n", glist_getcanvas(glist),text_xpix((t_object*)x, glist)+14, text_ypix((t_object*)x, glist)+14,x->counter,x);
-     }     
-}
-
-void pix_preview :: image_erase(pix_preview* x,t_glist* glist)
-{
-     int n;
-     sys_vgui(".x%x.c delete %xS\n",
-	      glist_getcanvas(glist), x);
-}
-	
-
-/* ------------------------ image widgetbehaviour----------------------------- */
-
-
-void pix_preview :: image_getrect(t_gobj *z, t_glist *glist,
-    int *xp1, int *yp1, int *xp2, int *yp2)
-{    
-    int width, height;
-    pix_preview *x = (pix_preview *)z;
-
-
-    *xp1 = text_xpix((t_object*)x, glist);
-    *yp1 = text_ypix((t_object*)x, glist);
-    *xp2 = text_xpix((t_object*)x, glist) + x->widgetwidth;
-    *yp2 = text_ypix((t_object*)x, glist) + x->widgetheight;
-}
-
-void pix_preview :: image_displace(t_gobj *z, t_glist *glist,
-    int dx, int dy)
-{
-    t_object *x = (t_object *)z;
-    x->te_xpix += dx;
-    x->te_ypix += dy;
-    sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n",
-		   glist_getcanvas(glist), x,
-		   text_xpix(x, glist), text_ypix(x, glist),
-		   text_xpix(x, glist) + 25, text_ypix(x, glist) + 25);
-
-    //image_drawme((pix_preview *)x, glist, 0);
-    canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-}
-
-void pix_preview :: image_select(t_gobj *z, t_glist *glist, int state)
- {   
-     t_object *x = (t_object *)z;
-     pix_preview *s = (pix_preview *)z;
-     if (state) {
-	  sys_vgui(".x%x.c create rectangle \
-%d %d %d %d -tags %xSEL -outline blue\n",
-		   glist_getcanvas(glist),
-		   text_xpix(x, glist), text_ypix(x, glist),
-		   text_xpix(x, glist) + 25, text_ypix(x, glist) + 25,
-		   x);
-    	s->widgetwidth = 28;
-    	s->widgetheight = 28;
-     }
-     else {
-	  sys_vgui(".x%x.c delete %xSEL\n",
-		   glist_getcanvas(glist), x);
-    	s->widgetwidth = 0;
-    	s->widgetheight = 0;
-     }
-}
-
-
-void pix_preview :: image_activate(t_gobj *z, t_glist *glist, int state)
-{
-}
-
-void pix_preview :: image_delete(t_gobj *z, t_glist *glist)
-{
-
-    t_text *x = (t_text *)z;
-    pix_preview* s = (pix_preview*)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-    image_erase(s, glist);
-}
-
-       
-void pix_preview :: image_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    pix_preview* s = (pix_preview*)z;
-    if (vis)
-	 image_drawme(s, glist, 1, 28, 28);
-  
-}
-
diff --git a/externals/pdvjtools/pix_preview/pix_preview.h b/externals/pdvjtools/pix_preview/pix_preview.h
deleted file mode 100644
index 4e2a8517a..000000000
--- a/externals/pdvjtools/pix_preview/pix_preview.h
+++ /dev/null
@@ -1,142 +0,0 @@
-
-/*-----------------------------------------------------------------
-pix_preview
-
------------------------------------------------------------------*/
-
-#ifndef INCLUDE_PIX_DUMP_H_
-#define INCLUDE_PIX_DUMP_H_
-
-#include "Base/GemPixObj.h"
-
-/*needed for base64 conversion*/
-#include <string>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-std::string base64_encode(unsigned char const* , unsigned int len);
-
-
-/*-----------------------------------------------------------------
--------------------------------------------------------------------
-CLASS
-
- pix_preview
- 
-  Get pixel information
-  
-   KEYWORDS
-   pix
-   
-	DESCRIPTION
-	
-	 dumps the pix-data as a float-package
-	 
------------------------------------------------------------------*/
-class GEM_EXTERN pix_preview : public GemPixObj
-{
-	CPPEXTERN_HEADER(pix_preview, GemPixObj)
-		
-public:
-	
-	//////////
-	// Constructor
-	pix_preview(t_floatarg fx, t_floatarg fy);
-	int x_width, x_height;
-	static int counter;
-	
-protected:
-	
-	//////////
-	// Destructor
-	virtual ~pix_preview();
-	
-	//////////
-	// All we want is the pixel information, so this is a complete override.
-	virtual void 	processImage(imageStruct &image);
-	
-	//////////
-	virtual void 	processYUVImage(imageStruct &image);
-	
-	//////////
-	void			trigger();
-	int getx();
-	int gety();
-    	void	    	connectMess();
-
-	//////////
-	// The color outlet
-	t_outlet    	*m_dataOut;
-	
-	//////////
-	// the buffer
-	int           xsize, ysize;      // proposed x/y-sizes
-	int           m_xsize,  m_ysize;
-	int           m_csize;
-	t_atom       *m_buffer;
-	int           m_bufsize;
-	
-	int           oldimagex;
-	int           oldimagey;
-	int           widgetwidth;
-	int           widgetheight;
-	
-	//////////
-	// navigation
-	float         m_xstep;
-	float         m_ystep;
-	
-	/////////
-	// pointer to the image data
-	unsigned char *m_data;
-	
-	/////////
-	// LLUO :: widget tk list pointer
-    	t_glist *m_glist;
-	
-	t_widgetbehavior   image_widgetbehavior;
-
-	int s;
-	int connected;
-	struct addrinfo *res;
-	struct addrinfo hints;
-	int 		whoami;
-
-
-private:
-	
-	//////////
-	// Static member callbacks
-	static void		triggerMessCallback(void *dump);
-	static void		GREYMessCallback(void *dump);
-	static void		RGBAMessCallback(void *dump);
-	static void		RGBMessCallback(void *dump);
-    	static void 		connectMessCallback(void *dump);
-
-
-	static void image_drawme(pix_preview *x, t_glist *glist, int firsttime, int m_xsize, int m_ysize);
-
-	static void image_erase(pix_preview* x,t_glist* glist);
-	
-
-/* ------------------------ image widgetbehaviour----------------------------- */
-
-
-	static void image_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int *xp2, int *yp2);
-
-	static void image_displace(t_gobj *z, t_glist *glist, int dx, int dy);
-
-	static void image_select(t_gobj *z, t_glist *glist, int state);
-
-	static void image_activate(t_gobj *z, t_glist *glist, int state);
-
-	static void image_delete(t_gobj *z, t_glist *glist);
-       
-	static void image_vis(t_gobj *z, t_glist *glist, int vis);
-
-};
-
-#endif	// for header file
diff --git a/externals/pdvjtools/pix_preview/pix_preview.tk2c b/externals/pdvjtools/pix_preview/pix_preview.tk2c
deleted file mode 100755
index 5dede3a4e..000000000
--- a/externals/pdvjtools/pix_preview/pix_preview.tk2c
+++ /dev/null
@@ -1,34 +0,0 @@
-sys_vgui("package require Img\n");
-sys_vgui("proc Echo_Server%d {port} {\n", whoami);
-sys_vgui("    set s [socket -server EchoAccept%d $port]\n", whoami);
-sys_vgui("    puts \"server%d socket created on port $port\"\n", whoami);
-sys_vgui("}\n");
-sys_vgui("proc EchoAccept%d {sock addr port} {\n", whoami);
-sys_vgui("    global echo\n");
-sys_vgui("    # Record the client's information\n");
-sys_vgui("    puts \"Accept $sock from $addr port $port\"\n");
-sys_vgui("    set echo(addr,$sock) [list $addr $port]\n");
-sys_vgui("    # Ensure that each \"puts\" by the server\n");
-sys_vgui("    # results in a network transmission\n");
-sys_vgui("    fconfigure $sock -buffering line\n");
-sys_vgui("    # Set up a callback for when the client sends data\n");
-sys_vgui("    fileevent $sock readable [list Echo%d $sock]\n", whoami);
-sys_vgui("}\n");
-sys_vgui("# Echo --\n");
-sys_vgui("#	This procedure is called when the server\n");
-sys_vgui("#	can read data from the client\n");
-sys_vgui("# Arguments:\n");
-sys_vgui("#	sock	The socket connection to the client\n");
-sys_vgui("proc Echo%d {sock} {\n", whoami);
-sys_vgui("    global echo\n");
-sys_vgui("    # Check end of file or abnormal connection drop,\n");
-sys_vgui("    # then echo data back to the client.\n");
-sys_vgui("    if {[eof $sock] || [catch {gets $sock line}]} {\n");
-sys_vgui("	close $sock\n");
-sys_vgui("	puts \"Close $echo(addr,$sock)\"\n");
-sys_vgui("	unset echo(addr,$sock)\n");
-sys_vgui("    } else {\n");
-sys_vgui("	#puts $sock $line\n");
-sys_vgui("	imgPREVIEW%d put $line\n", whoami);
-sys_vgui("    }\n");
-sys_vgui("}\n");
diff --git a/externals/pdvjtools/videogrid/INSTALL_videogrid b/externals/pdvjtools/videogrid/INSTALL_videogrid
deleted file mode 100755
index 1733d7080..000000000
--- a/externals/pdvjtools/videogrid/INSTALL_videogrid
+++ /dev/null
@@ -1,48 +0,0 @@
-
-VIDEOGRID INSTALL
-
-[ENG]
-
-In order to compile this source it must have the library QuickTime and the source code of Puredata.
-
-tar xzvf videogrid[-version].tar.gz in folder pd/extra/ o edit file Makefile modifying the value of PD_SRC whit the correct path location of the pd/src/. If you don't have ir, download and copy the src/ folder into pd/ folder.
-
-$ cd videogrid[-version]
-
-# make clean
-
-# make
-
-# make install
-
-now you can open example: help-videogrid.pd
-
-$ pd help-videogrid.pd
-
-Thanks.
-
-Sergi Lario
-slario(at)gmail.com
-
-[CAT]
-
-Per compilar el codi font cal disposar de la biblioteca QuickTime i el codi font de Puredata.
-
-tar xzvf videogrid[-versio].tar.gz en el directori pd/extra/ o bé edita el fitxer Makefile modificant el valor de la variable PD_SRC amb el path correcte del codi font de pd/src/. Si no el tens el pots descarregar i copiar la carpeta src/ dins el directori pd/
-
-$ cd videogrid[-versio]
-
-# make clean 
-
-# make
-
-# make install
-
-ara ja pots obrir l'exemple help-videogrid.pd
-
-$ pd help-videogrid.pd
-
-Gràcies.
-
-Sergi Lario
-slario(at)gmail.com
diff --git a/externals/pdvjtools/videogrid/LICENSE b/externals/pdvjtools/videogrid/LICENSE
deleted file mode 100644
index 94a9ed024..000000000
--- a/externals/pdvjtools/videogrid/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/externals/pdvjtools/videogrid/Makefile b/externals/pdvjtools/videogrid/Makefile
deleted file mode 100755
index fcded8de2..000000000
--- a/externals/pdvjtools/videogrid/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-PD_SRC=../../../pd/src
-FFMPEG_HEADERS=-I/usr/include/ffmpeg
-
-NAME=videogrid
-CSYM=videogrid
-
-current: pd_linux
-
-# ----------------------- LINUX -----------------------
-
-pd_linux: $(NAME).pd_linux
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -fPIC -DPD -DUNIX -DICECAST -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wno-shadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-
-LINUXINCLUDE =  -I$(PD_SRC) -I/usr/include/
-
-.cc.pd_linux:
-	g++  $(FFMPEG_HEADERS) -I$(PD_SRC) -fPIC -c -O -o videogrid.o videogrid.cc
-# 	./tk2c.bash < $*.tk > $*.tk2c
-	g++ $(FFMPEG_HEADERS) -Wl,--export-dynamic  -shared -o videogrid.pd_linux videogrid.o -lavformat -lavcodec -lavutil -lswscale -lquicktime
-	rm -f $*.o 
-
-# ----------------------------------------------------------
-
-install:
-	cp *-help.pd ../../../doc/5.reference
-
-clean:
-	rm -f *.o *.pd_* so_locations
-
diff --git a/externals/pdvjtools/videogrid/videogrid-help.pd b/externals/pdvjtools/videogrid/videogrid-help.pd
deleted file mode 100644
index f7f50b414..000000000
--- a/externals/pdvjtools/videogrid/videogrid-help.pd
+++ /dev/null
@@ -1,35 +0,0 @@
-#N canvas 0 26 1910 1087 10;
-#X symbolatom 116 322 60 0 0 0 - - -;
-#X obj 26 85 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X text 24 13 VIDEOGRID;
-#X text 164 73 ADD VIDEO;
-#X text 164 106 ADD VIDEOS FROM FOLDER;
-#X text 25 29 Object to select the path location of a video quiktime
-added in the grid \, in form of image of its first frame.;
-#X text 74 349 LOCATION OF THE SELECTED VIDEO;
-#X text 24 68 LIST STDOUT;
-#X obj 116 154 videogrid videogrid1 3 5 #F0F0F0 gray #F1882B mov:mpg
-60 40 /data/video/vjloops/karosta/dscn0248.mov|/data/video/vjloops/karosta/dscn0230.mov|/data/video/vjloops/karosta/dscn0217.mov|/data/video/vjloops/karosta/dscn0242.mov|
-;
-#X msg 166 87 putvideo \$1;
-#X obj 278 70 openpanel;
-#X obj 255 58 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X msg 26 137 clear;
-#X msg 102 98 seek \$1;
-#X floatatom 102 71 5 0 0 0 - - -;
-#X msg 166 120 putvideodir /data/video/vjloops/karosta;
-#X msg 447 137 cols 5;
-#X msg 497 137 rows 3;
-#X connect 1 0 8 0;
-#X connect 8 0 0 0;
-#X connect 9 0 8 0;
-#X connect 10 0 9 0;
-#X connect 11 0 10 0;
-#X connect 12 0 8 0;
-#X connect 13 0 8 0;
-#X connect 14 0 13 0;
-#X connect 15 0 8 0;
-#X connect 16 0 8 0;
-#X connect 17 0 8 0;
diff --git a/externals/pdvjtools/videogrid/videogrid.cc b/externals/pdvjtools/videogrid/videogrid.cc
deleted file mode 100644
index 327b24c59..000000000
--- a/externals/pdvjtools/videogrid/videogrid.cc
+++ /dev/null
@@ -1,1830 +0,0 @@
-
-extern "C"
-{
-    /*
-    videogrid external for Puredata
-    Lluis Gomez i Bigorda :: lluis-at-hangar.org
-    Sergi Lario Loyo      :: slario-at-gmail.com
-
-    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/>.
-    */
-
-    #include <stdio.h>
-    #include <stdlib.h>
-    #include <dirent.h>
-    #include <string.h>
-    #include <unistd.h>
-    #include <math.h>
-
-    /*
-     * incloure les definicions de variables i prototipus de dades i de funcions de puredata
-    */
-    #include "m_pd.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions gàfiques bàsiques de pd
-    */
-    #include "g_canvas.h"
-    #include "s_stuff.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions per traballar amb threads
-    */
-    #include "pthread.h"
-
-    /* some linux distros need this to compile ffmpeg correctly as cpp */
-    #define __STDC_CONSTANT_MACROS 1
-
-    /* ffmpeg includes */
-
-    #include <ffmpeg/avcodec.h>
-    #include <ffmpeg/avformat.h>
-    #include <ffmpeg/avutil.h>
-    #include <ffmpeg/swscale.h>
-
-
-    /* may be your ffmpeg headers are here, at least from jaunty to karmic */
-    /*
-    #include <libavcodec/avcodec.h>
-    #include <libavformat/avformat.h>
-    #include <libavutil/avutil.h>
-    #include <libswscale/swscale.h>
-    */
-
-    /* libquicktime includes */
-    // #include <quicktime/lqt.h>
-    // #include <quicktime/colormodels.h>
-    #include <lqt/lqt.h>
-    #include <lqt/colormodels.h>
-
-    /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&& VIDEOGRID &&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
-    /* definició del gruix en pixels del marc del tauler */
-    #define GRUIX 2
-
-    /* nombre de caracters per el nom del path del fitxer */
-    #define BYTESNOMFITXER 512
-
-    /* 8bits clamp rgb values */
-    #define CLAMP8(x) (((x)<0) ? 0 : ((x>255)? 255 : (x)))
-
-    #define BYTESNOMFITXERIMATGE 512
-    #define BYTESTIPUSFROMAT 4
-
-    #define FORMAT_MINIATURA "ppm"
-    #define PATH_TEMPORAL "/tmp/vigrid_"
-    #define BYTES_NUM_TEMP 4
-
-    typedef char pathimage[BYTESNOMFITXERIMATGE];
-
-    typedef char tipus_format[BYTESTIPUSFROMAT];
-
-    t_namelist *loaded_libs = NULL;
-
-
-    /* ----------------------------------- FFmpeg functions ----------------------------------- */
-    int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi);
-
-    void SaveFrame(AVFrame *pFrame, int width, int height, int W, int H, int posi)
-    {
-        FILE *pFile;
-        char szFilename[32];
-        int nN = posi;
-
-        char nNstr[BYTES_NUM_TEMP];
-        pathimage  ig_path = PATH_TEMPORAL;
-
-        sprintf(nNstr, "%d", nN);
-        strcat(ig_path,nNstr);
-        strcat(ig_path,".");
-        strcat(ig_path,FORMAT_MINIATURA);
-
-        // Open file
-        sprintf(szFilename, ig_path);
-        pFile=fopen(szFilename, "wb");
-        if(pFile==NULL)
-            return;
-
-        // Write header
-        fprintf(pFile, "P6\n%d %d\n255\n", W, H);
-
-        int w = width;
-        int h = height;
-        float k = (width/W);
-        float l = (height/H);
-        int i,j,y,x,realx;
-
-        // Write pixel data
-        for(y=0; y<H; y=y++) {
-            for(x=0; x<W; x=x++) {
-                realx = ((x*k)+(3-((int)(x*k)%3)))*3;
-                fwrite((pFrame->data[0]+(int)(y*l)*pFrame->linesize[0])+realx, 1, 3, pFile);
-            }
-        }
-
-        // Close file
-        fclose(pFile);
-    }
-
-    int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-    {
-        AVFormatContext *pFormatCtx;
-        int             i, videoStream;
-        AVCodecContext  *pCodecCtx;
-        AVCodec         *pCodec;
-        AVFrame         *pFrame;
-        AVFrame         *pFrameRGB;
-        AVPacket        packet;
-        int             frameFinished;
-        int             numBytes;
-        uint8_t         *buffer;
-        static int sws_flags = SWS_BICUBIC;
-        struct SwsContext *img_convert_ctx;
-
-        int nN = posi;
-
-        // Register all formats and codecs
-        av_register_all();
-
-        // Open video file
-        if(av_open_input_file(&pFormatCtx, pathFitxer, NULL, 0, NULL)!=0)
-            return -1; // Couldn't open file
-
-        // Retrieve stream information
-        if(av_find_stream_info(pFormatCtx)<0)
-            return -1;  // Couldn't find stream information
-
-        // Dump information about file onto standard error
-        dump_format(pFormatCtx, 0, pathFitxer, false);
-
-        // Find the first video stream
-        videoStream=-1;
-        for(i=0; i<pFormatCtx->nb_streams; i++)
-            if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
-            {
-                videoStream=i;
-                break;
-            }
-        if(videoStream==-1)
-            return -1; // Didn't find a video stream
-
-        // Get a pointer to the codec context for the video stream
-        pCodecCtx=pFormatCtx->streams[videoStream]->codec;
-
-        // Find the decoder for the video stream
-        pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
-        if(pCodec==NULL)
-            return -1; // Codec not found
-
-        // Open codec
-        if(avcodec_open(pCodecCtx, pCodec)<0)
-            return -1; // Could not open codec
-
-        // Hack to correct wrong frame rates that seem to be generated by some
-        // codecs
-        // if(pCodecCtx->frame_rate>1000 && pCodecCtx->frame_rate_base==1)
-        //    pCodecCtx->frame_rate_base=1000;
-
-        // Allocate video frame
-        pFrame=avcodec_alloc_frame();
-
-        // Allocate an AVFrame structure
-        pFrameRGB=avcodec_alloc_frame();
-        if(pFrameRGB==NULL)
-            return -1;
-
-        // Determine required buffer size and allocate buffer
-        numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
-            pCodecCtx->height);
-        buffer=new uint8_t[numBytes];
-
-        // Assign appropriate parts of buffer to image planes in pFrameRGB
-        avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
-            pCodecCtx->width, pCodecCtx->height);
-
-        // Read frames and save first five frames to disk
-        av_read_frame(pFormatCtx, &packet);
-
-        // Is this a packet from the video stream?
-        if(packet.stream_index==videoStream)
-        {
-            // Decode video frame
-            avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, packet.data, packet.size);
-
-            // Did we get a video frame?
-            if(frameFinished)
-            {
-                // Convert the image from its native format to RGB
-                //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                //    pCodecCtx->height);
-                img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
-                                    pCodecCtx->pix_fmt,
-                                    pCodecCtx->width, pCodecCtx->height,
-                                    PIX_FMT_RGB24,
-                                    sws_flags, NULL, NULL, NULL);
-
-                sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                            0, pCodecCtx->height,
-                            pFrameRGB->data, pFrameRGB->linesize);
-                sws_freeContext(img_convert_ctx);
-
-                // Save the frame to disk
-                SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-            }
-        }
-
-        // Free the packet that was allocated by av_read_frame
-        av_free_packet(&packet);
-        // Read frames and save first five frames to disk
-        av_read_frame(pFormatCtx, &packet);
-        // Is this a packet from the video stream?
-        if(packet.stream_index==videoStream)
-        {
-            // Decode video frame
-            avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
-                packet.data, packet.size);
-
-            // Did we get a video frame?
-            if(frameFinished)
-            {
-                // Convert the image from its native format to RGB
-                //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                //    pCodecCtx->height);
-                img_convert_ctx = sws_getContext(    pCodecCtx->width, pCodecCtx->height,
-                                    pCodecCtx->pix_fmt,
-                                    pCodecCtx->width, pCodecCtx->height,
-                                    PIX_FMT_RGB24,
-                                    sws_flags, NULL, NULL, NULL);
-
-                sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                            0, pCodecCtx->height,
-                            pFrameRGB->data, pFrameRGB->linesize);
-                sws_freeContext(img_convert_ctx);
-
-                // Save the frame to disk
-                SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-            }
-        }
-
-        // Free the packet that was allocated by av_read_frame
-        av_free_packet(&packet);
-
-        // Free the RGB image
-        delete [] buffer;
-        av_free(pFrameRGB);
-
-        // Free the YUV frame
-        av_free(pFrame);
-
-        // Close the codec
-        avcodec_close(pCodecCtx);
-
-        // Close the video file
-        av_close_input_file(pFormatCtx);
-
-        return 0;
-    }
-
-    /* ----------------------------------- Quicktime functions ----------------------------------- */
-    int convertir_img(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-    {
-        /*
-        Quicktime per les conversions
-        */
-
-        /* RGB vectors */
-        unsigned char * qt_rows[3];
-        /* YUV vesctor frame */
-        unsigned char *qt_frame = NULL;
-        /* quicktime decoder */
-        quicktime_t *qt;
-        /* quicktime color model */
-        int qt_cmodel;
-
-        int nN = posi;
-        int x_vwidth = 0;
-        int x_vheight = 0;
-        qt = quicktime_open(pathFitxer, 1, 0);
-
-        if (!(qt)){
-            /* post("videogrid: error opening qt file"); */
-            return -1;
-        }
-
-        if (!quicktime_has_video(qt)) {
-            /* post("videogrid: no video stream"); */
-            quicktime_close(qt);
-            return -1;
-
-        }
-        else if (!quicktime_supported_video(qt,0)) {
-            /* post("videogrid: unsupported video codec\n"); */
-            quicktime_close(qt);
-            return -1;
-        }
-        else
-        {
-            qt_cmodel = BC_YUV420P;
-            x_vwidth  = quicktime_video_width(qt,0);
-            x_vheight = quicktime_video_height(qt,0);
-
-            free(qt_frame);
-            qt_frame = (unsigned char*)malloc(x_vwidth*x_vheight*4);
-
-            int size = x_vwidth * x_vheight;
-            qt_rows[0] = &qt_frame[0];
-            qt_rows[2] = &qt_frame[size];
-            qt_rows[1] = &qt_frame[size + (size>>2)];
-
-            quicktime_set_cmodel(qt, qt_cmodel);
-        }
-
-        /* int length = quicktime_video_length(qt,0); */
-        /* int Vpos = quicktime_video_position(qt,0); */
-        lqt_decode_video(qt, qt_rows, 0);
-
-        switch(qt_cmodel){
-            case BC_YUV420P:
-                /* printf(" "); */
-                /* post("videogrid: qt colormodel : BC_YUV420P"); */
-
-                /* per a fer la miniatura
-                   cada k colomnes pillem una
-                   cada l files pillem una */
-                int w = x_vwidth;
-                int h = x_vheight;
-                int k = (w/W);
-                int l = (h/H);
-
-                char nNstr[BYTES_NUM_TEMP];
-                pathimage  ig_path = PATH_TEMPORAL;
-
-                sprintf(nNstr, "%d", nN);
-                strcat(ig_path,nNstr);
-                strcat(ig_path,".");
-                strcat(ig_path,FORMAT_MINIATURA);
-                /* printf("Creacio de la imatge %s ...",ig_path); */
-                /* escriu el contingut de data a un arxiu. */
-                FILE *fp = fopen(ig_path, "w");
-                fprintf (fp, "P6\n%d %d\n255\n", W, H);
-
-                int i,j,y,u,v,r,g,b;
-
-                for (i=0;i<(l*H);i=i+l) {
-                    for (j=0;j<(k*W);j=j+k) {
-                        y=qt_rows[0][(w*i+j)];
-                        u=qt_rows[1][(w/2)*(i/2)+(j/2)];
-                        v=qt_rows[2][(w/2)*(i/2)+(j/2)];
-                        r = CLAMP8(y + 1.402 *(v-128));
-                        g = CLAMP8(y - 0.34414 *(u-128) - 0.71414 *(v-128));
-                        b = CLAMP8(y + 1.772 *(u-128));
-                        fprintf (fp, "%c%c%c", r,g,b);
-                    }
-                }
-                /* escriu el contingut de data a un arxiu.*/
-                fclose (fp);
-        }
-        return 0;
-    }
-
-    /* ----------------------------------- Cue > rounded list ----------------------------------- */
-    typedef char path[BYTESNOMFITXER];
-
-    /* estructura de dades: un node de la cua */
-    struct node
-    {
-        /* nom del path de la imatge */
-        path pathFitxer;
-        /* apuntador al següent node en cua */
-        struct node *seguent;
-    };
-
-    /* definició del tipus node */
-    typedef struct node Node;
-
-    /* estructures i tipus de dades de la cua */
-    /* definició del tipus de cua */
-    typedef struct
-    {
-        Node *davanter;
-        Node *final;
-    }Cua;
-
-    /* declaracions de les funcions */
-
-    /* crea una cua */
-    void crearCua(Cua *cua);
-    /* encuara un element al final de la cua */
-    void encuar (Cua *cua, path x);
-    /* elimina un element de la cua */
-    int desencuar (Cua *cua);
-    /* retorna si la cua és buida */
-    int cuaBuida(Cua *cua);
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua);
-    /* retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua);
-    /* escriu el contingut de la cua */
-    void escriuCua(Cua *cua);
-
-    /* implementació de les funcions */
-    void crearCua(Cua *cua)
-    {
-        cua->davanter=cua->final=NULL;
-    }
-
-    /* funció que encua el node al final de la cua */
-    void encuar (Cua *cua, path x)
-    {
-        Node *nou;
-        nou=(Node*)malloc(sizeof(Node));
-        strcpy(nou->pathFitxer,x);
-        nou->seguent=NULL;
-        if(cuaBuida(cua))
-        {
-            cua->davanter=nou;
-        }
-        else
-            cua->final->seguent=nou;
-        cua->final=nou;
-    }
-
-    /* elimina l'element del principi de la cua */
-    int desencuar (Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *nou;
-            nou=cua->davanter;
-            cua->davanter=cua->davanter->seguent;
-            free(nou);
-            return 1;
-        }
-        else
-        {
-            /* printf("Cua buida\a\n"); */
-            return 0;
-        }
-    }
-
-    /* funció que retorna si la cua és buida */
-    int cuaBuida(Cua *cua)
-    {
-        return (cua->davanter==NULL);
-    }
-
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua)
-    {
-        while (!cuaBuida(cua)) desencuar(cua);
-        /* printf("Cua eliminada\n"); */
-    }
-
-    /* funció que retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua)
-    {
-        int contador=0;
-        Node *actual;
-        actual=cua->davanter;
-        if(actual) contador=1;
-        while((actual)&&(actual != cua->final)){
-             contador ++;
-             actual = actual->seguent;
-        }
-        return (contador);
-    }
-
-    /* funció que escriu la cua de nodes */
-    void escriuCua(Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *actual;
-            actual=cua->davanter;
-            post("THUMBS INSIDE\n[");
-            do{
-                post("#%s#",actual->pathFitxer);
-                actual = actual->seguent;
-            }while(actual);
-            post("]\n");
-        }
-        else
-            post("EMPTY: NO THUMBS INSIDE\n");
-    }
-
-    /* ----------------------------------- videogrid gui-videogrid ----------------------------------- */
-
-    t_widgetbehavior   videogrid_widgetbehavior;
-    /* crear un apuntador al nou objecte */
-    static t_class *videogrid_class;
-    /* indica el nombre de videogrid creats - utilitzat per diferenciar el nom d'instàncies d'objectes del mateix tipus */
-    static int videogridcount = 0;
-
-    /* definició de la classe i la seva estructura de dades */
-
-    typedef struct _videogrid {
-        t_object  x_obj;
-        /* declaració de la sortida de l'objecte */
-        t_outlet *x_sortida;
-        /* llista d'objectes gràfics */
-        t_glist *x_glist;
-        /* nombre de files */
-        int x_num_fil;
-        /* nombre de columnes */
-        int x_num_col;
-        /* width del thumbnail  */
-        int x_w_cell;
-        /* height del thumbnail */
-        int x_h_cell;
-        /* posició de la última imatge en el tauler */
-        int x_ultima_img;
-        /* path del directori actual */
-        path x_dir_actual;
-        /* path del directori a canviar */
-        path x_dir_canvi;
-        /* posicio ultim al directori actual */
-        int x_dir_pos;
-        /* apuntador al primer element posicionat al tauler */
-        Node *x_tauler_primer;
-        /* cua d'imatges */
-        Cua x_cua;
-        /* nom de l'objecte */
-        t_symbol *x_name;
-        /* color de fons */
-        t_symbol *x_color_fons;
-        /* color del marge */
-        t_symbol *x_color_marc;
-        /* mutex per evitar concurrencia sobre la cua al accedir diferents threads*/
-        pthread_mutex_t x_lock;
-        /* v 0.2 -- posicó de la cel·la seleccionada */
-        int x_pos_selected;
-        /* v 0.2 -- color de seleccio */
-        t_symbol *x_color_grasp;
-        /* v 0.2.1 -- llista de formats */
-        t_symbol *x_format_list;
-    } t_videogrid;
-
-    /* ---------------- control functions ------------ */
-
-    /* v 0.2 -- mètode de la classe que desmarca la cel·la seleccionada */
-    /* calcula la posició x del tauler a partir de la posició de l'element de la cua (d'esquerra a dreta) */
-    int getX(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int xpos = (posCua % c) * x->x_w_cell + ((posCua % c) + 1) * GRUIX;
-        return(xpos + 1);
-    }
-
-    /* calcula la posició y del tauler a partir de la posició de l'element de la cua (de dalt a baix) */
-    int getY(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int ypos = (posCua / c) * x->x_h_cell + ((posCua / c) + 1) * GRUIX;
-        return(ypos + 1);
-    }
-
-    static void videogrid_ungrasp_selected(t_videogrid *x)
-    {
-        /* post("Ungrasp selected thumb %d", x->x_pos_selected); */
-        if(x->x_pos_selected > -1) {
-            sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(x->x_glist), x);
-            x->x_pos_selected = -1;
-        }
-    }
-
-    /* elimina les imatges temporals */
-    void eliminar_imatges_temporals(int maxim){
-        FILE *fitxer;
-        path path_total;
-        int contador = 0;
-        char contador_str[BYTES_NUM_TEMP];
-        while(contador < maxim){
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            /* elimina el fitxer si no hi ha cap problema */
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-        /* post("Videogrid: Imatges temporals eliminades\n",path_total); */
-    }
-
-    int format_adequat_v(path nomF, t_symbol *format_list){
-        int retorn = 0;
-        path  ig_path = "";
-        strcat(ig_path,nomF);
-        path fl;
-        strcpy(fl,format_list->s_name);
-        char *t1;
-        char *ext;
-        path extensio = "";
-        for ( t1 = strtok(ig_path,".");
-              t1 != NULL;
-              t1 = strtok(NULL,".") )
-            strcpy(extensio,t1);
-
-        for ( ext = strtok(fl,":");
-          ext != NULL;
-              ext = strtok(NULL,":") ) {
-            if(strcmp(extensio,ext)==0) {
-                retorn = 1;
-                ext = NULL;
-            }
-        }
-        return (retorn);
-    }
-
-    /* afegir una imatge al grid */
-    void videogrid_afegir_imatge(t_videogrid *x, path entrada)
-    {
-        int maxim;
-        char nNstr[BYTES_NUM_TEMP];
-        int pos = 0;
-        maxim = x->x_num_fil * x->x_num_col;
-        path  ig_path = PATH_TEMPORAL;
-        /* si hi ha tants nodes a la cua com el maxim */
-        if((numNodes(&x->x_cua)) >=  maxim){
-            /* desencua */
-            int extret;
-            extret = desencuar(&x->x_cua);
-            /* obtenir la posició en la cua del nou node */
-            if(x->x_ultima_img == maxim - 1) {
-                pos = 0;
-            }else{
-                pos = x->x_ultima_img + 1;
-            }
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, x->x_ultima_img);
-        }
-
-        /* FFMPEG o Quicktime per les conversions */
-        int fferror=0;
-        int nN = x->x_ultima_img;
-        /*
-        if (format_adequat_v(entrada, x->x_format_list) == 0) {
-            // convertir_img(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-            fferror = -1;
-
-        } else {
-        */
-        fferror=convertir_img_ff(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-        /* } */
-        /* post ("%d",fferror); */
-        if (fferror>=0) {
-            /* encua el nou node */
-            encuar(&x->x_cua, entrada);
-            /* si no és el primer element a encuar incrementem la posicio de la última imatge insertada */
-            if(numNodes(&x->x_cua) != 0) x->x_ultima_img ++;
-            /*
-             * si assoleix el maxim torna a començar,
-             * inicialitzant la posició en el tauler de la última imatge insertada
-             */
-            if(x->x_ultima_img == maxim) x->x_ultima_img = 0;
-
-            sprintf(nNstr, "%d", nN);
-            strcat(ig_path,nNstr);
-            strcat(ig_path,".");
-            strcat(ig_path,FORMAT_MINIATURA);
-
-            sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-            sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                glist_getcanvas(x->x_glist),
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2),
-                text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),
-                x,nN,x,nN);
-            if(nN == 0){
-                x->x_tauler_primer = x->x_cua.final;
-            }
-        }
-    }
-
-    /* v 0.2 -- mètode de la classe que marca la cel·la seleccionada */
-    static void videogrid_grasp_selected(t_videogrid *x, int pos)
-    {
-        /*printf("Grasp selected thumb %d", pos);*/
-        if(pos != x->x_pos_selected) {
-            videogrid_ungrasp_selected(x);
-            /* post("Grasp selected thumb %d", pos); */
-            x->x_pos_selected = pos;
-            /* nem per aqui ---- */
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill {} -tags %xGRASP -outline %s -width %d\n",
-                    glist_getcanvas(x->x_glist),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell,
-                    x,x->x_color_grasp->s_name, GRUIX + 1);
-            canvas_fixlinesfor(glist_getcanvas(x->x_glist), (t_text*)x);
-        }
-    }
-
-    /*  widget helper functions  */
-
-    /* dibuixa videogrid */
-    void videogrid_drawme(t_videogrid *x, t_glist *glist, int firsttime)
-    {
-        /* post("Entra a drawme amb firsttime: %d", firsttime); */
-        if (firsttime) {
-            char name[MAXPDSTRING];
-            canvas_makefilename(glist_getcanvas(x->x_glist), x->x_name->s_name, name, MAXPDSTRING);
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill %s -tags %xGRID -outline %s\n",
-                glist_getcanvas(glist),
-                text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                text_xpix(&x->x_obj, glist) + (x->x_num_col * x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil * x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX,
-                x->x_color_fons->s_name, x,x->x_color_marc->s_name);
-
-            canvas_fixlinesfor(glist_getcanvas(glist), (t_text*)x);
-            /* si hi elements a la cua els afegeix (redimensió) */
-            if(!cuaBuida(&x->x_cua))
-            {
-                path  ig_path;
-                int nN = 0;
-                char nNstr[BYTES_NUM_TEMP];
-                Node *actual;
-                actual=x->x_cua.davanter;
-                do{
-                    strcpy(ig_path,PATH_TEMPORAL);
-                    sprintf(nNstr, "%d", nN);
-                    strcat(ig_path,nNstr);
-                    strcat(ig_path,".");
-                    strcat(ig_path,FORMAT_MINIATURA);
-                    /* post("reestablint la imatge %s", actual->pathFitxer); */
-                    convertir_img_ff(actual->pathFitxer,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-                    sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-                    sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                             glist_getcanvas(x->x_glist),text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),x,nN,x,nN);
-                    actual = actual->seguent;
-                    nN++;
-                }while(actual);
-            }
-        }
-        else {
-            sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-            if(!cuaBuida(&x->x_cua))
-            {
-                int contador = 0;
-                while(contador < numNodes(&x->x_cua)){
-                    sys_vgui(".x%x.c coords %xS%d \
-                            %d %d\n",
-                    glist_getcanvas(glist), x, contador,
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,contador) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,contador) + (x->x_h_cell/2));
-                    contador++;
-                }
-
-               /* char buf[800];
-                sprintf(buf, "pdtk_videogrid_table %%s %s %d %d\n", x->x_name->s_name, x->x_num_fil, x->x_num_col);
-                gfxstub_new(&x->x_obj.ob_pd, x, buf); */
-            }
-            if (x->x_pos_selected > -1){
-                sys_vgui(".x%x.c coords %xGRASP %d %d %d %d\n", glist_getcanvas(glist), x,
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell);
-            }
-            sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        int xI = text_xpix(&x->x_obj, glist);
-        int yI = text_ypix(&x->x_obj, glist);
-        int xF = xI + (x->x_num_col * x->x_w_cell) + ((x->x_num_col + 1) * GRUIX);
-        int yF = yI + (x->x_num_fil * x->x_h_cell) + ((x->x_num_fil + 1) * GRUIX);
-        int vlines = 0;
-        int xi = 0;
-        while(vlines < x->x_num_col){
-            xi = xI + getX(x,vlines) - GRUIX + 1;
-            sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-            vlines++;
-        }
-        xi = xi + x->x_w_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-        int hlines = 0;
-        int yi = 0;
-        while(hlines < x->x_num_fil){
-            yi = yI + ((x->x_h_cell + GRUIX) * hlines) + 2;
-            sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-            hlines++;
-        }
-        yi = yi + x->x_h_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-    }
-
-    static void videogrid_delete(t_gobj *z, t_glist *glist)
-    {
-        /* post("Entra a delete"); */
-        t_text *x = (t_text *)z;
-        canvas_deletelinesfor(glist_getcanvas(glist), x);
-    }
-
-    static void videogrid_displace(t_gobj *z, t_glist *glist,int dx, int dy)
-    {
-        /* post("Entra a displace amb dx %d i dy %d", dx, dy); */
-        t_videogrid *x = (t_videogrid *)z;
-        x->x_obj.te_xpix += dx;
-        x->x_obj.te_ypix += dy;
-        sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n",
-                 glist_getcanvas(glist), x,
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                 text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-        videogrid_drawme(x, glist, 0);
-        canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-    }
-
-    /* borra videogrid v 0.2 -- int toclear */
-    void videogrid_erase(t_videogrid* x,t_glist* glist, int toclear)
-    {
-        int maxim = x->x_num_fil * x->x_num_col;
-        path path_total;
-        char contador_str[BYTES_NUM_TEMP];
-        /* post("Entra a erase"); */
-        /* elimina les imatges */
-        int contador = 0;
-        while(contador < numNodes(&x->x_cua)){
-
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, contador);
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-
-        /* elimina el grid v 0.2 -- excepte quan es fa un clear */
-        if(toclear == 0){
-            sys_vgui(".x%x.c delete %xGRID\n", glist_getcanvas(glist), x);
-            sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        /* v 0.2 -- elimina el marc de la casella seleccionada */
-        if(x->x_pos_selected > -1){
-            sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(glist), x);
-            x->x_pos_selected = -1;
-        }
-        eliminar_imatges_temporals(maxim);
-    }
-
-    static void videogrid_vis(t_gobj *z, t_glist *glist, int vis)
-    {
-        /* post("Entra a vist amb vis %d", vis); */
-        t_videogrid* s = (t_videogrid*)z;
-        if (vis)
-            videogrid_drawme(s, glist, 1);
-        else
-           videogrid_erase(s,glist,0);
-    }
-
-    static void videogrid_select(t_gobj *z, t_glist *glist, int state)
-    {
-        /* post("Entra select amb state %d", state); */
-        t_videogrid *x = (t_videogrid *)z;
-        if (state) {
-            /* post("Videogrid seleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline #0000FF\n", glist_getcanvas(glist), x);
-        }
-        else {
-            /* post("Videogrid deseleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline %s\n", glist_getcanvas(glist), x, x->x_color_marc->s_name);
-        }
-    }
-
-    static void videogrid_getrect(t_gobj *z, t_glist *glist,int *xp1, int *yp1, int *xp2, int *yp2)
-    {
-        int cols, fils;
-        t_videogrid* x = (t_videogrid*)z;
-        cols = x->x_num_col;
-        fils = x->x_num_fil;
-        *xp1 = text_xpix(&x->x_obj, glist);
-        *yp1 = text_ypix(&x->x_obj, glist);
-        *xp2 = text_xpix(&x->x_obj, glist) + (cols*x->x_w_cell) + ((cols + 1) * GRUIX);
-        *yp2 = text_ypix(&x->x_obj, glist) + (fils*x->x_h_cell) + ((fils + 1) * GRUIX);
-        /* post("Esta amb el ratoli en el punt %d %d %d %d o son els vetexs de la caixa... es/bd", xp1, yp1, xp2, yp2); */
-    }
-
-
-    static void videogrid_save(t_gobj *z, t_binbuf *b)
-    {
-        /* post("Entra a save"); */
-        t_videogrid *x = (t_videogrid *)z;
-        /* crea la cadena de paths per desar */
-        /* 100 possibles paths com a màxim a 512 cada path*/
-        /* char cadenaPaths[51200];*/
-        char *cadenaPaths, *cadenaPathsInicials;
-        path ultimPath = "";
-        cadenaPaths = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPaths,"");
-        cadenaPathsInicials = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPathsInicials,"");
-        /*strcpy(cadenaPaths,(char *)argv[5].a_w.w_symbol->s_name);*/
-        if(!cuaBuida(&x->x_cua))
-        {
-            Node *actual;
-            int maxim = x->x_num_fil * x->x_num_col;
-            int contador = x->x_ultima_img + 1;
-
-            if (contador > maxim) {
-                   contador = 0;
-            }
-            /* printf("\n contador %d i maxim %d i laultimaPOS %d \n", contador, maxim, x->x_ultima_img); */
-            /*
-            strcat(cadenaPaths, actual->pathFitxer);
-            strcat(cadenaPaths, "1|\n");
-            contador ++;
-            */
-            /* prenem el davanter de la cua */
-            actual=x->x_cua.davanter;
-
-            while(contador < numNodes(&x->x_cua)){
-                /* afegim els paths del davanter fins a l'ultim node al tauler */
-                strcat(cadenaPaths, actual->pathFitxer);
-                strcat(cadenaPaths, "|");
-                actual = actual->seguent;
-                contador ++;
-            }
-            if(actual != x->x_cua.final){
-                /* ara resten els de de l'inici del tauler fins al final de la cua */
-                while(actual != x->x_cua.final){
-                    strcat(cadenaPathsInicials, actual->pathFitxer);
-                    strcat(cadenaPathsInicials, "|");
-                    actual = actual->seguent;
-                }
-                /* afegeix l'últim */
-                strcat(ultimPath, actual->pathFitxer);
-                strcat(ultimPath, "|");
-                /* afegeix l'ultim de la cua */
-                strcat(cadenaPathsInicials, ultimPath);
-            }else{
-                if(x->x_ultima_img == 0){
-                    strcat(ultimPath, actual->pathFitxer);
-                    strcat(ultimPath, "|");
-                    strcat(cadenaPathsInicials, ultimPath);
-                }
-            }
-            /* ordena el paths segons aparicio en el tauler */
-            strcat(cadenaPathsInicials, cadenaPaths);
-            /* DE MOMENT NO DESA ELS PATHS */
-            strcat(cadenaPathsInicials, "");
-            /* printf("%s",cadenaPathsInicials); */
-        }
-
-        binbuf_addv(b, "ssiissiissssiis", gensym("#X"),gensym("obj"),
-        x->x_obj.te_xpix, x->x_obj.te_ypix,
-        atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-        x->x_name,x->x_num_fil,x->x_num_col,x->x_color_fons,x->x_color_marc,x->x_color_grasp,x->x_format_list,x->x_w_cell,x->x_h_cell,gensym(cadenaPathsInicials));
-        binbuf_addv(b, ";");
-    }
-
-    static void videogrid_properties(t_gobj *z, t_glist *owner)
-    {
-        char buf[900];
-        t_videogrid *x=(t_videogrid *)z;
-
-        /* post("Es crida a pdtk_videogrid dialog passant nom = %s\n fils = %d \t cols = %d \t color fons = %s \t color marc = %s\n", x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name); */
-        sprintf(buf, "pdtk_videogrid_dialog %%s %s %d %d %s %s %s %s %i %i\n",
-                x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name, x->x_color_grasp->s_name, x->x_format_list->s_name, x->x_w_cell,x->x_h_cell);
-        /* post("videogrid_properties : %s", buf ); */
-        gfxstub_new(&x->x_obj.ob_pd, x, buf);
-    }
-
-    static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv)
-    {
-        int maxim, maxdigit;
-        int nfil = 0;
-        int ncol = 0;
-        if ( !x ) {
-            post("Videogrid: error_ Attempt to alter the properties of an object that does not exist.\n");
-        }
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-        break;
-        case 5:
-            /* versio 0.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 6:
-            /* versio 0.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL || argv[7].a_type != A_FLOAT || argv[8].a_type != A_FLOAT)
-            {
-                    post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                    return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)argv[7].a_w.w_float;
-            x->x_h_cell = (int)argv[8].a_w.w_float;
-        break;
-
-        default:
-            /* no fa res */
-        break;
-        }
-        /* amb aquest nom es prepara per poder rebre dades */
-        pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        // x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        x->x_ultima_img = numNodes(&x->x_cua);
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* v 0.2 -- mètode de la classe que dispara l'element del taules en la posicio N [seek N( */
-    void videogrid_seek(t_videogrid *x, t_floatarg postauler)
-    {
-        /* post("seek a %d\n",postauler); */
-        path pathSortida;
-        Node *actual;
-        int contador = 0;
-        int maxim = x->x_num_fil * x->x_num_col;
-        /* obtenir el path per enviar a la sortida */
-        if((!cuaBuida(&x->x_cua))&&(postauler < numNodes(&x->x_cua))&&(postauler >= 0 )){
-            if(x->x_tauler_primer){
-                actual = x->x_tauler_primer;
-                while(contador <= postauler){
-                    if(contador == postauler){
-                        strcpy(pathSortida,actual->pathFitxer);
-                    }
-                    if(actual->seguent == NULL){
-                        actual = x->x_cua.davanter;
-                    }else{
-                        actual = actual->seguent;
-                    }
-                    contador++;
-                }
-                outlet_symbol(x->x_sortida, gensym(pathSortida));
-                /* post("Esta a videogrid_click amb %d %d a la posicio %d\n", x_pos, y_pos, postauler);*/
-                /* v 0.2 -- marcar casella */
-                videogrid_grasp_selected(x, postauler);
-            }
-        }
-    }
-
-    static int videogrid_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit)
-    {
-        t_videogrid* x = (t_videogrid *)z;
-        int x_pos = xpix - text_xpix(&x->x_obj, x->x_glist);
-        int y_pos = ypix - text_ypix(&x->x_obj, x->x_glist);
-        int xa, ya, postauler;
-        if (doit)
-        {
-            /* obtenir la posicio en el tauler */
-            // -- v 0.2 -- midoficacio pel gruix del marc //
-            xa = ((x_pos) / (x->x_w_cell + GRUIX + 1));
-            ya = ((y_pos) / (x->x_h_cell + GRUIX + 1)) * x->x_num_col;
-            postauler = ya + xa;
-            // -- v 0.2 -- seleciona la casella disparant el path //
-            videogrid_seek(x, postauler);
-        }
-        return (1);
-    }
-
-    /* --------- videogrid functions ---------- */
-
-    /* v 0.2 -- mètode de la classe que buida el tauler amb el missatge [clear ( */
-    void videogrid_clear(t_videogrid *x)
-    {
-        videogrid_erase(x, x->x_glist,1);
-        eliminarCua(&x->x_cua);
-        x->x_ultima_img = 0;
-        x->x_dir_pos = 0;
-        x->x_tauler_primer = NULL;
-        videogrid_drawme(x, x->x_glist, 0);
-    }
-
-    /* mètode de la clase que escriu un missatge al rebre un bang */
-    void videogrid_bang(t_videogrid *x)
-    {
-        /* post("Hello videogrid !!"); */
-        escriuCua(&x->x_cua);
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideo +string( com a paràmetre */
-    void videogrid_putvideo(t_videogrid *x, t_symbol *entrada)
-    {
-        /* comprova que existeixi el fitxer */
-        FILE *fitxer;
-        path e;
-        strcpy(e,entrada->s_name);
-        fitxer = fopen(e,"r");
-        if (!fitxer) {
-            post("Videogrid: Problem opening file %s.\n",e);
-        }
-        else {
-            if (format_adequat_v(e, x->x_format_list) != 0) {
-                videogrid_afegir_imatge(x,e);
-            }
-        }
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideodir +string( com a paràmetre */
-    void *videogrid_putvideodir_thread(void *z)
-    {
-        t_videogrid *x = (t_videogrid *)z;
-        DIR *dirp;
-        struct dirent * direntp;
-        path nomImatge, directoriAnterior, pathActual;
-        int numEncuats = 0, numPosDir = 0;
-        int maxim;
-        if ((dirp = opendir(x->x_dir_canvi)) == NULL)
-        {
-            post("Videogrid: Can not open folder %s.\n", x->x_dir_canvi);
-        }else{
-            maxim = x->x_num_fil * x->x_num_col;
-            strcpy(directoriAnterior, x->x_dir_actual);
-            strcpy(x->x_dir_actual, x->x_dir_canvi);
-            /*
-             * si es el mateix directori entrat l'ultim busca la ultima imatge afegida
-             * per a seguir a encuant a partir d'ella en endavant
-             */
-            if(strcmp(directoriAnterior, x->x_dir_actual) == 0){
-                /* post("Videogrid: Repeteix directori %s\n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* assolir la posició anterior en el directori */
-                        if(numPosDir > x->x_dir_pos){
-                            /* si el nombre de nodes encuats per aquest directori no supera el màxim encua el nou node */
-                            if(numEncuats < maxim){
-                                /* post("s'encua la imatge %s\n", direntp->d_name); */
-                                /* concatena el path i el nom de la imatge */
-                                strcpy(nomImatge,direntp->d_name);
-                                strcpy(pathActual,x->x_dir_actual);
-                                strcat(pathActual,"/");
-                                strcat(pathActual,nomImatge);
-                                if (format_adequat_v(pathActual, x->x_format_list) != 0) {
-                                    pthread_mutex_lock(&x->x_lock);
-                                    videogrid_afegir_imatge(x, pathActual);
-                                    pthread_mutex_unlock(&x->x_lock);
-                                    /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                                    numEncuats++;
-                                }
-                                /* es desa la posició en el directori de l'últim node encuat */
-                                x->x_dir_pos = numPosDir;
-                            }
-                        }
-                    }
-                }
-            }else{
-                /* directori diferent omple la cua començant pel primer fitxer */
-                /* post("Videogrid: Nou directori %s \n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* si el nombre de nodes encuats per aquest directori no supera el màxim enca el nou node */
-                        if(numEncuats < maxim){
-                            /* post("s'encua la imatge %s\n", direntp->d_name); */
-                            /* concatena el path i el nom de la imatge */
-                            strcpy(nomImatge,direntp->d_name);
-                            strcpy(pathActual,x->x_dir_actual);
-                            strcat(pathActual,"/");
-                            strcat(pathActual,nomImatge);
-                            if (format_adequat_v(pathActual, x->x_format_list) != 0) {
-                                pthread_mutex_lock(&x->x_lock);
-                                videogrid_afegir_imatge(x, pathActual);
-                                pthread_mutex_unlock(&x->x_lock);
-                                /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                                numEncuats++;
-                            }
-                            /* es desa la posició en el directori de l'últim node encuat */
-                            x->x_dir_pos = numPosDir;
-                        }
-                    }
-                }
-            }
-            /* si la posicio de l'actual es la de l'utim fitxer del directori, inicialitza la posició */
-            if(x->x_dir_pos >= numPosDir) x->x_dir_pos = 0;
-            closedir(dirp);
-        }
-        /* escriu l'argument entrat */
-        /* post("Obtenint imatges del directori: %s ...",x->x_dir_canvi); */
-        /* envia a la sorida l'argument entrat */
-        /* outlet_symbol(x->x_sortida, entrada); */
-        pthread_exit(NULL);
-    }
-
-    void videogrid_putvideodir(t_videogrid *x, t_symbol *entrada)
-    {
-
-        pthread_t unthread;
-        pthread_attr_t unatribut;
-        pthread_attr_init( &unatribut );
-
-        strcpy(x->x_dir_canvi,entrada->s_name);
-
-        // ----------------      THREAD CREAT -------------------------
-        pthread_mutex_init(&x->x_lock, NULL);
-        // int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
-        pthread_create(&unthread, &unatribut, videogrid_putvideodir_thread, (void *)x);
-        pthread_mutex_destroy(&x->x_lock);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de files del tauler [rows N( */
-    void videogrid_rows(t_videogrid *x, t_floatarg nfil)
-    {
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, ncol;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        ncol = x->x_num_col;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                /* x->x_num_col = ncol; */
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de columnes del tauler [cols N( */
-    void videogrid_cols(t_videogrid *x, t_floatarg ncol)
-    {
-        /* post("rows a %d\n",postauler); */
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, nfil;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        nfil = x->x_num_fil;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                /* x->x_num_fil = nfil; */
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* tk help windows */
-
-    void load_tk_procs_videogrid () {
-        // ########### procediments per videogrid -- slario(at)gmail.com [a partir del codi del grid de l'Ives: ydegoyon(at)free.fr] #########
-        sys_gui("proc videogrid_apply {id} {\n");
-        // strip "." from the TK id to make a variable name suffix
-        sys_gui("set vid [string trimleft $id .]\n");
-        // for each variable, make a local variable to hold its name...
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set cmd [concat $id dialog [eval concat $$var_graph_name] [eval concat $$var_graph_num_fil] [eval concat $$var_graph_num_col] [eval concat $$var_graph_color_fons] [eval concat $$var_graph_color_marc] [eval concat $$var_graph_color_grasp] [eval concat $$var_graph_format_list] [eval concat $$var_graph_w_cell] [eval concat $$var_graph_h_cell]\\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_cancel {id} {\n");
-        sys_gui("set cmd [concat $id cancel \\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_ok {id} {\n");
-        sys_gui("videogrid_apply $id\n");
-        sys_gui("videogrid_cancel $id\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_dialog {id name num_fil num_col color_fons color_marc color_grasp format_list w_cell h_cell } {\n");
-        sys_gui("set vid [string trimleft $id .]\n");
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set $var_graph_name $name\n");
-        sys_gui("set $var_graph_num_fil $num_fil\n");
-        sys_gui("set $var_graph_num_col $num_col\n");
-        sys_gui("set $var_graph_color_fons $color_fons\n");
-        sys_gui("set $var_graph_color_marc $color_marc\n");
-        sys_gui("set $var_graph_color_grasp $color_grasp\n");
-        sys_gui("set $var_graph_format_list $format_list\n");
-        sys_gui("set $var_graph_w_cell $w_cell\n");
-        sys_gui("set $var_graph_h_cell $h_cell\n");
-        sys_gui("toplevel $id -class [winfo class .]\n");
-        sys_gui("wm title $id {** videogrid **}\n");
-        sys_gui("wm resizable $id 0 0\n");
-        sys_gui("wm protocol $id WM_DELETE_WINDOW [concat videogrid_cancel $id]\n");
-
-        /* sys_gui("label $id.label -text {VIDEOGRID PROPERTIES}\n"); */
-        /* sys_gui("pack $id.label -side top\n"); */
-
-        sys_gui("label $id.label -text { properties }\n");
-        sys_gui("pack $id.label -side top\n");
-
-        sys_gui("frame $id.buttonframe\n");
-        sys_gui("pack $id.buttonframe -side bottom -fill x -pady 2m\n");
-        sys_gui("button $id.buttonframe.cancel -text {Cancel} -command \"videogrid_cancel $id\"\n");
-        sys_gui("button $id.buttonframe.apply -text {Apply} -command \"videogrid_apply $id\"\n");
-        sys_gui("button $id.buttonframe.ok -text {OK} -command \"videogrid_ok $id\"\n");
-        sys_gui("pack $id.buttonframe.cancel -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.apply -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.ok -side left -expand 1\n");
-
-        sys_gui("frame $id.1rangef\n");
-        sys_gui("pack $id.1rangef -side top\n");
-        sys_gui("label $id.1rangef.lname -text \"Name :\" -anchor nw\n");
-        sys_gui("entry $id.1rangef.name -textvariable $var_graph_name -width 20\n");
-        sys_gui("pack $id.1rangef.lname $id.1rangef.name -side left\n");
-
-        sys_gui("frame $id.2rangef\n");
-        sys_gui("pack $id.2rangef -side top\n");
-        sys_gui("label $id.2rangef.lnum_fil -text \"Rows :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.2rangef.num_fil -textvariable $var_graph_num_fil -width 10\n");
-        sys_gui("pack $id.2rangef.lnum_fil $id.2rangef.num_fil -side left\n");
-
-        sys_gui("frame $id.3rangef\n");
-        sys_gui("pack $id.3rangef -side top\n");
-        sys_gui("label $id.3rangef.lnum_col -text \"Cols :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.3rangef.num_col -textvariable $var_graph_num_col -width 10\n");
-        sys_gui("pack $id.3rangef.lnum_col $id.3rangef.num_col -side left\n");
-
-        sys_gui("frame $id.4rangef\n");
-        sys_gui("pack $id.4rangef -side top\n");
-        sys_gui("label $id.4rangef.lcolor_fons -text \"Bg Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.4rangef.color_fons -textvariable $var_graph_color_fons -width 10\n");
-        sys_gui("pack $id.4rangef.lcolor_fons $id.4rangef.color_fons -side left\n");
-
-        sys_gui("frame $id.5rangef\n");
-        sys_gui("pack $id.5rangef -side top\n");
-        sys_gui("label $id.5rangef.lcolor_marc -text \"Border Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.5rangef.color_marc -textvariable $var_graph_color_marc -width 10\n");
-        sys_gui("pack $id.5rangef.lcolor_marc $id.5rangef.color_marc -side left\n");
-
-        sys_gui("frame $id.6rangef\n");
-        sys_gui("pack $id.6rangef -side top\n");
-        sys_gui("label $id.6rangef.lcolor_grasp -text \"Sel Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.6rangef.color_grasp -textvariable $var_graph_color_grasp -width 10\n");
-        sys_gui("pack $id.6rangef.lcolor_grasp $id.6rangef.color_grasp -side left\n");
-
-        sys_gui("frame $id.7rangef\n");
-        sys_gui("pack $id.7rangef -side top\n");
-        sys_gui("label $id.7rangef.lformat_list -text \"Format list ':' separated :\" -width 32 -anchor nw\n");
-        sys_gui("entry $id.7rangef.format_list -textvariable $var_graph_format_list -width 30\n");
-        sys_gui("pack $id.7rangef.lformat_list -fill x\n");
-        sys_gui("pack $id.7rangef.format_list -fill x\n");
-
-        sys_gui("frame $id.8rangef\n");
-        sys_gui("pack $id.8rangef -side top\n");
-        sys_gui("label $id.8rangef.lw_cell -text \"Thumb W :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.8rangef.w_cell -textvariable $var_graph_w_cell -width 10\n");
-        sys_gui("pack $id.8rangef.lw_cell $id.8rangef.w_cell -side left\n");
-
-        sys_gui("frame $id.9rangef\n");
-        sys_gui("pack $id.9rangef -side top\n");
-        sys_gui("label $id.9rangef.lh_cell -text \"Thumb H :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.9rangef.h_cell -textvariable $var_graph_h_cell -width 10\n");
-        sys_gui("pack $id.9rangef.lh_cell $id.9rangef.h_cell -side left\n");
-
-        sys_gui("bind $id.1rangef.name <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.2rangef.num_fil <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.3rangef.num_col <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.4rangef.color_fons <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.5rangef.color_marc <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.6rangef.color_grasp <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.7rangef.format_list <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.8rangef.w_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.9rangef.h_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("focus $id.1rangef.name\n");
-        sys_gui("}\n");
-
-        /*
-        sys_gui("proc table {w content args} {\n");
-        sys_gui("frame $w -bg black\n");
-        sys_gui("set r 0\n");
-        sys_gui("foreach row $content {\n");
-        sys_gui("set fields {}\n");
-        sys_gui("set c 0\n");
-        sys_gui("foreach col $row {\n");
-        // lappend fields [label $w.$r/$c -text $col]
-        sys_gui("set img [image create photo -file $col]\n");
-        sys_gui("lappend fields [label $w.$r/$c -image $img]\n");
-        sys_gui("incr c\n");
-        sys_gui("}\n");
-        sys_gui("eval grid $fields -sticky news -padx 1 -pady 1\n");
-        sys_gui("incr r\n");
-        sys_gui("}\n");
-        sys_gui("set w\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_table {id name num_fil num_col} {\n");
-        sys_gui("table .tauler {\n");
-        sys_gui("{sll80x60.gif 3160x120.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.gif sll80x60.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.ppm sll80x60.gif 3160x120.gif}\n");
-        sys_gui("}\n");
-        sys_gui("pack .tauler\n");
-        sys_gui("}\n");
-        */
-    }
-
-    /* widget properties */
-    static void videogrid_setwidget(void)
-    {
-        /* post("Entra a setwidget"); */
-        videogrid_widgetbehavior.w_getrectfn = videogrid_getrect;
-        videogrid_widgetbehavior.w_displacefn = videogrid_displace;
-        videogrid_widgetbehavior.w_selectfn = videogrid_select;
-        videogrid_widgetbehavior.w_activatefn = NULL;
-        videogrid_widgetbehavior.w_deletefn = videogrid_delete;
-        videogrid_widgetbehavior.w_visfn = videogrid_vis;
-        /* clic del ratoli */
-        videogrid_widgetbehavior.w_clickfn = videogrid_click;
-    }
-
-    /* el constructor de la classe*/
-    static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
-    {
-        /* instanciació del nou objecte */
-        t_videogrid *x = (t_videogrid *)pd_new(videogrid_class);
-        /* crea una sortida per l'objecte*/
-        x->x_sortida = outlet_new(&x->x_obj,&s_symbol);
-        /* s'obté el canvas de pd */
-        x->x_glist = (t_glist*) canvas_getcurrent();
-        /* posició en el tauler de la última imatge afegida */
-        x->x_ultima_img = 0;
-        /* posició de l'últim fitxer del directori encuat */
-        x->x_dir_pos = 0;
-        /* apuntador al primer element en el tauler */
-        x->x_tauler_primer = NULL;
-        x->x_pos_selected = -1;
-        /* fixa el nom de l'objecte */
-        char nom[15];
-        sprintf(nom, "videogrid%d", ++videogridcount);
-        name = gensym(nom);
-        x->x_name = name;
-        /* amb aquest nom es prepara per poder rebre dades */
-        pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* crea la cua de nodes */
-        crearCua(&x->x_cua);
-        post("NEW videogrid: created with %d parameters.\n", argc);
-
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 5:
-            /* versio 0.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 6:
-            /* versio 0.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)atom_getintarg(7, argc, argv);
-            x->x_h_cell = (int)atom_getintarg(8, argc, argv);
-        break;
-
-        case 10:
-            /* versio 0.1 - paths dels  elsements del tauler */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-            /*
-            // -- llegir la cadena de paths | afegir els paths a la cua //
-            // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-            char *cadenaPaths;
-            cadenaPaths = (char *)malloc(51200*sizeof(char));
-            strcpy(cadenaPaths,(char *)argv[6].a_w.w_symbol->s_name);
-            // -- printf("Es carreguen els paths %s --- %s **** %s\n", cadenaPaths, argv[5].a_w.w_symbol->s_name,argv[3].a_w.w_symbol->s_name); //
-            // -- split //
-            char *token;
-            t_symbol *tt;
-            for ( token = strtok(argv[6].a_w.w_symbol->s_name,"|");
-                token != NULL;
-                token = strtok(NULL,"|") ){
-                        tt = gensym(token);
-                        // -- printf("AFEGINT CARREGANT %s\n",tt->s_name); //
-                        // -- imagegrid_putimg(x,tt); //
-                        // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-                        // -- imagegrid_afegir_imatge(x,tt->s_name); //
-            }
-
-            token = strtok(cadenaPaths,"|");
-            while(token){
-                tt = gensym(token);
-                // printf("AFEGINT CARREGANT %s\n",tt->s_name);
-                imagegrid_putimg(x,tt);
-                token = strtok(NULL,"|");
-            }
-            free(cadenaPaths);
-            */
-        break;
-
-        default:
-            /* crea un objecte nou per defecte */
-            /* post("NEW imagegrid created.\n"); */
-            /* fixa el nombre de files */
-            x->x_num_fil = 3;
-            /* fixa el nombre de columnes */
-            x->x_num_col = 5;
-            /* colors de fons i de marc*/
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-           x->x_h_cell = 40;
-        break;
-        }
-        /*
-         * printf("S'ha instanciat un videogrid anomenat %s amb les caracteristiques seguents:",x->x_name->s_name);
-         * printf("Nombre de files %d - Nombre de columnes: %d", x->x_num_fil, x->x_num_col);
-        */
-        /* a Karmic es detecta que videogrid fa crash al pd al insertar un video, nomes en el cas que es carregui despres de Gem */
-
-
-        char *lliibbGem = "Gem";
-        char *lliibbVideogrid = "videogrid";
-        /*
-        if(sys_load_lib(glist_getcanvas(x->x_glist), lliibb)){
-            post("SLL diu Gem already loaded");
-        } else{
-            post("SLL diu Gem not loaded");
-        }*/
-
-        int i, posGem = 0, posVideogrid = 0;
-        t_namelist *nl;
-
-        for (i=0, nl = sys_externlist; nl; i++, nl = nl->nl_next) {
-            if(strcmp(nl->nl_string,lliibbGem)==0) {
-                posGem = i;
-            } else {
-                if(strcmp(nl->nl_string,lliibbVideogrid)==0) {
-                    posVideogrid = i;
-                }
-            }
-        }
-        if(posGem < posVideogrid) {
-            post("NOTE videogrid: Recomended load before Gem.\n");
-        }
-        return (x);
-    }
-
-    static void videogrid_destroy(t_videogrid *x){
-        /* allibera el nom */
-        pd_unbind(&x->x_obj.ob_pd, x->x_name);
-        /* elimina el contingut de la cua */
-        eliminarCua(&x->x_cua);
-        post("Videogrid destroyed.\n");
-    }
-
-    /* generacio d'una nova classe */
-    /* al carregar la nova llibreria my_lib pd intenta cridar la funció my_lib_setup */
-    /* aquesta crea la nova classe i les seves propietats només un sol cop */
-
-    void videogrid_setup(void)
-    {
-        load_tk_procs_videogrid();
-        post("videogrid: version 0.2.1");
-        post("written by Sergi Lario (slario@gmail.com) & Lluis Gomez i Bigorda (lluis@artefacte.org)");
-
-
-        videogrid_class = class_new(gensym("videogrid"),
-            (t_newmethod)videogrid_new,
-            (t_method)videogrid_destroy,
-            sizeof(t_videogrid),
-            CLASS_DEFAULT,
-            A_GIMME,
-            0);
-
-        /*
-         *  class_new crea la nova classe retornant un punter al seu prototipus,
-         *  el primer argument es el nom simbolic de la classe,
-         *  el segon i tercer corresponen al constructor i destructor de la classe respectivament,
-         *  (el constructor instancia un objecte i inicialitza les seves dades cada cop que es crea un objecte
-         *  el destructor allibera la memoria reservada al destruir l'objecte per qualsevol causa)
-         *  el quart correspon a la mida de l'estructura de dades, per tal de poder reservar la memoria necessària,
-         *  el cinquè influeix en el mòde de representació gràfica del objectes. Per defecte CLASS_DEFAULT o '0',
-         *  la resta d'arguments defineixen els arguments de l'objecte i el seu tipus, la llista acaba  amb 0
-        */
-
-        class_addbang(videogrid_class, videogrid_bang);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideo,gensym("putvideo"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideodir,gensym("putvideodir"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_dialog, gensym("dialog"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_clear, gensym("clear"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_seek, gensym("seek"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_rows, gensym("rows"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_cols, gensym("cols"), A_FLOAT, 0);
-
-        /* inicia el comportament de videogrid */
-
-        videogrid_setwidget();
-
-        class_setwidget(videogrid_class, &videogrid_widgetbehavior);
-        class_sethelpsymbol(videogrid_class, gensym("videogrid.pd"));
-        class_setsavefn(videogrid_class, &videogrid_save);
-        class_setpropertiesfn(videogrid_class, videogrid_properties);
-    }
-}
diff --git a/externals/pdvjtools/videogrid/videogrid.cc.bk b/externals/pdvjtools/videogrid/videogrid.cc.bk
deleted file mode 100644
index 6a336844c..000000000
--- a/externals/pdvjtools/videogrid/videogrid.cc.bk
+++ /dev/null
@@ -1,1804 +0,0 @@
-
-extern "C"
-{
-    /*
-    videogrid external for Puredata
-    Lluis Gomez i Bigorda :: lluis-at-hangar.org
-    Sergi Lario Loyo      :: slario-at-gmail.com
-
-    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/>.
-    */
-
-    #include <stdio.h>
-    #include <stdlib.h>
-    #include <dirent.h>
-    #include <string.h>
-    #include <unistd.h>
-    #include <math.h>
-
-    /*
-     * incloure les definicions de variables i prototipus de dades i de funcions de puredata
-    */
-    #include "m_pd.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions gàfiques bàsiques de pd
-    */
-    #include "g_canvas.h"
-    /*
-     * incloure estructures de dades i capceleres de funcions per traballar amb threads
-    */
-    #include "pthread.h"
-
-    /* some linux distros need this to compile ffmpeg correctly as cpp */
-    #define __STDC_CONSTANT_MACROS 1
-
-    /* ffmpeg includes */
-    #include <ffmpeg/avcodec.h>
-    #include <ffmpeg/avformat.h>
-    #include <ffmpeg/avutil.h>
-    #include <ffmpeg/swscale.h>
-
-    /* libquicktime includes */
-    // #include <quicktime/lqt.h>
-    // #include <quicktime/colormodels.h>
-    #include <lqt/lqt.h>
-    #include <lqt/colormodels.h>
-
-
-    /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&& VIDEOGRID &&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
-    /* definició de l'amplada i l'alçada d'una casella */
-    /*
-    #define w_cell 60
-    #define h_cell 40
-    //v 0.2.1 -- passen a ser propietats de l'objecte
-    */
-
-    /* definició del gruix en pixels del marc del tauler */
-    #define GRUIX 2
-
-    /* nombre de caracters per el nom del path del fitxer */
-    #define BYTESNOMFITXER 512
-
-    /* 8bits clamp rgb values */
-    #define CLAMP8(x) (((x)<0) ? 0 : ((x>255)? 255 : (x)))
-
-    #define BYTESNOMFITXERIMATGE 512
-    #define BYTESTIPUSFROMAT 4
-
-    #define FORMAT_MINIATURA "ppm"
-    #define PATH_TEMPORAL "/tmp/vigrid_"
-    #define BYTES_NUM_TEMP 4
-
-
-    typedef char pathimage[BYTESNOMFITXERIMATGE];
-
-    typedef char tipus_format[BYTESTIPUSFROMAT];
-
-    /* ----------------------------------- FFmpeg functions ----------------------------------- */
-    int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi);
-
-    void SaveFrame(AVFrame *pFrame, int width, int height, int W, int H, int posi)
-    {
-        FILE *pFile;
-        char szFilename[32];
-        int nN = posi;
-
-        char nNstr[BYTES_NUM_TEMP];
-        pathimage  ig_path = PATH_TEMPORAL;
-
-        sprintf(nNstr, "%d", nN);
-        strcat(ig_path,nNstr);
-        strcat(ig_path,".");
-        strcat(ig_path,FORMAT_MINIATURA);
-
-        // Open file
-        sprintf(szFilename, ig_path);
-        pFile=fopen(szFilename, "wb");
-        if(pFile==NULL)
-            return;
-
-        // Write header
-        fprintf(pFile, "P6\n%d %d\n255\n", W, H);
-
-        int w = width;
-        int h = height;
-        float k = (width/W);
-        float l = (height/H);
-        int i,j,y,x,realx;
-
-        // Write pixel data
-        for(y=0; y<H; y=y++) {
-            for(x=0; x<W; x=x++) {
-                realx = ((x*k)+(3-((int)(x*k)%3)))*3;
-                fwrite((pFrame->data[0]+(int)(y*l)*pFrame->linesize[0])+realx, 1, 3, pFile);
-            }
-        }
-
-        //        for (i=0;i<(l*H);i=i+l) {
-        //            for (j=0;j<(k*W);j=j+k) {
-        //                fwrite(pFrame->data[0]+(i*pFrame->linesize[0]+j), 1, 3, pFile);
-        //            }
-        //       }
-        // Close file
-        fclose(pFile);
-    }
-
-    //extern "C"
-    //{
-        int convertir_img_ff(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-        {
-            AVFormatContext *pFormatCtx;
-            int             i, videoStream;
-            AVCodecContext  *pCodecCtx;
-            AVCodec         *pCodec;
-            AVFrame         *pFrame;
-            AVFrame         *pFrameRGB;
-            AVPacket        packet;
-            int             frameFinished;
-            int             numBytes;
-            uint8_t         *buffer;
-            static int sws_flags = SWS_BICUBIC;
-            struct SwsContext *img_convert_ctx;
-
-            int nN = posi;
-
-            // Register all formats and codecs
-            av_register_all();
-
-            // Open video file
-            if(av_open_input_file(&pFormatCtx, pathFitxer, NULL, 0, NULL)!=0)
-                return -1; // Couldn't open file
-
-            // Retrieve stream information
-            if(av_find_stream_info(pFormatCtx)<0)
-                return -1;  // Couldn't find stream information
-
-            // Dump information about file onto standard error
-            dump_format(pFormatCtx, 0, pathFitxer, false);
-
-            // Find the first video stream
-            videoStream=-1;
-            for(i=0; i<pFormatCtx->nb_streams; i++)
-                if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
-                {
-                    videoStream=i;
-                    break;
-                }
-            if(videoStream==-1)
-                return -1; // Didn't find a video stream
-
-            // Get a pointer to the codec context for the video stream
-            pCodecCtx=pFormatCtx->streams[videoStream]->codec;
-
-            // Find the decoder for the video stream
-            pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
-            if(pCodec==NULL)
-                return -1; // Codec not found
-
-            // Open codec
-            if(avcodec_open(pCodecCtx, pCodec)<0)
-                return -1; // Could not open codec
-
-            // Hack to correct wrong frame rates that seem to be generated by some
-            // codecs
-            // if(pCodecCtx->frame_rate>1000 && pCodecCtx->frame_rate_base==1)
-            //    pCodecCtx->frame_rate_base=1000;
-
-            // Allocate video frame
-            pFrame=avcodec_alloc_frame();
-
-            // Allocate an AVFrame structure
-            pFrameRGB=avcodec_alloc_frame();
-            if(pFrameRGB==NULL)
-                return -1;
-
-            // Determine required buffer size and allocate buffer
-            numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
-                pCodecCtx->height);
-            buffer=new uint8_t[numBytes];
-
-            // Assign appropriate parts of buffer to image planes in pFrameRGB
-            avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
-                pCodecCtx->width, pCodecCtx->height);
-
-            // Read frames and save first five frames to disk
-            av_read_frame(pFormatCtx, &packet);
-
-            // Is this a packet from the video stream?
-            if(packet.stream_index==videoStream)
-            {
-                // Decode video frame
-                avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, packet.data, packet.size);
-
-                // Did we get a video frame?
-                if(frameFinished)
-                {
-                    // Convert the image from its native format to RGB
-                    //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                    //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                    //    pCodecCtx->height);
-                    img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
-                                        pCodecCtx->pix_fmt,
-                                        pCodecCtx->width, pCodecCtx->height,
-                                        PIX_FMT_RGB24,
-                                        sws_flags, NULL, NULL, NULL);
-
-                    sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                                0, pCodecCtx->height,
-                                pFrameRGB->data, pFrameRGB->linesize);
-                    sws_freeContext(img_convert_ctx);
-
-                    // Save the frame to disk
-                    SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-                }
-            }
-
-            // Free the packet that was allocated by av_read_frame
-            av_free_packet(&packet);
-            // Read frames and save first five frames to disk
-            av_read_frame(pFormatCtx, &packet);
-            // Is this a packet from the video stream?
-            if(packet.stream_index==videoStream)
-            {
-                // Decode video frame
-                avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
-                    packet.data, packet.size);
-
-                // Did we get a video frame?
-                if(frameFinished)
-                {
-                    // Convert the image from its native format to RGB
-                    //img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
-                    //    (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width,
-                    //    pCodecCtx->height);
-                    img_convert_ctx = sws_getContext(    pCodecCtx->width, pCodecCtx->height,
-                                        pCodecCtx->pix_fmt,
-                                        pCodecCtx->width, pCodecCtx->height,
-                                        PIX_FMT_RGB24,
-                                        sws_flags, NULL, NULL, NULL);
-
-                    sws_scale (img_convert_ctx, pFrame->data, pFrame->linesize,
-                                0, pCodecCtx->height,
-                                pFrameRGB->data, pFrameRGB->linesize);
-                    sws_freeContext(img_convert_ctx);
-
-                    // Save the frame to disk
-                    SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, W, H, posi);
-                }
-            }
-
-            // Free the packet that was allocated by av_read_frame
-            av_free_packet(&packet);
-            //}
-
-            // Free the RGB image
-            delete [] buffer;
-            av_free(pFrameRGB);
-
-            // Free the YUV frame
-            av_free(pFrame);
-
-            // Close the codec
-            avcodec_close(pCodecCtx);
-
-            // Close the video file
-            av_close_input_file(pFormatCtx);
-
-            return 0;
-        //} extern c
-    }
-
-    /* ----------------------------------- Quicktime functions ----------------------------------- */
-    int convertir_img(pathimage pathFitxer, tipus_format f, int W, int H, int posi)
-    {
-        /*
-        Quicktime per les conversions
-        */
-
-        /* RGB vectors */
-        unsigned char * qt_rows[3];
-        /* YUV vesctor frame */
-        unsigned char *qt_frame = NULL;
-        /* quicktime decoder */
-        quicktime_t *qt;
-        /* quicktime color model */
-        int qt_cmodel;
-
-        int nN = posi;
-        int x_vwidth = 0;
-        int x_vheight = 0;
-        qt = quicktime_open(pathFitxer, 1, 0);
-
-        if (!(qt)){
-            /* post("videogrid: error opening qt file"); */
-            return -1;
-        }
-
-        if (!quicktime_has_video(qt)) {
-            /* post("videogrid: no video stream"); */
-            quicktime_close(qt);
-            return -1;
-
-        }
-        else if (!quicktime_supported_video(qt,0)) {
-            /* post("videogrid: unsupported video codec\n"); */
-            quicktime_close(qt);
-            return -1;
-        }
-        else
-        {
-            qt_cmodel = BC_YUV420P;
-            x_vwidth  = quicktime_video_width(qt,0);
-            x_vheight = quicktime_video_height(qt,0);
-
-            free(qt_frame);
-            qt_frame = (unsigned char*)malloc(x_vwidth*x_vheight*4);
-
-            int size = x_vwidth * x_vheight;
-            qt_rows[0] = &qt_frame[0];
-            qt_rows[2] = &qt_frame[size];
-            qt_rows[1] = &qt_frame[size + (size>>2)];
-
-            quicktime_set_cmodel(qt, qt_cmodel);
-        }
-
-        /* int length = quicktime_video_length(qt,0); */
-        /* int Vpos = quicktime_video_position(qt,0); */
-        lqt_decode_video(qt, qt_rows, 0);
-
-        switch(qt_cmodel){
-            case BC_YUV420P:
-                /* printf(" "); */
-                /* post("videogrid: qt colormodel : BC_YUV420P"); */
-
-            /* per a fer la miniatura
-               cada k colomnes pillem una
-               cada l files pillem una */
-                int w = x_vwidth;
-                int h = x_vheight;
-                int k = (w/W);
-                int l = (h/H);
-
-                char nNstr[BYTES_NUM_TEMP];
-                pathimage  ig_path = PATH_TEMPORAL;
-
-                sprintf(nNstr, "%d", nN);
-                strcat(ig_path,nNstr);
-                strcat(ig_path,".");
-                strcat(ig_path,FORMAT_MINIATURA);
-                /* printf("Creacio de la imatge %s ...",ig_path); */
-            /* escriu el contingut de data a un arxiu. */
-                FILE *fp = fopen(ig_path, "w");
-                fprintf (fp, "P6\n%d %d\n255\n", W, H);
-
-                int i,j,y,u,v,r,g,b;
-
-                for (i=0;i<(l*H);i=i+l) {
-                    for (j=0;j<(k*W);j=j+k) {
-                        y=qt_rows[0][(w*i+j)];
-                        u=qt_rows[1][(w/2)*(i/2)+(j/2)];
-                        v=qt_rows[2][(w/2)*(i/2)+(j/2)];
-                        r = CLAMP8(y + 1.402 *(v-128));
-                        g = CLAMP8(y - 0.34414 *(u-128) - 0.71414 *(v-128));
-                        b = CLAMP8(y + 1.772 *(u-128));
-                        fprintf (fp, "%c%c%c", r,g,b);
-                    }
-                }
-
-            /* escriu el contingut de data a un arxiu.*/
-                fclose (fp);
-        }
-        return 0;
-    }
-
-
-    /* ----------------------------------- Cue > rounded list ----------------------------------- */
-    typedef char path[BYTESNOMFITXER];
-
-    /* estructura de dades: un node de la cua */
-    struct node
-    {
-        /* nom del path de la imatge */
-        path pathFitxer;
-        /* apuntador al següent node en cua */
-        struct node *seguent;
-    };
-
-    /* definició del tipus node */
-    typedef struct node Node;
-
-    /* estructures i tipus de dades de la cua */
-    /* definició del tipus de cua */
-    typedef struct
-    {
-        Node *davanter;
-        Node *final;
-    }Cua;
-
-    /* declaracions de les funcions */
-
-    /* crea una cua */
-    void crearCua(Cua *cua);
-    /* encuara un element al final de la cua */
-    void encuar (Cua *cua, path x);
-    /* elimina un element de la cua */
-    int desencuar (Cua *cua);
-    /* retorna si la cua és buida */
-    int cuaBuida(Cua *cua);
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua);
-    /* retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua);
-    /* escriu el contingut de la cua */
-    void escriuCua(Cua *cua);
-
-
-    /* implementació de les funcions */
-    void crearCua(Cua *cua)
-    {
-        cua->davanter=cua->final=NULL;
-    }
-
-    /* funció que encua el node al final de la cua */
-    void encuar (Cua *cua, path x)
-    {
-        Node *nou;
-        nou=(Node*)malloc(sizeof(Node));
-        strcpy(nou->pathFitxer,x);
-        nou->seguent=NULL;
-        if(cuaBuida(cua))
-        {
-            cua->davanter=nou;
-        }
-        else
-            cua->final->seguent=nou;
-        cua->final=nou;
-    }
-
-    /* elimina l'element del principi de la cua */
-    int desencuar (Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *nou;
-            nou=cua->davanter;
-            cua->davanter=cua->davanter->seguent;
-            free(nou);
-            return 1;
-        }
-        else
-        {
-            /* printf("Cua buida\a\n"); */
-            return 0;
-        }
-
-    }
-
-    /* funció que retorna si la cua és buida */
-    int cuaBuida(Cua *cua)
-    {
-        return (cua->davanter==NULL);
-    }
-
-    /* elimina el contingut de la cua */
-    void eliminarCua(Cua *cua)
-    {
-        while (!cuaBuida(cua)) desencuar(cua);
-        /* printf("Cua eliminada\n"); */
-    }
-
-    /* funció que retorna el nombre de nodes de la cua */
-    int numNodes(Cua *cua)
-    {
-        int contador=0;
-        Node *actual;
-        actual=cua->davanter;
-        if(actual) contador=1;
-        while((actual)&&(actual != cua->final)){
-             contador ++;
-             actual = actual->seguent;
-        }
-        return (contador);
-    }
-
-    /* funció que escriu la cua de nodes */
-    void escriuCua(Cua *cua)
-    {
-        if(!cuaBuida(cua))
-        {
-            Node *actual;
-            actual=cua->davanter;
-            post("THUMBS INSIDE\n[");
-            do{
-                post("#%s#",actual->pathFitxer);
-                actual = actual->seguent;
-            }while(actual);
-            post("]\n");
-        }
-        else
-            post("EMPTY: NO THUMBS INSIDE\n");
-    }
-
-    /* ----------------------------------- videogrid gui-videogrid ----------------------------------- */
-
-    t_widgetbehavior   videogrid_widgetbehavior;
-    /* crear un apuntador al nou objecte */
-    static t_class *videogrid_class;
-    /* indica el nombre de videogrid creats - utilitzat per diferenciar el nom d'instàncies d'objectes del mateix tipus */
-    static int videogridcount = 0;
-
-    /* definició de la classe i la seva estructura de dades */
-
-    typedef struct _videogrid {
-        t_object  x_obj;
-        /* declaració de la sortida de l'objecte */
-        t_outlet *x_sortida;
-        /* llista d'objectes gràfics */
-        t_glist *x_glist;
-        /* nombre de files */
-        int x_num_fil;
-        /* nombre de columnes */
-        int x_num_col;
-        /* width del thumbnail  */
-        int x_w_cell;
-        /* height del thumbnail */
-        int x_h_cell;
-        /* posició de la última imatge en el tauler */
-        int x_ultima_img;
-        /* path del directori actual */
-        path x_dir_actual;
-        /* path del directori a canviar */
-        path x_dir_canvi;
-        /* posicio ultim al directori actual */
-        int x_dir_pos;
-        /* apuntador al primer element posicionat al tauler */
-        Node *x_tauler_primer;
-        /* cua d'imatges */
-        Cua x_cua;
-        /* nom de l'objecte */
-        t_symbol *x_name;
-        /* color de fons */
-        t_symbol *x_color_fons;
-        /* color del marge */
-        t_symbol *x_color_marc;
-        /* mutex per evitar concurrencia sobre la cua al accedir diferents threads*/
-        pthread_mutex_t x_lock;
-        /* v 0.2 -- posicó de la cel·la seleccionada */
-        int x_pos_selected;
-        /* v 0.2 -- color de seleccio */
-        t_symbol *x_color_grasp;
-        /* v 0.2.1 -- llista de formats */
-        t_symbol *x_format_list;
-
-    } t_videogrid;
-
-    /* ---------------- control functions ------------ */
-
-    /* v 0.2 -- mètode de la classe que desmarca la cel·la seleccionada */
-    /* calcula la posició x del tauler a partir de la posició de l'element de la cua (d'esquerra a dreta) */
-    int getX(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int xpos = (posCua % c) * x->x_w_cell + ((posCua % c) + 1) * GRUIX;
-        return(xpos + 1);
-    }
-
-    /* calcula la posició y del tauler a partir de la posició de l'element de la cua (de dalt a baix) */
-    int getY(t_videogrid* x, int posCua){
-        int c = x->x_num_col;
-        int ypos = (posCua / c) * x->x_h_cell + ((posCua / c) + 1) * GRUIX;
-        return(ypos + 1);
-    }
-
-    static void videogrid_ungrasp_selected(t_videogrid *x)
-    {
-        /* post("Ungrasp selected thumb %d", x->x_pos_selected); */
-        if(x->x_pos_selected > -1) {
-            sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(x->x_glist), x);
-            x->x_pos_selected = -1;
-        }
-    }
-
-    /* elimina les imatges temporals */
-    void eliminar_imatges_temporals(int maxim){
-        FILE *fitxer;
-        path path_total;
-        int contador = 0;
-        char contador_str[BYTES_NUM_TEMP];
-        while(contador < maxim){
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            /* elimina el fitxer si no hi ha cap problema */
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-        /* post("Videogrid: Imatges temporals eliminades\n",path_total); */
-    }
-
-    int format_adequat_v(path nomF, t_symbol *format_list){
-        int retorn = 0;
-        path  ig_path = "";
-        strcat(ig_path,nomF);
-        path fl;
-        strcpy(fl,format_list->s_name);
-        char *t1;
-        char *ext;
-        path extensio = "";
-        for ( t1 = strtok(ig_path,".");
-              t1 != NULL;
-              t1 = strtok(NULL,".") )
-            strcpy(extensio,t1);
-
-        for ( ext = strtok(fl,":");
-          ext != NULL;
-              ext = strtok(NULL,":") ) {
-            if(strcmp(extensio,ext)==0) {
-                retorn = 1;
-                ext = NULL;
-            }
-        }
-        return (retorn);
-    }
-
-    /* afegir una imatge al grid */
-    void videogrid_afegir_imatge(t_videogrid *x, path entrada)
-    {
-        int maxim;
-        char nNstr[BYTES_NUM_TEMP];
-        int pos = 0;
-        maxim = x->x_num_fil * x->x_num_col;
-        path  ig_path = PATH_TEMPORAL;
-        /* si hi ha tants nodes a la cua com el maxim */
-        if((numNodes(&x->x_cua)) >=  maxim){
-            /* desencua */
-            int extret;
-            extret = desencuar(&x->x_cua);
-            /* obtenir la posició en la cua del nou node */
-            if(x->x_ultima_img == maxim - 1) {
-                pos = 0;
-            }else{
-                pos = x->x_ultima_img + 1;
-            }
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, x->x_ultima_img);
-        }
-
-        /* FFMPEG o Quicktime per les conversions */
-        int fferror=0;
-        int nN = x->x_ultima_img;
-        if (format_adequat_v(entrada, x->x_format_list) == 0) {
-            /* ara no entra: format_adequat_v = 0 sempre */
-            /* convertir_img(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN); */
-            fferror = 0;
-
-        } else {
-            fferror=convertir_img_ff(entrada,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-        }
-        /* post ("%d",fferror); */
-        if (fferror>=0) {
-            /* encua el nou node */
-            encuar(&x->x_cua, entrada);
-            /* si no és el primer element a encuar incrementem la posicio de la última imatge insertada */
-            if(numNodes(&x->x_cua) != 0) x->x_ultima_img ++;
-            /*
-                 * si assoleix el maxim torna a començar,
-                 * inicialitzant la posició en el tauler de la última imatge insertada
-                */
-            if(x->x_ultima_img == maxim) x->x_ultima_img = 0;
-
-            sprintf(nNstr, "%d", nN);
-            strcat(ig_path,nNstr);
-            strcat(ig_path,".");
-            strcat(ig_path,FORMAT_MINIATURA);
-
-            sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-            sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                glist_getcanvas(x->x_glist),
-                text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2),
-                text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),
-                x,nN,x,nN);
-            if(nN == 0){
-                x->x_tauler_primer = x->x_cua.final;
-            }
-        }
-    }
-
-    /* v 0.2 -- mètode de la classe que marca la cel·la seleccionada */
-    static void videogrid_grasp_selected(t_videogrid *x, int pos)
-    {
-        /*printf("Grasp selected thumb %d", pos);*/
-        if(pos != x->x_pos_selected) {
-            videogrid_ungrasp_selected(x);
-            /* post("Grasp selected thumb %d", pos); */
-            x->x_pos_selected = pos;
-            /* nem per aqui ---- */
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill {} -tags %xGRASP -outline %s -width %d\n",
-                    glist_getcanvas(x->x_glist),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell,
-                    x,x->x_color_grasp->s_name, GRUIX + 1);
-            canvas_fixlinesfor(glist_getcanvas(x->x_glist), (t_text*)x);
-        }
-    }
-
-    /*  widget helper functions  */
-
-    /* dibuixa videogrid */
-    void videogrid_drawme(t_videogrid *x, t_glist *glist, int firsttime)
-    {
-        /* post("Entra a drawme amb firsttime: %d", firsttime); */
-        if (firsttime) {
-            char name[MAXPDSTRING];
-            canvas_makefilename(glist_getcanvas(x->x_glist), x->x_name->s_name, name, MAXPDSTRING);
-            sys_vgui(".x%x.c create rectangle %d %d %d %d -fill %s -tags %xGRID -outline %s\n",
-                glist_getcanvas(glist),
-                text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                text_xpix(&x->x_obj, glist) + (x->x_num_col * x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil * x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX,
-                x->x_color_fons->s_name, x,x->x_color_marc->s_name);
-
-            canvas_fixlinesfor(glist_getcanvas(glist), (t_text*)x);
-            /* si hi elements a la cua els afegeix (redimensió) */
-            if(!cuaBuida(&x->x_cua))
-            {
-                path  ig_path;
-                int nN = 0;
-                char nNstr[BYTES_NUM_TEMP];
-                Node *actual;
-                actual=x->x_cua.davanter;
-                do{
-                    strcpy(ig_path,PATH_TEMPORAL);
-                    sprintf(nNstr, "%d", nN);
-                    strcat(ig_path,nNstr);
-                    strcat(ig_path,".");
-                    strcat(ig_path,FORMAT_MINIATURA);
-                    /* post("reestablint la imatge %s", actual->pathFitxer); */
-                    // videogrid_afegir_imatge(x,actual->pathFitxer);
-                    convertir_img_ff(actual->pathFitxer,FORMAT_MINIATURA, x->x_w_cell, x->x_h_cell, nN);
-                    sys_vgui("image create photo img%x%d -file %s\n",x,nN,ig_path);
-                    sys_vgui(".x%x.c create image %d %d -image img%x%d -tags %xS%d\n",
-                             glist_getcanvas(x->x_glist),text_xpix(&x->x_obj, x->x_glist) + getX(x,nN) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,nN) + (x->x_h_cell/2),x,nN,x,nN);
-                    actual = actual->seguent;
-                    nN++;
-                }while(actual);
-            }
-        }
-        else {
-            sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-            if(!cuaBuida(&x->x_cua))
-            {
-                int contador = 0;
-                while(contador < numNodes(&x->x_cua)){
-                    sys_vgui(".x%x.c coords %xS%d \
-                            %d %d\n",
-                    glist_getcanvas(glist), x, contador,
-                    text_xpix(&x->x_obj, x->x_glist) + getX(x,contador) + (x->x_w_cell/2), text_ypix(&x->x_obj, x->x_glist) + getY(x,contador) + (x->x_h_cell/2));
-                    contador++;
-                }
-
-               /* char buf[800];
-                sprintf(buf, "pdtk_videogrid_table %%s %s %d %d\n", x->x_name->s_name, x->x_num_fil, x->x_num_col);
-                gfxstub_new(&x->x_obj.ob_pd, x, buf); */
-            }
-        if (x->x_pos_selected > -1){
-            sys_vgui(".x%x.c coords %xGRASP %d %d %d %d\n", glist_getcanvas(glist), x,
-            text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected), text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected),
-            text_xpix(&x->x_obj, x->x_glist) + getX(x,x->x_pos_selected) + x->x_w_cell, text_ypix(&x->x_obj, x->x_glist) + getY(x,x->x_pos_selected) + x->x_h_cell);
-        }
-        sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        int xI = text_xpix(&x->x_obj, glist);
-        int yI = text_ypix(&x->x_obj, glist);
-        int xF = xI + (x->x_num_col * x->x_w_cell) + ((x->x_num_col + 1) * GRUIX);
-        int yF = yI + (x->x_num_fil * x->x_h_cell) + ((x->x_num_fil + 1) * GRUIX);
-        int vlines = 0;
-        int xi = 0;
-        while(vlines < x->x_num_col){
-        xi = xI + getX(x,vlines) - GRUIX + 1;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-        vlines++;
-        }
-        xi = xi + x->x_w_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xi, yI, xi, yF, x->x_color_marc->s_name,GRUIX,x);
-        int hlines = 0;
-        int yi = 0;
-        while(hlines < x->x_num_fil){
-        yi = yI + ((x->x_h_cell + GRUIX) * hlines) + 2;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-        hlines++;
-        }
-        yi = yi + x->x_h_cell + GRUIX;
-        sys_vgui(".x%x.c create line %d %d %d %d -fill %s -width %d -tag %xLINIA\n", glist_getcanvas(x->x_glist), xI, yi, xF, yi, x->x_color_marc->s_name,GRUIX,x);
-    }
-
-    static void videogrid_delete(t_gobj *z, t_glist *glist)
-    {
-        /* post("Entra a delete"); */
-        t_text *x = (t_text *)z;
-        canvas_deletelinesfor(glist_getcanvas(glist), x);
-    }
-
-    static void videogrid_displace(t_gobj *z, t_glist *glist,int dx, int dy)
-    {
-        /* post("Entra a displace amb dx %d i dy %d", dx, dy); */
-        t_videogrid *x = (t_videogrid *)z;
-        x->x_obj.te_xpix += dx;
-        x->x_obj.te_ypix += dy;
-        sys_vgui(".x%x.c coords %xGRID %d %d %d %d\n",
-                 glist_getcanvas(glist), x,
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                 text_xpix(&x->x_obj, glist) + (x->x_num_col*x->x_w_cell) + 1 + (x->x_num_col * GRUIX) + GRUIX, text_ypix(&x->x_obj, glist) + (x->x_num_fil*x->x_h_cell) + 1 + (x->x_num_fil * GRUIX) + GRUIX);
-        videogrid_drawme(x, glist, 0);
-        canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-    }
-
-    /* borra videogrid v 0.2 -- int toclear */
-    void videogrid_erase(t_videogrid* x,t_glist* glist, int toclear)
-    {
-        int maxim = x->x_num_fil * x->x_num_col;
-        path path_total;
-        char contador_str[BYTES_NUM_TEMP];
-        /* post("Entra a erase"); */
-        /* elimina les imatges */
-        int contador = 0;
-        while(contador < numNodes(&x->x_cua)){
-
-            sys_vgui(".x%x.c delete %xS%d\n", glist_getcanvas(x->x_glist), x, contador);
-            strcpy(path_total,PATH_TEMPORAL);
-            sprintf(contador_str,"%d", contador);
-            strcat(path_total,contador_str);
-            strcat(path_total,".");
-            strcat(path_total,FORMAT_MINIATURA);
-            if(unlink(path_total)){
-                /* post("Imatge temporal %s eliminada\n",path_total); */
-            }
-            contador++;
-        }
-
-        /* elimina el grid v 0.2 -- excepte quan es fa un clear */
-        if(toclear == 0){
-            sys_vgui(".x%x.c delete %xGRID\n", glist_getcanvas(glist), x);
-        sys_vgui(".x%x.c delete %xLINIA\n", glist_getcanvas(x->x_glist), x);
-        }
-        /* v 0.2 -- elimina el marc de la casella seleccionada */
-        if(x->x_pos_selected > -1){
-        sys_vgui(".x%x.c delete %xGRASP\n", glist_getcanvas(glist), x);
-            x->x_pos_selected = -1;
-        }
-        eliminar_imatges_temporals(maxim);
-    }
-
-    static void videogrid_vis(t_gobj *z, t_glist *glist, int vis)
-    {
-        /* post("Entra a vist amb vis %d", vis); */
-        t_videogrid* s = (t_videogrid*)z;
-        if (vis)
-            videogrid_drawme(s, glist, 1);
-        else
-           videogrid_erase(s,glist,0);
-    }
-
-    static void videogrid_select(t_gobj *z, t_glist *glist, int state)
-    {
-        /* post("Entra select amb state %d", state); */
-        t_videogrid *x = (t_videogrid *)z;
-        if (state) {
-            /* post("Videogrid seleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline #0000FF\n", glist_getcanvas(glist), x);
-        }
-        else {
-            /* post("Videogrid deseleccionat"); */
-            sys_vgui(".x%x.c itemconfigure %xGRID -outline %s\n", glist_getcanvas(glist), x, x->x_color_marc->s_name);
-        }
-    }
-
-    static void videogrid_getrect(t_gobj *z, t_glist *glist,int *xp1, int *yp1, int *xp2, int *yp2)
-    {
-        int cols, fils;
-        t_videogrid* x = (t_videogrid*)z;
-        cols = x->x_num_col;
-        fils = x->x_num_fil;
-        *xp1 = text_xpix(&x->x_obj, glist);
-        *yp1 = text_ypix(&x->x_obj, glist);
-        *xp2 = text_xpix(&x->x_obj, glist) + (cols*x->x_w_cell) + ((cols + 1) * GRUIX);
-        *yp2 = text_ypix(&x->x_obj, glist) + (fils*x->x_h_cell) + ((fils + 1) * GRUIX);
-        /* post("Esta amb el ratoli en el punt %d %d %d %d o son els vetexs de la caixa... es/bd", xp1, yp1, xp2, yp2); */
-    }
-
-
-    static void videogrid_save(t_gobj *z, t_binbuf *b)
-    {
-        /* post("Entra a save"); */
-        t_videogrid *x = (t_videogrid *)z;
-        /* crea la cadena de paths per desar */
-        /* 100 possibles paths com a màxim a 512 cada path*/
-        /* char cadenaPaths[51200];*/
-        char *cadenaPaths, *cadenaPathsInicials;
-        path ultimPath = "";
-        cadenaPaths = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPaths,"");
-        cadenaPathsInicials = (char *)malloc(51200*sizeof(char));
-        strcpy(cadenaPathsInicials,"");
-        /*strcpy(cadenaPaths,(char *)argv[5].a_w.w_symbol->s_name);*/
-        if(!cuaBuida(&x->x_cua))
-        {
-            Node *actual;
-            int maxim = x->x_num_fil * x->x_num_col;
-            int contador = x->x_ultima_img + 1;
-
-            if (contador > maxim) {
-                   contador = 0;
-            }
-            /* printf("\n contador %d i maxim %d i laultimaPOS %d \n", contador, maxim, x->x_ultima_img); */
-            /*
-            strcat(cadenaPaths, actual->pathFitxer);
-            strcat(cadenaPaths, "1|\n");
-            contador ++;
-            */
-            /* prenem el davanter de la cua */
-            actual=x->x_cua.davanter;
-
-            while(contador < numNodes(&x->x_cua)){
-                /* afegim els paths del davanter fins a l'ultim node al tauler */
-                strcat(cadenaPaths, actual->pathFitxer);
-                strcat(cadenaPaths, "|");
-                actual = actual->seguent;
-                contador ++;
-            }
-            if(actual != x->x_cua.final){
-                    /* ara resten els de de l'inici del tauler fins al final de la cua */
-                    while(actual != x->x_cua.final){
-                        strcat(cadenaPathsInicials, actual->pathFitxer);
-                        strcat(cadenaPathsInicials, "|");
-                        actual = actual->seguent;
-                    }
-                    /* afegeix l'últim */
-                    strcat(ultimPath, actual->pathFitxer);
-                    strcat(ultimPath, "|");
-                    /* afegeix l'ultim de la cua */
-                    strcat(cadenaPathsInicials, ultimPath);
-            }else{
-                if(x->x_ultima_img == 0){
-                    strcat(ultimPath, actual->pathFitxer);
-                    strcat(ultimPath, "|");
-                    strcat(cadenaPathsInicials, ultimPath);
-                }
-            }
-            /* ordena el paths segons aparicio en el tauler */
-            strcat(cadenaPathsInicials, cadenaPaths);
-            /* DE MOMENT NO DESA ELS PATHS */
-            strcat(cadenaPathsInicials, "");
-            /* printf("%s",cadenaPathsInicials); */
-        }
-
-        binbuf_addv(b, "ssiissiissssiis", gensym("#X"),gensym("obj"),
-        x->x_obj.te_xpix, x->x_obj.te_ypix,
-        atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-        x->x_name,x->x_num_fil,x->x_num_col,x->x_color_fons,x->x_color_marc,x->x_color_grasp,x->x_format_list,x->x_w_cell,x->x_h_cell,gensym(cadenaPathsInicials));
-        binbuf_addv(b, ";");
-    }
-
-    static void videogrid_properties(t_gobj *z, t_glist *owner)
-    {
-        char buf[900];
-        t_videogrid *x=(t_videogrid *)z;
-
-        /* post("Es crida a pdtk_videogrid dialog passant nom = %s\n fils = %d \t cols = %d \t color fons = %s \t color marc = %s\n", x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name); */
-        sprintf(buf, "pdtk_videogrid_dialog %%s %s %d %d %s %s %s %s %i %i\n",
-                x->x_name->s_name, x->x_num_fil, x->x_num_col, x->x_color_fons->s_name, x->x_color_marc->s_name, x->x_color_grasp->s_name, x->x_format_list->s_name, x->x_w_cell,x->x_h_cell);
-        /* post("videogrid_properties : %s", buf ); */
-        gfxstub_new(&x->x_obj.ob_pd, x, buf);
-    }
-
-    static void videogrid_dialog(t_videogrid *x, t_symbol *s, int argc, t_atom *argv)
-    {
-        int maxim, maxdigit;
-        int nfil = 0;
-        int ncol = 0;
-        if ( !x ) {
-            post("Videogrid: error_ Attempt to alter the properties of an object that does not exist.\n");
-        }
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-        break;
-        case 5:
-            /* versio 0.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 6:
-            /* versio 0.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL)
-            {
-                post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            if (argv[0].a_type != A_SYMBOL || argv[1].a_type != A_FLOAT || argv[2].a_type != A_FLOAT || argv[3].a_type != A_SYMBOL || argv[4].a_type != A_SYMBOL || argv[5].a_type != A_SYMBOL || argv[6].a_type != A_SYMBOL || argv[7].a_type != A_FLOAT || argv[8].a_type != A_FLOAT)
-            {
-                    post("Videogrid: error_ Some of the values are inconsistent in its data type.\n");
-                    return;
-            }
-            x->x_name = argv[0].a_w.w_symbol;
-            nfil = (int)argv[1].a_w.w_float;
-            ncol = (int)argv[2].a_w.w_float;
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)argv[7].a_w.w_float;
-            x->x_h_cell = (int)argv[8].a_w.w_float;
-        break;
-
-        default:
-            /* no fa res */
-        break;
-        }
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-
-    /* v 0.2 -- mètode de la classe que dispara l'element del taules en la posicio N [seek N( */
-    void videogrid_seek(t_videogrid *x, t_floatarg postauler)
-    {
-        /* post("seek a %d\n",postauler); */
-        path pathSortida;
-        Node *actual;
-        int contador = 0;
-        int maxim = x->x_num_fil * x->x_num_col;
-        /* obtenir el path per enviar a la sortida */
-        if((!cuaBuida(&x->x_cua))&&(postauler < numNodes(&x->x_cua))&&(postauler >= 0 )){
-            if(x->x_tauler_primer){
-                actual = x->x_tauler_primer;
-                while(contador <= postauler){
-                    if(contador == postauler){
-                        strcpy(pathSortida,actual->pathFitxer);
-                    }
-                    if(actual->seguent == NULL){
-                        actual = x->x_cua.davanter;
-                    }else{
-                        actual = actual->seguent;
-                    }
-                    contador++;
-                }
-                outlet_symbol(x->x_sortida, gensym(pathSortida));
-                /* post("Esta a videogrid_click amb %d %d a la posicio %d\n", x_pos, y_pos, postauler);*/
-                /* v 0.2 -- marcar casella */
-                videogrid_grasp_selected(x, postauler);
-            }
-        }
-    }
-
-    static int videogrid_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit)
-    {
-        t_videogrid* x = (t_videogrid *)z;
-        int x_pos = xpix - text_xpix(&x->x_obj, x->x_glist);
-        int y_pos = ypix - text_ypix(&x->x_obj, x->x_glist);
-        int xa, ya, postauler;
-        if (doit)
-        {
-            /* obtenir la posicio en el tauler */
-        // -- v 0.2 -- midoficacio pel gruix del marc //
-        xa = ((x_pos) / (x->x_w_cell + GRUIX + 1));
-            ya = ((y_pos) / (x->x_h_cell + GRUIX + 1)) * x->x_num_col;
-            postauler = ya + xa;
-        // -- v 0.2 -- seleciona la casella disparant el path //
-            videogrid_seek(x, postauler);
-        }
-        return (1);
-    }
-
-
-
-    /* --------- videogrid functions ---------- */
-
-    /* v 0.2 -- mètode de la classe que buida el tauler amb el missatge [clear ( */
-    void videogrid_clear(t_videogrid *x)
-    {
-        videogrid_erase(x, x->x_glist,1);
-        eliminarCua(&x->x_cua);
-        x->x_ultima_img = 0;
-        x->x_dir_pos = 0;
-        x->x_tauler_primer = NULL;
-        videogrid_drawme(x, x->x_glist, 0);
-    }
-
-    /* mètode de la clase que escriu un missatge al rebre un bang */
-    void videogrid_bang(t_videogrid *x)
-    {
-        /* post("Hello videogrid !!"); */
-        escriuCua(&x->x_cua);
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideo +string( com a paràmetre */
-    void videogrid_putvideo(t_videogrid *x, t_symbol *entrada)
-    {
-        /* comprova que existeixi el fitxer */
-        FILE *fitxer;
-        path e;
-        strcpy(e,entrada->s_name);
-        fitxer = fopen(e,"r");
-        if (!fitxer) {
-            post("Videogrid: Problem opening file %s.\n",e);
-        }
-        else {
-            videogrid_afegir_imatge(x,e);
-        }
-    }
-
-    /* mètode de la classe que es dispara al rebre una entrada de missatge amb [putvideodir +string( com a paràmetre */
-    void *videogrid_putvideodir_thread(void *z)
-    {
-        t_videogrid *x = (t_videogrid *)z;
-        DIR *dirp;
-        struct dirent * direntp;
-        path nomImatge, directoriAnterior, pathActual;
-        int numEncuats = 0, numPosDir = 0;
-        int maxim;
-        if ((dirp = opendir(x->x_dir_canvi)) == NULL)
-        {
-            post("Videogrid: Can not open folder %s.\n", x->x_dir_canvi);
-        }else{
-            maxim = x->x_num_fil * x->x_num_col;
-            strcpy(directoriAnterior, x->x_dir_actual);
-            strcpy(x->x_dir_actual, x->x_dir_canvi);
-         /*
-          * si es el mateix directori entrat l'ultim busca la ultima imatge afegida
-          * per a seguir a encuant a partir d'ella en endavant
-         */
-            if(strcmp(directoriAnterior, x->x_dir_actual) == 0){
-                /* post("Videogrid: Repeteix directori %s\n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* assolir la posició anterior en el directori */
-                        if(numPosDir > x->x_dir_pos){
-                            /* si el nombre de nodes encuats per aquest directori no supera el màxim encua el nou node */
-                            if(numEncuats < maxim){
-                                /* post("s'encua la imatge %s\n", direntp->d_name); */
-                                /* concatena el path i el nom de la imatge */
-                                strcpy(nomImatge,direntp->d_name);
-                                strcpy(pathActual,x->x_dir_actual);
-                                strcat(pathActual,"/");
-                                strcat(pathActual,nomImatge);
-                    pthread_mutex_lock(&x->x_lock);
-                                videogrid_afegir_imatge(x, pathActual);
-                    pthread_mutex_unlock(&x->x_lock);
-                                /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                                numEncuats++;
-                                /* es desa la posició en el directori de l'últim node encuat */
-                                x->x_dir_pos = numPosDir;
-                            }
-                        }
-                    }
-                }
-            }else{
-                /* directori diferent omple la cua començant pel primer fitxer */
-                /* post("Videogrid: Nou directori %s \n", x->x_dir_actual); */
-                while ( (direntp = readdir( dirp )) != NULL ){
-                    /* es descarta el mateix directori, el directori anterior i tot el que no sigui un fitxer regular */
-                    if((strcmp(direntp->d_name,"..") != 0)&&(strcmp(direntp->d_name,".") != 0)&&(direntp->d_type == DT_REG)){
-                        /* incrementa la posició en el directori */
-                        numPosDir++;
-                        /* si el nombre de nodes encuats per aquest directori no supera el màxim enca el nou node */
-                        if(numEncuats < maxim){
-                            /* post("s'encua la imatge %s\n", direntp->d_name); */
-                            /* concatena el path i el nom de la imatge */
-                            strcpy(nomImatge,direntp->d_name);
-                            strcpy(pathActual,x->x_dir_actual);
-                            strcat(pathActual,"/");
-                            strcat(pathActual,nomImatge);
-                pthread_mutex_lock(&x->x_lock);
-                            videogrid_afegir_imatge(x, pathActual);
-                pthread_mutex_unlock(&x->x_lock);
-                            /* incrementa en 1 per indicar el nombre de nodes encuats per aquest directori */
-                            numEncuats++;
-                            /* es desa la posició en el directori de l'últim node encuat */
-                            x->x_dir_pos = numPosDir;
-                        }
-                    }
-                }
-            }
-            /* si la posicio de l'actual es la de l'utim fitxer del directori, inicialitza la posició */
-            if(x->x_dir_pos >= numPosDir) x->x_dir_pos = 0;
-            closedir(dirp);
-        }
-        /* escriu l'argument entrat */
-        /* post("Obtenint imatges del directori: %s ...",x->x_dir_canvi); */
-        /* envia a la sorida l'argument entrat */
-        /* outlet_symbol(x->x_sortida, entrada); */
-        pthread_exit(NULL);
-    }
-
-    void videogrid_putvideodir(t_videogrid *x, t_symbol *entrada)
-    {
-
-        pthread_t unthread;
-        pthread_attr_t unatribut;
-        pthread_attr_init( &unatribut );
-
-        strcpy(x->x_dir_canvi,entrada->s_name);
-
-        // ----------------      THREAD CREAT -------------------------
-        pthread_mutex_init(&x->x_lock, NULL);
-        // int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
-        pthread_create(&unthread,                     &unatribut,              videogrid_putvideodir_thread, (void *)x);
-        pthread_mutex_destroy(&x->x_lock);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de files del tauler [rows N( */
-    void videogrid_rows(t_videogrid *x, t_floatarg nfil)
-    {
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, ncol;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        ncol = x->x_num_col;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                x->x_num_fil = nfil;
-                /* x->x_num_col = ncol; */
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* v 0.2.3 -- mètode de la classe que modifica el nombre de columnes del tauler [cols N( */
-    void videogrid_cols(t_videogrid *x, t_floatarg ncol)
-    {
-        /* post("rows a %d\n",postauler); */
-        /* post("rows a %d\n",postauler); */
-        int maxim, maxdigit, nfil;
-        /* el màxim es fixa pel nombre de digits utilitzats pel nom de la imatge temporal */
-        maxdigit = pow(10,BYTES_NUM_TEMP);
-        nfil = x->x_num_fil;
-        if((nfil*ncol) <= maxdigit){
-            if((nfil*ncol) > 0){
-                /* x->x_num_fil = nfil; */
-                x->x_num_col = ncol;
-            }else{
-                post("Videogrid: The number of rows and columns is less than the minimum allowed: 1 cell.\n");
-            }
-        }else{
-            post("Videogrid: The number of rows and columns exceeds the maximum allowed: a total of %d cells.\n",maxdigit);
-        }
-        /* post("Videogrid: Modified values\n name = %s\n rows = %d \t cols = %d.\n", x->x_name->s_name, x->x_num_fil, x->x_num_col); */
-        /* elimina els nodes no representables amb la nova configuració */
-        maxim = x->x_num_fil * x->x_num_col;
-        int extret;
-        videogrid_erase(x, x->x_glist,0);
-        /* si hi ha més nodes a la cua que el maxim */
-        while((numNodes(&x->x_cua)) >  maxim){
-            /* desencuem */
-            extret = desencuar(&x->x_cua);
-        }
-        /* al reestablir el tamany del tauler cal saber la posició de l'últim element */
-        x->x_ultima_img = numNodes(&x->x_cua) - 1;
-        if (x->x_ultima_img <  0) x->x_ultima_img = 0;
-        x->x_tauler_primer = x->x_cua.davanter;
-        videogrid_drawme(x, x->x_glist, 1);
-    }
-
-    /* tk help windows */
-
-
-    void load_tk_procs_videogrid () {
-        // ########### procediments per videogrid -- slario(at)gmail.com [a partir del codi del grid de l'Ives: ydegoyon(at)free.fr] #########
-        sys_gui("proc videogrid_apply {id} {\n");
-        // strip "." from the TK id to make a variable name suffix
-        sys_gui("set vid [string trimleft $id .]\n");
-        // for each variable, make a local variable to hold its name...
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set cmd [concat $id dialog [eval concat $$var_graph_name] [eval concat $$var_graph_num_fil] [eval concat $$var_graph_num_col] [eval concat $$var_graph_color_fons] [eval concat $$var_graph_color_marc] [eval concat $$var_graph_color_grasp] [eval concat $$var_graph_format_list] [eval concat $$var_graph_w_cell] [eval concat $$var_graph_h_cell]\\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_cancel {id} {\n");
-        sys_gui("set cmd [concat $id cancel \\;]\n");
-        // puts stderr $cmd
-        sys_gui("pd $cmd\n");
-        sys_gui("}\n");
-        sys_gui("proc videogrid_ok {id} {\n");
-        sys_gui("videogrid_apply $id\n");
-        sys_gui("videogrid_cancel $id\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_dialog {id name num_fil num_col color_fons color_marc color_grasp format_list w_cell h_cell } {\n");
-        sys_gui("set vid [string trimleft $id .]\n");
-        sys_gui("set var_graph_name [concat graph_name_$vid]\n");
-        sys_gui("global $var_graph_name\n");
-        sys_gui("set var_graph_num_fil [concat graph_num_fil_$vid]\n");
-        sys_gui("global $var_graph_num_fil\n");
-        sys_gui("set var_graph_num_col [concat graph_num_col_$vid]\n");
-        sys_gui("global $var_graph_num_col\n");
-        sys_gui("set var_graph_color_fons [concat graph_color_fons_$vid]\n");
-        sys_gui("global $var_graph_color_fons\n");
-        sys_gui("set var_graph_color_marc [concat graph_color_marc_$vid]\n");
-        sys_gui("global $var_graph_color_marc\n");
-        sys_gui("set var_graph_color_grasp [concat graph_color_grasp_$vid]\n");
-        sys_gui("global $var_graph_color_grasp\n");
-        sys_gui("set var_graph_format_list [concat graph_format_list_$vid]\n");
-        sys_gui("global $var_graph_format_list\n");
-        sys_gui("set var_graph_w_cell [concat graph_w_cell_$vid]\n");
-        sys_gui("global $var_graph_w_cell\n");
-        sys_gui("set var_graph_h_cell [concat graph_h_cell_$vid]\n");
-        sys_gui("global $var_graph_h_cell\n");
-        sys_gui("set $var_graph_name $name\n");
-        sys_gui("set $var_graph_num_fil $num_fil\n");
-        sys_gui("set $var_graph_num_col $num_col\n");
-        sys_gui("set $var_graph_color_fons $color_fons\n");
-        sys_gui("set $var_graph_color_marc $color_marc\n");
-        sys_gui("set $var_graph_color_grasp $color_grasp\n");
-        sys_gui("set $var_graph_format_list $format_list\n");
-        sys_gui("set $var_graph_w_cell $w_cell\n");
-        sys_gui("set $var_graph_h_cell $h_cell\n");
-        sys_gui("toplevel $id -class [winfo class .]\n");
-        sys_gui("wm title $id {** videogrid **}\n");
-        sys_gui("wm resizable $id 0 0\n");
-        sys_gui("wm protocol $id WM_DELETE_WINDOW [concat videogrid_cancel $id]\n");
-
-        /* sys_gui("label $id.label -text {VIDEOGRID PROPERTIES}\n"); */
-        /* sys_gui("pack $id.label -side top\n"); */
-
-        sys_gui("label $id.label -text { properties }\n");
-        sys_gui("pack $id.label -side top\n");
-
-        sys_gui("frame $id.buttonframe\n");
-        sys_gui("pack $id.buttonframe -side bottom -fill x -pady 2m\n");
-        sys_gui("button $id.buttonframe.cancel -text {Cancel} -command \"videogrid_cancel $id\"\n");
-        sys_gui("button $id.buttonframe.apply -text {Apply} -command \"videogrid_apply $id\"\n");
-        sys_gui("button $id.buttonframe.ok -text {OK} -command \"videogrid_ok $id\"\n");
-        sys_gui("pack $id.buttonframe.cancel -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.apply -side left -expand 1\n");
-        sys_gui("pack $id.buttonframe.ok -side left -expand 1\n");
-
-        sys_gui("frame $id.1rangef\n");
-        sys_gui("pack $id.1rangef -side top\n");
-        sys_gui("label $id.1rangef.lname -text \"Name :\" -anchor nw\n");
-        sys_gui("entry $id.1rangef.name -textvariable $var_graph_name -width 20\n");
-        sys_gui("pack $id.1rangef.lname $id.1rangef.name -side left\n");
-
-        sys_gui("frame $id.2rangef\n");
-        sys_gui("pack $id.2rangef -side top\n");
-        sys_gui("label $id.2rangef.lnum_fil -text \"Rows :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.2rangef.num_fil -textvariable $var_graph_num_fil -width 10\n");
-        sys_gui("pack $id.2rangef.lnum_fil $id.2rangef.num_fil -side left\n");
-
-        sys_gui("frame $id.3rangef\n");
-        sys_gui("pack $id.3rangef -side top\n");
-        sys_gui("label $id.3rangef.lnum_col -text \"Cols :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.3rangef.num_col -textvariable $var_graph_num_col -width 10\n");
-        sys_gui("pack $id.3rangef.lnum_col $id.3rangef.num_col -side left\n");
-
-        sys_gui("frame $id.4rangef\n");
-        sys_gui("pack $id.4rangef -side top\n");
-        sys_gui("label $id.4rangef.lcolor_fons -text \"Bg Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.4rangef.color_fons -textvariable $var_graph_color_fons -width 10\n");
-        sys_gui("pack $id.4rangef.lcolor_fons $id.4rangef.color_fons -side left\n");
-
-        sys_gui("frame $id.5rangef\n");
-        sys_gui("pack $id.5rangef -side top\n");
-        sys_gui("label $id.5rangef.lcolor_marc -text \"Border Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.5rangef.color_marc -textvariable $var_graph_color_marc -width 10\n");
-        sys_gui("pack $id.5rangef.lcolor_marc $id.5rangef.color_marc -side left\n");
-
-        sys_gui("frame $id.6rangef\n");
-        sys_gui("pack $id.6rangef -side top\n");
-        sys_gui("label $id.6rangef.lcolor_grasp -text \"Sel Color :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.6rangef.color_grasp -textvariable $var_graph_color_grasp -width 10\n");
-        sys_gui("pack $id.6rangef.lcolor_grasp $id.6rangef.color_grasp -side left\n");
-
-        sys_gui("frame $id.7rangef\n");
-        sys_gui("pack $id.7rangef -side top\n");
-        sys_gui("label $id.7rangef.lformat_list -text \"Format list ':' separated :\" -width 32 -anchor nw\n");
-        sys_gui("entry $id.7rangef.format_list -textvariable $var_graph_format_list -width 30\n");
-        sys_gui("pack $id.7rangef.lformat_list -fill x\n");
-        sys_gui("pack $id.7rangef.format_list -fill x\n");
-
-        sys_gui("frame $id.8rangef\n");
-        sys_gui("pack $id.8rangef -side top\n");
-        sys_gui("label $id.8rangef.lw_cell -text \"Thumb W :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.8rangef.w_cell -textvariable $var_graph_w_cell -width 10\n");
-        sys_gui("pack $id.8rangef.lw_cell $id.8rangef.w_cell -side left\n");
-
-        sys_gui("frame $id.9rangef\n");
-        sys_gui("pack $id.9rangef -side top\n");
-        sys_gui("label $id.9rangef.lh_cell -text \"Thumb H :\" -width 15 -anchor nw\n");
-        sys_gui("entry $id.9rangef.h_cell -textvariable $var_graph_h_cell -width 10\n");
-        sys_gui("pack $id.9rangef.lh_cell $id.9rangef.h_cell -side left\n");
-
-        sys_gui("bind $id.1rangef.name <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.2rangef.num_fil <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.3rangef.num_col <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.4rangef.color_fons <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.5rangef.color_marc <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.6rangef.color_grasp <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.7rangef.format_list <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.8rangef.w_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("bind $id.9rangef.h_cell <KeyPress-Return> [concat videogrid_ok $id]\n");
-        sys_gui("focus $id.1rangef.name\n");
-        sys_gui("}\n");
-
-        /*
-        sys_gui("proc table {w content args} {\n");
-        sys_gui("frame $w -bg black\n");
-        sys_gui("set r 0\n");
-        sys_gui("foreach row $content {\n");
-        sys_gui("set fields {}\n");
-        sys_gui("set c 0\n");
-        sys_gui("foreach col $row {\n");
-        // lappend fields [label $w.$r/$c -text $col]
-        sys_gui("set img [image create photo -file $col]\n");
-        sys_gui("lappend fields [label $w.$r/$c -image $img]\n");
-        sys_gui("incr c\n");
-        sys_gui("}\n");
-        sys_gui("eval grid $fields -sticky news -padx 1 -pady 1\n");
-        sys_gui("incr r\n");
-        sys_gui("}\n");
-        sys_gui("set w\n");
-        sys_gui("}\n");
-        sys_gui("proc pdtk_videogrid_table {id name num_fil num_col} {\n");
-        sys_gui("table .tauler {\n");
-        sys_gui("{sll80x60.gif 3160x120.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.gif sll80x60.gif sll80x60.gif}\n");
-        sys_gui("{sll80x60.ppm sll80x60.gif 3160x120.gif}\n");
-        sys_gui("}\n");
-        sys_gui("pack .tauler\n");
-        sys_gui("}\n");
-        */
-    }
-
-    /* widget properties */
-    static void videogrid_setwidget(void)
-    {
-        /* post("Entra a setwidget"); */
-        videogrid_widgetbehavior.w_getrectfn = videogrid_getrect;
-        videogrid_widgetbehavior.w_displacefn = videogrid_displace;
-        videogrid_widgetbehavior.w_selectfn = videogrid_select;
-        videogrid_widgetbehavior.w_activatefn = NULL;
-        videogrid_widgetbehavior.w_deletefn = videogrid_delete;
-        videogrid_widgetbehavior.w_visfn = videogrid_vis;
-        /* clic del ratoli */
-        videogrid_widgetbehavior.w_clickfn = videogrid_click;
-    }
-
-    /* el constructor de la classe*/
-    static void *videogrid_new(t_symbol* name, int argc, t_atom *argv)
-    {
-        /* instanciació del nou objecte */
-        t_videogrid *x = (t_videogrid *)pd_new(videogrid_class);
-        /* crea una sortida per l'objecte*/
-        x->x_sortida = outlet_new(&x->x_obj,&s_symbol);
-        /* s'obté el canvas de pd */
-        x->x_glist = (t_glist*) canvas_getcurrent();
-        /* posició en el tauler de la última imatge afegida */
-        x->x_ultima_img = 0;
-        /* posició de l'últim fitxer del directori encuat */
-        x->x_dir_pos = 0;
-        /* apuntador al primer element en el tauler */
-        x->x_tauler_primer = NULL;
-        x->x_pos_selected = -1;
-        /* fixa el nom de l'objecte */
-        char nom[15];
-        sprintf(nom, "videogrid%d", ++videogridcount);
-        name = gensym(nom);
-        x->x_name = name;
-        /* amb aquest nom es prepara per poder rebre dades */
-        pd_bind(&x->x_obj.ob_pd, x->x_name);
-        /* crea la cua de nodes */
-        crearCua(&x->x_cua);
-        post("NEW videogrid: created with %d parameters.\n", argc);
-
-        switch (argc) {
-        case 3:
-            /* versio inicial */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 5:
-            /* versio 0.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-        case 6:
-            /* versio 0.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 7:
-            /* versio 0.2.1 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-        break;
-
-        case 9:
-            /* versio 0.2.2 */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = argv[6].a_w.w_symbol;
-            x->x_w_cell = (int)atom_getintarg(7, argc, argv);
-            x->x_h_cell = (int)atom_getintarg(8, argc, argv);
-        break;
-
-        case 10:
-            /* versio 0.1 - paths dels  elsements del tauler */
-            x->x_num_fil = (int)atom_getintarg(1, argc, argv);
-            x->x_num_col = (int)atom_getintarg(2, argc, argv);
-            x->x_color_fons = argv[3].a_w.w_symbol;
-            x->x_color_marc = argv[4].a_w.w_symbol;
-            x->x_color_grasp = argv[5].a_w.w_symbol;
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-            x->x_h_cell = 40;
-            /*
-            // -- llegir la cadena de paths | afegir els paths a la cua //
-            // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-                    char *cadenaPaths;
-                    cadenaPaths = (char *)malloc(51200*sizeof(char));
-                    strcpy(cadenaPaths,(char *)argv[6].a_w.w_symbol->s_name);
-                    // -- printf("Es carreguen els paths %s --- %s **** %s\n", cadenaPaths, argv[5].a_w.w_symbol->s_name,argv[3].a_w.w_symbol->s_name); //
-                    // -- split //
-                    char *token;
-                    t_symbol *tt;
-                    for ( token = strtok(argv[6].a_w.w_symbol->s_name,"|");
-                        token != NULL;
-                        token = strtok(NULL,"|") ){
-                                tt = gensym(token);
-                                // -- printf("AFEGINT CARREGANT %s\n",tt->s_name); //
-                                // -- imagegrid_putimg(x,tt); //
-                                // -- ATENCIO! NO AFEGEIX ELS PATHS !!! //
-                                // -- imagegrid_afegir_imatge(x,tt->s_name); //
-                    }
-
-                    token = strtok(cadenaPaths,"|");
-                    while(token){
-                        tt = gensym(token);
-                        // printf("AFEGINT CARREGANT %s\n",tt->s_name);
-                        imagegrid_putimg(x,tt);
-                        token = strtok(NULL,"|");
-                    }
-                    free(cadenaPaths);
-                    */
-        break;
-
-        default:
-            /* crea un objecte nou per defecte */
-            /* post("NEW imagegrid created.\n"); */
-            /* fixa el nombre de files */
-            x->x_num_fil = 3;
-            /* fixa el nombre de columnes */
-            x->x_num_col = 5;
-            /* colors de fons i de marc*/
-            x->x_color_fons = gensym("#F0F0F0");
-            x->x_color_marc = gensym("#0F0F0F");
-            x->x_color_grasp = gensym("#F1882B");
-            x->x_format_list = gensym("mov:mpg");
-            x->x_w_cell = 60;
-           x->x_h_cell = 40;
-        break;
-        }
-        /*
-         * printf("S'ha instanciat un videogrid anomenat %s amb les caracteristiques seguents:",x->x_name->s_name);
-         * printf("Nombre de files %d - Nombre de columnes: %d", x->x_num_fil, x->x_num_col);
-        */
-        return (x);
-    }
-
-    static void videogrid_destroy(t_videogrid *x){
-        /* elimina el contingut de la cua */
-        eliminarCua(&x->x_cua);
-        post("Videogrid destroyed.\n");
-    }
-
-    /* generacio d'una nova classe */
-    /* al carregar la nova llibreria my_lib pd intenta cridar la funció my_lib_setup */
-    /* aquesta crea la nova classe i les seves propietats només un sol cop */
-
-    void videogrid_setup(void)
-    {
-        load_tk_procs_videogrid();
-        post("videogrid: version 0.2.1");
-        post("written by Sergi Lario (slario@gmail.com) & Lluis Gomez i Bigorda (lluis@artefacte.org)");
-
-        videogrid_class = class_new(gensym("videogrid"),
-            (t_newmethod)videogrid_new,
-            (t_method)videogrid_destroy,
-            sizeof(t_videogrid),
-            CLASS_DEFAULT,
-            A_GIMME,
-            0);
-
-        /*
-         *  class_new crea la nova classe retornant un punter al seu prototipus,
-         *  el primer argument es el nom simbolic de la classe,
-         *  el segon i tercer corresponen al constructor i destructor de la classe respectivament,
-         *  (el constructor instancia un objecte i inicialitza les seves dades cada cop que es crea un objecte
-         *  el destructor allibera la memoria reservada al destruir l'objecte per qualsevol causa)
-         *  el quart correspon a la mida de l'estructura de dades, per tal de poder reservar la memoria necessària,
-         *  el cinquè influeix en el mòde de representació gràfica del objectes. Per defecte CLASS_DEFAULT o '0',
-         *  la resta d'arguments defineixen els arguments de l'objecte i el seu tipus, la llista acaba  amb 0
-        */
-
-        class_addbang(videogrid_class, videogrid_bang);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideo,gensym("putvideo"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_putvideodir,gensym("putvideodir"), A_DEFSYMBOL, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_dialog, gensym("dialog"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_click, gensym("click"), A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_clear, gensym("clear"), A_GIMME, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_seek, gensym("seek"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_rows, gensym("rows"), A_FLOAT, 0);
-
-        class_addmethod(videogrid_class, (t_method)videogrid_cols, gensym("cols"), A_FLOAT, 0);
-
-        /* inicia el comportament de videogrid */
-
-        videogrid_setwidget();
-
-        class_setwidget(videogrid_class, &videogrid_widgetbehavior);
-        class_sethelpsymbol(videogrid_class, gensym("videogrid.pd"));
-        class_setsavefn(videogrid_class, &videogrid_save);
-        class_setpropertiesfn(videogrid_class, videogrid_properties);
-    }
-}
diff --git a/externals/pdvjtools/videogrid/videogrid.libs b/externals/pdvjtools/videogrid/videogrid.libs
deleted file mode 100644
index be0153866..000000000
--- a/externals/pdvjtools/videogrid/videogrid.libs
+++ /dev/null
@@ -1 +0,0 @@
--lavcodec -lavformat -lavutil -lswscale -lquicktime
diff --git a/externals/reakin/sdiflists/GnuGPL.txt b/externals/reakin/sdiflists/GnuGPL.txt
deleted file mode 100644
index d60c31a97..000000000
--- a/externals/reakin/sdiflists/GnuGPL.txt
+++ /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/externals/reakin/sdiflists/README b/externals/reakin/sdiflists/README
deleted file mode 100644
index a12fe4200..000000000
--- a/externals/reakin/sdiflists/README
+++ /dev/null
@@ -1,61 +0,0 @@
-~~~~~~~~~~~~~~~~~ [sdiflists] v0.1 - ~~~~~~~~~~~~~~~~~~~~~
-date: Jan 17, 2008
-author: Richie Eakin
-email: reakinator@gmail.com
-homepage: www.teafordragons.com/rte
-
-PURPOSE:
-This is an external for the computer music application Pure Data.
-Its purpose is to allow the use of SDIF analysis data within pd. 
-SDIF is a file format for data exchange between programs, you 
-can find more info about it at http://www.ircam.fr/sdif or
-http://archive.cnmat.berkeley.edu/SDIF/ .  I specifically use it 
-for resynthesizing sinusoidal tracks in pd... look for Trax on my
-webpage to get all the components for that.  
-
-INSTALL:
-You first need to download and install Ircam's SDIF library.  There are 
-many different versions to be found on the net, I am using the latest
-Sourceforge version found at http://sourceforge.net/projects/sdif. Last
-time I tried, I could not get it to compile on windows, so if you want this
-on that platform you have to get it to compile and adjust the makefile.
-
-in this directory do
-     (for linux)
-  make pd_linux 
-or (for mac)
-  make pd_darwin
-
-HOW TO USE:
-[sdiflists] will only handle one stream per sdif file; if you do not declare
-which stream you want you will get the first in the file by default.  All
-matrices within that frame will be available for output.  The number of
-outlets is declared as an argument to the externals, e.g. [sdiflists 6] 
-would make 6 outlets that output analysis data, one for each column.
-So if you have 2 matrices of 4 columns each, you will get all of the first
-matrix and the first 2 columns of the second.  There is also an outlet 
-for time and for info such as 1NVT tables and other useful things.
-For syntax detais, see sdiflists-help.pd.
-
-BUGS or SUGGESTIONS:
-There are a couple known bugs (you may notice warnings of the 
-wrong frametype in the terminal, haven't figured out why yet) and
-a couple work-arounds in the code.  But please let me know what
-you find when using this external, if you can fix it then great.  As I
-mentioned above, so far I only use this external for sinusoidal
-synthesis so I do not know if frametypes other than 1TRC or
-1STF will cause problems. I have tried to check, but.. you know.
-
-TODO:
-- make an external for writing sdif files.. hopefully people have
-suggestions for doing this because it is a little trickier than
-outputting lists like [sdiflists]
-
-THANKYOUS:
-Thanks to Tom Erbe for all the programming tips throughout my
-stay at UCSD.  Thanks to Miller Puckette for helping me figure
-out the odds and ends of Pd.  Thanks to Shlomo Dubnov for
-introducing me to and sharing knowledge about Sound Descr-
-tors.  Finally thanks to those on the SDIF and Pd mailing lists
-for helping cure me of ignorance.  Sorry though, still a long way
-to go!
\ No newline at end of file
diff --git a/externals/reakin/sdiflists/loris.STYP b/externals/reakin/sdiflists/loris.STYP
deleted file mode 100644
index 22bee4907..000000000
--- a/externals/reakin/sdiflists/loris.STYP
+++ /dev/null
@@ -1,107 +0,0 @@
-
-SDIF
-
-1NVT
-{
-  GenerationDate	Thu_22_Jun_2006;
-  GenerationUser	Richie_Eakin;
-  Generator		modified_from_SdifTypes.STYP;
-  SourceFile		SdifTypes.STYP
-  Application		Loris_Sound_Modeling_Package
-  Author		Kelly_Fitz
-}
-
-1TYP
-{
-1MTD 1NVT { NVTText }
-1MTD 1TYP { TYPText }
-1MTD 1IDS { IDSText }
-1FTD 1NVT { 1NVT NameValueTable;  }
-1FTD 1TYP { 1TYP TypeDefinitions;  }
-1FTD 1IDS { 1IDS StreamInfo;  }
-
-1MTD 1GAI { Gain }
-1FTD 1GAI { 1GAI Gain;  }
-1MTD IWIN { WindowIdentifier, WindowSize }
-1MTD 1WIN { Samples }
-1FTD 1WIN { IWIN WindowInfo; 1WIN Window;  }
-1MTD 1CHA { Channel1, Channel2 }
-
-1MTD 1FQ0 { Frequency, Confidence, Score, RealAmplitude }
-1FTD 1FQ0 { 1FQ0 FundamentalFrequencyEstimate;  }
-
-1MTD 1PIC { Frequency, Amplitude, Phase, Confidence }
-1MTD 1TRC { Index, Frequency, Amplitude, Phase }
-1MTD 1HRM { Index, Frequency, Amplitude, Phase }
-1FTD 1PIC { 1PIC PickedPeaks;  }
-1FTD 1TRC { 1TRC SinusoidalTracks;  }
-1FTD 1HRM { 1HRM HarmonicPartials;  }
-1MTD 1HRE { MeanDeltaFrequency, Harmonicity, WeightedHarmonicity }
-1FTD 1HRE { 1HRE HarmonicityEstimate;  }
-
-1MTD IENV { HighestBinFrequency, ScaleType, BreakFrequency }
-1MTD 1ENV { Env }
-1FTD 1ENV { IENV SpectralEnvelopeInfo; 1ENV SpectralEnvelope; 1GAI Gain;  }
-1MTD ITFC { SamplingRate, Order }
-1MTD 1CEC { CepstralCoefficients }
-1FTD 1CEC { 1CEC CepstralCoefs;  }
-1MTD 1ARA { AutoRegressiveCoefficients }
-1MTD 1ARK { ReflectionCoefficients }
-1MTD 1ARR { AutoCorrelationCoefficients }
-1FTD 1ARA { 1GAI Gain; 1ARA ARACoefs;  }
-1FTD 1ARK { 1GAI Gain; 1ARK ARKCoefs;  }
-1FTD 1ARR { 1ARR ARRCoefs;  }
-
-1MTD 1FOF { Frequency, Amplitude, BandWidth, Tex, DebAtt, Atten, Phase }
-1MTD 2RES { Frequency, Amplitude, DecayRate, Phase }
-1MTD 1RES { Frequency, Amplitude, BandWidth, Saliance, Correction }
-1MTD 1DIS { Distribution, Amplitude }
-1FTD 1NOI { 1DIS NoiseDistribution;  }
-1FTD 1FOB { 1FQ0 FundamentalFrequencyEstimate; 1FOF Formants; 1CHA Channels;  }
-1FTD 1REB { 1RES Filters; 1CHA Channels;  }
-
-1MTD ISTF { DFTPeriod, WindowDuration, FFTSize }
-1MTD 1STF { Real, Imaginary }
-1FTD ISTF { ISTF FourierTransformInfo;  }
-1FTD 1STF { ISTF FourierTransformInfo; 1STF FourierTransform; 1WIN Window;  }
-
-1MTD INRG { Scale, NormalisationFactor }
-1MTD 1NRG { Energy }
-1FTD 1NRG { INRG ScaleAndFactor; 1NRG Energy; IWIN WindowInfo; 1WIN Window;  }
-1MTD 1BND { LowerFrequencyLimit, UpperFrequencyLimit }
-1FTD 1BND { 1BND Bands;  }
-
-1MTD ITDS { SamplingRate }
-1MTD 1TDS { Sample }
-
-1MTD 1PEM { Identifier, Parameter1, Parameter2, Parameter3 }
-1MTD ITMR { Index, Frequency, Amplitude, Phase }
-1MTD ITMI { Index }
-1MTD 1BEG { Id }
-1MTD 1END { Id }
-1MTD 1SEG { Confidence }
-1FTD 1SEG { 1SEG Segmentation;  }
-1MTD 1LAB { Chars }
-1FTD 1MRK { 1BEG SegmentStart; 1END SegmentEnd; 1SEG Segmentation; 1LAB Label; 1PEM PeriodMarker; ITMR TransientMarkerRepresentation; ITMI TransientMarkerIdentifier;  }
-
-1MTD 1VUN { VoicingCoefficient }
-1MTD 1VUF { CuttingFrequency }
-1FTD 1VUV { 1VUN VoicedUnvoicedNorm; 1VUF VoicedUnvoicedFreq;  }
-
-1MTD 1MID { Status, Data1, Data2 }
-1MTD 1SYX { Data }
-1FTD 1MID { 1MID MIDIEvent; 1SYX MIDISystemExclusive;  }
-
-1MTD EMPM { Value, Index }
-1MTD EMJR { Record }
-1FTD EFPM { EMPM Tableau; EMJR EndRecording;  }
-
-1MTD RBEP { Index, frequency, amplitude, phase, noise, timeOffset }
-1FTD RBEP { RBEP Reassigned_Bandwidth_Enhanced_Partials; }
-1MTD RBEL { Index, label }
-1FTD RBEL { RBEL Reassigned_Bandwidth_Enhanced_Labels; }
-1MTD RBET { marker_times }
-1MTD RBEN { marker_names }	
-1FTD RBEM { RBET marker_times; RBEN marker_names; }
-}
-
diff --git a/externals/reakin/sdiflists/makefile b/externals/reakin/sdiflists/makefile
deleted file mode 100644
index 340660a37..000000000
--- a/externals/reakin/sdiflists/makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-# ----------Pd-Sdif makefile, using the makefile--------------
-# ---------from example Pd externals--------------------------
-# *** Make sure the pd header files and sdif library can
-# *** be found by including the right directory
-# - this external will probably work on windows if you can
-#   get the SDIF IRCAM library installed, but I couldn't
-#   use the pd/doc/6.extern/makefile and link with -lsdif
-
-current:
-	echo make pd_linux
-
-clean: ; rm -f *.pd_linux *.o
-
-
-# ----------------------- LINUX i386 -----------------------
-
-pd_linux: sdiflists.pd_linux
-
-
-
-.SUFFIXES: .pd_linux
-
-LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes -Werror \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-LINUXINCLUDE = -I /usr/local/include
-
-
-.c.pd_linux:
-	cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
-	ld -lsdif --export-dynamic  -shared -o $*.pd_linux $*.o -lc -lm 
-	strip --strip-unneeded $*.pd_linux
-	rm $*.o
-
-
-# ----------------------- Mac OSX -----------------------
-
-pd_darwin:  sdiflists.pd_darwin
-
-.SUFFIXES: .pd_darwin
-
-DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-
-DARWIN_INCLUDE = -I /usr/local/include
-
-.c.pd_darwin:
-	cc $(DARWINCFLAGS) $(DARWIN_INCLUDE) -o $*.o -c $*.c
-	cc -bundle -undefined suppress -lsdif -flat_namespace -o $*.pd_darwin $*.o
-	rm -f $*.o
-
diff --git a/externals/reakin/sdiflists/sdiflists-help.pd b/externals/reakin/sdiflists/sdiflists-help.pd
deleted file mode 100644
index 7e326e270..000000000
--- a/externals/reakin/sdiflists/sdiflists-help.pd
+++ /dev/null
@@ -1,96 +0,0 @@
-#N canvas 33 413 1015 502 10;
-#X floatatom 389 469 8 0 0 0 - - -;
-#X floatatom 486 314 5 0 0 0 - - -;
-#X obj 450 443 list trim;
-#X msg 486 161 info;
-#X msg 486 195 types loris.STYP;
-#X obj 332 420 sdiflists 4;
-#X obj 487 291 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X msg 486 351 time \$1;
-#X floatatom 487 334 5 0 0 0 - - -;
-#N canvas 0 0 450 300 printcols 0;
-#X obj 38 46 inlet;
-#X obj 38 120 spigot;
-#X obj 38 142 print COLUMN-1;
-#X obj 98 96 inlet;
-#X obj 98 170 spigot;
-#X obj 168 46 inlet;
-#X obj 168 120 spigot;
-#X obj 228 96 inlet;
-#X obj 228 170 spigot;
-#X obj 98 192 print COLUMN-2;
-#X obj 168 142 print COLUMN-3;
-#X obj 228 192 print COLUMN-4;
-#X obj 324 42 inlet;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X connect 3 0 4 0;
-#X connect 4 0 9 0;
-#X connect 5 0 6 0;
-#X connect 6 0 10 0;
-#X connect 7 0 8 0;
-#X connect 8 0 11 0;
-#X connect 12 0 1 1;
-#X connect 12 0 4 1;
-#X connect 12 0 6 1;
-#X connect 12 0 8 1;
-#X restore 296 467 pd printcols;
-#X obj 375 449 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X msg 486 255 about;
-#X text 609 191 Specify a custom types definition file;
-#X text 647 206 (ex. Loris's RBEP format);
-#X text 524 156 sends info out the rightmost outlet in list tuples
-;
-#X text 524 168 Info also sends out 1NVT and 1IDS data;
-#X obj 450 467 print INFO_OUTLET;
-#X msg 486 113 open 2 test/richiepooSMS.sdif;
-#X msg 486 375 timerange 0.009;
-#X text 488 396 default timerange = 0.01;
-#X text 532 255 nothing really important here;
-#X obj 19 27 cnv 15 204 45 empty empty [sdiflists] 20 22 0 14 -62784
--241291 0;
-#X text 226 30 v.01;
-#X text 226 50 Author: Richie Eakin;
-#X text 16 99 this external uses the SDIF IRCAM library to read sdif
-files and output the matrices in the form of one lists per column.
-Only one stream can be read per external \, use more if you need to.
-The number of columns of all the combines matrices should be specified
-at creation time. The SDIF specification is very open \, but you have
-to use frame and matrix types that are declared in the standard library
-(found at www.ircam.fr/sdif) or with the inclusion of you own *.STYP
-file. I have included one that defines Loris' RBEP filetype \, along
-with the rest of the standard definitions.;
-#X msg 486 54 open test/pianoSpear.sdif;
-#X text 485 77 If you don't want the first stream in the file \, specify
-the number of the stream you want BEFORE the filename.;
-#X text 485 31 open a .sdif file first.;
-#X msg 486 138 open test/orgue.sdif;
-#X text 635 137 (this file has a 1NVT table);
-#X msg 486 229 open 1 test/meowLoris.sdif;
-#X text 677 232 RBEP is in stream 1;
-#X text 518 287 bang outputs the next frame in time;
-#X text 533 312 float outputs a specific frame;
-#X text 546 349 use timestamp instead of frame number;
-#X text 601 375 specify the time range (use with time message);
-#X connect 1 0 5 0;
-#X connect 2 0 16 0;
-#X connect 3 0 5 0;
-#X connect 4 0 5 0;
-#X connect 5 0 9 0;
-#X connect 5 1 9 1;
-#X connect 5 2 9 2;
-#X connect 5 3 9 3;
-#X connect 5 4 0 0;
-#X connect 5 5 2 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 8 0 7 0;
-#X connect 10 0 9 4;
-#X connect 11 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 5 0;
-#X connect 25 0 5 0;
-#X connect 28 0 5 0;
-#X connect 30 0 5 0;
diff --git a/externals/reakin/sdiflists/sdiflists.c b/externals/reakin/sdiflists/sdiflists.c
deleted file mode 100644
index cb713561b..000000000
--- a/externals/reakin/sdiflists/sdiflists.c
+++ /dev/null
@@ -1,748 +0,0 @@
-
-/*------------------------------sdiflists-----------------------------/
-  ---------------------------------------------------------------------
-  An external object for Pure Data that reads SDIF files, with the help
-  of IRCAM's SDIF library.  
-  -written by Richie Eakin.. See the readme for more documentation.
-  reakinator@gmail.com
-*/
-
-#define IFRAMES 1000
-#define MAX_STREAMS 1000
-#define DATE "17/1/08"
-#define DEBUG 0
-#define DEBUG_MEM 0
-
-#include "m_pd.h"
-#include "sdiftostring.h"
-#include <sdif.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-static t_class *sdiflists_class;
-
-//a structure of outlets, decided by an init parameter.
-//taken from Pd's trigger object in x_connective.c 
-typedef struct colout
-{
-    t_symbol  u_type;        //outlet type from STYP (todo)?
-    t_outlet  *out;         
-    t_atom    *outvec;      
-} t_colout;
-
-// file markers, info for frame positions and times to allow seeking
-typedef struct pos
-{
-    SdifFloat8  timetag; // seconds
-    SdiffPosT   filepos; // memory locations
-} t_pos;
-
-typedef struct sdiflists
-{
-    t_object    x_ob;
-    SdifFileT   *file ;       //file data is malloced by SDIF library and everything goes in here
-    SdifStringT *string ;     //ascii queries
-    t_symbol    *filename; 
-    t_colout    *data;      
-    int         n_outs;
-    int         max_vec;      // enough memory is allocated for the biggest list that will be sent out   
-    int         nframes;      //number of frames found during indexing
-    t_canvas    *canvas;      //used for locating path directory
-    t_atom      *infolist;    // storage for right most outlet (always info - NVT or stats)
-    t_outlet    *infoout;
-    t_outlet    *timeout;
-    float       seconds;
-    float timeRange;
-    t_pos       *markers;     // locations and times of frames
-    long        index;        // current frame 
-    int         use_timetags; // boolean for deciding between timetag and index seeking  
-    unsigned int streamid;    // a unique identifier for streams within a file
-} t_sdiflists;
-
-/*-------------------open files, STYP first if given, then SDIF-----------------*/
-static void sdiflists_open(t_sdiflists *x,  t_symbol *s, int argcount, t_atom *argvec)
-{	
-    int i,j;
-    unsigned int StreamSpecified = 0;
-    
-    for (i = 0; i < argcount; i++)
-    {
-          if (argvec[i].a_type == A_FLOAT)
-          {//TODO: check if this was given after file, cuz that would be useless
-                x->streamid = (int) argvec[i].a_w.w_float;
-               StreamSpecified = 1;
-               post("stream specified:#%d", x->streamid);
-          }
- 
-      if (argvec[i].a_type == A_SYMBOL)
-      {
-          char *sym =  argvec[i].a_w.w_symbol->s_name;                 
-          if(!strcmp( sym + strlen(sym)-5 , ".sdif" ) || 
-                        !strcmp( sym + strlen(sym)-5 , ".SDIF" ))
-          {
-              t_colout *u;
-              if(x->markers[0].timetag != -1) 
-              {
-                  post("closing file... ");
-                  SdifFClose(x->file);
-                  for(j=0; j < x->nframes; j++)  x->markers[j].timetag = x->markers[j].filepos = 0;
-                  for(j=0, u = x->data; j < x->n_outs; u++, j++) freebytes( u->outvec, x->max_vec * sizeof(t_atom));
-		 
-                  x->markers[0].timetag = -1;
-                  x->index = -1;
-                  x->nframes = IFRAMES;
-#if DEBUG                         
-                  post("sdiflists::open: closed previous file");              
-#endif  
-	      }// end if x->file exists
-              unsigned int rows = 0;
-              unsigned int cols = 0;
-
-              t_int eof, m, updatepos;
-              t_int firstframe = 1;
-              t_int timepos = 0;
-              size_t bytesread = 0;  
-              SdiffPosT currpos;
-              float currtime = 0;
-                  				
-              /*method for opening file in canvas directory.
-                Based on zexy's [msgfile], which is based on
-                Pd's [textfile]*/
-              char filnam[MAXPDSTRING], namebuf[MAXPDSTRING];
-              char buf[MAXPDSTRING], *bufptr, *readbuf;
-              int fd; // used to check if file exists
-              char *dirname;
-              
-              dirname = canvas_getdir(x->canvas)->s_name;
-              t_binbuf *bbuf = binbuf_new();
-              
-              fd = open_via_path(dirname, sym,"", buf, &bufptr, MAXPDSTRING, 0);
-              if(fd < 0)
-              {
-                  error("sdiflists-open: %s cannot be found", sym);
-                  return;
-              }
-              namebuf[0] = 0;
-              if (*buf)   strcat(namebuf, buf), strcat(namebuf, "/");
-              
-              strcat(namebuf, bufptr);
-              // open and get length 
-              sys_bashfilename(namebuf, filnam);
-              //this is hopefully a readable file
-              
-#if DEBUG
-              post("(open_via_path) dirname: %s, filename->s_name: %s, buf: %s, bufptr: %s", dirname, sym, buf, bufptr);
-              post("AFTER bashfilename: namebuf: %s, filnam: %s ", namebuf, filnam);
-#endif
-	      
-              x->filename = gensym( namebuf );
-	      
-              /* Check if the file is a good SDIF file, skip function if not */
-              if (SdifCheckFileFormat (x->filename->s_name))
-              { 
-                  post("sdiflists: reading %s", x->filename->s_name);
-                  x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-     		  bytesread += SdifFReadGeneralHeader  (x->file);       
-                  bytesread += SdifFReadAllASCIIChunks (x->file);                 
-                  eof = SdifFCurrSignature(x->file) == eEmptySignature;	
-                  int err;
-                  while (!eof) //frame loop
-                  {
-                      /*The frame positions must be indexed before the
-                        frameheader is read, then check if it is a
-                        selected frame.  If not, skip the frame and
-                        overwrite the marker.*/
-                      err = SdifFGetPos(x->file, &currpos);
-                      if(err==-1) error("error SdifFGetPos");
-						
-						
-                      /* Read frame header.  Current signature has already been read
-                         by SdifFReadAllASCIIChunks or the last loop.) */
-                      bytesread += SdifFReadFrameHeader (x->file);
-
-                      if(!StreamSpecified)
-                        {
-                          x->streamid = SdifSelectGetFirstInt(x->file->Selection->stream, SdifFCurrID (x->file));
-                          StreamSpecified = 1;
-                          post("first stream used: #%d", x->streamid);
-                        }
-
-                      //PROBLEM: (maybe not...check)the last frame in the file is always acceptable... fix by using sel spec			
-                      while (!SdifFCurrFrameIsSelected (x->file) ||  SdifFCurrID (x->file) != x->streamid )
-                      {
-	   //  post("frame skipped");
-                          SdifFSkipFrameData (x->file);
-                          if ((eof = SdifFGetSignature(x->file, &bytesread) == eEof)) break;  
-                          SdifFGetPos(x->file, &currpos);			
-                          bytesread += SdifFReadFrameHeader(x->file);			
-                       }
-
-                      if(eof) //have to check again...since it might have skipped to the end
-                        break;
-			
-                      //check if this is a new time so successive frames don't overwrite filepos
-                      currtime =  SdifFCurrTime (x->file);
-                      if( !timepos ||  x->markers[timepos-1].timetag  != currtime )
-                      {
-                            x->markers[timepos].filepos = currpos;
-                            x->markers[timepos].timetag  = currtime;
-                            timepos++;
-                            if( timepos >= x->nframes )
-                            {
-                                   x->markers = (t_pos *)resizebytes( x->markers, x->nframes * sizeof(t_pos),
-		                               (x->nframes + IFRAMES) * sizeof(t_pos) );                                        
-                                   x->nframes = x->nframes + IFRAMES;
-                             }
-                      }      						
-                      /*matrices loop */
-                      for ( m = 0; (unsigned int)m < SdifFCurrNbMatrix (x->file); m++)
-                      {  
-                          bytesread += SdifFReadMatrixHeader (x->file);
-			  
-                          if( SdifFCurrNbRow (x->file) > rows)
-                          {
-                              rows = SdifFCurrNbRow (x->file); //get matrix stats
-                              cols = SdifFCurrNbCol (x->file);//should stay the same
-                           }
-                          //skip the actual matrices
-                          bytesread += SdifFSkipMatrixData (x->file);
-                      }// end for matrices
-                      eof = SdifFGetSignature (x->file, &bytesread) == eEof; 
-						
-                 }// end while no eof
-                 x->seconds = currtime;
-                 x->nframes= timepos; //last timepos was the eof
-#if DEBUG
-                  post(" rows: %d , cols: %d , frames: %d , seconds: %f", rows, cols,  x->nframes, x->seconds);
-                  post("sdiflists: %s opened. ", x->filename->s_name);
-#endif
-                  x->max_vec = rows; //needed to free memory
-	 
-                  //the following lines are a bug work-around... if the eof is reached, you cannot seek
-                  //until the fle is closed, opened, and re-initialized... i posted about this on the sdif list.
-                  SdifFClose (x->file);
-                  x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-                  SdifFReadGeneralHeader  (x->file); 
-                  SdifFReadAllASCIIChunks (x->file); 
-                  eof = SdifFCurrSignature(x->file) == eEmptySignature;  
-		
-                  //make room for the row lists
-                  for ( i=0, u = x->data; i < x->n_outs; u++, i++)
-	   u->outvec = (t_atom *)getbytes( x->max_vec * sizeof(t_atom));
-	     
-               } /* end if filetype check */
-            }
-        } //end if Symbol
-    }//end for arguments
-}
-
-/*--------------------seek to position and output data---------------------*/
-/*SDIF selection spec is infile::[#stream][:frame][/matrix][.column][_row][@time]*/
-/*in any order (accept :: is always first), allowing spaces*/
-static void sdiflists_seek(t_sdiflists *x, t_floatarg gotoindex)
-{
-  //check if file has been opened, -1 means first timetag was never set
-  if(x->markers[0].timetag == -1) 
-    {
-      post("sdiflists: open a file before seeking");
-      return;
-    }
-  x->index = (long)gotoindex;
-  //check if index  exists 
-  if( x->index >= x->nframes || gotoindex < 0)
-    {
-       
-#if DEBUG
-      post("no index there.");
-#endif
-      return;
-    }
-
-#if DEBUG_MEM
-  post ("index = %d , file pos = %d", x->index, x->markers[x->index].filepos);
-#endif
-    
-  t_colout *u;
-  int      i, selectedrow, selectedcol;
-  unsigned int m;
-  int      nbrows =0;
-  int      nbcols =0;
-  int      xout = 0;
-  int      eof = 0;
-  int      col, row;
-  float   value = 0;
-  size_t   bytesread;
-  int       listsize[x->n_outs];
-  float timetag;
-  
-  //seek to index
-  SdifFSetPos( x->file , &x->markers[x->index].filepos);
-  
-  //loop through 
-  while(!eof)
-  {
-      SdifFReadFrameHeader(x->file);
-      timetag =   SdifFCurrTime (x->file);	
-      //break once the current time has changed
-      if( x->markers[x->index].timetag != timetag) break;
- 
-      outlet_float(x->timeout, timetag);
-
-      /*Get the Data.  If no selection is given when the file is opened,
-        all rows/columns/matrices/frames will be obtained. */
-      if(SdifFCurrFrameIsSelected(x->file))
-      {   
-         
-#if DEBUG
-          //fsig turns up 0 unless I close file and reopen in in the open function..
-          SdifSignature   fsig     = SdifFCurrFrameSignature (x->file);
-          SdifUInt4       streamid = SdifFCurrID (x->file);
-          post("\n frame header- Signature: '%s', timetag: %f, streamid: %d,  nmatrices: %d", 
-               SdifSignatureToString(fsig),x->markers[x->index].timetag, streamid,SdifFCurrNbMatrix (x->file));
-#endif
- 
-          //each frame can contain multiple matrices, so go through all of them
-          for( m= 0; m < SdifFCurrNbMatrix (x->file) ; m++)
-          {
-              bytesread =  SdifFReadMatrixHeader(x->file); 
-              //matrices not selected will be skipped, but they still need to be added to the bytesread tally			
-              if (SdifFCurrMatrixIsSelected (x->file)) 
-              {
-                  //get how many rows total, then check which ones are selected
-                  nbrows = SdifFCurrNbRow (x->file);
-                  nbcols = SdifFCurrNbCol (x->file);
-#if DEBUG
-                  //same problem with matrix signature as frame signature
-                  SdifDataTypeET  type = 	SdifFCurrDataType(x->file);		
-                  post("matrix header: Signature: '%s', nbrows: %d,  nbcols %d,  type %04x", 
-                  SdifSignatureToString(SdifFCurrSignature(x->file)), nbrows, nbcols, type);
-#endif
-
-                  //go through every row and build vectors according to which column the row i sin
-                  for (selectedrow = 0, row = 0; row < nbrows; row++)
-                  {
-                      if(SdifFRowIsSelected (x->file, row))
-                      {
-                          bytesread +=  SdifFReadOneRow (x->file);                          
-                          //put each member in the correct vector by accessing each one according to the current column
-                          //plus any previous columns from other matrices/frames         
-                          for ( selectedcol= 0, col = 1, u = x->data + xout + selectedcol;
-                                col <= nbcols &&  xout + selectedcol < x->n_outs; col++, u++)   
-                          {
-                                  
-                              if(SdifFColumnIsSelected (x->file, col))
-                              {
-                                  value = SdifFCurrOneRowCol (x->file, col);
-                                  SETFLOAT(u->outvec + selectedrow, value);
-                                  selectedcol++;
-                              }//end if col is selected	
-                          } //end for cols
-                          selectedrow++;
-                        }//end if row is selected
-                  }//end for rows
-                  //set how big each vector is that was just filled
-                  for(i = 0; i < SdifFNumColumnsSelected (x->file); i++)
-                    {
-                      listsize[xout + i] =  SdifFNumRowsSelected (x->file);
-                    }
-                  //update number of columns
-                  xout += SdifFNumColumnsSelected (x->file);
-                }//end if matrix is selected
-              else   bytesread += SdifFSkipMatrixData(x->file);
-             
-              SdifFReadPadding(x->file, SdifFPaddingCalculate(x->file->Stream, bytesread));
-            }//end for matrices in frame
-        }// end if  current frame is selected and not eof
-       else   SdifFSkipFrameData(x->file);
- 
-       eof = SdifFGetSignature (x->file, &bytesread) == eEof;             
-   } //end while not eof
-
-  /* !! Once eof has been found, I have to close the file and reopen for the
-     frame signatures to be found.  someone please tell me why this is.. */
-  if(eof)
-  {
-      SdifFClose (x->file);
-      x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-      SdifFReadGeneralHeader  (x->file); 
-      SdifFReadAllASCIIChunks (x->file); 
-      eof = SdifFCurrSignature(x->file) == eEmptySignature;  
-      
-  }
-#if DEBUG
-  if (SdifFLastError (x->file))   
-  {
-      error(" in sdiflists_seek() ");
-  } 
-#endif
-  // send out columns of rows, preserving right to left order 
-for (i = x->n_outs, u = x->data + i; u--, i--;)
-      outlet_list(u->out, gensym("list"),listsize[i], u->outvec);
-}
-
-static void sdiflists_timeRange(t_sdiflists *x, t_floatarg t)
-{
-    x->timeRange = t;
-}
-static void sdiflists_time(t_sdiflists *x, t_floatarg time)
-{
-  int i;
-  float timeDiff;
-  for( i = 0; i < x->nframes; i++)
-  {
-
-      timeDiff = fabs( x->markers[i].timetag - time );
-      if(timeDiff < x->timeRange ) 
-      {
-          sdiflists_seek(x, i);
-          break;
-      }
-  }
-}
-
-static void sdiflists_bang(t_sdiflists *x)
-{
-  sdiflists_seek(x, (float)++x->index);
-}
-
-
-/*--------------------------------------------------------*/
-/*	query posts frame, matrix, and all ascii info	  */
-static void sdiflists_info(t_sdiflists *x)
-{
-
-  /* What I want to Post:
-     - information about external
-     - filename
-     - 1NVT
-     - streams in file, frame/matrix types
-     - selection
-     - column info
-     - framecount and timerange
-  */
-
-  post("\n_-=-_ sdiflists -info _-=-_");
-  
-  if(x->markers[0].timetag == -1) 
-    {
-      post("sdiflists: open a file before getting info");
-      return;
-    }
-  post("filename: %s", x->filename->s_name);
-
-
-  //size_t bytesread = 0; 
-  //int eof; 
-
-
-  SdifFClose (x->file);
-  x->file = SdifFOpen ( x->filename->s_name, eReadFile); 
-  SdifFReadGeneralHeader  (x->file); 
-  SdifFReadAllASCIIChunks (x->file); 
-  
-
-
-  //----send all Names Values Tables out right most list outlet----
-  if (SdifNameValuesLIsNotEmpty(x->file->NameValues)) 
-  {
-      x->string = SdifStringNew();
-      SdifListInitLoop(x->file->NameValues->NVTList); 
-      while (SdifListIsNext(x->file->NameValues->NVTList)) 
-      {
-          x->file->NameValues->CurrNVT = (SdifNameValueTableT *)
-	      SdifListGetNext(x->file->NameValues->NVTList);
-	  
-          SdifUInt4       iNV;
-          SdifHashNT     *pNV;
-          SdifHashTableT *HTable;
-          HTable = x->file->NameValues->CurrNVT->NVHT;
-	  
-          for(iNV=0; iNV<HTable->HashSize; iNV++)
-	      for (pNV = HTable->Table[iNV]; pNV; pNV = pNV->Next)
-              {
-		  SdifNameValueT *NameValue = (SdifNameValueT *) pNV->Data;
-		  SETSYMBOL(x->infolist , gensym(NameValue->Name));
-		  SETSYMBOL(x->infolist + 1 , gensym(NameValue->Value));
-		  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-              }//end for pNV
-      } //end list while NVT
-      SdifStringFree(x->string);
-  }// end if NVT is not empty
-
-  //---------------------- post 1IDS ---------------------------
-  if (   (SdifExistUserMatrixType(x->file->MatrixTypesTable))
-         || (SdifExistUserFrameType(x->file->FrameTypesTable)) )
-    {
-      x->string = SdifStringNew();
-      if ((x->file->TypeDefPass == eNotPass) || (x->file->TypeDefPass == eReadPass))
-        {   
-          SdifFAllMatrixTypeToSdifString(x->file, x->string); 
-          SETSYMBOL ( x->infolist , gensym( SdifSignatureToString(e1TYP)) );
-          SETSYMBOL ( x->infolist + 1 , gensym(x->string->str) );
-          outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-
-          post("----  %s  ----",SdifSignatureToString(e1TYP));
-				
-	  SdifFAllFrameTypeToSdifString(x->file, x->string);		//this compiles
-	}
-      SdifStringFree(x->string);	
-    }
-
-  if (SdifStreamIDTableGetNbData  (x->file->StreamIDsTable) > 0)
-  {
-      x->string = SdifStringNew();
-      if ((x->file->StreamIDPass == eNotPass) || (x->file->StreamIDPass == eReadPass))
-      {      
-	  SdifFAllStreamIDToSdifString(x->file, x->string);	//this also undeclared in sdif.h. x->string?	
-	  SETSYMBOL ( x->infolist , gensym(SdifSignatureToString(e1IDS)) );
-          SETSYMBOL ( x->infolist + 1 , gensym(x->string->str) );
-          outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-
-      }
-      SdifStringFree(x->string);	
-  }
-			
-  //------ output Stream ID's and corresponding Frame types --------
-  size_t  bytesread = 0;
-  int eof = 0;
-  int nStream = 0;
-  int streamIDlist[MAX_STREAMS];
-  int j, newStream;
-  for(j = 0; j < MAX_STREAMS; j++)
-      streamIDlist[j] = -1;
-  while(!eof)
-  {
-      bytesread += SdifFReadFrameHeader (x->file);
-      SdifUInt4       streamid = SdifFCurrID (x->file);
-      SdifSignature   fsig     = SdifFCurrFrameSignature (x->file);
-      newStream = 1;
-      for(j = 0; j < MAX_STREAMS; j++)
-      {
-	  if(streamIDlist[j] == (signed) streamid)
-	      newStream = 0;
-      }
-      if(newStream)
-      {
-	  streamIDlist[nStream++] = streamid;
-	  SETSYMBOL(x->infolist , gensym("stream"));
-	  SETFLOAT(x->infolist + 1, streamid );
-	  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-
-	  SETSYMBOL(x->infolist , gensym("frametype"));
-	  SETSYMBOL (x->infolist + 1, gensym(SdifSignatureToString(fsig)) );
-	  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-      }
-
-      bytesread += SdifFSkipFrameData (x->file);
-      eof = (SdifFGetSignature(x->file, &bytesread)== eEof);
- 
-  }
-  
-  //also send other useful info out rightmost list outlet
-  SETSYMBOL(x->infolist , gensym("frames"));
-  SETFLOAT (x->infolist + 1, (float) x->nframes);
-  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-    
-  SETSYMBOL(x->infolist , gensym("seconds"));
-  SETFLOAT (x->infolist + 1, x->seconds );
-  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-	 
-  SETSYMBOL(x->infolist , gensym("maxlist"));
-  SETFLOAT (x->infolist + 1, x->max_vec );
-  outlet_list(x->infoout, gensym("list"), 2 , x->infolist);
-   
- 
-}		
-
-/*--------------------------------------------------------*/
-/* about for author info */
-static void sdiflists_about(t_sdiflists *x)
-{
-  post("~~~ [sdiflists] v0.1 ~~~");
-  post("by Richie Eakin, reakinator@gmail.com");
-  post("source last edited: %s", DATE);
-  post("SDIF Ircam library version %s \n", SDIF_VERSION_STRING ); 
-}
-						
-static void sdiflists_error(t_sdiflists *x, t_floatarg bool)
-{	
-  if(bool == 0) 
-    {
-      SdifDisableErrorOutput ();
-      post("error output disabled.");
-    }
-
-  if(bool == 1)
-    {
-      SdifEnableErrorOutput  ();	
-      post("error output enabled.");
-    }
-}
-
-static void sdiflists_types(t_sdiflists *x, t_symbol *types)
-{
-                  
-  if(x->markers[0].filepos != -1 ) 
-    {
-      t_colout *u;
-      int j;
-      SdifFClose(x->file);
-      for(j=0; j < x->nframes; j++)
-        x->markers[j].timetag = x->markers[j].filepos = 0;
-
-      x->markers[0].timetag = -1;
-   
-      for ( j=0, u = x->data; j < x->n_outs; u++, j++)
-        freebytes( u->outvec, x->max_vec * sizeof(t_atom));
-  
-#if DEBUG                         
-      post("sdiflists::types: closed previous file");              
-#endif  
-      x->nframes = IFRAMES;
-    }                     	
-  //prepend the full path onto the filename
-  char fullfilename[MAXPDSTRING], namebuf[MAXPDSTRING];
-  char buf[MAXPDSTRING], *bufptr, *dirname;
-  int fd = 0;
-															
-  dirname=canvas_getdir(x->canvas)->s_name;
-  t_binbuf *bbuf = binbuf_new();
-  fd = open_via_path(dirname,  types->s_name,"", buf, &bufptr, MAXPDSTRING, 0);
-  if(fd > 0)
-    {
-      namebuf[0] = 0;
-      if (*buf)  
-        strcat(namebuf, buf), strcat(namebuf, "/");
-      strcat(namebuf, bufptr);
-      sys_bashfilename(namebuf, fullfilename);
-               
-      SdifGenKill (); // have to close it to read a new .STYP
-      SdifGenInitCond (types->s_name);
-               
-      post("sdiflists: types-declaration file: %s", types->s_name);     
-    }
-  else post ("sdiflists: types file %s could not be opened", types->s_name);
-}
-
-
-
-/*--------------------constructors and destructors---------------------*/
-/* optional creation arguments are typechecked for number of columns,
-   STYP types-definition file, and initial SDIF file. The STYP should be
-   first so that the SDIF file is defined correctly.*/
-
-/*TODO: -c x or -m y to decide between columns or matrices output*/
-static void *sdiflists_new(t_symbol *s, int argcount, t_atom *argvec)
-{
- 
-#if DEBUG 
-  post("~~~ sdiflists: Debug Mode ~~~");
- 
-#endif
-
-  
-  t_sdiflists *x = (t_sdiflists *)pd_new(sdiflists_class);
-
-  x->canvas = canvas_getcurrent();
-  t_colout *u;
-
-  int i, j;
-  int gotcols = 0;
-
-  x->n_outs = 0;
-  x->nframes = IFRAMES;
-  x->timeRange = 0.01;
-  x->index = -1; // will be incremented to 0 if banged, reset if seeked
-
- 
-
-  SdifGenInitCond (""); /*initialize standard .STYP types file if uninitialized */
-
-  for (i = 0; i < argcount; i++)
-    {
-	
-      if (argvec[i].a_type == A_FLOAT)
-        {
-			 gotcols= 1;
-			 x->n_outs = (int) argvec[i].a_w.w_float;
-			 x->data = (t_colout *)getbytes(x->n_outs * sizeof(*x->data));
-                
-
-          /*number of outlets is defined here; one for each column specified or
-            one for each matrix (if x->n_outs is zero) */
-          for ( j=0, u = x->data; j < x->n_outs; u++, j++)
-            {
-              u->out = outlet_new (&x->x_ob, &s_list);
-            }
-        }
-      if (argvec[i].a_type == A_SYMBOL)
-        {
-          t_atom at;
-          SETSYMBOL(&at , argvec[i].a_w.w_symbol );
-          char *sym =  argvec[i].a_w.w_symbol->s_name;
-                
-          if( (!strcmp( sym + strlen(sym)-5 , ".sdif" ) || 
-               !strcmp( sym + strlen(sym)-5 , ".SDIF" )) && gotcols )  	
-            {	   
-              sdiflists_open(x, 0, 1, &at);
-            }
-          if(!strcmp( sym + strlen(sym)-5 , ".styp" ) || 
-             !strcmp( sym + strlen(sym)-5 , ".STYP" )) 	
-            {
-              sdiflists_types(x, argvec[i].a_w.w_symbol);
-            }
-			    
-        }//end if symbol argument
-          
-		
-         
-    }//end for creation arguments
-
-  x->timeout =outlet_new(&x->x_ob, &s_float);
-  x->infoout = outlet_new(&x->x_ob, gensym("list"));
-  x->markers = (t_pos *)getbytes( x->nframes * sizeof(t_pos));
-  x->infolist = (t_atom *)getbytes( 2 * sizeof(t_atom));
-  x->markers[0].timetag = -1; //if this isn't -1, a file is open	
-  return (void *)x;	
-}
-
-/*cleanup function - leave SDIF library in case there are other files using it */
-static void sdiflists_free(t_sdiflists *x)
-{
-  t_colout *u;
-  int i;
-  SdifFClose (x->file);
-   
-  for ( i=0, u = x->data; i < x->n_outs; u++, i++)
-    freebytes( u->outvec, x->max_vec * sizeof(t_atom));
-  
-  freebytes(x->data, x->n_outs * sizeof(*x->data));
-  freebytes(x->markers, x->nframes * sizeof(t_pos));
-  freebytes(x->infolist, 2 * sizeof(t_atom));
-}
-
-/*SETUP: a float inlet and variable creation arguments. */
-void sdiflists_setup(void)
-{
-  sdiflists_class = class_new(gensym("sdiflists"), (t_newmethod)sdiflists_new, (t_method)sdiflists_free,sizeof(t_sdiflists), 0, A_GIMME, 0);
-  //open - filename/streams input(to do: multiple streams)
-  class_addmethod(sdiflists_class, (t_method)sdiflists_open, gensym("open"), A_GIMME , 0);
-  //seek - float is used as index or (TODO) time
-  class_addfloat(sdiflists_class, (t_method)sdiflists_seek);
-  // bang - sends out next frame 
-  class_addbang(sdiflists_class, sdiflists_bang);
-  //info - print statistics and useful information stored in file
-  class_addmethod(sdiflists_class, (t_method)sdiflists_info, gensym("info"), 0);
-  //error - disable/re-enable error messages from sdif library
-  class_addmethod(sdiflists_class, (t_method)sdiflists_error, gensym("error"), A_DEFFLOAT);
-  //get -- get info and send out right most outlet
-  class_addmethod(sdiflists_class, (t_method)sdiflists_about, gensym("about"), 0);
-  //types - change the STYP file from default ( SdifTypes.STYP)
-  class_addmethod(sdiflists_class, (t_method)sdiflists_types, gensym("types"), A_DEFSYM, 0);
-  //time - specify desired frame by time intead of frame number
-  class_addmethod(sdiflists_class, (t_method)sdiflists_time, gensym("time"), A_DEFFLOAT, 0);
-  //timerange - the timestamp selected is within this amount of the time specification
-  class_addmethod(sdiflists_class, (t_method)sdiflists_timeRange, gensym("timerange"), A_DEFFLOAT, 0);
-}
diff --git a/externals/reakin/sdiflists/sdiftostring.h b/externals/reakin/sdiflists/sdiftostring.h
deleted file mode 100644
index 5b2ae5947..000000000
--- a/externals/reakin/sdiflists/sdiftostring.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SdifFPut.c functions that were not declared in sdif.h*/
-
-#include <sdif.h>
-int SdifFNameValueLCurrNVTtoSdifString   (SdifFileT *SdifF, SdifStringT *SdifString);
-int SdifFAllStreamIDToSdifString  (SdifFileT *SdifF, SdifStringT *SdifSTring);
-
-/*
-  Append one frame type to SdifString
-*/
-int SdifFOneFrameTypeToSdifString(SdifFrameTypeT *FrameType, SdifStringT *SdifString);
-
-
-int SdifFOneMatrixTypeToSdifString(SdifMatrixTypeT *MatrixType, SdifStringT *SdifString);
diff --git a/externals/reakin/sdiflists/test/meowLoris.sdif b/externals/reakin/sdiflists/test/meowLoris.sdif
deleted file mode 100644
index 6de8ce964410191dc48918465424cd723f1497b7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 402120
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%0Af5}d-Xb>
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
HK5YL3=MW^u

diff --git a/externals/reakin/sdiflists/test/orgue.sdif b/externals/reakin/sdiflists/test/orgue.sdif
deleted file mode 100644
index 768c1d0cff70b59173ba912111a2e40d40808cd8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1016
zcmbu8L1@!Z7{^~%Q4>6f4nYtsPCTZ0u4O}6`kFR1gV{P$rbrK_E?J{(SJGCtdFeq#
zp)e0#x`T)mkGpvkiWe^_>>zmYvb!K&MXBGHmvluG4}0+C<$J$;-}}GseKE3&IYP*B
zuqarB=2wa^4@Tcc;rMm19*w~JEA;d2TG?_7cBW$1>sGZXP*H8$w&fbmmL(+VWl^iI
z7M+?U%t@lL>e$82hSglL+@`Z$7pNr5l38t3Oc4{bmYlL{x|@H&hFNP=o%-5Mvt<d1
z1cf*;-ELLZT_K~V^F<zi-Q38Rjdr<EzTXs*A_%05Spz10;v7FwH(&S9F@t_gj`<3%
z+%Q}BDsr60a|IQibUrRi@j2-#CWAp?nUJX$+#5fmG`B2+cLWS;6IH(ulIm~+ALFpT
z$WMVCL#}oSS@67}^5DsN7K3kly&YgAQv&uZVCJ=5cFr57y57)d{k^{WIAFKL1$MT#
zgZualb8ZA|$s4jWww;0*S$1lVs1-sK@D+8t#7@u7j@d=Xc^eq)rOYpXWhX&P7?&B9
zR2^6cOqzbgPJot>q0R)Xzi;%Fna?5<KugFTe%I9)u#dab7|V`MXnEct|734EB>fuV
ze(dYxINP=fjO?dB7@i?unh>yXzlpkN7XtQjYv0d_tjp`7B^lojYNE71Y){^Uc4xpD
zd_TUU0V*LxdwQ2MtQp?lB{<((u2Xv#<m?4;!0?_ijzYJ>6!t+R?2*IHyf2B&@DDy1
Ik^lAOZ^<+V>i_@%

diff --git a/externals/reakin/sdiflists/test/pianoSpear.sdif b/externals/reakin/sdiflists/test/pianoSpear.sdif
deleted file mode 100644
index 6d3b1fc3d13c392c82a70f8c8a4b4c2f3778d77b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 136928
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
Q;Wsz#T@F>cZ`|1b1GCmrDF6Tf

diff --git a/externals/reakin/sdiflists/test/richiepooSMS.sdif b/externals/reakin/sdiflists/test/richiepooSMS.sdif
deleted file mode 100644
index 5f45dbce5beff93c25b1d3dc088f4eb09a1252cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 253136
zcmbT;cTf~T*e_~wjw&cgKoC?ENju%WAUUZh2r8mrBp5IwVn#p&B<CCjRDy)v>7E57
z2r4F2OeiKmF`y_WK$N?m-Y=YU{<w9|R87IJ-?yiznXP5!*{=1lU+gF#ARxith55Un
zvEvFO{?9r5{eN!%IWEE<6#S3fj@$n1&f+-|#vUvA^A()`NArKwg%<xE7x>S9VJGuY
z0sBxb0eb;!0U3V7zj^;r7y8@JyZo`{Vu-;H=H{21>~cAVZCmBWUX&Qb4*1!{SQ<Ma
z=T&=oOSeZdpthAKwW*7}F2;aYSP;q{N|@Flw=9+YyIY0V|5}Q@r)x8h)hUZ=#eai{
zIV_Z*9ms$$(KsJCGC>2F;QcF^+5Xp=@X5<0uBwPJ`sIt(UN}ykon??&cpFc8_z+Tz
zf5O|;)d6-0VxH6E?TpOjjf}^$1Sa|-2Nln1<!$$tW6yZe&8svsVaqjT@J^OCA;ZUt
z%(<dnF#NC-xIJwv^iNg9j_NsZc9|A^5qUzl?)M~N%?sibI7TY%hsjo%)x>HpgQMQ+
zk)~sT@MQNmsaI2mW1jvbJ?B15+c&q~Nn{AtKa)d7Pn01p(MBncDq-Bo{m8dw8&dFo
zL|kuMBmYW0#&y+g6mt0s`8XvVdM_@Zr+vH1ILvE-+sPm1jHW*|;K5^z!nYHVIUI0E
zJ%+@2*~2dvJjr#}<!DB48oqyc5Pnf^1v$Sr!ZWLGK<Q#X*rI&``fi;Ho7?MP=B_2M
z^iC5@_jH8cJ}QGCP86D=GL<SYlYmXqM?u`<O=M>~7iS7TV`hKXB;k)gF@o{Nq@Tma
zt?gr^Gig7paT_3qc?*zS?0cGL+62dXbHIqzC@pqz8;+;E8HGDd#4oypL9s(5XZJeB
zLUJF8)r(~e--waTeJ{ww+bUv!CW#CDO}|gi#jD4Pxp!06;6%|%s#ewnuQRO&c@J*j
z-T*Bqz%n3ftwx~y+Ycn>y%T*R*qnsE8N(ADx`cIbFOFU2N5rb;fd%D5^y}lrV0fPa
z2>7fAc1jNcQ}TmybeRO!-lg2@yjj%4qEGbX?NKUh*BdNq)J8Ad4e`3{+1Nh8g63tk
zV<X?a+-UDrI5k@g2+V&>ZxxmTgPPT#<J19=_2MoV4fLYF?y>|fzTb#I3dCn0`QmGa
zXED7nht&o=@xF5{K*%8#Yt3o`h5jC3rjrn;_;d)IO<fMOmkxs0sV}i~sTuWhcny)U
z`-wa49dKIl6<jfxMWwoY!u~xRu)ku0nm-@{Y6mn}T|RxF>+T2<xp@^PZ!IDzEupYm
zTb>l?X~PQ>llZ>yTqr%K5l`JTOy`_mk5%sep{>Owfa{l7GGD9-eAbsHmuk3hVFZVe
zwF4l&yBFV#jl|NGyI@9E5|PSW2;aIzlNFC2Kz!7WsHz5oCr@sZu(gZG)Y0{%^hFm*
zp1YD{>#QZQxj#sw*+J|e8cObHMgs*?4^oh1L5C;MI8)~l=2<)f9di$ou(Pk>^53E)
zGJgpAR_`M6d;Fo8#TmNm(+BY8a6CP-cPm(+J|F+MRe_VdAK=T<x%lI*40_$=v$!5U
z0G*DBz_mRUe6-#RF6mdYZYR$Gb{}Tp1=oztBD}s}-=&-APZ5{t!;*_RnRz$qjjKd3
z?Ab%N8a81aIs=%)_f*X1=Rij=j(Qf=O_e^}4(7Gqq=Cl!I>mq+Sj}w*eKvM2*V9(A
z{zi@zrM~Y2RemImySpHd3tM(#rzSg`73Rmic65L~ul^q7M@0gA{@*25G7iKqH=Bh|
z{RtM_zD5Th?WJnoxM1JW2-fPM5Ijo1rN#zbNZg;5P-K}Rsk4uQ&I0k|_}2$esD37X
zAYu%B?rp(AiA(5{m+oSZR7}^}U@lHir!}V!)5#@&u(q=b_n3D+{p9IGYV`2~)3R7w
zV7&MSn0fy+H545OG|U&%I(B!dQJIf4?}-sLJ$eHUP9Dc6KW@cy<0kRWFH6C!06$jD
z?@q9)E1w!fwN&-pItoY2n7RApfawXEtoSkx)E7O*;Yyu`=XD>My-|4zFaDeZ!Z(;g
zr;h@FGqN9)SeF8$`|i}FtOm`5kJ5L`*3(gKF0|<;0cu=g4fTO@gDSnp1G7wb)3NDK
zS(1}C@ygG)F)FO0Z;zhfzsA;>by!^`kqYLN3hx|gSz(RE7e<ndAqr<a`hxGg(ZI%j
z-{^23W2~^opML!37Ohx2#{D!VN-4><a6&S3xEZpy=!_$c+@5G-`pL5ZirZbo>U&)a
zjL++UxlU85D|_dF4S%BO;|9~HE|G2=mVOZHef*6Nbt>UFwN>0VGh=aJ<N`45&ma2z
zAvaLN;eZ^KQqZYy0p-en(6@_~fUVakkzlRFRaz@?zx!<>m6$>$#Fk^-J*MELPd-@o
ztslgmx&)3}DpRt@EP&clRr*`MJ8LkJp}z;;s`sdyPWM>q(#caU&|PxA^u1rVX=5dK
zth(wKcVX;qOkD%OVATyOyx|H+8(juYYiUwLgL^=N`FpwqX#(o=5H26Ri`}Pe!R;3>
z;g?Uh(tBDbagCP%C{0*HaV(0!q{#s2dDaV%)-2FjUyn6_G_XjykH5?O!MB!{;ukMP
ziCDH9uy1=zd+jFR<NU>-_|+ERud^DQUi=N~edEy<l?m8M*?{KhZ0APa@1s>O-(lT7
z?!+1tZJ`{;%BT#*&2;&Ln^>V%oqoS%3RWK<2ioHa)QgBAz)F<@c0L>~Wm!d$fdK3l
zpN75WC}HiY0POe;gT=+m!IX>rV2}KIkp0t|4j5WN8RTxqE!}<ihLJ87KYt0k4oib#
zjVz#iqyrq3%L6-3c2n~PUIX2&FR`wi2fe&<7|*<LnpRp*)61w=bj7XN^jNPq4wyf{
zDsz;ghqE+**W%Mu&F=tkVpRf&uRKd#^lkzhZ@tAcY`mxk?}l-BVGOqPPR2BG#ltIf
zDfxs~SVrgrXo}oQ{kT6Hgt<?ElU8?t!bSxUf9DJRW}_w5qiBSK7g^Csc{g#QofOV;
zPr*Xl_TaEs5g?Lx1}pk41)-k;slM@bfT@=OcMs%Kzl<ILCcp_t=-aXuYL613EJq?}
zW{J;4WBgRt4baqWFty?==wIInI8O1bE05+=MPf^_&zes9@}E?0*}=P1O`tf7Gc3eO
zbF9R(1#__;uhncF$Db3mXN-EetDD+;bE;Wiq8v+<bA%3|Lg|kV#oW@?AbNeqQDBna
z0~Qo3Q2pYIfN_iy9k+NLbwx)9ukLKc7JcnFbj%T#3)@rYs31D!;2_BC&jzl`rGQUb
z8%Wu@fo>sU+}&C3__RkG2JREw&wZ)%frE%@9!;Z`zBQzt49x|W?>gw|t;aZ7+q-az
z@DJRS<xIC~f5hQe8PIXp7-Zig;NhonFor&1p`S~r{7eq+bi0BzmjA@QHQqRIa~&2t
zLF2QPKdFLSCD=@`3KXs@r#h3rg0A0Z!H;q);5W(zllIBDN-2Q*z;lc!`Ao$<v)|+F
z%NqEz)k~_l^8wBZZU>Dg9<c8G9D|asLs0Oi2e@<E2(mNQ;1#EeKtx9%Sz?()6qjWZ
z6PXGU7$XQ4?smfKE0f{6IX9uC#{=+k=1K7A^aA?FFLmJhK?8fThN!G#W;pN22W)le
z0nUzX#O*sD&@Ow=;?VswL0*n35M8|l<bE>)9uF>4{sw1(e(N&sxRVDpY-5L2R~(_|
z>IUQaM=R)Gfkt$Ft~s9R&#-Qc=+TLnI6y$mnf3MadmxlG14x^hP@xjl)YUtM^z%`9
zI_2$ZI)1Ez8`U>VxxG3<Z3>v=p5jb!RkUe3?cxdgyk;4<&EYq_%H$Z8pob_Rxs>wy
z7RUO)zaG-1)%1brZjRRMD;(XGIn?l(D_}u%7o{U{j%w>-W5c}{>Bc4ESjg%TeNA{4
zy|_3J+jTGJ9IkG~swy8qxVIu$+7|&*E~f*cR7tBmC<m%lCvaI}B(^OX!Lj4<IN`w&
zv!{j{STQ;km<iruWd-VhMSt|Eo{>1}qw-^5d_#h=Jemuvb1vd3cGv06l{@eWb_@2|
zm(Cr1FrPkD{t1XrUrU{MGKW<zIzR`qrqNqoThbq<Pg1WU<)~WIX0SBo8aUjY$qIk+
z7N}(9;1xql=-iF@_=r?CKA~<&Gr_y?28km;b5%J@dd+TdILRF7YZp`BxYxj(%*Wh%
zW&w4#Oq_n27Rx$yc?wnz_MqF`o?!9GquBWRU2bl{Ei9@!pL(}sJJ)|+6=3bAfYinv
zK;iOC;C4=r+vyxm-I_9lS;tf9y0$uu&Szm;T~V&-jZiweMg_<Qi%>~V)=&{fg{()r
zp3w@HcWBqEV`h?f1iAa~T2o!p0bokLELEg74m9iBu$1aeI()|?yi79^!(E?gtp*nT
zBViTQvF0Z?h6n&j1z9Ss?g{l`!wn$Yah-K{sRQ+xtxaDpmEz9O(WieOm`P{ss-j~z
z1=G!_kZbPFrOWj<P~LYWxV85bs4L%tsg*--s7jdwRI@-otF?whmG*VhraN>giNaXA
zd`%Sh;;%-UtjVWwcsqT%xE+g%oMe5te1SfYX${2YA}U(<BM{su0mKHhS$#IMsoUEF
z=~T}UR#KBAJvhCX-e;Rd*9Y3s*EUvgd*AM*Ta0Qblm2V8VRkQd=bJiZy?GJ!YP%3M
za<-k)!Wz_*zFYM1jxDTSStWY7xseVV=%+iYT<Nz9H*q;{{OQJk)zqmxS8imCGW9f1
zk~#{6sEV`?ROj#GtW&?YP-pvx=nY4=uu2W=>6Y6TwA+>|^w}$AH1CxOx4vpGUGnS$
zWh=6Pdu8<=ie7nw0@DqtvmZB7oO*HAy`!h8vvZtilbJfKhxW7S+VEc5pymr*)UkuE
z-2IB%>voPVEZ$FPzvXfV+K*7@8Vx8F^+!~}*27e(x+Ux5jV)CETs2x@^%2(CW@)<U
zB%vjmf6;lRG@aLLK?{0#(0SWrDS_1qv?#BH%6@Fb8ou~~%Dop#Wy+qTq-U?9a@Vcn
zzN}E96fX4AY5IVB@2V=D%lbekD*;-m^ctNTw~ckVfJ3W{R#FL<<5--7gH*0ZA{Ccj
zLTRozM&-_H;g;7Oq;!vo&}XzuxH-Y*bnfbVbkzCv^qi3qI=7;k6(6*Np5L{WicH?k
z3e5|ra#P<@5x4p%<D60|*V&u9!)hr-t#F~kws><_HXWdIPv+C1%ByL%YyzE|u#06L
z6hkliSwtP_b75&^ETVGH_);N9-%z$0H~I5da-|i&P)^ipdjI!f&X6#Feo!R6+t`R+
za%(!Bdp5_67~0ayFX~Y{f-jjx&R9p~hE`GmUEY+(B249a^>EBiy`nq^7SdZzx72sc
zAEa|LTIdbpFX?rAC+OU}Ood~ykMT-(J3cQI{tr(O;{PuAZ~U((%;0Act55*}yUJ^g
z=3ecU*3&NQS@Q?&S0+4UpE)tFiTzp0nm=HF^8N?*4Vz?Zp@`Ym{C@ie?^d*=NW*Hv
zS<kwVpYI#KK;$*6`SrOQ)-C+}=6);cGHA5cI$vb{lAp(wrlPw2;+LG2HEaX~1RNyx
zwV*v0w5<&v@3K+gXXWMhkWx!wi`ddE8!djG>0^P|P}+L2OqC5^Q5@zRQ9~hNJyw#O
zBR1CjY^u5!IqCkiUShzrapUJjO)HSI(o-u@w{12X`PqI>I$AjO%%YdiciHUW=XFY*
z@TH34C9p5jCX}D^#Qo5Wo@vbo_T9FL;^#86U2tSZx7F|_woM{GS0weLsh$U#OV7C5
zWb$)uLI@HqooD6oOWdZApSf8J;rsshOY0m(Y|im>!x0xa5XQEa`<P@?!_V)FO5itj
zbF0apjy6O<z)@7?1nfyFYFX3}Y}3Nea@Ml2_jisZ2tE3rPGoi9aR9&cpWFZGMD<-^
z|Lr{r&i|wTulxM}b)rUWGOu>4^zw!e{@E6hUEeIUUFMm$ICq%$>gP6mW9{Na9beWs
zP31vDcfgT`OZMDG1uGZc*7UK4<LgS;rTaw9V`};v#QVg}FGN~5^gl@DRc@<oc(1v&
zp=y~G@2A~(gUye*=6ZLIvo%h<F$bp>n2YItVsnyp%vIj4K+)1g=IYJPy!rMa?Bcpu
z-lEQU-u4r>*(Tl{yjQTrT=UI4m{xk-d|SD>`OMBA=HA&y*cazbXTNK-Z%{on$+qim
zZ`hLE&rY<P;9VQ)W+%nip%Kvm6sq`*omYN=r*-T-+p0&E7ZV>r_I)hi?f&_Ssa)v5
zJpVqEao%VI&KnVuZ{dO(T5_T9dSkX~_<8hv*8;YtsRVmAI~mp49fGxQX5li6<2;wJ
z6Xda0DDU)xTqNf8jd{H(79|MVu?1^-&@90}><!EsqGxm%g?XrwTanJZDRbK36@fK8
z!x2OD!hJgvIj@?n(x(TvingKln72r?=m}XLxBxO6&6tauq)FfYV&?p%!%Th<mvMsq
z%wsh(P?-Olsh!w>GPmC$PZ#T>GHMh)*{_BhpF|;%ub6qtTqAC+J9yKmDn?RwB~u)9
z1-70vKsqbWqI;YSl<{E(8cjEX%8fj<YR5`OY2F0m<GGU&TI$9Vyb=c$PP_9Y?L1LY
z<74K6)NGV(m&Z(tTESQyTFGo^9Ont#QDgA_KqgMChl$qdfXQp~$Xdq`WGop9ot=-v
zq3d3-T6!wX`h(Gwl2Ryew*%ID6yy4?I#PG76$fkeGqWuE;oO{iB+Yjoynk{ZD3{#?
zzwT9l?3K^qj1~>3I66!sD>rjjepVs@8DEM23vKX7QkN7n@vuT{Ilg}&4^3Ckgl+fY
z(5gsj*vUJJG!~YU9s>+#UQ1#QrR)Spl-(Gs-*(W=f=vp717Qjpfw~D@F#4@L63`k1
zBT=hh-Sy-6_0(!yS(QqPYZjAe+eYG~DoUo#REOuvhoIh?4`{B=ZY1yb6kfjChfLqi
z#SgI#q;okWbLBM>TXT<`kZofuzp7GE^R_ed^7!Yu-5aV(rlG{}qbRHB1X_IIB+9Hv
z0cG>lh=$rH>dg3BreJ9Wnjz%C?DyV*vdT)J{4Xt3w{{R6{p^n-7k@`i1KqHB!k%0`
z>rFP7cro>UD~auy5au#D27gR>!7P7x4p|wtz~aNNsJsdV<kK~iIq)eIh8;h}&|T{o
z?e1VE)7PF+j-^S(tiABU!xc!aJQ3v^ZbbUUmgs!B3dvb~75?&`&qSxrXM|onWsVl)
zG0U=LNZ)uHf!3|y^YwN#XHz-M_6|aunFRd2uMbV@Sjb4e{{VfO-N@@6O`>P@0Iz5`
zN}A3tfV*Fb;vl6~c)_*-$%h%jve7`a*Fg(QUVDhFc5h%reEgxz+#ZsAY=ST|_8?Jz
z5z;jA7zOmCuvDLZf<ssI;8|xil7BcB8b%v2$cIPDvqKqqUJ0XisR5^M$RyAG3?a{5
zo66tz34UJ{3j4&Bpn2R|B%ybW9NQTWJ*SS7q;st#%v1xUyHt|*r)I(W740PF2A`q=
z{!m=6#qjCza(E^74a{CHhGe%}5rvK{D665&pbMwT(?oe@$y-Ar9~Dk?P75H5;$<)~
zJOv&4T1u?1^uVx{?##;6os6n(5u>#sg<;EDKxNGYvU2K1B)4@t+`N1(Y;JiAQ;Kf`
zW69%?eefwcC9OhC%V&@;{Bvx4V3O?k^M_&AordlgvWeW&2;jL+6YeS>B%i~Fh`7yK
zGV#iU{Q3C}Z**xTCGNsdLX%4(n-+iq^KnM(UN7W&x|6~pTeM@#C#c|g3LSKHA;Gb!
z@WjstOz7>^G^bpFv6kP9RL^O{q!$~I^FTea<my7<IiKORm>uL^>@X4MJtMDDPm)Ti
zfLI6?Vvh3|oT{`8cIk@3w6Q<Pf&NT{67M7ZuV)zhb<S{^SP~ieq7O>V_0jB*1f>3<
z1clp2pu-wxq1;g&NIrNo^8>e%zF=F@lv_=%Zy1JM`7I!8Q6!qxKS+H!XA3vQ&L?kw
zY$xj!YZ#$=DH3l!M75t8Ar*QTVO!oP>1%xoTbI2dcAGcD3QjZFb!0kJUALYpQQin@
zo{Ga+du!nh_Cr{ax*WdA(u109(}=>#93tqZ$t?X54yQQHV`LWiqhQOcNThKCI{fS#
za*26Lw6}(mX&-Mg=3o06xUU_Dn9d`x<}eapI0atW&<<DZ?t=QgK4fRI8?iFY#L)c{
z@SMFH+P;4T@p3U@^=g8;V0wVjoU(^}X;C8u5jLbUZ#FD(dkG%#Rw9v2*J1U?m9P`h
zuxq#v1h?t{4LL$Se$-<eoifQA<^pp}a~kY!Oaq>;eNe=Madd9M4VZE?3`GZNGVy&4
zr24rhbH;H4qhoj-roX9ymHj`E!<Y{;X>;Uz#ZMS;@d7z2JAsqdM&RkoZh+j&-$BBQ
zP;lGcm-tNHCbc({NugCYGjowE)Ex{X$^M>5I>-fz#)!j*r{=-pw~s;OQ!yCz{1>^i
z>@_*`xRPNX$!C@yFC!Uhj^vARH~iU~1}9lhVDJ4)$om{a-WR`up_LpaTHcEh{C$Zr
zeY1&-Z)^Y)tIdFyu{FH9(iiTRbc1#WpF_`Y80y|~f$g*bm>sr>|9bdAu4!80JHDxm
z+P)2p=!hjT%t<DJuHTW=W)n1JsR@!X`iN|U7m(oRHB|PckBr@6Va74EnvCx8VuFj7
zLzOR^8JXwb(X3=AxI#V#%`*^0PTAq0y)z8Sop5I6SzyAu7SF&bdCX=#F}S4uBMC_v
zLWkElqXmAUNc=-7QoA2RzQ=ap8%?JeI8%ynQ)iO!=t(klg$|VAFyO_Kudscj6W*75
zgar31A@%1)Fjd_Xwrd9C@QVRN;QVx)nvhLOC!a%ZYz?SU(?hy8-AF3M6;>C1MnWN8
zxcQVKOjo^1c78nw#isa@gx^j??8ixR@)#i{S`cK|O~rW%qVS7@D||Ni1-`oe3Tga$
zj)Uv-p`+|nGJc_%yeLQ~ElOLMc@4=>{FyP~Rwuyk>0{tm7Jzk!ieddSF+8$N8X8D!
zWMopBNccQGM)|`@MzCfHaop8Q3Z72DGZ*}z>^CuZHS9I)a-I)oW^9K=-ip{E*&9r_
z_<}_mmf*J19vFKy6KY=h4%_xVgDM9Ae3-uvo`|l2kK!-Gm*xgg5VpZG*GkgXHAaL4
zmoc&{x09#Bu|(nhGGdgS2K(#vV51rvNwu`Wr(<`aU5zl<{P-srxnV-<$%Me5JqN*=
zPib_!+Erqt7fXDLj}etj1JJec8GL<J4*FhQjSMwS$kOvBaK_aM67l{8Ie7dD<Sq%u
zP1|3hrR$ujnu9+O+D6m<8QMt4`Zhe0dm4$yJV&DE#<}sb<<O_|1o=~>LBjiL$!Y%p
z;-V=ID?VR=@yUOX!j!{EscjD2tYZV4-dB-8&J{XkXEmwlo=Nr#+mXXdbVzm6aeAJj
z4St|M4$J%F;iZ;V7?K_ZuN6NfLF;GZpWNT1Yj8ayc&vlgr9Y5@*a`UVPz2PpY=%#c
zC&M$;1ehf*O+{`Kz+-{y@UO6FV368RM}6;t0?SUat|sYGZPV7^OI7Eo!B>*_c(w=_
z%6~vv%nJc&UrKTKNfYi`9ed(`tP;e!Taw+e-(lMA>(tK|N8nXXG)!Mo0D;#<Se?HG
zUmbi1<MU6Fu*b1bR^5&yBU$>xz7zPy$q{a~hymPCn+JD4Yk=k4a9Hd604z%q1xlvj
z<nVYlsf-xIWnrzvHO>d737W%*r#3Lw@jmQ1V1_T;`2v^b5^~J6g}S`{2mkZItNizx
zRKOXKg&U$?QzfgGLi3$RF@C!rjLetCWR^MjvcnY1PJ0T4kKN?Xz8wcD%q~+;f1ajZ
z#aV%{<#+J3`tLxubdqS;=}@6|Gsv<9(V%`}KHe(5A4;y?4PM%{Q9=t<L6~M5QCwn-
zyJF_zQ*X5J)t#<T{b(l$H>-vgx{{ztm9P?j#?kKw+4w5{g+mW#<04mKI`;k!TrIqq
zTSNkI<g5!o$Mq-m`g|dr>bL-8e=LJbHm#%16*<EhTN?2O?HsWBPb$txhxC1;g>=<L
zWo+Cs4b)HBP385TfG+iGpw#^VxV`@qbUsdlAFN8y5+O)G{GElf_K#uhEhq84ic4T)
zr4`jL=L6CbgQ2LCF4n5O11cY75UKbWI)&?l8;q>6miA66HJ-;(I(iP+n9}vV5q;c6
zWrKM3x^DW8yA>9`|A#wJR!Hq~l;)1~7XXn#hCUY=OvMc7(5tRFaQjOLr+l*`)=DMZ
zMv-tF)3TqoKOclcy|n4Lh5&kO#svL4K*?;+i*&4B{e`M-(4(&%(x*PN)^o0fg;3cE
zeUwXS1eaNVk=nkSLvz2Svijnb=`i~%^y;;KW`E8*V2z>E)XA0u*zR03RUg|$4~xE|
zIG2vIvKHi1J1WblFN`~Pby64*d6q<Tg%Oo`*Mc65d(KrD*+b{dK1}DFeP}wHy_~Lh
z?xxabRnW$Z5~(X98(1AwDdm6X8&#k`%#Eb$sJb6YboLHM3U>6<HM~gf^@%FlY|2-<
z_@_SW{<3E@M{^}r@-B@A8(OIPXd6~*rYFTxIz{EgO>o=4U8Bkh1L?fFGD>}H6@C8j
zS?)7QOImyJTRPh;hxN44fG&(%N@Z`GLd%BVq6*0;*6=eYN@nXzDvJ--U%j_cSwqou
zcC$6>x1<`KJ-v`SiDS9nt77O3n=neeQ;|-=NmO>;B=^M>Zz?tY0VVN{&FapNpwg=b
z=qW#PsW{GUI%n9H)mG+D$N!3<6()CZYcvs^Zu5%L*85JMnHx!E&s)R2_#&K&(wjl4
zA1Gy|T(qPz`!CV@^$pZ%wI6i$wLPqKUk)91-JjN-wU`@_b&1a6^-#vuZuF_&wN%FL
zm)x*pH>g8bLMRi_L6+^lVk-C65!zINO`WW8qtmTISq=?X>AiCYXiHB|u8ztPI&YB>
zg#uR4!S7#F8DXuQZ`EbgzDHcj=@QKnZMi^YmCvQ^`~0Y_6*6?T(N?nykB#Vn*xR(r
zg0-BCh5WG<A=EOp&-CV?UMg$9P5q$U4{FO`9JN|uxtXk20hO66K(9%AM|obHMdup1
zS2#Qv`sYDHHUGmC{&y#u%SVZSPE<WUU?Dlf)hh4JdTaim{qiYF<_i}6Zkge{?XMGs
zha54_K7XjW04%k+#;>QR&1To`nY1di8~p1=+&?MkQo&_w)weQ#-Ke|fBipZ0s`(;I
z;IA7E9*JiM<bJej*tY+#8~yZ|&0c-|Wb=UE^1p5*Dc*uc_l8(<jf`!y_|BqnZvndV
zYn|osO-}!u=)F68x@)MlQIN-9Co-EAf^N6EG~W)N@z;s0^K{u$*KsV%9*g{Sp|x)E
zD2S)u{JEgT<_`aOTLT^;;~BG?Dh^DwdCbqd{3_w7(2JJoEfzK}`T5vbI7)jy&>T0E
zZS$6&qeZ=tff#8{d<kqm^YfWMZ;=*bX$>ER+KlpZiZ2_%ApPbRztw-;DK|w1wN~9}
z9uA!I*PTiw3Ch*k+?@Bd_MbcH$fL@!!&bJVT7TWCPB0K<ZnLmfzoz=nna-_2p=wX9
z#U3Wu^3T6RTVo@VJ2%`Syw}WDgr7Tp_@S9qX;$3Ki?$N{d{d<ZZO;7NVsN|CmXAjc
zcXGzjV&z^d$=vU@3jF+BAP~*_Gq*)!dGbHEs#=7yWYnzX54hP*<JW(uKSiGGXI3sp
zHrdYLyOkhsCz@m5WyKDcwpHh6p`3+iPTYg$rpGh>IoGO-DF2sKv(cRyw*2ekC~evf
zAN{;#H7U~d&%O3-KuNF4S}c^HtuDVlZO$Jwf90uW%X8~(=kT+#&^Vf9k!nRQ9<ZIy
z&(rHZqFLDy))qEnwnqG{_BIr0@IbS(uHApR*{S~zH|t!&`Cr`Zzx)5M+^p%kM_OH|
zj!RQfs<1_u8LLTmK+)pym_wsm+%pUF1!e3;-$AH<`GtknOWy`pNjD2!I-$YSFu{Co
z(ZL4rD1i5FT$y=(st}!zIb^;tV4t}p(ld{h>19{GS!I6F;RR1bZIOAU-ZI|Ts7!O$
zBh9?_Qd9P+U0aY}!)e6H%w<2zi(yNxYcN+V6JXDuV{EP&OtVv;-Dj6~M3~E^>+(Jw
z-)8P~Ik_R~myx-pwqrwRvX%L)kWCHjP4~<_N*o%biagA>7$4xJ&G2ORIPPPH?<X<M
z^jfCUrk9tVaFf~PX2RPtV#sK$a%CFYPcWj9`pnGLOUT7xB}Re_lfi^IX5%x!=<Xh1
zUfJv;d!s#hs#qM^`{eUxtzXQZKAg^TyZ)XXCYHzBAE(4Vl}Ph6mS1Mij)i77{+vMR
z>(tmn4!Q7p##grKr7w(!T{zpd@*Yq9z8m}SQo>s?w1U0lnGbKFniL8ogG|$h9>#sG
zJMqv>VJeaZkmg#<bS(LZq%Sov=|A#tz+f^+-9MFlP)$Z_o}FSO4kVyCAH*1Gl{C0<
zU<<QA_Z1_$A(S!Lq{uv3OOa(gYk4Zqq~Tb^3ZB6A5tOmz6>~jM6fy5sF^yp{C?s5x
z@e+!L*O}{dj*}*yoY{)RH{WK8$9JG5HamER=CMd<@hYB$#2|PUHH|0Xa0}9`WTuaI
z9ij4O2EW6wYh@>6f4856%Uow9=BhE;rFD#9^jcE8^fkl&-U1uEJ((%8f{3NcB9l)n
zk*bOz1K-R+65*Ix(b@v9I&5deRR^)hGcUr{+)aA&*8+WJ9eE1&!PTGYNs?*^i~|dZ
z%{Lji)X^G$ElI$ffUP*uXC4F2&&L<9zh)|5D-rhB45lujmnb$fOk(XL80u%q?7r2C
z3=FCmak(a>^y&p(v;siW=igy|P7%mnorRP}+TpF~{Cn)@s%Xx!ThKmFA1QyDO0qw4
zk+9JhM(I`t{8}48e)|Q&C0j*E_9icKDoKp!c&=ck_PJA?B~oN^(HzK{$tLEZd!R&~
z5cq8%LJnpOBkgJ)v(~W*mEMkLV$a5+dh>Qh;XFpx@rl?$y#)MxuRy%E+F|WIIpmZ+
zj|kQE!NwC)$jGk=babmW1C8&Z)55RFIRAYpbVf4}in)V=VmBgbrB0-;c^HYr<iizd
z@i;O{oDqNPOcp3_VrmL*f&|kP=AP>d(x=<Q6ms*K%E3uS&3qoy@ooon<y0}zo2yV-
zSpj2r{vCQ7Kfy>mS46iaV?o7|&B%OnGV&chiaU7-Rk>J^Pkir)TOG>3o}NfW!iibm
z2I0k!O^lMk7-;Yyob-`)Vylx0vC=+rZ2noKnV3pufJtOc4nYOeD0uUoJW}y=z-uEs
zk;Tmt{AEiA?A#|y*l&LTJzK=+Zm}oo!U4?jUxkEGMGX7rM>1;sh_FMw7>WBV@arjy
zk$;~7SMCWTWsB~@jBmHVs|(9vqUCM)ai<Koc(MS^njT0x+x3vjIRi#+=qK!&ex4CA
zoeAEpHfMx(rxLZR`$>iLOA;-y4s^EJk`<R{!lFl?DTmY?u+caOUO`jHpE54mApMd#
z@RmV&*JGH__W&g=>1Kiyg^<~rAm#%9dHLDbz0Ausr=h2}BXd7XmJ|>fCZEb<0)G?6
zws4Zk6VE3Vn?jiAouZhEu4nWc?$ObG+QjjJKiR+ZD?DRJlNZBmq!iFaD)sKc;lxQY
z9jn1<#ZlzmiJzc5dW4Bw!@yECS*Bqz4+*|(WvWk!BZ-HGjK5?t5;2Hj6u<f+hltsX
zRaz*@j1OjV?LE<X-}g-Yw{Ix64l!A|pV0Ovf=p?EGb-|X%-nU3M9<rXnGTJo=<3}^
z%&Ct*k*n({BT~5zyw%7eQ)+h;FX}aTc<CtN<n+TEA1)J)#!<AQF&_9hx}y@Chsb2=
zEmSAbflj(RppXzA+H+qXiG8v}u>(#JE8j*JSF1q74O>v=?=n2#jZlnq9J%$#0%f0#
zXY|f)L8o-a7`>_@G=1w@(v<86-AvVqq8m+}T@Xiv)E1cD4f{%#G#vnsj=d))mmkAZ
zd>6B9i-Zr8R-wgC4M?oM8^s--fJN?QXmgDnUh;emlHG9&@9lZaf0izQ=iZm1BfVB=
zdt4zZW;#&UhyuE_o3N*^(Ly(dez7U>1L*RmJ8Y8>DU{~=ovjpSibVG}qtT=4be`QD
zG{}BP)H+wA-X3o}Q{XLXTBSytusl$<k{15umx?kJgGsD+C#vfnA}>9QQP*)(Mlhld
zb%jKe$C1gX<eD{E=dlohMfc$@?l2gAXo9?6X^^31iKyCak_oa+MZIT#F_B{j(B#q`
zjI^)-Tgt-$iEZ>{PxDVeUk`m?Ys<6P_8Q7;!=wrJTDe7RljLwVYg!RoS)&wv;NREP
zOKe3)K2C%0o_8S`Wm~)km!aurd$5C8E!yqz03I<hL&blp;P;L*sIgQH4(E#@QZo}q
zRDMJ;U-yCxCJ2siS^`)>mBePj1YDvrz<8$3LNg8|Fx;sbD6)Af^A>JG1%DPYpA0<F
z+4Oe|E&l@1gL=%A#&f8BM*-{@h(O$kS15L`7%I{9M(2PJ%97uMjtLE-$T{|~@cs+5
zzOsz8eY%V+oOUu!o1db&w#ymiHS5vRi#x!`yLJ>Sx)-gSas{0={=hdwg7RC}psugS
zk>Aa!=pm?q;p#Nv(SqcT+;w#FYcvB7t%8YYJ~M4%l97#mNaSzaW6m_nAR(^@O!~fs
zsKm#Q2?|<>zATkyR5tanr6P>+fn*=HT>BF=tL`~lGA9xxJ-&bjpZB2r2aTv8TLMLV
z=tgFH?jUVXb(nKV8?@_rQ4Sv>Nngh(HaX+KEZ?aB!NE?(y+#i9dEH=Smfu7cUx&#y
z*)J$VMijeCnjzkqDyms81r-OIfp;Z+$gy_-41}n|lmq@mV%I|Ys*e>J36#gx8g<M9
zZB6j`{9MLDz#a({iZfJ*0NNxL#K`8{L8nwZi1Y4Xw8wZmOx)3r=6F>gb1_Sp<na#e
zFIb0fPlTeyyDG@@(w(qrXBjgmF96SVImc*y`b@6hIYbi6Mj4~IhoHfwQf7(8Zus-W
z0HZ4&h-S`ABBclH(G1Cc*4y)E;BeGaNF7`RuiQEb7x_xVj$XdU(Cc9F!QW7Bt~uNx
zl}^Mzq{8Ia;*4C)Pxy8HG{$~uG6GtM87;0T@``vy&h+}Cr8!M7Y}^XjDy~KwxDLo;
zTox5riKFdRr%~e6{phre7BcZ#i?Z5}!iZoQR3ux6OJYx<bFN9Gu=N;f^fG58>{Zd-
z=c^cp&c&!pVvt$aZ-zMDm5k-j36%F6F)~{cQH0ullB2X2%?e>i<gMxOa7;ThZ$&$l
zm~F#k6%4|lBt@nz<~Gdz<-&9n+=i*qDooyead`jvA!hE0PssVYIo+~qH%i)n5O$8g
zKuP9hut}^A0ns^J9)FpKj*K(;?DU73Z6eJ$E#ojzKgF1pqLNIs@<GP#*BZvW)`4->
z>?5aKo0tvdBhYt9i#hOB2Puh#G5f@;5zFu}W3ze-()T+~eyi&vdCe;%=VUn&9<U>;
zUUHGp4=1weU^jd%7eqRkN*FL6#Z0|vhh39TGh)g6h+0rRIVcuMeM&rpO*Qo(Gg*hP
zO7<h&BkKtol0%kRiugn9cck{*fVHXTIt*uVsPk$%#O(J?+_6QPydB$5taf{oNBgCS
zy|xEg+q8^aRItI~{OhlGU@jEC)W`UoZicC8^OysMR<L`MCv*6|DH2oO!feb`L$jyp
zF#3)G$V9k+v<}80&7<W+xrvP=s;}dW-Qw``O-Vd*YZt65u*B_GUc>noH&{ujbHSoB
zCqeAcR&Z8W5F`p{!nt2fsrMf9;GAs>@nWhOv};BX#o3oQr_|Jmr{OJ}X|ar)&Tqgv
z{jucSfy>~e@C(wuG!M$fJ|=hH^+4w?WzxwkgefxbNPYiSc*F7!IiKMNUux-)GP^mj
z?a?U7&e4RCp$|wLYa?i`av{eqnc_H+E5!ZqF(S|ZA2zcvf=Iq?Bl5~lxLqNhSj>r~
zne)=bdFLqDQn(R6-x~l(qcrP^eKM#t$p`2BMS&(24SpWDf{F1K@Mx0~2^;CBijXoX
zPMC&y<+Dlb)J(E)$1k$w{Qy}jI7SxU@FhDVWO3uN6Xe*cgRJDQ9VEJ;2b4<Jl2fL?
zz?&Zi#HsTw6r84wf0s%@agl7?)e#H&Snl}!mTw^YM=l=f`T-o<_TuK!O+d=s5679r
zP(%1EcCtH5WoPSR;mb3*6Cv~Iw%Q16rrkrA9le9MFY2Q4Tz{<mb2VKhA4KQHwb2Sj
z41Ij15NB{Sh&B|nHch$=Xhla$mLIK8`}Qs|i^{H`t3_F6&p(aOmv?QXrWDMl3nV+J
z!0sn>(P~dhKjko8Ef&qKsfeL{-z(9fzhBY9RR(lqOa`}9@;rUA;S2Xjq9Cm#C(CVK
z+{h^q*5^*08_QCBx0OZtOS5V-7P97+Z(-#JrJ7aiDzc6$`Ev3Vr?cXVo^moLJ<NWK
zEjEkCs%G(eO=b&jEHRySA;>K2<t`2<@Q&Hc?bqrv<8?V<b4EBP^nt04xC2L1BZV_H
z-_dL@SDv%{SXceq>V+mFjTLpbzV6`oqvCqW@inF~Ax}6F@q5hlPkET;DM#0Lua>Sq
zk`QGkda$IfDVJ4$KgZc@^NMngVEvK$->tr;XI%SDmfSkb@t!MEds-#MROhuS$J5#0
z^wmU&X~LV-`m+_j_3z8`&8+uY)awtdtJiY#GxIXPRUcAzw!Sv5#dN*-Y|}%*G$-cj
z&ANBK^XfOHMRDR!wAQoo_SByek>$AT6y~It8JND5Q0KS@Y1L<$#hMzzTlET26C8^-
zWu`mA<V;f{dpNlsRi+`yY>s@>jr#WJMvkM}I@1q3rgJI=mT(q_RoCiIkLTFju&JMz
z%GA%9d)(A?d_5<{ZK0Xp&jge06XEq?cOy;ni+`DZxcAjG`eunSURi5)O`wxwJ>F<0
zD(q@}?ad`K^||_-*t^Hgj&|JOSl-X6-|iSzuaf9wrn-p52{9EhEr`oEJ$|6Pu2puS
ziNJ1_*$zW7j!O0W+VR?AQ<Ez~W&%y0IXhp4o1N*nQa{@4Q`_1rRaeifHCv!_o)h1T
z&zpTK`sZfCg;xLV3IDsBK|ay^zw4`Bw^_`N4Yp)n+Sr=$*IO~|T#MOv{H^4qrEK|K
zcJEZQEHvLtu}YpFX3d{u?|iG;JW!^4k=6Z@zpfUcAz}XI?rCe?YL|bm#ze4R)2x=M
z@`|<={QmNr#q5}4A<Yg;g#S8Qy#|jh$~$9aEArZwe?WWQvQ|`+qi5ANWc1hFy6VE%
z30X?bRr`nkxtm-uJ5qgxmA-<*Uw8X9&xIXh)o;}?+4|Srqzud1;>A>R<(Pu4J>P|9
z^!TDNA1CXX#xXWp{H)QFiN4l}w>S!={&l#yf^lryv9#uGrv_}D`E?`zUi2b%%cVet
z?|)s6HLnJZc+9ohnfv;$%h|+6vkzRav9>nqwRPe5FCN{GVkUE2<d^UH>vUeG=TY|C
zgH~f<cK@92brSL}x!WAwqWjnBc5g04+P)u}CYsm$b-Lp*0_a^!ueHN-Nn1Dm@xr4{
zqM735&GN1n|GHhw-a}}aXP;HysXw+W`StkUl1K+9w=5WT`{#DmZ_)Bc>6f~_j@qu_
z*V6+$km_)j)tdd~e;qI9qdi-|`Mb4FRi>>szn+(&g<dAlvqq3*yOEy@k7OdBInP=|
zI2Zmp-`THa=+>d(OUoY<TVH<t{O}WWt=G%yxx3Rp_fy)2u5USNE%g24U-zq@;)7~V
z88x5rZ2RkejjeZ3(%lhj{R1ohy5HqJO31NZyIF9@8{4h?<6Yk^j?VO6;jb!t`_KKB
zo<dP^GS+%KbN;&DUHcozKWb|8vw7vVf&BjaU%Bv?RP3cU;>=$Me3tbUt@t+8+NMVC
zp95YHLv349t#xH3ZTIl|e?>1tCv#P;6(y?vxu9nRih-xCwW7@ax}cEiauhd9$yzyM
z$v+2-H$m^5Gp)5I`u;kgl!hykKB?UNVw1~12aL}}m-cS93JrZ=8^m`#g+c>VO3$)-
z^tt_?3u^5}K?(b<DMMG=5Pn_BxE=+3KVS`(*8g+D)jLttg$LGpO<(>wVZIN_QHZg+
zZDsS<2~|t`k(nK@d6Bcpe>q{|=4CGh{%iX`*VoPTSp2^@;eYr4UpZj|XY1!0-|#mL
z)aSj8{uYbb@q<2%aSNxItIoRDC>OB6e8$QxJU98xY@dQNYzNOlUh2gFruq30&z-pQ
zz&AhM>9NCz6jU{!ktggk)3SLNcdSE=_JsYgTA%68v|!(z{(zw$-b4|j%_L&-6%l8r
zpy$8U(J7a?><!a>7;oQVb^^1X*LBOBofjzDAUv6bM#sPNb_o_SnTLO&VB7mVEoqt^
za3qqK_~a@(ZQo1OE@#aS)fqDnO{-%|eOqCkKVu{OaP*$J*7`uu7oW-&nSBi@KK8^T
z3p!EoUOCcfk&U*r{w7O0Ct>8tN7TA^{-nMCBRIN#AsJ3=0mkKvNX>^Upnuy8QXlLE
z4zQ;a>IGnCfBs7JQUaMZuh%mEE8JnO{8r{##0%tCS;f@PKxn_f52o#<1iIZ8$lS60
zf{5WV@{!*cKP>}x`t2c<F@H(Gj_J7X;Yqr*M}-79eWPQg^@w>MMIWx$#bvH{!KIy7
z$i}t$aC*QlGIDMh#>nN7xA(ZPaNApA5?6&U9lb}g<vx+I;WF~&VLBr-r5bqOX(Mml
z?U6+656qMpz^iSm;T+ww&|>Q1y6nhG>U;bE-r})<95-D-B?RS>s9txfDJlk^@v#E0
z1}(YEvL-={TL}~v+02dTP>0hKZQ;qY1vqz2C%nG>2Q;uM16zahk<k!CPB#jmg)vLX
z^d+W9s^^MXjP7qV>&H(b`JD&<984yS0xLoA>=@EB(MndF3&eL+3USpyJX}A~0B(Eb
z!v!yAgZ3>lwAYk6@V=^pSY#iE8=l-EE+N{`fB$oO&aC4w=yoW`fBYJzoxs>)(++6%
zx{#Q;8ej`oBe3f#MKTTj5qr#od{`cV{9l!j!|$)+!pT)|-_|N7((o>lp5w`ENzsOH
z+{DRFGXuE%P#DNw@&#(0e@NHo@nC$~6>{WaHVig&AQ5_ppxQG-0xsvnXzgec9q0|?
zu5Kn}%T=I^XaI?qz5x~V%gKzZ6kxXbQ$5Yu_~uWFRiJ23q`Vdp(Gx{L*7plJ)$Ian
z1gyv{%XLV^_A5!K9EGtOM)d-LY>@SM5|rgVg)-|CsP9f|fywVUyx$t*FSIk6QhbBt
zFo)<nBlXOzdK=S|XaOT=CQmBt<H2RUYV!E9D@<s-Nqk)OAqDh_Wbbe2uKEbhI`#nM
zslS3BH8g?z9uIgZo50XgQ>f{!4r?vDVV^?{yzrtAmLKOp_6Ak3XiqTK6E6hU6R+ak
z2X#SFZyi25J`2}+MG~Whi6o}jjGWNB&Bz|pAgza57`a2$<muQMB3rnYm|T1ay+qCc
zov@d1yN^FrvsM+a{xnWYjC7MCdJ*nO|45==4U)ZZltg74k(kGJq^7r&9C)+_cfGK{
z*u((}g)4ExJJdk!G9Gcimkcc&pOAf)da$tGpWd}=HQZ%Uh?#fFQ1Qw#;%A@+W?xFD
z2hV6>V?q9Xy}L4{`&<w-RxAbfJLABr#<$>semqfpoC|%1CP?JiLTH~aN{j{KL66W<
zBCh-h%yPOzEP4>mJYY?{EqO#rC6RdO+{a(Sa!71h58eO%4<kHf2n<|^VZ?V$2TlCv
zkQ4Q<xu0Fvk=v(Ips~wd#`d}x?0Q*2E_dp{{i2P~-&&GtHywuCf9p^+jd>vQbS*YJ
zaSUXylqYI(n)KoD6f)z(LHtGP9hOlm#rf7WXd24n+M4dBN{ezpTfhopT+t5Ib&ZLt
zfDzcg?mD;0B%c2I=sV>yL!YkRQH0$h*5jEM&tSSs4^NBuiRm$AFiI?lkJ%ZxXLy|S
z6$%i)0yk1?V8jIdnWS!ImohftDNxb36dYH7g}=KM0^_k;B<4{GBO2m_WB+6^N;<hf
zKE;lt@Aam;wb$SsEg@JWC>2WhJ)#dbEP%GY`@#EP@?iLZBPjfyMZLJCOfF|%Cz5w|
zka7P3;x79Y+m%`4ldTW&tIPFt>;#)k=11TgO83c8#ibN{VhehYXToDAOz^pb`q1f-
z6**qF02iC2;cL58@WXg%%6)w#HNaX-Pb>bxl50?>CLYP->|JqS^yN-m>!}X~bbN8;
zi+A9XAH*M6ji5I750N^W1#$(h;Z*rFP_ldxmDzJ19Ns*O7L!r|(Ho|ae5Z%-yU7Md
zebG_0%|(QW@G_vQ4n_`5{>+IZACci#Bj%7`5`A3cE?HGrLW#{~ldZ4q;XJ=e#;ke?
zNgR5^2+wS01ol3_Liy*&w2Nzq@wZs2ajF}szg10KEdAl8vngcZs4fC>A7O;VN7x_~
z3$II`A@iT@p=vLg6G*Kg?LpgMP1Q_hYSwaOOYI=!>^MAY<_E=J`;l-T2#*fk#5X;9
zU_#PfQv6*8X;?TiNe1E6Xlo^7m=(y7UFXqy?hoeby>+Pi%|Wttju29tS%c(5Td7ms
zMMxm<I?;`4h9mce$rsB7NU%$oktu6{k}b`&$a{721Z;rs<|>l*Z=EnX`zt7y5+u?a
zXG2f(&7@_k0noqOPL|%Ci+fxg;dy&OP@(u1*6tfXT5CH9hkXrMe4ocCH~oOgUasU|
zza5k^a3!i2bHR^48>yRVU&#K4tI&*bed21-k1RH9hj*6?!@1@5Xr7oKxhf$79Y2MT
zp=(pgH-%ZG&BmJnj)eR?RL*F~XOOanAVz3}1=q`^;^?iNFhcYZlDAn&mS=b&A%_IA
zwz(9%-<twTebhi-P$|^y7KWBq8^FtkQRti$iv9Yc_-k8_(Y*ruAbXuY+<YwxCV5V0
zO(-TH(aq9iX^b<BEF_TgVLdRJ8H1+v2E)P4CvjQ*AW|LMNieq)TyXmgPKcP2OyelX
z?D;|@Hig5=<*VSDr3eZcJcrpYAJIqLF|b%@OdInp-@P}3zaGnh6dpQFUI%<+1nvM_
zD;CKp9chKh9%JO>#(0qD`4Gx%%qK~aC!tZnD#Dp^73)bj5|!V^L@RR!t^G3xoAbXb
zpy3l6Z^$@^H;Z7hH9Zehh#w@v(_N^iQ#XMHzdwTH{crHpx?ULedJladWdN>Kn}E{)
z4`+8C4pkU84j+ju5h4^JDpZ&;=f2O7(by_UX;Vt2w1>2(#ZD3uO7^8q)>+Pdk8O}7
zTal8bMQKq;+C{zdnCE?--}}7R^}g5j%zt0sn{%$2>pJ6n&iDR)=?|d_OAF5G`UI6m
z)#1W3{{Z9$!+FRBgwUpfY%3k`RiYfcO<zy7?7a#)?>#_N_&ZBWffM7(;cO70EMwWN
zY6XU5o>FDV4w2_1K*C}YOP%I{TBRA5zXNz!QvDxX#3{t}oJ9~WkHR<dEWpf<-Ih!8
zdqL{Q5~%F62}Yb4fj-X<!b>|;VSgTk)owk|_hbjDdB*|Yw|EZkZ&-+jbt~|8??a$p
zRNFnNcs}gAO=3pyA)+C;3tE{2{Ne8~de<+9Wutrq2Ek!)`1dpX*X=z_fBBsFHFO@I
zwXg$~#5e5kY=oYCVnC08YruY39~M4ngcWbzA)><oUeCzH2m1=}hOVg)3@#VUI#v$f
z2ffF_d1mld3KwiEkA!t{PVm}ePx!Fv0Xfy87%^$%q;B+8fsF7Z42rlbn4w1Egp?nc
zT>nNezugBm7|s`{kR5QOau=3eITHw#&Vtzo)e!m|O-1dOK%>lIX!klCA6NE;nXD;z
zT1GS_y?qQM+_JzcV}CO8{7fkOmrdw}{w@&v<rH`*kVcNS-f*NOh04!klgcwcLI<x{
z7=GadygzP9wOuuaUmj(n$_?3YM8X@5otO`WIaBb|lGz|fA)HvQkb<2)J%R>TH=uu(
zT+n(V8T|8YLHAB1!gz^DoW1@Q%&#%V#W)mRe-VV2h6lo8W)Gh8Lk6Zk2u3_C3+BAs
z0@u6LV40YwFm@;h#5B0j$uBFRO=~R*dSTALIol9Umu8_PzZmfA++#F3Y%7+iC$WuU
zJYIRW04FYgjQj!xcv2z>1XI=n$({{xj&=({Q|3YNRfD>b#)LYRbRZWd3mn$u0)b)}
zDntPwHmn^_x5}aZFyA3cVmrFLQHlRR?K5Gp;R@Ola)o%jY!>>a`UfRdH&7303W$4U
z6Xg(klHWNx6&tFxBO}>4SR0sNJzNM>isqnN{Vm|3#{%#r1n`d@+631qgrnE#qUUNF
zJJ6dOzo_`4k7#qpPU`a3Pl!~<V6EI-bnMSHurqcA0$m(p&$4W)S6YKt9@A*~M%S2{
zJyjR1*8fJ`P)!E69WJ7S_A5Zw!TYFK<rc`geVZC<GNQ^|2N|r)FUZKX7P;k30h2y#
zLT8)k1pnm<D%<Zbl`Eu)yuN}MIdc$2!FUkAVKbWQ=}gql3P#2qhxtpcC?Krz2&n8j
ziLP8M086)o^U@xPz8yyA013Y&O4B8saX&KF(z@g@wI+>ZtU73KDY3nTO4#B_++81z
zbbh@Cl5NIFdNqr<{3x97RMyVec7;v&p83iPyjsU-UT4R5{l}w}<IMRt?k=S~pPaHh
zaQ`W#<Ov9;&*s#up_9a(atA8$UMVAI+FvT}3CSB^RPw*BS!X$SzXD&i+1;{Rfyv|5
zuj0Gz+d&UW+s}LbY98-XoF0SsdJX^HcmZSZU9jjgS;&~P*@K_?w1#j0sgG}VemWm-
zQ{g2SC-PI1N_byoZt@K@0{MEob9iwp{_$8(pYx7CO0v8hnaf*ud!6Mo{oUNoC&w&L
z1}~xc=x*h12;WQ3-IUIYx;2Ad+BcaO<?)1`5Ea2wI~YM%%8KG%SlV7vzbk?JEOw{G
zW$S(1hfUoyG`*S|#cH6>R<7snM4xHR4$<7aKF8wPmgn4ir9zH_^g^z1O?C-;fj2h<
z<QAI*dvdRBZYnun+rZ6m{>jO#5^_`4Oy&5@JHWl^@5Kp{p2zLV@#KVUt>d=bvnk&1
zI+c5W!9rS8OCC2-)|3{yG=+P5{ELO%l|x+FtLHhthMYJTBo}bBt&O<OAGmaK-97I2
zuGw_ufdkyuAUTei(G%{@<sU3!AEt1X7o4I`zxIn8k#mPuWI=JWQk}S~4^8L#6x`wR
zFSv7c?`d<!78!6ka#pl^MrXN&3rs9%$qTq%rFV*7stCDTPDIfhw8Ob^v04`M%vHEv
zU%qh)t%JE14_<H+s*llJt6AKkKjEUH^aI?Yla<_^hBLW`d#ky*)2+C%#90pYxRfhh
z8pKtSSxMJ_q|Ysoai)8lq;Q*FB-2uVIdRWs%q@AE(ZvnPJY&%tbB@bT-Oaglu7~^Z
zRTsDH$Z~G5`%!MC*9-1mlT^;58FRRMB${ri4%LgDP)36F-=6S4ozPRH64LC`5)$l5
z-$jq2_Ft&d`u>R>C~`slm}AVxQLd~}`!RN~C=RseS~bbPww3+Mn%K9Qb8+0NecB0O
z!L*VISFHZD$*NoOJS$?e;)E*>res-5_Gt(|W>v65MGiRaz-KFI+hki!+|3Rb#d=!D
zn9l3;gptA`ThU3_v+7f=7@otd4Nv{qk)rre(0wbl=J!?RH^uuvL-a3OJ+xS}xHGPB
z!XXpyt1w@iY_JKLxriMlTAywk$V{%xvR(9)HQ|!CeJ(ODt8BM<EO~swB};0yFqe7f
z3572%u|)^8FJtGE9GV)d@TMU<S`^njzCu=e*O%|jSv294&HhW7`)5t6TC}u`9V5zj
zNH{ai_kCELE5n&^%Xj;JFc$}1u58=hJ>iz$XVfs^jC;btgX8Qt(fV=Y8RYMX2Q0@H
z6?VMHv7|KClApf1*xIc*$W9Q&vL@TfJjMxDb9kTFIqOSFYK&H;y3&)KB+4u6J|joe
zLn|t4oW$<w+(?!iux)kA?=8_2<#mQT$&v#h6*!;CzAB0h*V>RbZe11L9J?y6M-1s;
zYWnSCRV_Zpz9z~qSZ7a;eV4CVsP8Ct(U<Dv?Uold6}N}PE~?r?HlTG?v%8GhsiO6Z
zS5Qoeu*Fp}c|Kw%ZLnmXf;Nkl{%K7(>GCPtNw+9tA)pVl(?#puV*il_3QKJD?rDkL
zRB9)A2)q?WQe1YXDDS!4mz?EhW2>&@HQ}gx9o$L!xfo$5zhS~r{o*6ZNv<ij_ReKu
zM=jq@*0k!d_<n<8N8OQ0Zc@BytMt8I?5O)i`{oA5gqrp*CLA?Z?l!47<v^vpm!jBF
zzY^qZLs?e*jay<z-9U$(?t{Wxk&oHgqVu^Xl}!fxyHYjzLax|VKc<uI3I2=Q)-0TG
z)pYG`WcgPkTXVDJVprY!mYnw9%O>H?GO??E{6=2>6T|{X=ZamGI7P<ZKgaSP{vvkO
zUE}0w)u~lR2_@`Y(ea9x?ICTWWQAqZdc@AEagN;B@W56lT%CPGl;_KxBsXw<glRs1
z*tbM6n)#k|n!SisbM!MiPZSGqJ*oL1wj$pofSoUj%ch2rdLJlO%a_X&PFv~ZK`!?<
z7tX!Q7CWtCAgQ)v9jm~NDRx??B+}XMn9x}-N$j*2yGg4IO<QRzq1b5;$C4TjqqeNM
zhr}-HAVuouXtU}}EZBvj<GuKh3daXOS25^Q*~Oyx!_6zCYu`(jY;B0xZG#NSFrOc`
z3*z^&IimdV=_l~}yYE%fe}~vSQ9QD@iB$EEwh^k%XH%m1*DD6>O*kz)kS`EB?-Xy+
z{&*bg=J6|H=UvrBE?tYNrdyn6W6}D5@}l#3vbNHvioq@wxvYfaAgLDqj#c?jja@E^
zB~>&?>+Pp(?MF_EU0B+TJhR9`D9l;Kt`y~^I`zm6A#N4j>IPyb&JQ4qzWuS8p8AGe
zCCbaROOXj5x7%uSlEiMT8U{ai9~SPftY+7U@>BK0$W{C-)~kJTOa5cM(iJ;0<f@Y}
z;?H|_tteJ5C??m|8nYfAJuu<QDyos>;f;rc#l~r3S60_2*YsfP>7#M~>B`>Z>hs7}
z^NrPiy0Q;>N$<1p*|RjUE9dHyWo;dcFa2J|t`q%z%|}bfZ4v>jmP29edQq%ZQbw*d
z&$698U@Ug$$`7Q0+_>=jRBLvFC_nT2RdUwJ?Y7FtJpap~6aRneRsW|$|M&X;l|z?r
z&uA;Ye(Y3Pk<J3E$OBKTPKSQC8dh0tW$bKYb^DtFxv;01*=xKDb|1gXB+4Q4@QWCx
z<jo^Y%J;G$jpe}%Y+X~DdP<W_e?%)qw?CCG+PuCr($%Q6d{3v~#X{@Svt<uK#)~W*
zyU_}+3W*^z`oHt5QX^r5-d6G`$FEc|KA$-^D!z2}6;Gy<!^TqCt|v^z-BSdw*L#x*
z7onhdl>>SG$t8GyryF_Ub_dyb_gbmtyBv~yT~~U0*?mECPQ2jZkZh^G#a%M}nW(-}
zr4o+p|Ao!oT0r~pG`PIQk)-B3;<LVHOwF<sTryh4G$E^@>NQE`!o?x5@lOi*H828h
z?W0JmhI^>|c@;>k3dfH#4RKu<#^X0-1T)i*;l|SnIIZI@zVmD?v?ve4^H&$cVb)8q
zJsrS5?Sar__W+DpWeR}aQqewyv)IVd2gwJlMEyJLKx^q;z-=6Y^Zn$ZVXrrM<=F`w
zL_Hb0dyXK*FB;hV>tU#Vb_x!((1thiH{-%jN8mY?7q~dt1=>}=#g-C67#j5iNELj5
zsLclY0cZG_JO=MRUjY-V%wX9JcevwtJ5<pcg~>ZNq7N5*q5g|8Y-_{BTfJTJ%D*(+
zr(P_&e=NWaiRH)uEWweA))2hik3MNb7@(gI)|I^hb#jA5uWYMe`c_SB<k2p;l7sNp
zqwfVr$s#;CWe9(xsWP6Ac3^Vc9Zr3FoN8H0L9<iN$aLB&=<wYbovh7*^De!js2RJ!
zimsoOoWmVTJ~ETI(}#hU&<hx=oB=Nj@_|J6FAyZ1LF~?cjuu_mPu*9OWR(0~PO(p2
zfiq|gVDwB2`05Y}Hy&4~Iw!3H$eF;)ZhgU;cl+?oG>onP_TVE+lAzwEf5_MQ5^Vk2
zLhaK207FGJ1@39P!JNy7aKrcvl$soj6YjCFfy4>CDnK67JKAtW<s|g91LBkC?jq*~
zeQYFKkD_z6P}5jHst@4tS{J&aS64nmm5zUSlfyXNh%<3~_(~{MdLPTbeu&m<J1}0u
zHVn_Lqw3q6@WO#wq%lt&wRRVRNWXFZQ;(_OyMh&H{2U5mGh=}M&F|plg6){mR1O_J
z&BK}RJwec*BaUP*#cQP^F--QtiFyC9?YtRyrEWO3Z|_4tURq;EUnfd+(i42bWCfJ`
zs)#o!kZ@k0Ix3YK1-3b-h?3r4*y5@u$ZM^{;kw)5RGtsk<o<z+DJTBxkgHImG6g)I
zRS6z>7{KYd`B1`J8<gL^35{%if$c}T;gSpv;H<BPyIjn{{_$V%xTgtKbM+itV7v#V
zvg?8RP60~go<Qa2bBXiGifD}Wj5xk99EBb0#Ii@Pq1%nF*lleuii`e&RR#$}*!1wL
zmn37oOKd>P*2RRj1`0Vi1+8<NgypvO5MIyUqWzI=#2xkyP>3sutonY?@ozD;fV&(8
znoL8?CT+|fxQP}p=VRsGOO&(QdH#r87+<LH4~%E8L5@lJaO>)HRJv6SZmY;ap>O$6
z?o}VLY>zgSj1z)B+7r0bau1x+oCQ6r!-%rCF`!&p)HB6sgXnqFcMv{31l-wE1sazg
zL%~YRq0-*{_}G~((8Hzxd)<L>H$M>NC%b^3)2yffb2GkFlo48|Kts9Ry~saT8Ed_B
zLuM=c&>P)v=*@@yJn4oSR1=;_962Pqch3z)L|HhzyFMNbtMeiM28GSFwc$nHcI>@S
z5=O}t;j8%?a7*4I>~Sa>O3my82P4aYii;{-IN2Ws|9u3UXwfM9z!`L*d@>`pVKS<^
zaSbT0EJYa`zfnr{GRV1fCeTp10yOB?pjpiTWG7#M5s!Oebo>}xa5(}xL2o2o`h?H=
zbqJ+MJV!z2KcVH@Q=yWSH;Ozn0)s4UP|n&faCUz)6?-oLc&+S&X7`>W)?CpwWO^04
z{wNooOMFB09^t`5e^!8(m!`sVw@-m_I{;1IiCiLDj(5>|EnI1F33W%lf)dJKP@C=^
zqW7{Mx?*^O>adta4ICS=l<UgmrTGK_<<F|r@5Ww6m%BAGUv(d`<qk5U^H-r<-(;dT
z!U~-@EsfL$0*KHII#r$U98{aX196k2z?Ire5S3a-^xd3IJe|E9__U-G*wT^s`Ed)?
z-86=3%suc1&&}BGm<6uiunY%ZdXDQq&O<Nx^KtMwKX@%|7qKa9EvcLm0~s+K(q!r&
zh&xz8Zn1lV>ecR$9tn+jy+aDA#OTMF5ldhOsK(<}Z{Rf7`GOfyb#QuwF8=fDFDz<G
z6<sqY!HE2BoELo(v`6m*SL0^EGNo$hosdE5gs;HCbMj%YxjY`}_J{bn0ZMT&CFgai
zgBUp<Qh)jx9QpV#@hnzCFnMk`?)my0A0WTrk0Q$6c=;6$dN3VYU5f<4Y!(=?T?^0r
ztpT6(ouSX0kEp768;BM9V3y5P98@=oqfG(?`nCC3@Q^217u|xoe{%%NyR6}M6o@YF
z2XO7e0Vub+3S4++4yPWR4(?ADy_Z=g@N}LjQ9Jtwe6U>>s^uJoDIRh#d2kq9eWnN5
zQa^x%Hv>IBq6>r{NAa5a81UuqQ&f|22k>lSLG}8dK;@D)c)z3sTvM*&_d13`X<dl)
zOf(o7-UVp%eijawc0{MX?#Dg3+VI4_vpBnPBfRbM5IL-Bf*Z^<;IiAdp<ay-j5*^E
zb&9qD&PGi*BVi}HYr7Z9XJ4dlE|mhKa!0{9LjdJhy@!*E-os7bhCzm4B}`3-5M7^Q
zp#K9`;_bn1aOtfCdX@s9mfArqW0(eC>J*~d=h<+WY{ql_tKrVPojAQ>fJo9c!;c@z
zV8v&*afSVByvN`Umd~N%1)9D@5BnqH2VX$ZAFPpXixi^NLPYx)x<Im_4mr6Y0-CbR
z$w@1{!Qk^PFl;+TJ%20@RRm^uMrRE8x9KU?C^Z8$Onc;CFiga&9A*?R|AKr<4^oCd
zD^Uz|q-;gk%pm0*g!!_)NDyL!^iIx3pY=`9dQTIi_oRYq>6uSFXQ^P_#cxsUNFw%`
zrjHp*l#%hqLs(<=PtfPnj~0$Jf^Dl_5|;wE6BoNz5N5m^ApKheWz(bt@*OPE;**bn
z!M=;A8=8ZCzOmS-atI8WD&e_hhoDa9DOBdkg9cJPV38CB?rLp=S}t+O<`W+>7L4L)
z)2>2u^AWUqy(#!qcLaP2Q6W;C)1frTMnReK$Y=yo(;qIyb6+&VgDqj`<?I5O)$5Mh
zDvIDjlRiw}7y!~ey|CHiA#kFQfo(;-W}`yu@PZrPL5uVQDrKx4Dh<B}mwQQQG$w^W
zYb*p0tgvLSF=Q27W8^Hm3H3kjgsSJ?fUTED;mUi-=$juMUUYN9_7nlHbEHsw&Te?D
zA`4D_JQdvc*$R1c?gI%>35T*g33rdR@X1p*l)YfHs0YYiRMhDR!;H5RX3I6eP1bel
z(dHqve<*``7@mNq#?nEE%sW(mtP?zG4yC5vAB7I}o|JjY6v)UeM0$JMsO#05Xiq^D
zHq2KAtgLLjBUA&PO!mep*B-*S4YToM#ucdIa~Jm}cLD3w@9|BCBCwQ`kDZR^g6N+Z
z>Bjv5#rD^s`|dv=FWVkwMHPa#Zq0DrjY6o<Jqyy-2M`i&`yiCLj=oNN2IBHop|%56
zC}L_R%B$Oqb#~lA13R{3H9Lr&JxfK(inAz3pA|r;6-xCedO|QQ0dGrjhMGSo;m|4L
zz(xK!RWo;`B{^?7bZPiQ#ReUNK1a3D)T+BsKH42g1<8QRN8+i!w+@1E(f5;dzzJd}
z?;)6OHy4GyuZQcW*P~C8H()`JE;hn9VAMYky!qxSD78=qpVAEkiQMaWwfsU5W*&ed
zEbYO8fd-JYV;yi{cz~XI%uilr2RwFlqa%7Jk=cg(s8C>qwUm-kL&#(7q4ODO8|&kh
z?Ixgcun>Ke)PZ)IJYq}SWoRJ!-;%3i0!sYzfd9T8kQ^Mx-??rzNZkB`>U^U>)Slc=
zy;;$Lf>$g>z7M3(^FB+I<+6$D_fVlKI5UX%z8Szlrjbgf(?H@B2AXHq3XYENqW(@-
zBit=!B9)xkRD4q%RU30$bS3HM2OgdU&Sos)w>`ZJ>Q{DCGAnI>zp)o#-!e`mejWod
z!P}6>!mnWYd3P#T-ycNXS^_4!g#f?0^TfNsP$H=FEfuos7PaB&Z#2u}0KsfJie^Zv
zgFu;4r24@U#AV*0z6NU&eGRgdEy|_jFVXn5>RMFfmBW<N$q$s5-)0I{8}R$@mGfnK
zE-|tsYKasdHNwKY0Z1G=&*=IZM)-bNL>Nzzp-fwD5eN7BQFS-A5Lzyh)csYSjA6Sr
z$}Dk^K{hrs*3crTl{fPlLvt|IHNJ@v=bA%xntJi)pERRF$GQB+^X5@AcHZL6vj>zx
zF_&>|S{y|?-N`tv|D94E0}RPo>ij;&Rm&^CviXIZnk}n#M(`F{dos2fUS^!ic*Qt-
zQID}$If7wclV+(F>}$DdnXRQu^?Kg!PioxDu$0$t{hrU7w}AJv{~zDo_7bl#)1FuL
zRf~J-=2p&f^L>`#C1>d7s(qGGF=sfdhywZyt&_9?Rw+-)eXpgm;(XpFLwifJObMRm
zzrU7~6rXT!pES0Vu)M>aaW~C!N=_<Qzt@eP-XY70oeN4-CV%A0esbhwn6Ke7s3|3X
zLJx2+#z%0{?v8Rk?ViI`e?OU%6j;DXIi$f!R~s$yuRFqJf9~h_?0>^4*rLSoY9csz
z<uTew=rE_#Et~Gq@QJ(P*m+uU7r*39y%HyN@fa<E>&Dra?Ls&Dl39X72Wi=>zi_DL
zwX|=;+qnu?_t1=NXdKB;Q%a8SeNQX;J<3(1I%xBI^h!$Q7IN+neX@X&KAf-I1GIDP
z)tmz7Dw@g1A<kXu1>IHqAIEnrgl@WkNh?z{rPZ7nqSM^sIR_%P(V7jnTKp8UEKJ@Y
zn#;@cG^W%aT88Ed+Vw{HlH9^Av^5&<EZi)w(vB&A=c>H<LQ6<K%w6-0$2l>R$#t2P
z%5|&MrfE$=TnC*3TBL9{2Vd?giHectXq}tE4SO_~W8CnCyI~Q}JgxULr}o??y5WLZ
zv}}KUx>toPt*;}7)|Un7m#I0la^V2|!t)pO4P%A$9maa}6${w3rX4{NqL<jACug$$
z+Y_WjKmI@a0g5Ue|I?ut<TWi;2zf5tH+?!gP~^_b4zyV*&}Oi{w|h-EbkMXpR!bMt
zgnbHv35U)$akO&!N3&g_?Kt7kH5Xo5tx!J8x^Mhf?9jb8tP;DPu<FW&CLDVDc@t*h
zF@q{bLGpw{>jM+!p6Wu@qk}7LMJHho$op2xi*0Pue9YNRqS)1-lX>LBH(|1hgxIBZ
z!kL^zEF8(|u@(J-ebDM2t3Ahys+I_I*e#+sYR@(+PYWN`G=+U)r%v)<wz`zqnhg1f
zof<eY3k*D1S3<u`xO8Ea$gPh*v{hR7a>AjjFI1B)-nUtwhEGg5bYp8iQ_t3)_0;#F
z*r6}Tkp*>ZR?!(%_9M~pUX1#a{_=F;fd$RBRigN9nH)J7Dj|Ga`kvh;iicMwk_n@g
zLh8Wigj4@`IZS5t_psh?P8U1%t8((p7s*Ov<r`wBKJG&1zP?j6<DJulQ_Hl(lSy&u
z!m@dOVy8apMDAP@ZVTi{u~RqwWNNRu&MMgQX~L;zoIXvSiT=hKb$4R7i`-5-PE`MD
zvA;?>f7TK`QLOXLhzumkY?)p>v0FQKk*WLLg~@Zjh~0YH6tewwP}SUOf!M8U+sWd8
zOxEZNhY7c~xP6ek@w9*ya$@R)TU##GBr7#bZFF`#61%nSR<ig^neb}TF0othdBudu
zvQ_NtEcR2;@f}Awq~ljh*4PPialP+cK-!<IWzE_jD0b|v$6@;kd0U0bJ7UKUu!moF
z9I@5Qbrm~yj~Z<6=(W{se<614#0>b`<v^93O*s3R=<lDb>W5=*4O#UEhL*e%#b-0G
zk;J9$%53}T>@HCp)UcThZqcf;JY67m?a_WRMAVV+((oR3k0>90UI?Gg$!76l-NdeK
zSVyWayKSr6@S6QXl#lzU3&#$xVX3+gPdImi3PEc3o7&Qz{GD*_tE#^6+w3u0jg_<s
z=T06=A{D0=Rq}SwC!9NV(q=Mk%C;(%Ndsc%Htit`hHPvXM4lA8_ESGnqkT84`rTUg
zf1Lk~*C%0rw~sLCh=<s@B~FnBH~19-*ZE@S4jF+ROMeSpS1%Vkw%ttF`GF_A-?B#R
z*lYnQ@BgxD$(W_sv2}}K=ku*q^LBZN-8wHGzWgF*3s(h;T{@u&j#PbQ-8(*0?9j|U
za!T?Y>-3ae6At}S#vFFHc~;GQ=p%OLb;j_=&@Nj;1?dTA{(de7zKz&WMPG1j!j(t!
z=fKXH`IQS!*Na_wn*=%aca_jtb-UP&B~oDToRd{{jvW(jEctgCxlr#sYfZGi*o}Wa
zCFNtvg<s#8v0sZ^Rr)3qKE0`HW1f-4?i0n6w_G75Zi(uzznO|%`TGV^_NuHfF7m^K
zE6YkL!r!_KTNh@j*p16$;8T~rs`*PZ#ZC;>NI5MZTh(%Ju@ldgA!pcstTI!x6Fae$
z2T5uTvqs-75<4;bDH)iXY{OFFik+CJPL}$n3X9|v#7<oEiwwwIXglZMb+HrQ*Cmf#
zzAki5QxZFI;RSNx%$6$qIbmWau62RmZ^u``?^6He#3?I-swDpF_5Z3@W{0}BDT>nn
z_uLrPf3N@FIdRT?sp4UxseJ!hepxx^WEqALWo1WbWy<`uWqxCor5OspO9$I)1TzzE
zm9EItB;AHKm$JRoA>8I(y5W7Xz^|gPbkY4_K^nhJ!1G^5s<BG(^QqzF(6)V8hVmkB
zsE**_b2F&0gl60r`&-Zf{=#0gUNCw}f^_vx5*%)9hL^5cV97Zn_}SVI@MgvlL3Dc#
z{5|$paNmbb>iK;W2vUxt-~DR@qROgLl>-tu;n>mA9e-;D7Fn{Tq6V7+yYKpfx5hu<
za0^?IW|>A7e0wDb>HkG){(L7`I;#h_4)ln6X@9_@dY8x#A!~5B(k~`k`W_Ck?_)~$
zPR5z_2T6HRKl6sYbn1O!0Y3lI8Tm!!z}2KVdg|N+e>YsmyAz5?#eL=YhAE%agU@j^
z?>BrDJ{ixjbLZcLyMbxXSzK0f3})u~2-H5kf+<nnf*JL#)T=sM!Gbk**vJwIreEqI
zJcGK?;{1zHS7kK}$+<<`33dg0zH@N6$QLxe?Z98Ge~D@(WAQ_4O{nwI60Lc>4xQh1
z9KOEofW3m<$iM+BJg%)sUg^;lc(1V_*FL``*j(XBs!2V?+}E-2(+LZ3e7_1*qqO0J
z*5!CsS2Ibk@4_-~Pml{59HC}yF#P*K3O;migT11jntz#(;g|V4U^nRqyT_a1rfdcb
zU$p^}#_F)ASPee7*hwChyG2TPMw4gG8p3C`vhX=P3|-@VK&sPg$~|x&xbrNQlKX8B
z(kkP@cY_8n$cO>>&~NCka{*ia3V^07CGfMiLB!_QE_lRWn!+Cca6_gGmMEBp*XKXS
zoYjB$8NG_Q3YvjmLun}bm>fJV5Zz-oSi<O@-{2=B1kTvsKzOJwWjtDbh8hv|3Q9Ya
zjn;lSOm*b1rfS*V=y~f3qVmXn{?7f!;Dt>YQ0OD-W6(2|oFlb>oS9igD%DfaB8Uku
z%hC9ITLwYv`X&(biVgl<7xnA;cM`H*UBq@vYoKHK3S1yz1!Ls4;NPGFCiw^BAFe#n
zETkG7DDpmq_3H?~X^N<oN`Uqce(@{zy@NT-{Y0E~D6D0=qjdpg@IuL1tbaQXh&nQ3
z2c>UlV=cxio~f7-QHAw7XJW0R;W#_}JgAu!kDnZtfw=W0M!70*;6p#Y6sZO8wambd
zWdYDfl0;LI)<SEEN-(gt5ZXGIf`Owmh?P2a{IM6s_+-;L)ShpRlV9{;i_cn^CbI({
zEZBrvr^MkU+g9TFZCNPbQ4coxsSYZi`2s`q1|D5Oz|3u?u+S$ER)27TmDO!<+rfR1
zdlQ4m&q^?ES|FHA7=n?udBm37&8RMF8@hBZ6kqg7McBF!-#cmuyrphoDqbGCzFv<t
zZmoe^I-CK2qXKAlJ`G+5EJadv(L_)-51sr~1oS_7qU|LXU}TCpijtlML1!MyUi%du
z-))CJw5)=s4xGoc4;a8jJ^`q$j1KO1#1rdGUJ{KTdcexuZbYv21ZI*$gwnEHw8+F5
z4EZzAbIpIC;I0WsTb+i!hPT0uMv6GYG#N~1?8Jh+$)Z{+k*V!?gf4BLfwTHmz*|}n
z4!w2?PWR{F+p89W(d<<G^y>k*ZUzTetqO&QY3evJD-X_osDjt7=m5VwrXl~tWgydk
zDM*sHM|tzDLB^j`_>6Tpb#YV@2RkUEc5W*gjC+j9PC(d6IbxTQ9AZ_`Y}DQ?!+n1-
z0G*Qi4Sp;AM3H6-;321<pp8%fzsHwDuX##nWnK+(RD6H}caPw7dO4E6dmWqV&p?`C
zhCoAaE~V(n2lHK-;8^Sz;@ZYwDF6EgICgbVv_0f9!JY0#(fL==$BHcU_R(~#K5r^|
z-LN0Y30EV-jhe)e69D`<Z@@Z*Bp6T`12w-4LEb_qxFtyk=1toLNr^1DGwdt)y^9U!
z=f#36=_OFoI|b1FwTPXZawP3l%h(rTh4njr!eye_24fE9kk_gTbthTDpjqm$#n+2)
zEqD!^dLN;;c{cFs->F!l{|b!!_ZC&;SV5=MNFrY2JAqdXL&dN?ST%SOG}G6^lsgyv
zndB~z4~Yb5*aiFEu!1)0^x<C9*)Z(}fOEhAyzx5%Id?82C*7Sz1@tW@9ZN;MepmUB
zGY^wsD(xHGXWfWrOnnBdXUpQWS|L?)LkFAdhhp8NVsNf#J4WU%VDRI(Kwi2SlrGZ8
zKWkmk)_>9{HGdBt`c@1DSsntjq!dzeW&n1576410yON5D&%tligQQp6T4a;Hgrtj}
zHC5j#hk4R71n!+1!Kw00LHI36l(?iraDnv4I?e9|MeG)wvVNVQBc3HtH&7J_7oHMq
z@y!zWyS50{CGHa}td_@j2fqq-I4uP#t#bq^8&sibMu_0@o|kav7!o)zN{A?09R8&(
z5Xhtiqf*rrffe%rDSe)UMQ;TO->-tUy7@3MNejOHz7Jn09w8_3199Z4^CTg9&M<hy
zhD?~ei`=l{J$d<}0kqZEg4GxN@Vi-8arC25d}UQ8u3Y#O%Iutp%XhWGd(9RYuPcES
zqfc<Sj|RX7KXCAcU)Wi;71xRSBd<M(@ufS5h|is+kp5*qNZIWRJGNZM=c4~YrO#;s
zX>%@)?l8n}r<UX2PkQl**slU<x810I7~-03JHh;hXl#FYH+0(RkN6si@T}w>N_o9E
zyu|4RN^MhMi>oVOU-pCDyH*01w^cB3yBFnpVHT+T!b0VYUr=g64XQgg85*q^Blg&D
z2hrch;E`ABsOp3M@Zq{f6n3N;R)_sU4=qaI^$YEI*}!AiVn~Uup|<eXTvZ$=zZhn}
zh(^Dqk75ZoYsxLBOE5{jka+vyl|W^d3bF5c8y-}@LrhcsiMyp;;dD~;`7BX_b-f&%
z0;5Rf-M#qw!ERDUy$EOCb%BW|9nhzp3LxqFT_}0HmNExCNPn$>!W5eb+2jgzPc9yP
zlyaanEnicPURfYmt_~_|WFn<~x?tpm051hS=!SeJPF&K4GiurRV#ZGVt)vmpeEVIX
zs}m2H%t(RGelxgjBpEl~SO_hbZ^Q?iYpHvYYw*S<M-(%8F*e(r3pO7eM|V&B1n(Pt
zP=x<GaPR0EWLbI)JU&v13`iyLxac2BOmriz&n`vLK0Sz2)eMY|oIr8Pu`pnuf|&Bz
z7gFzYsOrBp&~0)M3bcwPc*YC4Xi_7+c=$U=FY+Kd1H+-Y)MW6x?jO9k)Bt7&`NF;L
zo{^IJ9zen+m(;5HfaP9Q!rm$^9J0%V$k86gseW5<=-4K_K<WqjTi?y#m3x9WL=SpE
z+YMa12XR&AEIc{05<fN&eLn=u$IgFb(S>9I@@m$lvh>YRom4J5z4{qeZ!^QTX^I$Z
z=);%y4dIX&4&Hoq96R2!Aqs2`@ws3abX*pIAEOcI@BG(r+4>bYe)a&|fPSMslRl_L
zO%nCqWP!1>0T3K~0~gJ)gLd=jaP903(De08sJV0w*yL8u{o#KdT~t@XremX6Ug(I!
zdX+J~=_5Y<kiaak3u~ck*zCd{B)4!Iwwcw9o?iWl?Ji2=GG86^H)a=py>tXc)f(a*
zS^?-u{A6lf>LA`oYX^l%##q#%39bgU_)O#?cvAH-RVC~Ig}YCH-enOeZ|OF$Drz74
z$J0g|lZ#R7$*1TIEd|lme?SjiqY!OuHQMU)7MoA{jf~vwMg41YsJ9XXcARyKpIBsy
zhEJ9t*`hvdsS%Ct#Bai}+XU!_Q4<dBb0<CzwPTe9I?yuI75Q%73{7drP?F3t0!OgW
z``RS5Zd)+wut=b=b|aQARwC|ioR5RbUx00uS@_Ctib!e`eVs4-j2!nIMZ)^cT;vdg
zIE_2OyIWsS;3x*eHqnd@=mlH~)`20tk3f-l3vF2*K;J|ieBE-MaYyGjT2OCC8SiIc
zhLs=K@%j;VXl{fv!}U<8)J$k&`ww(ImVwHdYLI0W4TPaAs5o>JTy<Sd#3cI>39^dF
zV$yu%w*4n@F+UQ8uW5$LiIT|tK^Z(R(L?0CRe*OQ!@+>ZM;Lv>9je(8P$I(|aN2fI
z=k-R3N1Yth{%jF7$?zunQsF@b*LI@pFHH=)1ro?mw-2~XPNA-SF9-RTY^YhL9U$cF
za?7R71Tp#}iO82ZLFwIJ4{Vm*K-Z)jK(5|ARG;?~bQvU~Qx3HtpGZV{)20*cd|kAq
z)0-MBIf}y6Ez$nv!^pg=8_gc<;bWW6JThz=kzM6ZSQu#&pV=oFC6_vgMvG0nus7E&
zFQpYwOWkLpnY9j-s|puIv|T1<h~@_Fl`SR4X8?*jwG7C`7cjmIZYPqyG!msh*6?Y+
zx`^J*CKM}W7t!L_%CA4%NOar@pqG?O6I_Y2jP;KzE%TOpGg{XKQ2x=YiRtzmDA!lF
z3FS8<{F>@ULiLw5|9qeUArmx7G>2y`<HEg%mH}To84AHAjA0`qhW?vc!u;(jZlRPB
zp*f<!x0g_1+z-{^3Fqu)1e%<nx5$k!Y^&$-0u}CC)_k?)udax&)RFtnKcw1j$r=B{
z8)l?3jAts)oSy|VOjS9S62@_sBS&)S<8m)7Gv35o9=#y6jCYN(oV)7@J%2Wv<`?vl
zXBj1Bky!kQXHscEe<3YNf3|84Jv#57<vinBj^JYi{eV?Gr|xpH#Uf)w-<b7+&PYt4
z+d0pqS*NU}#s7-rnCVM$&foFmG%Fl7?|II(5O#8DN7t#C7h27v-F}!sOAUU{NyQ5+
z-aiQ7N_m;mTCX1GP}z~RbG?qVbEdOs6$kWaK&`?2P5Kv$ujjb5MB9Cw(4C)X1~ywc
zc&jE|Ui&4d_V{jE^z{ekqa)8~8TLY&^75Z0-@`g+m1LC#@9=wC&LMS<V#-!pbLN=E
zV8A_ER^8U(*TGk4E|cYG>*%PY*tvldVr^)_5tNy4)}zy=2L{uoe7r`pw7W{{_BdY>
zzp1$7(3Tq<qsDTJs0=GkNmdhQe`^M3*_>q-@v}}9CoHEGzu2c_K3>vGo8HyRQL8ZH
z^xS$=Qo83C=eUsKEX#@E^csHW%>VqD!~0}Zk{?>iT_KR>s4X(!Jd6`?Cuy=vUd>+4
z^(vR9TfWlZ9@`Q?XPAz0XZrTjH7zf20tp5uD*axGU|DL3W7a>;GuKN+)s5v`4etzE
zDedroXoJ{^rS<*~PxzlsY%5wO&3-2#vBbo;*}B$cYi0lH59|-3`sIk2DC^Qceyqp#
zZ`mJ3aewcC)e}?a%GOhb6OPRI*JCBcu3-JR`f<XMqpYqm$6BjdL3q}LBj<V!FuzHM
zvg(tMOgM67M=f(y`4sD8*fMdSghSR=I%5UGXQn#r0g<ap?@wX|pNL=;3#%p^S*QC7
z^KD(O@P*L(KTgt~k+I%NZDwp`;};%#NEF+Lgfb=f@2n!0T^GCZvT5YMY%NxGL@#?-
zl=nKYkvV@P)0UW7G2zN*7M!)3hZj`-SggSw5#_@!{A8vX7P9V{dyAd<#xE;J2fB5~
zP#OE1C?EIFka=$0w#qbS^@KZLS>Mm3V$KU)s;7wEnd!ysYuaD=Kz|eahiLuHh3m+n
z7e8%bv76YT-;OaOmPiQ`bf-@^bXAfxc{5+9if#UP!l4`TKakJg+X$x^;R%QC+~Y=u
zB=KzNrS@WXrUuEI#rvw5-y_BDyta?@xHZW}#(QYOng1<xCNmd35Z;&u#r4mJvdFx*
zpIL7{t`$4-3kN3o;i|2DQJ>h6_c)M6x0kcZQj5ioTmi`=CyonOeeR!d;<*mz$+D46
z!b1iOu@h%GkO}oKZL$o>2^Xe6Swgm_Zno7a*gWCF%+lGU=?Qb;)n#52E^ND|kU6`L
zS9yS$GvUGxX8z<r-A`Nfk3$o#>lfM$p9k7kEqrxF?7FIjuopk8VijsmIBxK?H{_{J
zdcy7z<q5|PT{xetA<o+>9HWcfw(Jwha%vNXAITEeBfqvMZHfwoZ)0*Moc794IsCbM
zh&8sgaKdF%Dz1_TR<2+PGZe)xD<4SaagA)}o(d4VtHo#7Ui(nEW9rWdSEZW6;hTXU
z!o~tQv77qYl2eg6>#XTQv727sMa~XO5(=O8i|co<o02mNErq|(MX{5vQ6=ZMy|ZO>
z)`*?dvll*Y9Ts-RKNCBtppUfLbeUz!3z~3J34<r3<k9)U>f1lX^|ez(vlpCbRgNo*
z#7^4p249!^*y{F=iygB_fmC-fW@YHFpKwd{aV7HHkz=ghm-Q2Fsi_f2<}Y)t(%pDe
z?3P)p$l^mjRkTf>Vz;arCT}fyX{*|}N$ixAJ}L93R`_l4h5vHO%>VDc3T&^iU;huM
z{O|SuE2mt%(M;KVVD&WXpU2OaJ={=M=B?;cCcOxjo24GMI=bsg*{c5KR>7Xd%sngY
znXht%OjGqr^4;}f;=%=8fpUn2KqK3r)MS4rHsUvxF5h+u*Tn2Do$dBRaQH!-;95$G
zz)?dFzHp9%KMy96sq6HZ3g1&n3&Sf+$=NIMx3xC#^fpbwkddE2+lVNYoBvRt@N=#p
zNVW;rJaxdWTOe)}#0a8_pOd;yR)T#OmN0i~50DX4J(yb<56Sr|UZql!xHPE!d1*wL
zeQAyNC4sL^Lh0fqGf?xfw>a^Bvf$g?BpCMdpWwBq|D^n2wLr(y8Piv}qt9w2DwA?#
z6t#(JsSayV^2*!b<$<RtcXl<ba?-_;x~cHQjC0t*B@;|;)JEk8f~ijFTX1cw1bAiO
z0WTV_f(J&IfU*Tza2q#+SX0*sS-1(XueE}g|5#9Z-YV4Zq7U;)JDj>q5x&j1jlHHE
zfvFjijL+@PaAQO@To9HDrOO|}C-VkyqD~!YCM_x0qqmQoecnRgB;^K+3v*y<iX%w(
zF(jAvsG{fnZE&yiJ#1_z+V>y%5bIGdv97};bnRLzj*_Yat`05ub|MR0*IkEdPVhkZ
zFKf`}G6c9edEliEA`-i&gUa|FSn<?ZDweh!A3XI2m+x!FZfoWXw)THVaSn}w6h|K@
z5!o!*ka`2AuDOrr&iV^mroFNpc{(4apP7o6jaNW9<xMzuPzlsKEybyteNZoII$lsZ
z2)D}YhErOq;M^mjFn?1Ey5;2pL*wV*B#%PqdU-v*;jbyGyLgVRs{0YAYXJB>eu*uP
z2f*bAKcLOGy5KesM-U^W0}aPVA#3q;<i^+y*SG_`m=;DjSAR#zbC=>t`%(aR!x^YF
z76AA{FOp`o3mwdeBK?f2u<WgIQS6FkavkBbmQ*YOLtwO>Dbh`1K>6p7z|GN0Drapw
zoORn3b=9tgrbD-pv|R!CmU9y9q@MxHemzE#i@#IYW-gv2lZ+m=UPH@uucP9D8o+f_
zpay2vL5HP|C~ib_-?#4o8fb7Nny)-SSytM3@}LYgcGZcW^1A~pKJE&>zCQsfE0jci
z$r^z=dX61$%YjnSECut!lJJ&ICAKwAfbWQB_?o^dyts1}4(2ST8zkJLb}sK1-IMtP
z$HXRdL#hc|pAI0xu65(q+ZLe0iG#b-$HC2fKYTM;4$Uf`f(>ZuXsBNca2YF5TDu-x
z?Ja?Fyyc;WTnM(C!GbHkyu&f8=D|Yw4LI3+DXgiiz*(n7eK><f^?1dy@LIz>#9#Oc
zC~~WTg<U)vT73yD4IV{AtS@q0`~lp`^ulsg+3<{0F=|-66;@t}C4Lw3p%23u3?Dv@
z(ymE@Rx5XGPagrrj+f9SRd+Zg#sRR87=u2R6^MSSW?8GO#8Z@ci&!0!=+gW-NY8y5
z*l7L?&G{M%<Bm9@g34zw!QKg5C2s`OtV$fAbr4I9Ji=Ey9dJ^^F?>nd0*Cx5!t?4j
zqT_z9L~QL2aPqJ%81TykmuFXlYscI8uh$j=t<4$O$j=tqS8L*!paj^wqaKIe6U`=J
zsG`qoP3Y@;3P^HxL4$BlP$!xvS?f>(<z06pwXxsOIbR<eU)=<~-RYR|$q{<^)uKHu
zO)$*h4Y-pL0i%sHq1OC#D6cyQ&XnIr1Q_$d{ruBJTWkPY`E>~~9C!!2gj`0(vrDmF
z#{sN)M+P)ipU0<tN8xp?EjZ9X5niyCz&3~Gg6za@)D`OkG#WQiThd~H@cn%drZf+5
ztZkrtcPLbQlL=?7djVs0w-Fg76)-B-9}}yWLHb=6d|u@woMR-717Dqkip|=1b<{3!
zP01bgx!(bCv4@Cq(F`T2JZJDuu@LT2Z~-jNcX*k04)wOXLsx+mo?=UabkdT#lwS|l
z*X0xb9=Aa2_-v%W_zm4bDdDh2w0D{F1ROb64O5fPP>njtaN!4c(e%%0Ao}7>(M&A|
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

diff --git a/externals/soundfile/Makefile b/externals/soundfile/Makefile
deleted file mode 100644
index 902c9197e..000000000
--- a/externals/soundfile/Makefile
+++ /dev/null
@@ -1,171 +0,0 @@
-# To use this Makefile for your project, first put the name of your library in
-# LIBRARY_NAME variable. The folder for your project should have the same name
-# as your library.
-LIBRARY_NAME = soundfile
-
-# Next, add your source files to the SOURCES variable.
-SOURCES = sfsamples.c sfduration.c
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-SOURCES_Darwin = 
-SOURCES_Linux = 
-SOURCES_Windows = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-objectsdir = $(PD_PATH)/extra
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g
-LDFLAGS =  
-LIBS = -lgavl -lgmerlin_avdec
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-  else # Mac OS X
-    SOURCES += $(SOURCES_Darwin)
-    EXTENSION = pd_darwin
-    OS = macosx
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-    FAT_FLAGS = -arch i386 -arch ppc -mmacosx-version-min=10.4
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    LIBS += -lc 
-    STRIP = strip -x
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  SOURCES += $(SOURCES_Linux)
-  EXTENSION = pd_linux
-  OS = linux
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  SOURCES += 
-  EXTENSION = dll
-  OS = cygwin
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L$(PD_PATH)/src
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  SOURCES += $(SOURCES_Windows)
-  EXTENSION = dll
-  OS = windows
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  WINDOWS_HACKS = -D'O_NONBLOCK=1'
-  CFLAGS += -mms-bitfields $(WINDOWS_HACKS)
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L$(PD_PATH)/src -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec clean dist etags
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o"  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-exec
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(LIBRARY_NAME)-meta.pd $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-#	install -m644 -p $(SOURCES:.c=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p README $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	install -m644 -p VERSION $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/VERSION.txt
-	install -m644 -p CHANGES $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/CHANGES.txt
-
-install-exec:
-	install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2
-	-rm -f -- ../$(LIBRARY_NAME)-$(OS).tar.bz2
-
-dist: all dist_$(OS)
-
-dist_linux:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2 $(LIBRARY_NAME)
-
-dist_macosx:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-dist_windows:
-	cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-
-etags:
-	etags *.[ch] ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showpaths:
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
diff --git a/externals/soundfile/sfduration-help.pd b/externals/soundfile/sfduration-help.pd
deleted file mode 100644
index d61a72abd..000000000
--- a/externals/soundfile/sfduration-help.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#N canvas 198 412 450 300 10;
-#X floatatom 111 182 8 0 0 1 ms - -;
-#X msg 131 112 symbol ../../doc/sound/voice.wav;
-#X obj 111 157 sfduration;
-#X obj 110 78 openpanel;
-#X msg 110 50 bang;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 3 0;
diff --git a/externals/soundfile/sfduration.c b/externals/soundfile/sfduration.c
deleted file mode 100644
index efb8af1c2..000000000
--- a/externals/soundfile/sfduration.c
+++ /dev/null
@@ -1,98 +0,0 @@
-
-#include <string.h>
-#include <stdio.h>
-
-#include <gmerlin/avdec.h>
-#include <gavl/gavl.h>
-
-#include <m_pd.h>
-
-#define DEBUG(x) x
-//#define DEBUG(x)
-
-static t_class *sfduration_class;
-
-typedef struct _sfduration
-{
-    t_object x_obj;
-    t_symbol* cwd;
-    t_symbol* filename;
-    bgav_t* decoder;
-} t_sfduration;
-
-static void sfduration_bang(t_sfduration *x)
-{
-    DEBUG(post("sfduration_bang"));
-	const gavl_audio_format_t* open_audio_format;
-	gavl_time_t gavl_time;
-
-    if(x->filename == &s_) {
-        pd_error(x,"no file set");
-        return;
-    }
-	if(!bgav_open(x->decoder, x->filename->s_name)) {
-		pd_error(x, "Could not open file %s", x->filename->s_name);
-    }
-	// only concerned with the first audio stream
-	open_audio_format = bgav_get_audio_format(x->decoder, 0);    
-
-    // we can get audio formats that are unkown
-	if (open_audio_format->sample_format == GAVL_SAMPLE_NONE) {
- 		pd_error(x, "sorry, this file has unsupported audio."); 
-	}
-
-    gavl_time = bgav_get_duration(x->decoder, 0);
-    t_float time_per_sample = (t_float)(gavl_time_to_samples(
-                                            open_audio_format->samplerate, 
-                                            gavl_time));
-    t_float samplerate = (t_float)open_audio_format->samplerate;
-    outlet_float(x->x_obj.ob_outlet, time_per_sample / samplerate * 1000.0);
-
-}
-
-static void sfduration_symbol(t_sfduration *x, t_symbol* filename)
-{
-    DEBUG(post("sfduration_symbol"));
-    if(sys_isabsolutepath(filename->s_name)) {
-        x->filename = filename;
-    } else {
-        int buflen;
-        char buf[FILENAME_MAX];
-        strncpy(buf, x->cwd->s_name, FILENAME_MAX);
-        strcat(buf, "/");
-        strncat(buf, filename->s_name, FILENAME_MAX - buflen - 2);
-        x->filename = gensym(buf);
-    }
-  
-    sfduration_bang(x);
-}
-
-static void *sfduration_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_sfduration *x = (t_sfduration *)pd_new(sfduration_class);
-    // TODO convert args into a filename, so spaces are valid
-    x->filename = &s_;
-    x->cwd = canvas_getdir(canvas_getcurrent());
-    outlet_new(&x->x_obj, &s_float);
-
-    x->decoder = bgav_create(); 
-
-    return(x);
-}
-
-static void sfduration_free(t_sfduration *x)
-{
-    bgav_close(x->decoder);
-}
-
-void sfduration_setup(void)
-{
-    sfduration_class = class_new(gensym("sfduration"), 
-                                (t_newmethod)sfduration_new, 
-                                (t_method)sfduration_free, 
-                                sizeof(t_sfduration), 
-                                0, A_GIMME, 0);
-
-    class_addbang(sfduration_class, (t_method)sfduration_bang);
-    class_addsymbol(sfduration_class, (t_method)sfduration_symbol);
-}
diff --git a/externals/soundfile/sfsamples-help.pd b/externals/soundfile/sfsamples-help.pd
deleted file mode 100644
index bc32c09c9..000000000
--- a/externals/soundfile/sfsamples-help.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#N canvas 198 412 450 300 10;
-#X obj 111 157 sfsamples;
-#X floatatom 111 182 0 0 0 0 - - -;
-#X msg 111 112 symbol ../../doc/sound/voice.wav;
-#X connect 0 0 1 0;
-#X connect 2 0 0 0;
diff --git a/externals/soundfile/sfsamples.c b/externals/soundfile/sfsamples.c
deleted file mode 100644
index a5d2b7814..000000000
--- a/externals/soundfile/sfsamples.c
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#include <gmerlin/avdec.h>
-#include <gavl/gavl.h>
-
-#include <m_pd.h>
-
-#define DEBUG(x) x
-//#define DEBUG(x)
-
-static t_class *sfsamples_class;
-static t_canvas *canvas;
-
-typedef struct _sfsamples
-{
-    t_object x_obj;
-    t_symbol* filename;
-    bgav_t* decoder;
-} t_sfsamples;
-
-static void sfsamples_bang(t_sfsamples *x)
-{
-    DEBUG(post("sfsamples_bang"));
-	const gavl_audio_format_t* open_audio_format;
-	gavl_time_t gavl_time;
-
-    if(x->filename == &s_) {
-        pd_error(x,"no file set");
-        return;
-    }
-	if(!bgav_open(x->decoder, x->filename->s_name)) {
-		pd_error(x, "Could not open file %s", x->filename->s_name);
-    }
-	// only concerned with the first audio stream
-	open_audio_format = bgav_get_audio_format(x->decoder, 0);    
-
-    // we can get audio formats that are unkown
-	if (open_audio_format->sample_format == GAVL_SAMPLE_NONE) {
- 		pd_error(x, "sorry, this file has unsupported audio."); 
-	}
-
-    gavl_time = bgav_get_duration(x->decoder, 0);
-    outlet_float(x->x_obj.ob_outlet, (float)(gavl_time_to_samples(open_audio_format->samplerate, gavl_time) / (float)open_audio_format->samplerate));
-
-}
-
-static void sfsamples_symbol(t_sfsamples *x, t_symbol* filename)
-{
-    DEBUG(post("sfsamples_symbol"));
-    x->filename = filename;
-    sfsamples_bang(x);
-}
-
-static void *sfsamples_new(t_symbol *s, int argc, t_atom *argv)
-{
-    t_sfsamples *x = (t_sfsamples *)pd_new(sfsamples_class);
-    // TODO convert args into a filename, so spaces are valid
-    x->filename == &s_;
-
-    outlet_new(&x->x_obj, &s_float);
-
-    x->decoder = bgav_create(); 
-
-    return(x);
-}
-
-static void sfsamples_free(t_sfsamples *x)
-{
-    bgav_close(x->decoder);
-}
-
-void sfsamples_setup(void)
-{
-    sfsamples_class = class_new(gensym("sfsamples"), 
-                                (t_newmethod)sfsamples_new, 
-                                (t_method)sfsamples_free, 
-                                sizeof(t_sfsamples), 
-                                0, A_GIMME, 0);
-
-    class_addbang(sfsamples_class, (t_method)sfsamples_bang);
-    class_addsymbol(sfsamples_class, (t_method)sfsamples_symbol);
-}
diff --git a/externals/srt/characterfilter.pd b/externals/srt/characterfilter.pd
deleted file mode 100644
index 0341a5589..000000000
--- a/externals/srt/characterfilter.pd
+++ /dev/null
@@ -1,64 +0,0 @@
-#N canvas 0 0 450 300 10;
-#X obj 158 46 inlet string;
-#X obj 158 273 outlet string;
-#X obj 198 104 utf82codenumber;
-#N canvas 0 0 450 444 serialize 0;
-#X obj 124 232 list split 1;
-#X obj 124 149 until;
-#X obj 124 187 list append;
-#X obj 150 116 t b l;
-#X obj 254 232 bang;
-#X obj 152 76 t b l b;
-#X obj 152 362 outlet stream;
-#X obj 150 47 inlet list;
-#X obj 287 356 outlet start;
-#X obj 40 360 outlet done;
-#X connect 0 0 6 0;
-#X connect 0 1 2 1;
-#X connect 0 2 4 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 1 0;
-#X connect 3 1 2 1;
-#X connect 4 0 1 1;
-#X connect 5 0 9 0;
-#X connect 5 1 3 0;
-#X connect 5 2 8 0;
-#X connect 7 0 5 0;
-#X restore 158 74 pd serialize;
-#N canvas 0 0 450 300 deserialize 0;
-#X obj 150 66 inlet stream;
-#X obj 282 65 inlet reset;
-#X obj 58 63 inlet done;
-#X obj 135 265 outlet list;
-#X obj 221 156 list prepend;
-#X obj 221 179 t l l;
-#X obj 140 202 list prepend;
-#X obj 267 124 t b b;
-#X obj 76 120 t b;
-#X connect 0 0 4 0;
-#X connect 1 0 7 0;
-#X connect 2 0 8 0;
-#X connect 4 0 5 0;
-#X connect 5 0 6 1;
-#X connect 5 1 4 1;
-#X connect 6 0 3 0;
-#X connect 7 0 6 1;
-#X connect 7 1 4 1;
-#X connect 8 0 6 0;
-#X restore 158 245 pd deserialize;
-#X obj 198 126 moses 32;
-#X obj 198 149 select 10;
-#X msg 198 170 10;
-#X obj 198 196 t f;
-#X connect 0 0 3 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 3 1 2 0;
-#X connect 3 2 4 2;
-#X connect 4 0 1 0;
-#X connect 5 0 6 0;
-#X connect 5 1 8 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 4 1;
diff --git a/externals/srt/srtfile-help.pd b/externals/srt/srtfile-help.pd
deleted file mode 100644
index 320342285..000000000
--- a/externals/srt/srtfile-help.pd
+++ /dev/null
@@ -1,67 +0,0 @@
-#N canvas 137 70 690 471 10;
-#X obj 61 110 gemwin;
-#X msg 61 87 create \, 1;
-#X obj 311 326 gemhead;
-#X obj 311 346 text3d;
-#X obj 208 278 list prepend string;
-#X obj 208 298 list trim;
-#X floatatom 388 335 5 0 0 0 - - -;
-#X obj 175 88 srtfile;
-#X msg 281 57 bang;
-#X obj 190 136 delay;
-#X obj 217 190 list prepend;
-#X obj 190 161 t b b;
-#X msg 174 57 read test.srt;
-#X obj 387 267 loadbang;
-#X msg 388 306 5;
-#X msg 427 306 font ae_AlBattar.ttf;
-#X obj 388 287 t b b;
-#X msg 202 30 read /media/disk/subs.srt;
-#X obj 275 141 print bababa;
-#X obj 289 88 t b b;
-#X msg 348 237 string;
-#X obj 190 111 t f l;
-#X obj 229 136 -;
-#X obj 229 159 * -1;
-#X obj 243 236 f;
-#X obj 281 238 delay;
-#X obj 239 323 t a;
-#X obj 241 358 print;
-#X obj 285 209 print bababa1;
-#X obj 217 214 t a b;
-#X obj 209 258 characterfilter;
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 4 0 5 0;
-#X connect 5 0 26 0;
-#X connect 6 0 3 1;
-#X connect 7 0 10 1;
-#X connect 7 0 18 0;
-#X connect 7 1 21 0;
-#X connect 8 0 19 0;
-#X connect 9 0 11 0;
-#X connect 10 0 28 0;
-#X connect 10 0 29 0;
-#X connect 11 0 7 0;
-#X connect 11 1 10 0;
-#X connect 12 0 7 0;
-#X connect 13 0 16 0;
-#X connect 14 0 6 0;
-#X connect 15 0 3 0;
-#X connect 16 0 14 0;
-#X connect 16 1 15 0;
-#X connect 17 0 7 0;
-#X connect 19 0 7 0;
-#X connect 19 1 20 0;
-#X connect 20 0 26 0;
-#X connect 21 0 9 0;
-#X connect 21 1 22 0;
-#X connect 22 0 23 0;
-#X connect 23 0 24 1;
-#X connect 24 0 25 0;
-#X connect 25 0 20 0;
-#X connect 26 0 27 0;
-#X connect 26 0 3 0;
-#X connect 29 0 30 0;
-#X connect 29 1 24 0;
-#X connect 30 0 4 0;
diff --git a/externals/srt/srtfile.pd b/externals/srt/srtfile.pd
deleted file mode 100644
index 8b76086ff..000000000
--- a/externals/srt/srtfile.pd
+++ /dev/null
@@ -1,362 +0,0 @@
-#N canvas 145 144 766 516 10;
-#X obj 126 18 inlet;
-#X text 173 8 open filename;
-#X text 177 23 bang;
-#X obj 45 430 outlet subtitle;
-#X obj 518 428 outlet done;
-#N canvas 231 15 793 487 linereader 0;
-#X obj 136 17 inlet;
-#X obj 159 452 outlet next line;
-#X msg 136 111 read \$1 \, rewind;
-#X obj 136 92 symbol;
-#X obj 159 357 list prepend;
-#X obj 246 334 t l l;
-#X obj 187 145 until;
-#X obj 136 266 t b b b;
-#X obj 136 221 route bang;
-#X obj 246 311 list prepend;
-#N canvas 642 75 450 300 EOL 0;
-#X obj 84 48 inlet;
-#X obj 165 129 select 10 13;
-#X text 157 51 CRLF = 13 10 (w32);
-#X msg 205 151 1;
-#X msg 245 172 0;
-#X obj 165 189 f;
-#X obj 165 217 select 1;
-#X obj 245 152 t f b;
-#X obj 60 244 outlet byte;
-#X obj 165 245 outlet EOL;
-#X obj 43 113 select 10 13;
-#X connect 0 0 10 0;
-#X connect 1 0 5 0;
-#X connect 1 1 3 0;
-#X connect 1 2 7 0;
-#X connect 3 0 5 1;
-#X connect 4 0 5 1;
-#X connect 5 0 6 0;
-#X connect 6 0 9 0;
-#X connect 7 0 8 0;
-#X connect 7 1 4 0;
-#X connect 10 0 9 0;
-#X connect 10 2 8 0;
-#X restore 246 244 pd EOL;
-#X obj 136 244 t b b;
-#X obj 137 47 route open bang bong;
-#X msg 219 81 bang;
-#X obj 316 283 t b b;
-#X obj 226 290 t b b;
-#X obj 430 445 outlet;
-#X obj 136 171 ./binfile;
-#X connect 0 0 12 0;
-#X connect 2 0 17 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 0;
-#X connect 5 0 4 1;
-#X connect 5 1 9 1;
-#X connect 6 0 17 0;
-#X connect 7 0 15 0;
-#X connect 7 1 4 0;
-#X connect 7 2 6 1;
-#X connect 8 0 11 0;
-#X connect 8 1 10 0;
-#X connect 9 0 5 0;
-#X connect 10 0 9 0;
-#X connect 10 1 14 0;
-#X connect 11 0 7 0;
-#X connect 11 1 16 0;
-#X connect 12 0 3 0;
-#X connect 12 1 6 0;
-#X connect 12 2 13 0;
-#X connect 13 0 17 0;
-#X connect 14 0 7 0;
-#X connect 15 0 4 1;
-#X connect 15 1 9 1;
-#X connect 17 0 8 0;
-#X connect 17 2 11 0;
-#X restore 148 153 pd linereader;
-#N canvas 626 26 639 408 lineid 0;
-#X obj 146 47 inlet;
-#X obj 124 318 outlet;
-#X obj 360 56 inlet reset;
-#X obj 146 168 route bang;
-#X obj 226 244 i;
-#X obj 261 246 + 1;
-#X msg 178 210 0;
-#X obj 146 190 t b b;
-#X obj 124 271 list prepend;
-#X obj 213 190 t b b;
-#X obj 124 293 list prepend 0;
-#X obj 360 94 t b;
-#X obj 265 318 outlet done;
-#X obj 146 97 t a a;
-#X connect 0 0 13 0;
-#X connect 2 0 11 0;
-#X connect 3 0 7 0;
-#X connect 3 1 9 0;
-#X connect 4 0 5 0;
-#X connect 4 0 10 1;
-#X connect 5 0 4 1;
-#X connect 6 0 4 1;
-#X connect 7 0 12 0;
-#X connect 7 1 6 0;
-#X connect 8 0 10 0;
-#X connect 9 0 8 0;
-#X connect 9 1 4 0;
-#X connect 10 0 1 0;
-#X connect 11 0 6 0;
-#X connect 13 0 3 0;
-#X connect 13 1 8 1;
-#X restore 148 189 pd lineid;
-#X obj 208 125 until;
-#X obj 148 248 route 0 1;
-#X obj 208 210 t b b;
-#X obj 378 428 outlet ID;
-#N canvas 207 25 634 523 timestamp 0;
-#X obj 59 44 inlet bytes;
-#X obj 59 184 outlet from;
-#X obj 146 183 outlet to;
-#X obj 311 47 inlet reset;
-#X text 141 13 HH:MM:SS \, sss --> HH:MM:SS \, sss;
-#N canvas 523 25 450 526 getdelays 0;
-#X obj 53 138 unpack 0 0 0 0 0 0 0 0;
-#X obj 53 162 * 60;
-#X obj 53 184 +;
-#X obj 53 204 * 60;
-#X obj 53 225 +;
-#X obj 53 247 +;
-#X obj 140 162 * 60;
-#X obj 140 184 +;
-#X obj 140 204 * 60;
-#X obj 140 225 +;
-#X obj 140 247 +;
-#X obj 53 276 * 1000;
-#X obj 140 276 * 1000;
-#X obj 55 325 -;
-#X obj 53 299 t f f;
-#X obj 140 325 -;
-#X obj 55 356 outlet;
-#X obj 140 356 outlet;
-#X obj 53 104 inlet timestamps;
-#X obj 291 74 inlet set number;
-#X obj 291 148 t f;
-#X connect 0 0 1 0;
-#X connect 0 1 2 1;
-#X connect 0 2 4 1;
-#X connect 0 3 5 1;
-#X connect 0 4 6 0;
-#X connect 0 5 7 1;
-#X connect 0 6 9 1;
-#X connect 0 7 10 1;
-#X connect 1 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 10 0 12 0;
-#X connect 11 0 14 0;
-#X connect 12 0 15 0;
-#X connect 13 0 16 0;
-#X connect 14 0 13 1;
-#X connect 14 0 15 1;
-#X connect 14 1 13 0;
-#X connect 15 0 17 0;
-#X connect 18 0 0 0;
-#X connect 19 0 20 0;
-#X connect 20 0 13 1;
-#X connect 20 0 15 1;
-#X restore 59 150 pd getdelays;
-#N canvas 496 75 450 413 bytes2numbers 0;
-#X obj 95 23 inlet bytes;
-#X obj 95 278 outlet;
-#X obj 95 60 string2any;
-#X obj 95 82 list;
-#X msg 95 107 list \$1 \$3 \$5 \$7;
-#X obj 94 130 unpack s 0 s 0;
-#N canvas 0 0 450 475 fractional 0;
-#X obj 99 42 inlet;
-#X obj 99 411 outlet;
-#X text 151 43 123;
-#X text 155 416 0.123;
-#X obj 145 339 *;
-#X obj 168 171 log;
-#X obj 202 172 log 10;
-#X obj 168 193 /;
-#X msg 206 152 10;
-#X obj 168 214 i;
-#X obj 168 152 abs;
-#X obj 168 240 + 1;
-#X obj 168 313 pow;
-#X msg 168 285 10 \$1;
-#X obj 168 263 * -1;
-#X obj 145 126 t f f b;
-#X obj 99 84 route 0;
-#X msg 99 118 0;
-#X connect 0 0 16 0;
-#X connect 4 0 1 0;
-#X connect 5 0 7 0;
-#X connect 6 0 7 1;
-#X connect 7 0 9 0;
-#X connect 8 0 6 0;
-#X connect 9 0 11 0;
-#X connect 10 0 5 0;
-#X connect 11 0 14 0;
-#X connect 12 0 4 1;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 4 0;
-#X connect 15 1 10 0;
-#X connect 15 2 8 0;
-#X connect 16 0 17 0;
-#X connect 16 1 15 0;
-#X connect 17 0 1 0;
-#X restore 106 166 pd fractional;
-#X obj 95 211 pack 0 0 0 0;
-#N canvas 0 0 450 475 fractional 0;
-#X obj 99 42 inlet;
-#X obj 99 411 outlet;
-#X text 151 43 123;
-#X text 155 416 0.123;
-#X obj 99 299 *;
-#X obj 122 131 log;
-#X obj 99 85 t f f b;
-#X obj 156 132 log 10;
-#X obj 122 153 /;
-#X msg 160 112 10;
-#X obj 122 174 i;
-#X obj 122 112 abs;
-#X obj 122 200 + 1;
-#X obj 122 273 pow;
-#X msg 122 245 10 \$1;
-#X obj 122 223 * -1;
-#X connect 0 0 6 0;
-#X connect 4 0 1 0;
-#X connect 5 0 8 0;
-#X connect 6 0 4 0;
-#X connect 6 1 11 0;
-#X connect 6 2 9 0;
-#X connect 7 0 8 1;
-#X connect 8 0 10 0;
-#X connect 9 0 7 0;
-#X connect 10 0 12 0;
-#X connect 11 0 5 0;
-#X connect 12 0 15 0;
-#X connect 13 0 4 1;
-#X connect 14 0 13 0;
-#X connect 15 0 14 0;
-#X restore 216 166 pd fractional;
-#X obj 205 211 pack 0 0 0 0;
-#X obj 95 249 list append;
-#X obj 95 190 symbol2list :;
-#X obj 205 190 symbol2list :;
-#X connect 0 0 2 0;
-#X connect 2 0 3 0;
-#X connect 3 0 4 0;
-#X connect 4 0 5 0;
-#X connect 5 0 11 0;
-#X connect 5 1 6 0;
-#X connect 5 2 12 0;
-#X connect 5 3 8 0;
-#X connect 6 0 7 3;
-#X connect 7 0 10 0;
-#X connect 8 0 9 3;
-#X connect 9 0 10 1;
-#X connect 10 0 1 0;
-#X connect 11 0 7 0;
-#X connect 12 0 9 0;
-#X restore 59 110 pd bytes2numbers;
-#X connect 0 0 6 0;
-#X connect 3 0 5 1;
-#X connect 5 0 1 0;
-#X connect 5 1 2 0;
-#X connect 6 0 5 0;
-#X restore 178 381 pd timestamp;
-#X obj 208 308 list split 1;
-#N canvas 0 0 450 506 lines2multiline 0;
-#X obj 75 47 inlet singleline;
-#X obj 75 427 outlet multiline;
-#X obj 142 199 list append 10;
-#X text 254 197 <-- Gem's linebreak;
-#X obj 75 127 route bang;
-#X obj 142 259 list prepend;
-#X obj 142 280 t l l;
-#X obj 75 313 list prepend;
-#X obj 75 269 t b;
-#X obj 278 51 inlet delimiter;
-#X obj 75 98 t a a;
-#X obj 75 399 route bang;
-#X obj 75 345 t a b b a;
-#X connect 0 0 10 0;
-#X connect 2 0 5 0;
-#X connect 4 0 8 0;
-#X connect 4 1 2 0;
-#X connect 5 0 6 0;
-#X connect 6 0 7 1;
-#X connect 6 1 5 1;
-#X connect 7 0 12 0;
-#X connect 8 0 7 0;
-#X connect 9 0 2 1;
-#X connect 10 0 4 0;
-#X connect 11 1 1 0;
-#X connect 12 0 11 0;
-#X connect 12 1 7 1;
-#X connect 12 2 5 1;
-#X restore 248 334 pd lines2multiline;
-#X obj 178 429 outlet from to;
-#X obj 178 404 pack 0 0;
-#X msg 259 360 0;
-#X obj 126 45 route read bang;
-#X obj 126 67 symbol;
-#X msg 126 108 open \$1;
-#N canvas 565 53 450 300 checkopen 0;
-#X obj 58 29 inlet bang;
-#X obj 171 207 outlet bang;
-#X obj 58 83 symbol;
-#X obj 107 83 symbol;
-#X obj 58 102 select select;
-#X obj 58 142 print STR-error;
-#X obj 58 61 t b b;
-#X obj 171 143 t b;
-#X obj 285 32 inlet filename;
-#X msg 58 122 line requested without prior read!;
-#X connect 0 0 6 0;
-#X connect 2 0 4 0;
-#X connect 3 0 4 1;
-#X connect 4 0 9 0;
-#X connect 4 1 7 0;
-#X connect 6 0 2 0;
-#X connect 6 1 3 0;
-#X connect 7 0 1 0;
-#X connect 8 0 2 1;
-#X connect 9 0 5 0;
-#X restore 208 99 pd checkopen;
-#X obj 126 88 t s b s;
-#X connect 0 0 17 0;
-#X connect 5 0 6 0;
-#X connect 5 1 4 0;
-#X connect 6 0 8 0;
-#X connect 6 1 9 0;
-#X connect 7 0 5 0;
-#X connect 8 0 10 0;
-#X connect 8 1 11 0;
-#X connect 8 2 12 0;
-#X connect 9 0 13 0;
-#X connect 9 1 7 1;
-#X connect 11 0 15 0;
-#X connect 11 1 15 1;
-#X connect 12 1 13 0;
-#X connect 13 0 3 0;
-#X connect 15 0 14 0;
-#X connect 16 0 11 1;
-#X connect 17 0 18 0;
-#X connect 17 1 20 0;
-#X connect 18 0 21 0;
-#X connect 19 0 5 0;
-#X connect 20 0 7 0;
-#X connect 21 0 19 0;
-#X connect 21 1 6 1;
-#X connect 21 1 16 0;
-#X connect 21 2 20 1;
diff --git a/externals/srt/utf82codenumber.pd b/externals/srt/utf82codenumber.pd
deleted file mode 100644
index 5cd80b5a5..000000000
--- a/externals/srt/utf82codenumber.pd
+++ /dev/null
@@ -1,133 +0,0 @@
-#N canvas 375 22 649 526 10;
-#X obj 181 32 inlet byte;
-#X obj 181 476 outlet byte;
-#X text 259 108 aux;
-#X text 323 111 2byte;
-#X text 386 113 3byte;
-#X text 446 113 4byte;
-#X text 180 112 1byte;
-#X obj 181 129 & 127;
-#X obj 321 129 & 31;
-#X obj 251 129 & 63;
-#X obj 390 129 & 15;
-#X obj 450 129 & 7;
-#X obj 251 150 t f b;
-#X msg 207 175 1;
-#X obj 181 268 ==;
-#X text 220 284 expectedbytes;
-#X obj 181 226 i;
-#X obj 226 266 t f b;
-#X msg 268 266 0;
-#X obj 204 371 t l l;
-#X obj 181 310 select 1;
-#X obj 181 393 list prepend;
-#X msg 353 174 2;
-#X obj 181 198 t b f;
-#X obj 181 151 t f b;
-#X obj 321 150 t f b;
-#X obj 212 226 + 1;
-#X obj 390 153 t f b;
-#X msg 422 177 3;
-#X obj 450 151 t f b;
-#X msg 482 175 4;
-#X obj 181 416 t l l;
-#N canvas 327 0 461 427 shifter 0;
-#X obj 134 59 inlet;
-#X obj 134 387 outlet;
-#X obj 166 220 list split 1;
-#X obj 166 167 until;
-#X obj 166 195 list append;
-#X obj 266 220 bang;
-#X obj 166 246 +;
-#X obj 166 299 t f f;
-#X obj 166 144 t b l b;
-#X msg 215 265 0;
-#X obj 166 270 << 6;
-#X obj 166 321 >> 6;
-#X obj 134 359 f;
-#X obj 134 98 t b l;
-#X connect 0 0 13 0;
-#X connect 2 0 6 0;
-#X connect 2 1 4 1;
-#X connect 2 2 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 2 0;
-#X connect 5 0 3 1;
-#X connect 6 0 10 0;
-#X connect 7 0 11 0;
-#X connect 7 1 6 1;
-#X connect 8 0 3 0;
-#X connect 8 1 4 1;
-#X connect 8 2 9 0;
-#X connect 9 0 6 1;
-#X connect 10 0 7 0;
-#X connect 11 0 12 1;
-#X connect 12 0 1 0;
-#X connect 13 0 12 0;
-#X connect 13 1 8 0;
-#X restore 181 443 pd shifter;
-#X obj 203 345 list prepend;
-#X obj 243 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 356 199 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 419 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 486 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 181 87 moses 128;
-#X obj 251 87 moses 192;
-#X obj 321 87 moses 224;
-#X obj 390 87 moses 240;
-#X obj 181 61 t f;
-#X text 272 476 unicode code number;
-#X text 265 30 UTF-8 multibyte;
-#X connect 0 0 42 0;
-#X connect 7 0 24 0;
-#X connect 8 0 25 0;
-#X connect 9 0 12 0;
-#X connect 10 0 27 0;
-#X connect 11 0 29 0;
-#X connect 12 0 23 0;
-#X connect 13 0 17 0;
-#X connect 13 0 34 0;
-#X connect 14 0 20 0;
-#X connect 16 0 14 0;
-#X connect 16 0 26 0;
-#X connect 17 0 14 1;
-#X connect 17 1 18 0;
-#X connect 17 1 33 1;
-#X connect 18 0 26 0;
-#X connect 19 0 21 1;
-#X connect 19 1 33 1;
-#X connect 20 0 21 0;
-#X connect 21 0 31 0;
-#X connect 22 0 17 0;
-#X connect 22 0 35 0;
-#X connect 23 0 16 0;
-#X connect 23 1 33 0;
-#X connect 24 0 23 0;
-#X connect 24 1 13 0;
-#X connect 25 0 23 0;
-#X connect 25 1 22 0;
-#X connect 26 0 16 1;
-#X connect 27 0 23 0;
-#X connect 27 1 28 0;
-#X connect 28 0 17 0;
-#X connect 28 0 36 0;
-#X connect 29 0 23 0;
-#X connect 29 1 30 0;
-#X connect 30 0 17 0;
-#X connect 30 0 37 0;
-#X connect 31 0 32 0;
-#X connect 32 0 1 0;
-#X connect 33 0 19 0;
-#X connect 38 0 7 0;
-#X connect 38 1 39 0;
-#X connect 39 0 9 0;
-#X connect 39 1 40 0;
-#X connect 40 0 8 0;
-#X connect 40 1 41 0;
-#X connect 41 0 10 0;
-#X connect 41 1 11 0;
-#X connect 42 0 38 0;
diff --git a/externals/tclpd/AUTHORS b/externals/tclpd/AUTHORS
deleted file mode 100644
index 03b00a35e..000000000
--- a/externals/tclpd/AUTHORS
+++ /dev/null
@@ -1,7 +0,0 @@
-Authors of tclpd.
-
-Federico Ferri <mescalinum@gmail.com>
-
-I'd like to thank also Mathieu Bouchard for sharing its knowledge and giving
-advices, thus contributing to this project.
-
diff --git a/externals/tclpd/COPYING b/externals/tclpd/COPYING
deleted file mode 100644
index f47bd6d7a..000000000
--- a/externals/tclpd/COPYING
+++ /dev/null
@@ -1,280 +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
diff --git a/externals/tclpd/ChangeLog b/externals/tclpd/ChangeLog
deleted file mode 100644
index 8ddfa3e92..000000000
--- a/externals/tclpd/ChangeLog
+++ /dev/null
@@ -1,17 +0,0 @@
-Version 0.2.1:
-	- Added support for properties function.
-	- Added support for pd_bind/unbind.
-	- Added destructor call in pd_free.
-	- Added support for glist_grab (needed for mouse motion)
-	- Added support for loadbang
-	- Added iemgui-style general purpose property panel
-	- Introduced Tcl package logic (package name: Tclpd)
-
-Version 0.2:
-	- Added support for GUI externals (widgetbehavior).
-	- Added support for save function.
-	- Fixed memory leaks.
-
-Version 0.1.1:
-	- Basic support for atom conversion, pd classes, methods.
-	- Fixed issues with tcl obj reference counter (segfaults).
diff --git a/externals/tclpd/INSTALL b/externals/tclpd/INSTALL
deleted file mode 100644
index 3083f1afd..000000000
--- a/externals/tclpd/INSTALL
+++ /dev/null
@@ -1 +0,0 @@
-See README
diff --git a/externals/tclpd/Makefile b/externals/tclpd/Makefile
deleted file mode 100644
index 633feb228..000000000
--- a/externals/tclpd/Makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/make
-
-DEBUG?=0
-OS := $(shell uname -s)
-TCL_VERSION := $(shell echo 'puts $$tcl_version' | tclsh)
-
-ifeq ($(DEBUG),1)
-	CFLAGS += -O0 -g -ggdb -DDEBUG
-endif
-ifeq ($(OS),Linux)
-  PDSUF = .pd_linux
-  PDBUNDLEFLAGS = -shared -rdynamic
-  LDSOFLAGS = -lm -ltcl$(TCL_VERSION)
-endif
-ifeq ($(OS),Darwin)
-  PDSUF = .pd_darwin
-  INCLUDES = -I/Library/Frameworks/Tcl.framework/Headers
-  PDBUNDLEFLAGS = -bundle -flat_namespace -undefined dynamic_lookup
-  LDSOFLAGS = -lm -framework Tcl
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  PDSUF = .dll
-  PDBUNDLEFLAGS = -shared
-  LDSOFLAGS = -lm -ltcl$(TCL_VERSION)
-endif
-
-LIBNAME = tcl
-INCLUDES =  -I../../pd/src -I/usr/include -I/usr/include/tcl$(TCL_VERSION)
-CFLAGS += -funroll-loops -fno-operator-names -fno-omit-frame-pointer -falign-functions=16 -Wall -fPIC
-CFLAGS += -DPDSUF=\"$(PDSUF)\"
-ifeq ($(DEBUG),0)
-	CFLAGS += -O2
-endif
-LDSHARED = $(CXX) $(PDBUNDLEFLAGS)
-
-all:: $(LIBNAME)$(PDSUF)
-	@echo '-----------------------------------------------------------------------------'
-	@echo ' $(LIBNAME)$(PDSUF) ('`test $(DEBUG) -eq 1 && echo debug || echo release`' build) '\
-		'[size: '`ls -gGh $(LIBNAME)$(PDSUF) | cut -d " " -f 3`']'
-
-clean::
-	rm -f tcl.pd_linux tcl_wrap.cxx *.o *~
-
-.SUFFIXES: .cxx .o
-
-SRCS = tcl_wrap.cxx tcl_typemap.cxx tcl_class.cxx tcl_widgetbehavior.cxx tcl_proxyinlet.cxx tcl_setup.cxx tcl_loader.cxx
-OBJS = ${SRCS:.cxx=.o}
-
-tcl_wrap.cxx:: tcl.i tcl_extras.h Makefile
-	swig -v -c++ -tcl -o tcl_wrap.cxx $(INCLUDES) tcl.i
-
-.cxx.o:: tcl_extras.h Makefile
-	$(CXX) $(CFLAGS) $(INCLUDES) -xc++ -c $<
-
-$(LIBNAME)$(PDSUF):: tcl_extras.h Makefile $(OBJS)
-	$(LDSHARED) $(CFLAGS) -o $(LIBNAME)$(PDSUF) $(OBJS) $(LDSOFLAGS)
-
-pdlib_tcl_syntax: pdlib.tcl
-	@echo -n "checking pdlib.tcl for syntax..."
-	@tclsh pdlib.tcl >/dev/null 2>&1
-	@echo " OK"
diff --git a/externals/tclpd/README b/externals/tclpd/README
deleted file mode 100644
index 0276171b1..000000000
--- a/externals/tclpd/README
+++ /dev/null
@@ -1,112 +0,0 @@
-
- Tcl for Pd
- ==========
-
-This library allows to to write externals for Pd using the Tcl language.
-
-It is based on the standard API of PD (defined in m_pd.h, plus some other
-private header files, like g_canvas.h, s_stuff.h, ...).
-
-Also a library of Tcl helper functions is provided. It is not mandatory to use
-it (moreover: it requires Tcl 8.5, while the tclpd external alone requires only
-Tcl 8.4), but it is a syntactic sugar and can simplify a lot the code.
-Using it is as simple as sourcing pdlib.tcl in your Tcl external.
-
-Anyway, disregarding any approach chosen to develop Tcl externals, a general
-knowledge of Pd internals (atoms, symbols, symbol table, inlets, objects) is
-strongly required. (Pd-External-HOWTO is always a good reading)
-
-
- Compiling and installing
- ========================
-
-To compile tclpd, simply type:
-
-  make clean all
-
-To compile it with debug enabled:
-
-  make DEBUG=1 clean all
-
-Requirements are pd >= 0.39, swig, c++ compiler.
-To install tclpd, simply copy it to /usr/lib/pd/extra (or where you installed
-pure-data).
-
-
- Writing GUI externals
- =====================
-
-Pd is split into two processes: pd (the core) and pd-gui.
-A simple pd external just runs in the core. A simple Tcl externals still runs
-in the core, because tclpd creates a Tcl interpreter for that.
-
-Instead, pd-gui has its own Tcl interpreter. In order to to GUI things (i.e.
-draw on the canvas, or react to mouse events), the core process needs to
-communicate with the pd-gui process (generally sending Tk commands, or calling
-procedures defined in the pd-gui interp.
-This is done with the sys_gui() function, if using the plain API.
-
-Also pdlib.tcl provide means to simplify this task, with the guiproc function,
-which defines procedures directly into the pd-gui interpreter.
-
-As a counterexample, I'd like to cite tot/toxy/widget externals, which you may
-be familiar with.
-Such externals run in the pd-gui process. That was fine for writing simple gui
-externals, that don't need to react to any message.
-But, for instance, you cannot do a metronome or anything which is timing
-accurate, or heavy IO, as that is not the purpose of the gui process.
-Tclpd instead, by running in the core process, allows that.
-
-
- Data conversion between Tcl <=> Pd
- ==================================
-
-In pd exists 'atoms'. An atom is a float, a symbol, a list item, and such.
-Tcl does not have data types. In Tcl everything is a string, also numbers and
-lists. Just when something needs to be read as number, then evaluation comes
-in.
-This leads to loss of information about atom types. Imagine a
-symbol '456' comes into tclpd, you won't know anymore if "456"
-is a symbol or a float.
-
-Here a little convention comes in: in tclpd an atom gets converted into a
-two-item list, where first item is atom type, and second item is its value.
-
-Some examples of this conversion:
-
- Pd:  456
- Tcl: {float 456}
-
- Pd:  symbol foo
- Tcl: {symbol foo}
-
- Pd:  list cat dog 123 456 weee
- Tcl: {{symbol cat} {symbol dog} {float 123} {float 456} {symbol wee}}
-
-
- Examples
- ========
-
-I provided small examples.
-after loading pd with option '-lib tcl', just type the filename
-(minus the .tcl extension) to load the Tcl externals examples.
-
-actually there is one simple example: list_change (behaves like
-[change] object, but work with lists only)
-
-examples make use of pdlib.tcl. It's still possible to port the example to use
-only the plain Pd api. Contributions are welcome.
-
-
- Authors
- =======
-
-Please refer to AUTHORS file found in tclpd package.
-
-
- License
- =======
-
-Please refer to COPYING file found in tclpd package.
-
-
diff --git a/externals/tclpd/TODO b/externals/tclpd/TODO
deleted file mode 100644
index e1cc55c83..000000000
--- a/externals/tclpd/TODO
+++ /dev/null
@@ -1,4 +0,0 @@
-TODO-list for tclpd (most important things first)
-=================================================
-- add (or check) GOP
-- signal externals? (really?)
diff --git a/externals/tclpd/bitmap-help.pd b/externals/tclpd/bitmap-help.pd
deleted file mode 100644
index e12deabc8..000000000
--- a/externals/tclpd/bitmap-help.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#N canvas 625 330 742 518 10;
-#X obj 63 244 bitmap -cellsize 15 -uwidth 8 -uheight 8;
-#bitmap setdata 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0
-0 1 0 1 1 0 0 0 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 0 1
-0 1 1 0 1 0 1 0 1 0;
-#X obj 87 410 print out;
-#X msg 39 117 getrow \$1;
-#X obj 42 245 vradio 15 1 0 8 empty empty empty 0 -8 0 10 -228856 -162280
--1 0;
-#X obj 42 410 s \$0r;
-#X obj 39 89 r \$0r;
-#X text 36 19 [bitmap] - a two dimensional array of bits (toggles)
-;
-#X text 38 49 creation arguments -cellsize <#> -uwidth <#> -uheight <#>;
-#X msg 111 117 getcol \$1;
-#X obj 111 89 r \$0c;
-#X obj 63 213 r \$0b;
-#X obj 39 157 s \$0b;
-#X obj 63 372 hradio 15 1 0 8 empty empty empty 0 -8 0 10 -228856 -162280
--1 0;
-#X obj 157 410 s \$0c;
-#X obj 227 157 s \$0b;
-#X msg 227 117 getcell 0 1;
-#X msg 317 117 getcell 1 1;
-#X text 226 88 getcell <row> <col>;
-#X obj 247 243 bitmap -cellsize 4 -uwidth 16 -uheight 16;
-#bitmap setdata 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 0 1 1 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0
-1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 1 1 0 0
-0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0
-1 0 1 1 1 1 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0
-1 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 1 1 1 0 0
-0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1
-0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X msg 447 200 setcell \$1 \$2 \$3;
-#N canvas 4 117 450 300 randomdata 0;
-#X obj 220 136 random 2;
-#X obj 62 89 t b b b;
-#X obj 62 35 inlet;
-#X obj 62 187 pack f f f;
-#X obj 62 222 outlet;
-#X obj 62 62 metro 10;
-#X obj 62 136 random 4;
-#X obj 141 136 random 4;
-#X connect 0 0 3 2;
-#X connect 1 0 6 0;
-#X connect 1 1 7 0;
-#X connect 1 2 0 0;
-#X connect 2 0 5 0;
-#X connect 3 0 4 0;
-#X connect 5 0 1 0;
-#X connect 6 0 3 0;
-#X connect 7 0 3 1;
-#X restore 447 175 pd randomdata;
-#X obj 447 151 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
-1;
-#X obj 447 331 bitmap -cellsize 16 -uwidth 4 -uheight 4;
-#bitmap setdata 1 0 0 0 1 0 0 1 1 0 1 1 1 1 1 0;
-#X msg 465 231 setcol 1 0 0 0 0 \, setcol 2 0 0 0 0;
-#X msg 481 292 setrow \$1 \$2 \$2 \$3 \$3;
-#X msg 481 265 0 1 0 \, 1 1 0 \, 2 0 1 \, 3 0 1;
-#X connect 0 0 1 0;
-#X connect 2 0 11 0;
-#X connect 3 0 4 0;
-#X connect 5 0 2 0;
-#X connect 8 0 11 0;
-#X connect 9 0 8 0;
-#X connect 10 0 0 0;
-#X connect 12 0 13 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 19 0 22 0;
-#X connect 20 0 19 0;
-#X connect 21 0 20 0;
-#X connect 23 0 22 0;
-#X connect 24 0 22 0;
-#X connect 25 0 24 0;
diff --git a/externals/tclpd/bitmap-madness.pd b/externals/tclpd/bitmap-madness.pd
deleted file mode 100644
index 49a9dd3f5..000000000
--- a/externals/tclpd/bitmap-madness.pd
+++ /dev/null
@@ -1,134 +0,0 @@
-#N canvas 5 140 311 321 10;
-#N canvas 322 138 514 645 in 1;
-#X obj 20 462 outlet;
-#X obj 51 8 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
-;
-#X obj 44 60 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#N canvas 3 94 332 662 for_X_Y 0;
-#X obj 61 60 inlet;
-#X obj 71 223 until;
-#X msg 125 177 0;
-#X obj 72 261 f;
-#X obj 106 260 + 1;
-#X obj 68 141 t b b;
-#X obj 78 418 until;
-#X msg 132 372 0;
-#X obj 79 456 f;
-#X obj 113 455 + 1;
-#X obj 75 336 t b b;
-#X obj 73 297 t b f;
-#X obj 82 502 pack f f;
-#X msg 77 528 \$2 \$1;
-#X obj 74 589 outlet;
-#X msg 72 177 32;
-#X msg 79 372 32;
-#X connect 0 0 5 0;
-#X connect 1 0 3 0;
-#X connect 2 0 3 1;
-#X connect 3 0 4 0;
-#X connect 3 0 11 0;
-#X connect 4 0 3 1;
-#X connect 5 0 15 0;
-#X connect 5 1 2 0;
-#X connect 6 0 8 0;
-#X connect 7 0 8 1;
-#X connect 8 0 9 0;
-#X connect 8 0 12 0;
-#X connect 9 0 8 1;
-#X connect 10 0 16 0;
-#X connect 10 1 7 0;
-#X connect 11 0 10 0;
-#X connect 11 1 12 1;
-#X connect 12 0 13 0;
-#X connect 13 0 14 0;
-#X connect 15 0 1 0;
-#X connect 16 0 6 0;
-#X restore 50 125 pd for_X_Y;
-#X obj 78 270 sin;
-#X obj 78 227 / 64;
-#X obj 51 154 unpack f f;
-#X obj 107 190 t f f;
-#X obj 21 422 pack f f f;
-#X msg 21 442 setcell \$1 \$2 \$3;
-#X obj 76 297 + 0.5;
-#X obj 151 277 sin;
-#X obj 149 255 / 16;
-#X obj 79 321 +;
-#X obj 49 189 t f f f;
-#X obj 79 249 +;
-#X obj 228 155 f;
-#X obj 263 154 + 0.1;
-#X obj 49 94 t b b;
-#X obj 78 360 wrap;
-#X obj 77 401 i;
-#X obj 148 230 expr sqrt(pow(sin($f3)*32-$f1 \, 2)+pow(cos($f3)*34-$f2
-\, 2));
-#X obj 79 380 * 1.8;
-#X obj 79 341 * 1.2;
-#X obj 151 299 + 0.6;
-#X obj 52 35 metro 40;
-#X connect 1 0 25 0;
-#X connect 2 0 18 0;
-#X connect 3 0 6 0;
-#X connect 4 0 10 0;
-#X connect 5 0 15 0;
-#X connect 6 0 14 0;
-#X connect 6 1 7 0;
-#X connect 7 0 8 1;
-#X connect 7 1 21 1;
-#X connect 8 0 9 0;
-#X connect 9 0 0 0;
-#X connect 10 0 13 0;
-#X connect 11 0 24 0;
-#X connect 12 0 11 0;
-#X connect 13 0 23 0;
-#X connect 14 0 8 0;
-#X connect 14 1 5 0;
-#X connect 14 2 21 0;
-#X connect 15 0 4 0;
-#X connect 16 0 17 0;
-#X connect 16 0 21 2;
-#X connect 17 0 16 1;
-#X connect 18 0 3 0;
-#X connect 18 1 16 0;
-#X connect 19 0 22 0;
-#X connect 20 0 8 2;
-#X connect 21 0 12 0;
-#X connect 22 0 20 0;
-#X connect 23 0 19 0;
-#X connect 24 0 13 1;
-#X connect 25 0 18 0;
-#X restore 17 10 pd in;
-#X obj 17 34 bitmap 8 32 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
-1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
-1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
-0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
-0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
-0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
-0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
-0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
-0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
-0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
-0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
-#X connect 0 0 1 0;
diff --git a/externals/tclpd/bitmap.tcl b/externals/tclpd/bitmap.tcl
deleted file mode 100644
index 1cbc7662f..000000000
--- a/externals/tclpd/bitmap.tcl
+++ /dev/null
@@ -1,346 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-set ::script_path [file dirname [info script]]
-
-pd::guiproc bitmap_draw_new {self c x y config data} {
-    set w [dict get $config -uwidth]
-    set h [dict get $config -uheight]
-    set sz [dict get $config -cellsize]
-    set fgcolor [dict get $config -fgcolor]
-    set bgcolor [dict get $config -bgcolor]
-    set colors [list $bgcolor $fgcolor]
-    set z 0
-    for {set i 0} {$i < $h} {incr i} {
-        for {set j 0} {$j < $w} {incr j} {
-            $c create rectangle \
-                [expr {0+$x+$j*$sz}] [expr {0+$y+$i*$sz}] \
-                [expr {1+$x+($j+1)*$sz}] [expr {1+$y+($i+1)*$sz}] \
-                -outline $fgcolor -fill [lindex $colors [lindex $data $z]] \
-                -tags [list $self cell_${j}_${i}_$self]
-            incr z
-        }
-    }
-    set x2 [expr {$x+$w*$sz+1}]
-    set y2 [expr {$y+$h*$sz+1}]
-    $c create rectangle $x $y $x2 $y2 \
-        -outline $fgcolor -tags [list $self border$self]
-}
-
-pd::guiclass bitmap {
-    constructor {
-        set s [file join $::script_path properties.tcl]
-        sys_gui "source {$s}\n"
-
-        pd::add_outlet $self float
-
-        # set defaults:
-        set @config [list]
-        lappend @config -uwidth 8
-        lappend @config -uheight 8
-        lappend @config -cellsize 16
-        lappend @config -label ""
-        lappend @config -labelpos "top"
-        lappend @config -sendsymbol ""
-        lappend @config -receivesymbol ""
-        lappend @config -fgcolor "#000000"
-        lappend @config -bgcolor "#ffffff"
-        lappend @config -lblcolor "#000000"
-        set @data {
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-        }
-        # expanded ($n) send/recv symbols:
-        set @send {}
-        set @recv {}
-
-        ::$self 0 config {*}$args
-
-        set @rcvLoadData {#bitmap}
-        pd_bind [tclpd_get_instance_pd $self] [gensym $@rcvLoadData]
-    }
-
-    destructor {
-        set pdself [tclpd_get_instance_pd $self]
-        if {$@rcvLoadData != {}} {
-            #should not happen!
-            pd_unbind $pdself [gensym $@rcvLoadData]
-        }
-        if {[dict get $@config -receivesymbol] != {}} {
-            pd_unbind $pdself $@recv
-        }
-    }
-
-    0_config {
-        if {$args == {}} {
-            return $@config
-        } else {
-            set newconf [list]
-            set optlist [pd::strip_selectors $args]
-            set optlist [pd::strip_empty $optlist]
-            for {set i 0} {$i < [llength $optlist]} {} {
-                set k [lindex $optlist $i]
-                if {![dict exists $@config $k]} {
-                    return -code error "unknown option '$k'"
-                }
-                incr i
-                set v [lindex $optlist $i]
-                if {[lsearch -exact {-uwidth -uheight -cellsize} $k] != -1} {
-                    set v [expr {int($v)}]
-                }
-                dict set newconf $k $v
-                incr i
-            }
-            if {[dict get $@config -uwidth] != [dict get $newconf -uwidth] ||
-                [dict get $@config -uheight] != [dict get $newconf -uheight]} {
-                $self 0 resize {*}[pd::add_selectors [list \
-                    [dict get $newconf -uwidth] \
-                    [dict get $newconf -uheight] \
-                    ]]
-            }
-            set ui 0
-            foreach opt {label labelpos cellsize fgcolor bgcolor lblcolor} {
-                set old [dict get $@config -$opt]
-                if {[dict exists $newconf -$opt]} {
-                    set new [dict get $newconf -$opt]
-                    if {$old != $new} {
-                        dict set @config -$opt $new
-                        set ui 1
-                    }
-                }
-            }
-            foreach opt {sendsymbol receivesymbol} {
-                set old [dict get $@config -$opt]
-                if {[dict exists $newconf -$opt]} {
-                    set new [dict get $newconf -$opt]
-                    if {$old != $new} {
-                        if {$opt == "receivesymbol"} {
-                            set selfpd [tclpd_get_instance_pd $self]
-                            if {$old != {}} {
-                                pd_unbind $selfpd $@recv
-                            }
-                            if {$new != {}} {
-                                set @recv [canvas_realizedollar \
-                                    [tclpd_get_glist $self] [gensym $new]]
-                                pd_bind $selfpd $@recv
-                            } else {
-                                set @recv {}
-                            }
-                        }
-                        dict set @config -$opt $new
-                    }
-                }
-            }
-            if {$ui && [info exists @c]} {
-                sys_gui [list $@c delete $self]\n
-                sys_gui [list bitmap_draw_new $self \
-                    $@c $@x $@y $@config $@data]\n
-            }
-        }
-    }
-    
-    0_resize {
-        set w [pd::arg 0 int]
-        set h [pd::arg 1 int]
-        set oldw [dict get $@config -uwidth]
-        set oldh [dict get $@config -uheight]
-        set newd {}
-        for {set y 0} {$y < $h} {incr y} {
-            for {set x 0} {$x < $w} {incr x} {
-                if {$x < $oldw && $y < $oldh} {
-                    lappend newd [lindex $@data [expr {$y*$oldw+$x}]]
-                } else {
-                    lappend newd 0
-                }
-            }
-        }
-        dict set @config -uwidth $w
-        dict set @config -uheight $h
-        set @data $newd
-    }
-
-    0_getrow {
-        set r [list]
-        set n [pd::arg 0 int]
-        set w [dict get $@config -uwidth]
-        for {set i [expr {$n*$w}]} {$i < [expr {($n+1)*$w}]} {incr i} {
-            lappend r [list float [lindex $@data $i]]
-        }
-        pd::outlet $self 0 list $r
-    }
-
-    0_getcol {
-        set r [list]
-        set n [pd::arg 0 int]
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        for {set i [expr {$n}]} {$i < [expr {$w*$h}]} {incr i $w} {
-            lappend r [list float [lindex $@data $i]]
-        }
-        pd::outlet $self 0 list $r
-    }
-
-    0_getcell {
-        set r [pd::arg 0 int]
-        set c [pd::arg 1 int]
-        set w [dict get $@config -uwidth]
-        pd::outlet $self 0 float [lindex $@data [expr {$r*$w+$c}]]
-    }
-
-    0_setrow {
-        set row [pd::arg 0 int]
-        set z 1
-        set col 0
-        set w [dict get $@config -uwidth]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        for {set idx [expr {$row*$w}]} {$idx < [expr {($row+1)*$w}]} {incr idx} {
-            set d [expr {0!=[pd::arg $z int]}]
-            lset @data $idx $d
-            sys_gui [list $@c itemconfigure cell_${col}_${row}_$self \
-                -fill [lindex $colors $d]]\n
-            incr z
-            incr col
-        }
-    }
-
-    0_setcol {
-        set col [pd::arg 0 int]
-        set z 1
-        set row 0
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        for {set idx [expr {$col}]} {$idx < [expr {$w*$h}]} {incr idx $w} {
-            set d [expr {0!=[pd::arg $z int]}]
-            lset @data $idx $d
-            sys_gui [list $@c itemconfigure cell_${col}_${row}_$self \
-                -fill [lindex $colors $d]]\n
-            incr z
-            incr row
-        }
-    }
-
-    0_setcell {
-        set r [pd::arg 0 int]
-        set c [pd::arg 1 int]
-        set d [expr {0!=[pd::arg 2 int]}]
-        set w [dict get $@config -uwidth]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        set idx [expr {$r*$w+$c}]
-        lset @data $idx $d
-        sys_gui [list $@c itemconfigure cell_${r}_${c}_$self \
-            -fill [lindex $colors $d]]\n
-    }
-
-    0_setdata {
-        set d [pd::strip_selectors $args]
-        set l [llength $d]
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        if {$l != $w*$h} {
-            return -code error "bad data size"
-        }
-        set @data [list]
-        foreach i $d {lappend @data [expr {int($i)}]}
-        if {$@rcvLoadData != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] [gensym $@rcvLoadData]
-            set @rcvLoadData {}
-        }
-    }
-
-    object_save {
-        return [list #X obj $@x $@y bitmap {*}[pd::add_empty $@config] \; \
-            \#bitmap setdata {*}$@data \; ]
-    }
-
-    object_properties {
-        set title "\[bitmap\] properties"
-        set x_xobj_obpd [tclpd_get_object_pd $self]
-        set x [tclpd_get_instance $self]
-        set buf [list propertieswindow %s $@config $title]\n
-        gfxstub_new $x_xobj_obpd $x $buf
-    }
-
-    widgetbehavior_getrect {
-        lassign $args x1 y1
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set sz [dict get $@config -cellsize]
-        set x2 [expr {1+$x1+$w*$sz}]
-        set y2 [expr {1+$y1+$h*$sz}]
-        return [list $x1 $y1 $x2 $y2]
-    }
-
-    widgetbehavior_displace {
-        set dx [lindex $args 0]
-        set dy [lindex $args 1]
-        if {$dx != 0 || $dy != 0} {
-            incr @x $dx
-            incr @y $dy
-            sys_gui [list $@c move $self $dx $dy]\n
-        }
-        return [list $@x $@y]
-    }
-
-    widgetbehavior_select {
-        set sel [lindex $args 0]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set selcolor "blue"
-        set colors [list $selcolor $fgcolor]
-        sys_gui [list $@c itemconfigure $self \
-            -outline [lindex $colors $sel]]\n
-    }
-
-    widgetbehavior_activate {
-    }
-
-    widgetbehavior_vis {
-        set @c [lindex $args 0]
-        set @x [lindex $args 1]
-        set @y [lindex $args 2]
-        set vis [lindex $args 3]
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set sz [dict get $@config -cellsize]
-        if {$vis} {
-            sys_gui [list bitmap_draw_new $self $@c $@x $@y $@config $@data]\n
-        } else {
-            sys_gui [list $@c delete $self]\n
-        }
-    }
-
-    widgetbehavior_click {
-        set w [dict get $@config -uwidth]
-        set h [dict get $@config -uheight]
-        set sz [dict get $@config -cellsize]
-        set fgcolor [dict get $@config -fgcolor]
-        set bgcolor [dict get $@config -bgcolor]
-        set colors [list $bgcolor $fgcolor]
-        set xpix [expr {[lindex $args 0]-$@x-1}]
-        set ypix [expr {[lindex $args 1]-$@y-1}]
-        if {$xpix < 0 || $xpix >= $w*$sz} {return}
-        if {$ypix < 0 || $ypix >= $h*$sz} {return}
-        set shift [lindex $args 2]
-        set alt [lindex $args 3]
-        set dbl [lindex $args 4]
-        set doit [lindex $args 5]
-        if {$doit} {
-            set j [expr {$xpix/$sz}]
-            set i [expr {$ypix/$sz}]
-            set idx [expr {$w*${i}+${j}}]
-            set d [expr {[lindex $@data $idx]==0}]
-            lset @data $idx $d
-            sys_gui [list $@c itemconfigure cell_${j}_${i}_$self \
-                -fill [lindex $colors $d]]\n
-        }
-    }
-}
diff --git a/externals/tclpd/colorpicker.tcl b/externals/tclpd/colorpicker.tcl
deleted file mode 100644
index 0c433cb7d..000000000
--- a/externals/tclpd/colorpicker.tcl
+++ /dev/null
@@ -1,281 +0,0 @@
-if {[info exists ::colorpicker::version]} {return}
-namespace eval ::colorpicker {
-    namespace export colorpicker
-    # =========================================
-    # colorpicker
-    set version 0.1
-    # (C) 2009 - Federico Ferri
-    # mescalinum (at) gmail (dot) com
-    #
-    # Released under GPL-3 license:
-    # http://www.gnu.org/licenses/gpl-3.0.html
-    # =========================================
-    package provide colorpicker $version
-
-    variable presets {
-        ffffff dfdfdf bbbbbb ffc7c6 ffe3c6
-        feffc6 c6ffc7 c6feff c7c6ff e3c6ff
-        9f9f9f 7c7c7c 606060 ff0400 ff8300
-        faff00 00ff04 00faff 0400ff 9c00ff
-        404040 202020 000000 551312 553512
-        535512 0f4710 0e4345 131255 2f004d
-    }
-
-    proc colorpicker {w mode args} {
-        variable {}
-        set modes {switches hsv}
-        if {[lsearch -exact $modes $mode] == -1} {
-            error "bad mode: $mode. must be one of: $modes."
-        }
-        set ($w:mode) $mode
-        set ($w:color) "#000000"
-        set ($w:command) {}
-        set ($w:textvar) {}
-        frame $w
-        init_$mode $w
-        rename $w ::colorpicker::_$w
-        interp alias {} $w {} ::colorpicker::dispatch $w
-        if {$args != {}} {uplevel 1 ::colorpicker::config $w $args}
-        return $w
-    }
-
-    proc dispatch {w cmd args} {
-        variable {}
-        switch -glob -- $cmd {
-            get {set ($w:color)}
-            set {uplevel 1 [linsert $args 0 ::colorpicker::set_color_ext $w]}
-            con* {uplevel 1 [linsert $args 0 ::colorpicker::config $w]}
-            default {uplevel 1 [linsert $args 0 ::colorpicker::_$w $cmd]}
-        }
-    }
-
-    proc config {w args} {
-        variable {}
-        set options {}
-        set flag 0
-        foreach {key value} $args {
-            switch -glob -- $key {
-                -com* {
-                    set ($w:command) $value
-                    set flag 1
-                }
-                -textvar* {
-                    set ($w:textvar) $value
-                    set flag 1
-                }
-                default { lappend options $key $value }
-            }
-        }
-        if {!$flag || $options != ""} {
-            uplevel 1 [linsert $options 0 ::scrolledframe::_$w config]
-        }
-    }
-
-    proc set_color_ext {w c} {
-        # called by the widget public method
-        variable {}
-        set c [string tolower $c]
-        if {![regexp {^#[0-9a-f]{6,6}$} $c]} {
-            error "Invalid color: $c. Specify a color in the format #HHHHHH"
-        }
-        switch -exact -- $($w:mode) {
-            switches {
-                set_color $w $c
-            }
-            hsv {
-                set r [expr 0x[string range $c 1 2]]
-                set g [expr 0x[string range $c 3 4]]
-                set b [expr 0x[string range $c 5 6]]
-                set hsv [rgbToHsv $r $g $b]
-                hsv_set $w h [lindex $hsv 0]
-                hsv_set $w s [lindex $hsv 1]
-                hsv_set $w v [lindex $hsv 2]
-                set_color $w $c
-            }
-        }
-    }
-
-    proc set_color {w c} {
-        # called internally in reaction to events
-        variable {}
-        set c [string tolower $c]
-        set ($w:color) $c
-        if {$($w:command) != {}} {
-            set cmd $($w:command)
-            lappend cmd $c
-            uplevel #0 $cmd
-        }
-        if {$($w:textvar) != {}} {
-            uplevel #0 [list set $($w:textvar) $c]
-        }
-        switch -exact -- $($w:mode) {
-            switches {
-                variable presets
-                set q 0
-                for {set row 0} {$row < 3} {incr row} {
-                    for {set col 0} {$col < 10} {incr col} {
-                        set b [expr {$c == "#[lindex $presets $q]"}]
-                        ${w}.r${row}c${col} configure \
-                            -relief [lindex {raised sunken} $b]
-                        incr q
-                    }
-                }
-            }
-            hsv {
-            }
-        }
-    }
-
-    proc mkColor {rgb} {
-        set r [lindex $rgb 0]; set g [lindex $rgb 1]; set b [lindex $rgb 2]
-        if {$r < 0} {set r 0} elseif {$r > 255} {set r 255}
-        if {$g < 0} {set g 0} elseif {$g > 255} {set g 255}
-        if {$b < 0} {set b 0} elseif {$b > 255} {set b 255}
-        return #[format "%2.2x%2.2x%2.2x" $r $g $b]
-    }
-
-    proc rgbToHsv {r g b} {
-        set sorted [lsort -real [list $r $g $b]]
-        set temp [lindex $sorted 0]
-        set v [lindex $sorted 2]
-        set value $v
-        set bottom [expr {$v-$temp}]
-        if {$bottom == 0} {
-            set hue 0
-            set saturation 0
-            set value $v
-        } else {
-            if {$v == $r} {
-                set top [expr {$g-$b}]
-                if {$g >= $b} {
-                    set angle 0
-                } else {
-                    set angle 360
-                }
-            } elseif {$v == $g} {
-                set top [expr {$b-$r}]
-                set angle 120
-            } elseif {$v == $b} {
-                set top [expr {$r-$g}]
-                set angle 240
-            }
-            set hue [expr {round(60*(double($top)/$bottom)+$angle)}]
-        }
-        if {$v == 0} {
-            set saturation 0
-        } else {
-            set saturation [expr {round(255-255*(double($temp)/$v))}]
-        }
-        return [list $hue $saturation $value]
-    }
-
-    proc hsvToRgb {h s v} {
-        set hi [expr {int(double($h)/60)%6}]
-        set f [expr {double($h)/60-$hi}]
-        set s [expr {double($s)/255}]
-        set v [expr {double($v)/255}]
-        set p [expr {double($v)*(1-$s)}]
-        set q [expr {double($v)*(1-$f*$s)}]
-        set t [expr {double($v)*(1-(1-$f)*$s)}]
-        switch -- $hi {
-            0 {set r $v; set g $t; set b $p}
-            1 {set r $q; set g $v; set b $p}
-            2 {set r $p; set g $v; set b $t}
-            3 {set r $p; set g $q; set b $v}
-            4 {set r $t; set g $p; set b $v}
-            5 {set r $v; set g $p; set b $q}
-            default {error "[lindex [info level 0] 0]: bad H value"}
-        }
-        set r [expr {round($r*255)}]
-        set g [expr {round($g*255)}]
-        set b [expr {round($b*255)}]
-        return [list $r $g $b]
-    }
-
-    proc init_switches {w} {
-        variable {}
-        variable presets
-        set q 0
-        for {set row 0} {$row < 3} {incr row} {
-            for {set col 0} {$col < 10} {incr col} {
-                set c "#[lindex $presets $q]"
-                set b [expr {$($w:color) == $c}]
-                grid [frame ${w}.r${row}c${col} -width 18 -height 16 \
-                    -borderwidth 1 -relief [lindex {raised sunken} $b] \
-                    -background $c -highlightthickness 0] \
-                    -row $row -column $col
-                bind ${w}.r${row}c${col} <ButtonPress-1> \
-                    "[namespace current]::set_color $w $c"
-                incr q
-            }
-        }
-    }
-
-    proc init_hsv {w} {
-        variable colorhsv
-        set colorhsv($w:h) 0
-        set colorhsv($w:s) 255
-        set colorhsv($w:v) 255
-        grid [canvas ${w}.hue -width 130 -height 15 -borderwidth 1 \
-            -relief sunken -highlightthickness 0] -column 0 -row 0
-        grid [canvas ${w}.sat -width 130 -height 14 -borderwidth 1 \
-            -relief sunken -highlightthickness 0] -column 0 -row 1
-        grid [canvas ${w}.val -width 130 -height 14 -borderwidth 1 \
-            -relief sunken -highlightthickness 0] -column 0 -row 2
-        grid [canvas ${w}.test -width 46 -height 46 -borderwidth 1 \
-            -relief sunken -highlightthickness 0 -background red] \
-            -column 1 -row 0 -rowspan 3
-        variable mh
-        variable ms
-        variable mv
-        set mh($w) 0; set ms($w) 0; set mv($w) 0;
-        set sh "[namespace current]::hsv_set $w h \[expr {%x*360.0/130.0}\]"
-        set ss "[namespace current]::hsv_set $w s \[expr {%x*255.0/130.0}\]"
-        set sv "[namespace current]::hsv_set $w v \[expr {%x*255.0/130.0}\]"
-        bind ${w}.hue <ButtonPress-1> "set [namespace current]::mh($w) 1; $sh"
-        bind ${w}.sat <ButtonPress-1> "set [namespace current]::ms($w) 1; $ss"
-        bind ${w}.val <ButtonPress-1> "set [namespace current]::mv($w) 1; $sv"
-        bind ${w}.hue <ButtonRelease-1> "set [namespace current]::mh($w) 0"
-        bind ${w}.sat <ButtonRelease-1> "set [namespace current]::ms($w) 0"
-        bind ${w}.val <ButtonRelease-1> "set [namespace current]::mv($w) 0"
-        bind ${w}.hue <Motion> "if {\$[namespace current]::mh($w)} {$sh}"
-        bind ${w}.sat <Motion> "if {\$[namespace current]::ms($w)} {$ss}"
-        bind ${w}.val <Motion> "if {\$[namespace current]::mv($w)} {$sv}"
-        for {set x 0} {$x < 130} {incr x 3} {
-            set c [mkColor [hsvToRgb [expr {$x*360.0/130.0}] 255 255]]
-            ${w}.hue create rectangle $x 0 [expr {4+$x}] 16 -fill $c -outline {}
-        }
-        hsv_regen $w $colorhsv($w:h)
-    }
-
-    proc hsv_regen {w hue} {
-        ${w}.sat delete all
-        ${w}.val delete all
-        for {set x 0} {$x < 130} {incr x 3} {
-            set x1 [expr {$x*255.0/130.0}]
-            set c1 [mkColor [hsvToRgb $hue $x1 255]]
-            set c2 [mkColor [hsvToRgb $hue 255 $x1]]
-            ${w}.sat create rectangle $x 0 [expr {4+$x}] 16 \
-            -fill $c1 -outline {}
-            ${w}.val create rectangle $x 0 [expr {4+$x}] 16 \
-            -fill $c2 -outline {}
-        }
-    }
-
-    proc hsv_set {w what val} {
-        variable colorhsv
-        if {$what != {h} && $what != {s} && $what != {v}} {return}
-        set colorhsv($w:$what) $val
-        if {$colorhsv($w:$what) < 0.0} {set colorhsv($w:$what) 0}
-        if {$what == {h}} {
-            if {$colorhsv($w:$what) >= 360.0} {set colorhsv($w:$what) 0}
-            hsv_regen $w $colorhsv($w:$what)
-        } else {
-            if {$colorhsv($w:$what) > 255.0} {set colorhsv($w:$what) 255}
-        }
-        set c [mkColor [hsvToRgb \
-            $colorhsv($w:h) $colorhsv($w:s) $colorhsv($w:v)]]
-        ${w}.test configure -background $c
-        set_color $w $c
-    }
-}
diff --git a/externals/tclpd/dynreceive-help.pd b/externals/tclpd/dynreceive-help.pd
deleted file mode 100644
index 88a5568f4..000000000
--- a/externals/tclpd/dynreceive-help.pd
+++ /dev/null
@@ -1,22 +0,0 @@
-#N canvas 416 120 513 409 10;
-#X obj 141 168 s \$0.foo;
-#X msg 46 120 bar baz;
-#X obj 60 320 dynreceive \$0.foo;
-#X floatatom 122 123 5 0 0 0 - - -;
-#X symbolatom 177 125 10 0 0 0 - - -;
-#X obj 267 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X text 43 86 1) send some symbols:;
-#X text 45 240 2) try to change the receive symbol:;
-#X msg 60 287 set xyz;
-#X msg 312 306 \; xyz 1 2 3;
-#X obj 60 350 print out;
-#X text 39 23 Works like [receive] \, but allows to dynamically set
-(or clear) the receive symbol.;
-#X text 139 288 <--;
-#X connect 1 0 0 0;
-#X connect 2 0 10 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 8 0 2 0;
diff --git a/externals/tclpd/dynreceive.tcl b/externals/tclpd/dynreceive.tcl
deleted file mode 100644
index 8a269f7a3..000000000
--- a/externals/tclpd/dynreceive.tcl
+++ /dev/null
@@ -1,53 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-pd::class dynreceive {
-    constructor {
-        set @sym {}
-        if {[pd::args] > 0} {
-            set @sym [pd::arg 0 symbol]
-            pd_bind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-        pd::add_outlet $self
-    }
-
-    destructor {
-        # don't forget to call pd_unbind, or sending things to a symbol
-        # bound to dead object will crash pd!
-        if {$@sym != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-    }
-
-    0_set {
-        # send [set empty( to clear the receive symbol
-        set s [pd::arg 0 symbol]
-        if {$@sym != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-        if {$s == {empty}} {
-            set @sym {}
-        } else {
-            set @sym $s
-            pd_bind [tclpd_get_instance_pd $self] [gensym $@sym]
-        }
-    }
-
-    0_bang {
-        pd::outlet $self 0 bang
-    }
-
-    0_float {
-        pd::outlet $self 0 float [pd::arg 0 float]
-    }
-
-    0_symbol {
-        pd::outlet $self 0 symbol [gensym [pd::arg 0 symbol]]
-    }
-
-    0_anything {
-        set sel [pd::arg 0 symbol]
-        set argz [lrange $args 1 end]
-        pd::outlet $self 0 $sel $argz
-    }
-}
diff --git a/externals/tclpd/dynroute-help.pd b/externals/tclpd/dynroute-help.pd
deleted file mode 100644
index 86d173ea1..000000000
--- a/externals/tclpd/dynroute-help.pd
+++ /dev/null
@@ -1,26 +0,0 @@
-#N canvas 1022 530 786 430 10;
-#X obj 93 268 dynroute 4;
-#X msg 41 147 apple red \, banana yellow \, pear green \, apple yellow
-\, strawberry red;
-#X obj 41 194 list prepend;
-#X msg 200 224 clear \, add apple 0 \, add banana 1 \, add pear 2;
-#X msg 206 258 remove pear 2 \, add pear 0 \, add strawberry 2;
-#X text 39 32 Dynamically route lists based on first element \, according
-to the mapping specified on right inlet. Creation argument (float)
-specifies how many outlet to have (including last outlet \, which is
-used for sending unmatching items);
-#X text 44 120 Test it with some data:;
-#X obj 93 379 print out1;
-#X obj 115 352 print out2;
-#X obj 137 325 print out3;
-#X obj 160 298 print other;
-#X text 256 293 <-- non-matching stuff is sent here;
-#X text 196 192 Change the mapping:;
-#X connect 0 0 7 0;
-#X connect 0 1 8 0;
-#X connect 0 2 9 0;
-#X connect 0 3 10 0;
-#X connect 1 0 2 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 1;
-#X connect 4 0 0 1;
diff --git a/externals/tclpd/dynroute.tcl b/externals/tclpd/dynroute.tcl
deleted file mode 100644
index 2309ac74f..000000000
--- a/externals/tclpd/dynroute.tcl
+++ /dev/null
@@ -1,57 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-# dynroute: dynamically route messages based on first element
-# non-matching arguments are sent to last inlet
-# constructor: <float>   specify the number of outlets (default: 1)
-# send commands to the right inlet
-# available commands:
-# add <atom> <float>     route selector <atom> to output number <float>
-# remove <atom> <float>  remove previously created routing
-# clear
-
-pd::class dynroute {
-    constructor {
-        pd::add_inlet $self list
-
-        set @num_outlets [pd::arg 0 int]
-        if {$@num_outlets < 0} {set @num_outlets 2}
-
-        for {set i 0} {$i < $@num_outlets} {incr i} {
-            pd::add_outlet $self list
-        }
-
-        set @routing {}
-    }
-
-    0_list {
-        set sel [pd::arg 0 any]
-        set out [expr {$@num_outlets-1}]
-        catch {set out [dict get $@routing $sel]}
-        pd::outlet $self $out list $args
-    }
-
-    1_add {
-        set sel [pd::arg 0 any]
-        set out [pd::arg 1 int]
-        if {$out < 0 || $out >= $@num_outlets} {
-            pd::post "error: add: outlet number out of range"
-            return
-        }
-        dict set @routing $sel $out
-    }
-
-    1_remove {
-        set sel [pd::arg 0 any]
-        set out [pd::arg 1 int]
-        if {$out < 0 || $out >= $@num_outlets} {
-            pd::post "error: add: outlet number out of range"
-            return
-        }
-        catch {dict unset @routing $sel $out}
-    }
-
-    1_clear {
-        set @routing {}
-    }
-}
diff --git a/externals/tclpd/list_change-help.pd b/externals/tclpd/list_change-help.pd
deleted file mode 100644
index 430b23d08..000000000
--- a/externals/tclpd/list_change-help.pd
+++ /dev/null
@@ -1,21 +0,0 @@
-#N canvas 617 384 635 406 10;
-#X obj 54 240 list_change;
-#X text 144 236 right inlet sets internal value without output anything
-;
-#X obj 71 271 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 54 309 print;
-#X text 33 21 Outputs its input (a list) only when it changes. You
-can set the current value using the right inlet \, or bang to force
-output;
-#X msg 117 201 list foo bar;
-#X msg 69 140 list foo bar;
-#X msg 77 163 list bar baz;
-#X msg 54 104 bang;
-#X text 98 103 output current value;
-#X connect 0 0 2 0;
-#X connect 0 0 3 0;
-#X connect 5 0 0 1;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
diff --git a/externals/tclpd/list_change.tcl b/externals/tclpd/list_change.tcl
deleted file mode 100644
index 2c7093782..000000000
--- a/externals/tclpd/list_change.tcl
+++ /dev/null
@@ -1,31 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-pd::class list_change {
-    constructor {
-        # add second inlet (first created by default)
-        pd::add_inlet $self list
-
-        # add outlet
-        pd::add_outlet $self list
-
-        set @curlist {}
-    }
-
-    0_list {
-        # HOT inlet
-        if {$args != $@curlist} {
-            set @curlist $args
-            pd::outlet $self 0 list $@curlist
-        }
-    }
-
-    0_bang {
-        pd::outlet $self 0 list $@curlist
-    }
-
-    1_list {
-        # COLD inlet
-        set @curlist $args
-    }
-}
diff --git a/externals/tclpd/pdlib.tcl b/externals/tclpd/pdlib.tcl
deleted file mode 100644
index b50479b8e..000000000
--- a/externals/tclpd/pdlib.tcl
+++ /dev/null
@@ -1,257 +0,0 @@
-# TCL objectized library for PD api
-# by Federico Ferri <mescalinum@gmail.com> - (C) 2007-2009
-
-package provide TclpdLib 0.17
-
-package require Tcl 8.5
-
-set verbose 0
-
-namespace eval ::pd {
-    proc error_msg {m} {
-        return "pdlib: [uplevel {lindex [info level 0] 0}]: error: $m"
-    }
-
-    proc add_inlet {self sel} {
-        if $::verbose {post [info level 0]}
-        variable _
-        tclpd_add_proxyinlet [tclpd_get_instance $self]
-    }
-
-    proc add_outlet {self {sel {}}} {
-        if $::verbose {post [info level 0]}
-        variable _
-        if {$sel == {}} {
-            set o [outlet_new [tclpd_get_object $self] [null_symbol]]
-        } else {
-            if {[lsearch -exact {bang float list symbol} $sel] == -1} {
-                return -code error [error_msg "unsupported selector: $sel"]
-            }
-            set o [outlet_new [tclpd_get_object $self] [gensym $sel]]
-        }
-        lappend _($self:x_outlet) $o
-        return $o
-    }
-
-    # used inside class for outputting some value
-    proc outlet {self n sel args} {
-        if $::verbose {post [info level 0]}
-        variable _
-        set outlet [lindex $_($self:x_outlet) $n]
-        switch -- $sel {
-            float {
-                set v [lindex $args 0]
-                outlet_float $outlet $v
-            }
-            symbol {
-                set v [lindex $args 0]
-                outlet_symbol $outlet $v
-            }
-            list {
-                set v [lindex $args 0]
-                set sz [llength $v]
-                set aa [new_atom_array $sz]
-                for {set i 0} {$i < $sz} {incr i} {
-                    set_atom_array $aa $i [lindex $v $i]
-                }
-                outlet_list $outlet [gensym "list"] $sz $aa
-                delete_atom_array $aa $sz
-            }
-            bang {
-                outlet_bang $outlet
-            }
-            default {
-                set v [lindex $args 0]
-                set sz [llength $v]
-                set aa [new_atom_array $sz]
-                for {set i 0} {$i < $sz} {incr i} {
-                    set_atom_array $aa $i [lindex $v $i]
-                }
-                outlet_anything $outlet [gensym $sel] $sz $aa
-                delete_atom_array $aa $sz
-            }
-        }
-    }
-
-    # used internally (from dispatcher) to call a class method
-    proc call_classmethod {classname self inlet sel args} {
-        if $::verbose {post [info level 0]}
-        set m_sel "::${classname}_${inlet}_${sel}"
-        if {[llength [info commands $m_sel]] > 0} {
-            return [$m_sel $self {*}$args]
-        }
-        set m_any "::${classname}_${inlet}_anything"
-        if {[llength [info commands $m_any]] > 0} {
-            return [$m_any $self [list symbol $sel] {*}$args]
-        }
-        post "Tcl class $classname: inlet $inlet: no such method: $sel"
-    }
-
-    proc read_class_definition {classname def} {
-        set patchable_flag 1
-        set noinlet_flag 0
-
-        proc ::${classname}_object_save {self args} {return ""}
-
-        foreach {id arg} $def {
-            switch -- $id {
-                patchable {
-                    if {$arg != 0 && $arg != 1} {
-                        return -code error [error_msg "patchable must be 0/1"]
-                    }
-                    set patchable_flag $arg
-                }
-                noinlet {
-                    if {$arg != 0 && $arg != 1} {
-                        return -code error [error_msg "noinlet must be 0/1"]
-                    }
-                    set noinlet_flag $arg
-                }
-                default {
-                    proc ::${classname}_${id} {self args} [concat "global _;" [regsub -all @(\\\$?\[\\w\\?\]+) $arg _(\$self:\\1)]]
-                }
-            }
-        }
-
-        # class level dispatcher (sort of class constructor)
-        proc ::$classname {self args} "
-            if \$::verbose {::pd::post \[info level 0\]}
-            # define object dispatcher:
-            proc ::\$self {inlet selector args} \"
-             if \\\$::verbose {::pd::post \\\[info level 0\\\]}
-             ::pd::call_classmethod $classname \$self \\\$inlet \\\$selector {*}\\\$args
-            \"
-            # call constructor:
-            ::${classname}_constructor \$self {*}\$args
-            return \$self
-        "
-
-        # TODO: c->c_gobj = (typeflag >= CLASS_GOBJ)
-        set flag [expr {
-            8 * ($noinlet_flag != 0) +
-            3 * ($patchable_flag != 0)
-        }]
-
-        return $flag
-    }
-
-    # this handles the pd::class definition
-    proc class {classname def} {
-        if $::verbose {post [lrange [info level 0] 0 end-1]}
-
-        set flag [read_class_definition $classname $def]
-
-        # this wraps the call to class_new()
-        tclpd_class_new $classname $flag
-    }
-
-    proc guiclass {classname def} {
-        if $::verbose {post [lrange [info level 0] 0 end-1]}
-
-        set flag [read_class_definition $classname $def]
-
-        # this wraps the call to class_new()
-        tclpd_guiclass_new $classname $flag
-    }
-
-    # wrapper to post() withouth vargs
-    proc post {args} {
-        poststring2 [concat {*}$args]
-    }
-
-    proc args {} {
-        return [uplevel 1 "llength \$args"]
-    }
-
-    proc arg {n {assertion any}} {
-        upvar 1 args up_args
-        set up_args_len [llength $up_args]
-        if {$n < 0 || $n >= $up_args_len} {
-            return -code error "fatal: argument $n out of range"
-        }
-        set v [lindex $up_args $n]
-        set i 0
-        if {[llength $v] != 2} {
-            return -code error "fatal: malformed atom: $v (full args: $up_args)"
-        }
-        foreach {selector value} $v {break}
-        if {$assertion == {int}} {
-            set assertion {float}
-            set i 1
-        }
-        if {$assertion != {any}} {
-            if {$selector != $assertion} {
-                return -code error "arg #$n is $selector, must be $assertion"
-            }
-        }
-        if {$assertion == {float} && $i && $value != int($value)} {
-            return -code error "arg #$n is float, must be int"
-        }
-        if {$assertion == {float} && $i} {
-            return [expr {int($value)}]
-        } else {
-            return $value
-        }
-    }
-
-    proc default_arg {n assertion defval} {
-        if {$n < [uplevel "pd::args"]} {
-            return [uplevel "pd::arg $n $assertion"]
-        } else {
-            return $defval
-        }
-    }
-
-    proc strip_selectors {pdlist} {
-        set r {}
-        foreach atom $pdlist {
-            if {[llength $atom] != 2} {
-                return -code error "Malformed pd list!"
-            }
-            lappend r [lindex $atom 1]
-        }
-        return $r
-    }
-
-    proc add_selectors {tcllist} {
-        set r {}
-        foreach i $tcllist {
-            lappend r [list [lindex {float symbol} [catch {expr $i}]] $i]
-        }
-        return $r
-    }
-
-    proc strip_empty {tcllist} {
-        set r {}
-        foreach i $tcllist {
-            if {$i == "empty"} {lappend r {}} {lappend r $i}
-        }
-        return $r
-    }
-
-    proc add_empty {tcllist} {
-        set r {}
-        foreach i $tcllist {
-            if {$i == {}} {lappend r "empty"} {lappend r $i}
-        }
-        return $r
-    }
-
-    # mechanism for uploading procs to gui interp, without the hassle of escaping [encoder]
-    proc guiproc {name argz body} {
-        # upload the decoder
-        sys_gui "proc guiproc {name argz body} {set map {}; for {set i 0} {\$i < 256} {incr i} {lappend map %\[format %02x \$i\] \[format %c \$i\]}; foreach x {name argz body} {set \$x \[string map \$map \[set \$x\]\]}; uplevel \[list proc \$name \$argz \$body\]}\n"
-        # build the mapping
-        set map {}
-        for {set i 0} {$i < 256} {incr i} {
-            set chr [format %c $i]
-            set hex [format %02x $i]
-            if {[regexp {[^A-Za-z0-9]} $chr]} {lappend map $chr %$hex}
-        }
-        # encode data
-        foreach x {name argz body} {set $x [string map $map [set $x]]}
-        # upload proc
-        sys_gui "guiproc $name $argz $body\n"
-    }
-}
-
diff --git a/externals/tclpd/pkgIndex.tcl b/externals/tclpd/pkgIndex.tcl
deleted file mode 100644
index f46039375..000000000
--- a/externals/tclpd/pkgIndex.tcl
+++ /dev/null
@@ -1 +0,0 @@
-package ifneeded TclpdLib 0.17 [list source [file join $TCLPD_DIR pdlib.tcl]]
diff --git a/externals/tclpd/properties.tcl b/externals/tclpd/properties.tcl
deleted file mode 100644
index 3788c5bae..000000000
--- a/externals/tclpd/properties.tcl
+++ /dev/null
@@ -1,423 +0,0 @@
-if {[catch {package require colorpicker}]} {
-    source [file join [file dirname [info script]] colorpicker.tcl]
-    package require colorpicker
-}
-namespace import ::colorpicker::colorpicker
-
-proc propertieswindow {gfxstub_id {options {}} {title {}}} {
-    set win $gfxstub_id
-    set ::id($win.p) $gfxstub_id
-    set ::optkeys($win.p) [list]
-    foreach {k v} $options {
-        set ::config($win.p:$k) $v
-        lappend ::optkeys($win.p) $k
-    }
-    toplevel $win -class [winfo class .]
-    pack [propertiespanel $win.p]
-    wm resizable $win 0 0
-    wm title $win $title
-    set win
-}
-
-proc has_key {w key} {
-    expr {[lsearch -exact $::optkeys($w) $key] != -1}
-}
-
-proc propertiespanel {w} {
-    set pad [propertiespanel_padding $w]
-    incr pad $pad
-    frame $w -borderwidth 0 -relief raised -padx $pad -pady $pad
-    set subpanels {dimensions output behavior connective label colors}
-    foreach subpanel $subpanels {
-        set x [propertiespanel_$subpanel $w]
-        if {$x != {}} {grid $x -sticky ew -in $w}
-    }
-    set x [propertiespanel_buttons $w]
-    grid $x -in $w
-    grid columnconfigure . 0 -weight 1
-    set w
-}
-
-proc propertiespanel_padding {w} {
-    return 3
-}
-
-proc propertiespanel_dimensions {w} {
-    set x ${w}.dimensions
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Dimensions:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0; set col 0
-    if {[has_key $w -width]} {
-        grid [label ${x}.wl -text "Width (px):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.w -textvar ::config($w:-width) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -height]} {
-        grid [label ${x}.hl -text "Height (px):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.h -textvar ::config($w:-height) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -uwidth]} {
-        grid [label ${x}.uwl -text "Width (cells):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uw -textvar ::config($w:-uwidth) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -uheight]} {
-        grid [label ${x}.uhl -text "Height (cells):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uh -textvar ::config($w:-uheight) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -cellsize]} {
-        grid [label ${x}.csl -text "Cell size (pixels):" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.cs -textvar ::config($w:-cellsize) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -cellwidth]} {
-        grid [label ${x}.uwl -text "Cell width:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uw -textvar ::config($w:-cellwidth) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -cellheight]} {
-        grid [label ${x}.uhl -text "Cell height:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.uh -textvar ::config($w:-cellheight) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_output {w} {
-    set x ${w}.output
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Output range:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0; set col 0
-    if {[has_key $w -rangebottom]} {
-        grid [label ${x}.rbl -text "Bottom:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rb -textvar ::config($w:-rangebottom) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -rangetop]} {
-        grid [label ${x}.rtl -text "Top:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rt -textvar ::config($w:-rangetop) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -rangeleft]} {
-        grid [label ${x}.rll -text "Left:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rl -textvar ::config($w:-rangeleft) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -rangeright]} {
-        grid [label ${x}.rrl -text "Right:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rr -textvar ::config($w:-rangeright) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -rangemin]} {
-        grid [label ${x}.rml -text "Min:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rm -textvar ::config($w:-rangemin) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -rangemax]} {
-        grid [label ${x}.rMl -text "Max:" -anchor e] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        grid [entry ${x}.rM -textvar ::config($w:-rangemax) -width 5] \
-            -row $row -column $col -sticky ew -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {[has_key $w -logarithmic]} {
-        incr col
-        grid [checkbutton ${x}.rL -variable ::config($w:-logarithmic) \
-            -text "Logarithmic"] \
-            -row $row -column $col -columnspan 3 -sticky w -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_behavior {w} {
-    set x ${w}.behavior
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Widget behavior:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0; set col 0
-    if {[has_key $w -jumponclick]} {
-        grid [checkbutton ${x}.joc -variable ::config($w:-jumponclick) \
-            -text "Jump on click"] \
-            -row $row -column $col -sticky w -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    if {[has_key $w -init]} {
-        grid [checkbutton ${x}.init -variable ::config($w:-init) \
-            -text "Output init value"] \
-            -row $row -column $col -sticky w -padx $pad -pady $pad
-        incr col
-        incr count
-    }
-    incr row; set col 0
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_label {w} {
-    set x ${w}.label
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Label:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0
-    if {[has_key $w -label]} {
-        grid [label ${x}.ll -text "Text:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.l -textvar ::config($w:-label)] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        incr row
-        incr count
-    }
-    if {[has_key $w -labelpos]} {
-        grid [label ${x}.lpl -text "Position:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        frame ${x}.f
-        if {![info exists ::config($w:-labelpos)]} {
-            set ::config($w:-labelpos) top
-        }
-        grid [radiobutton ${x}.f.lp1 -variable ::config($w:-labelpos) \
-            -value top -text Top] \
-            -row 1 -column 1 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid [radiobutton ${x}.f.lp2 -variable ::config($w:-labelpos) \
-            -value bottom -text Bottom] \
-            -row 1 -column 2 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid [radiobutton ${x}.f.lp3 -variable ::config($w:-labelpos) \
-            -value left -text Left] \
-            -row 2 -column 1 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid [radiobutton ${x}.f.lp4 -variable ::config($w:-labelpos) \
-            -value right -text Right] \
-            -row 2 -column 2 -sticky w -padx $pad -pady $pad -in ${x}.f
-        grid ${x}.f -sticky w -row $row -column 1
-        incr row
-        incr count
-    }
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_connective {w} {
-    set x ${w}.connective
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Messages:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0
-    if {[has_key $w -sendsymbol]} {
-        grid [label ${x}.ssl -text "Send symbol:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.ss -textvar ::config($w:-sendsymbol) -width 15] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        incr row
-        incr count
-    }
-    if {[has_key $w -receivesymbol]} {
-        grid [label ${x}.rsl -text "Receive symbol:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.rs -textvar ::config($w:-receivesymbol) -width 15] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        incr row
-        incr count
-    }
-    if {$count == 0} {return {}}
-    set x
-}
-
-proc propertiespanel_colors {w} {
-    set colors {-bgcolor Background -fgcolor Foreground -lblcolor Label}
-    set x ${w}.colors
-    set pad [propertiespanel_padding $w]
-    labelframe $x -text "Colors:" -borderwidth 1 -relief raised
-    set count 0
-    set row 0
-    foreach {optkey color} $colors {
-        if {![has_key $w $optkey]} {continue}
-        grid [label ${x}.l$color -text "${color}:" -anchor e] \
-            -row $row -column 0 -sticky ew -padx $pad -pady $pad
-        grid [entry ${x}.t$color -textvar ::config($w:$optkey) -width 8] \
-            -row $row -column 1 -sticky ew -padx $pad -pady $pad
-        grid [frame ${x}.p$color -width 20 -height 20 \
-            -borderwidth 1 -relief sunken] \
-            -row $row -column 2 -sticky ew -padx $pad -pady $pad
-        grid [button ${x}.b$color -text "Pick..." -overrelief {} \
-            -command {} \
-            ] -row $row -column 3 -sticky ew -padx $pad -pady $pad
-        bind ${x}.b$color <Enter> {break}
-        bind ${x}.b$color <Leave> {break}
-        bind ${x}.b$color <ButtonPress-1> [list \
-            propertiespanel_colors_pick \
-            $w $x $colors ${x}.b$color ${x}.p$color ${x}.t$color]
-        trace add variable ::config($w:$optkey) write [list \
-            propertiespanel_colors_set_wrap $w $x ${x}.p$color $optkey]
-        incr row
-        incr count
-    }
-    if {![info exists ::cpt($w)]} {set ::cpt($w) switches}
-    foreach {optkey color} $colors {
-        if {![has_key $w $optkey]} {continue}
-        # trigger the variable trace:
-        if {[info exists ::config($w:$optkey)]} {
-            set ::config($w:$optkey) $::config($w:$optkey)
-        }
-    }
-    if {$count == 0} {return {}}
-    frame ${x}.f
-    grid [radiobutton ${x}.f.cpt1 -variable ::cpt($w) -justify right \
-        -value switches -text Switches] \
-        -row 0 -column 0 -sticky ew -padx $pad -pady $pad
-    grid [radiobutton ${x}.f.cpt2 -variable ::cpt($w) -justify right \
-        -value hsv -text HSV] \
-        -row 1 -column 0 -sticky ew -padx $pad -pady $pad
-    grid ${x}.f -row $row -column 0
-    grid [colorpicker ${x}.cp2 hsv] \
-        -row $row -column 1 -columnspan 3 -sticky ew -padx $pad -pady $pad
-    grid [colorpicker ${x}.cp1 switches -command [list ${x}.cp2 set]] \
-        -row $row -column 1 -columnspan 3 -sticky ew -padx $pad -pady $pad
-    raise ${x}.cp1
-    trace add variable ::cpt($w) write \
-        [list propertiespanel_colors_switchpicker $w $x $row]
-    set x
-}
-
-proc propertiespanel_colors_set_wrap {w x wp optkey config_ idx op} {
-    propertiespanel_colors_set $w $x $wp {} -1 $::config($w:$optkey)
-}
-
-proc propertiespanel_colors_switchpicker {w x row cpt idx op} {
-    raise ${x}.cp[expr {1+($::cpt($w) == {hsv})}]
-}
-
-proc propertiespanel_colors_pick {w x colors wb wp wt} {
-    foreach {k color} $colors {
-        ${x}.b$color configure -relief raised -state normal
-    }
-    set r [$wb cget -relief]
-    if {$r == {sunken}} {
-        $wb configure -relief raised
-        ${x}.cp1 configure -command {}
-        ${x}.cp2 configure -command {}
-    } else {
-        $wb configure -relief sunken
-        ${x}.cp1 configure -command \
-            [list propertiespanel_colors_set $w $x $wp $wt 1]
-        ${x}.cp2 configure -command \
-            [list propertiespanel_colors_set $w $x $wp $wt 2]
-    }
-}
-
-proc propertiespanel_colors_set {w x wp wt from color} {
-    if {$wt != {}} {$wt delete 0 end ; $wt insert 0 $color}
-    $wp configure -background $color
-    if {$::cpt($w) == {switches} && $from == 1} {
-        ${x}.cp2 set $color
-    }
-}
-
-proc propertiespanel_buttons {w} {
-    set x ${w}.buttons
-    set pad [propertiespanel_padding $w]
-    frame $x -padx $pad -pady $pad
-    set col 0
-    foreach action {Cancel Apply Ok} {
-        grid [button ${x}.btn$action \
-            -command [list propertiespanel_buttons_action $w $action] \
-            -text $action] \
-            -row 0 -column $col -padx $pad -pady $pad
-        incr col
-    }
-    set x
-}
-
-proc propertiespanel_buttons_action {w action} {
-    switch -- $action {
-        Cancel {
-            propertiespanel_close $w
-        }
-        Apply {
-            propertiespanel_apply $w
-        }
-        Ok {
-            propertiespanel_apply $w
-            propertiespanel_close $w
-        }
-    }
-}
-
-proc propertiespanel_apply {w} {
-    set newconf [list]
-    foreach key $::optkeys($w) {
-        set v $::config($w:$key)
-        if {$v == ""} {set v "empty"}
-        lappend newconf $key $v
-    }
-    set newconf [string map {$ \\$} $newconf]
-    pd [linsert $newconf 0 $::id($w) config]\;
-}
-
-proc propertiespanel_close {w} {
-    pd [concat $::id($w) cancel \;]
-}
diff --git a/externals/tclpd/slider2-help.pd b/externals/tclpd/slider2-help.pd
deleted file mode 100644
index 1f36ace80..000000000
--- a/externals/tclpd/slider2-help.pd
+++ /dev/null
@@ -1,51 +0,0 @@
-#N canvas 79 235 731 505 10;
-#X obj 343 150 slider2 -width 15 -height 130 -headsz 3 -rangebottom
-0 -rangetop 127 -init 0 -initvalue 94 -jumponclick 0 -label norm -labelpos
-top -orient vertical -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X obj 401 150 slider2 -width 15 -height 130 -headsz 3 -rangebottom
-127 -rangetop 0 -init 0 -initvalue 63 -jumponclick 0 -label rev -labelpos
-top -orient vertical -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X obj 522 154 slider2 -width 130 -height 15 -headsz 3 -rangebottom
-0 -rangetop 127 -init 0 -initvalue 95 -jumponclick 0 -label norm -labelpos
-top -orient horizontal -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X obj 522 213 slider2 -width 130 -height 15 -headsz 3 -rangebottom
-127 -rangetop 0 -init 0 -initvalue 70 -jumponclick 0 -label rev -labelpos
-top -orient horizontal -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X floatatom 343 295 5 0 0 0 - - -;
-#X floatatom 401 295 5 0 0 0 - - -;
-#X floatatom 522 177 5 0 0 0 - - -;
-#X floatatom 522 236 5 0 0 0 - - -;
-#X text 324 109 -orient vertical;
-#X text 523 111 -orient horizontal;
-#X text 321 61 Output range test:;
-#X obj 46 174 slider2 -width 15 -height 130 -headsz 3 -rangebottom
-0 -rangetop 127 -init 0 -initvalue 10 -jumponclick 0 -label empty -labelpos
-top -orient vertical -sendsymbol empty -receivesymbol empty -fgcolor
-#000000 -bgcolor #ffffff -lblcolor #000000;
-#X msg 46 143 config -orient vertical;
-#X msg 46 113 config -orient horizontal;
-#X floatatom 46 321 5 0 0 0 - - -;
-#X obj 159 358 slider2 -width 130 -height 15 -headsz 3 -rangebottom
-0 -rangetop 255 -init 0 -initvalue 202.795 -jumponclick 0 -label empty
--labelpos top -orient horizontal -sendsymbol \$0.sl-out -receivesymbol
-\$0.sl-in -fgcolor #000000 -bgcolor #20ca34 -lblcolor #000000;
-#X obj 45 358 r \$0.sl-out;
-#X obj 45 466 s \$0.sl-in;
-#X msg 45 439 config -bgcolor \$1;
-#X obj 45 412 makefilename #%6.6x;
-#X obj 45 385 expr (0x20 << 16) | ($f1 << 8) | (0xff - $f1);
-#X connect 0 0 4 0;
-#X connect 1 0 5 0;
-#X connect 2 0 6 0;
-#X connect 3 0 7 0;
-#X connect 11 0 14 0;
-#X connect 12 0 11 0;
-#X connect 13 0 11 0;
-#X connect 16 0 20 0;
-#X connect 18 0 17 0;
-#X connect 19 0 18 0;
-#X connect 20 0 19 0;
diff --git a/externals/tclpd/slider2.tcl b/externals/tclpd/slider2.tcl
deleted file mode 100644
index ff4678a56..000000000
--- a/externals/tclpd/slider2.tcl
+++ /dev/null
@@ -1,273 +0,0 @@
-package require Tclpd 0.2.1
-package require TclpdLib 0.17
-
-set ::script_path [file dirname [info script]]
-
-pd::guiproc slider2_draw_new {self c x y config state} {
-    # import variables from dicts:
-    foreach v {headsz width height fgcolor bgcolor orient} \
-        {set $v [dict get $config -$v]}
-    set x2 [expr {$x+$width+1}]
-    set y2 [expr {$y+$height+1}]
-    $c create rectangle $x $y $x2 $y2 \
-        -outline $fgcolor -fill $bgcolor -tags [list $self border$self]
-    switch $orient {
-        horizontal {set y1 $y; set x3 [expr {$x+$headsz}]}
-        vertical {set y1 [expr {$y2-$headsz}]; set x3 $x2}
-    }
-    $c create rectangle $x $y1 $x3 $y2 -outline {} -fill $fgcolor \
-        -tags [list $self head$self]
-    slider2_update $self $c $x $y $config $state
-}
-
-pd::guiproc slider2_update {self c x y config state} {
-    # import variables from dicts:
-    foreach v {initvalue headsz width height label labelpos lblcolor orient} \
-        {set $v [dict get $config -$v]}
-    foreach v {min max rev} {set $v [dict get $state _$v]}
-    set realvalue [expr {1.0*($initvalue-$min)/($max-$min)}]
-    if {$realvalue < 0.0} {set realvalue 0}
-    if {$realvalue > 1.0} {set realvalue 1}
-    if {$rev} {set realvalue [expr {1.0-$realvalue}]}
-    if {$orient == "vertical"} {set realvalue [expr {1.0-$realvalue}]}
-    switch $orient {
-        horizontal {
-            set hr [expr {$width-$headsz}]
-            $c coords head$self [expr {$x+$hr*$realvalue}] $y \
-                [expr {$x+$hr*$realvalue+$headsz}] [expr {$y+$height+1}]
-        }
-        vertical {
-            set vr [expr {$height-$headsz}]
-            $c coords head$self $x [expr {$y+$vr*$realvalue}] \
-                [expr {$x+$width+1}] [expr {$y+$vr*$realvalue+$headsz}]
-        }
-    }
-    $c delete label$self
-    if {$label != {}} {
-        switch $labelpos {
-            top
-            {set lx [expr {$x+$width/2}]; set ly [expr {$y}]; set a "s"}
-            bottom
-            {set lx [expr {$x+$width/2}]; set ly [expr {$y+$height+2}]; set a "n"}
-            left
-            {set lx [expr {$x}]; set ly [expr {$y+$height/2}]; set a "e"}
-            right
-            {set lx [expr {$x+$width+2}]; set ly [expr {$y+$height/2}]; set a "w"}
-        }
-        $c create text $lx $ly -anchor $a -text $label -fill $lblcolor \
-             -tags [list $self label$self]
-    }
-}
-
-pd::guiclass slider2 {
-    constructor {
-        pd::add_outlet $self float
-        sys_gui "source {[file join $::script_path properties.tcl]}\n"
-        # set defaults:
-        set @config {
-            -width 15 -height 130 -headsz 3 -rangebottom 0 -rangetop 127
-            -init 0 -initvalue 0 -jumponclick 0 -label "" -labelpos "top"
-            -orient "vertical" -sendsymbol "" -receivesymbol ""
-            -fgcolor "#000000" -bgcolor "#ffffff" -lblcolor "#000000"
-        }
-        set @state {_min 0 _max 127 _rev 0}
-        # expanded ($n) send/recv symbols:
-        set @send {}
-        set @recv {}
-        ::$self 0 config {*}$args
-    }
-
-    destructor {
-        if {[dict get $@config -receivesymbol] != {}} {
-            pd_unbind [tclpd_get_instance_pd $self] $@recv
-        }
-    }
-
-    0_loadbang {
-        if {[dict get $@config -init]} {$self 0 bang}
-    }
-
-    0_config {
-        set newconf [list]
-        set optlist [pd::strip_selectors $args]
-        set optlist [pd::strip_empty $optlist]
-        set int_opts {-width -height -cellsize}
-        set bool_opts {-init -jumponclick}
-        set ui_opts {-fgcolor -bgcolor -lblcolor -orient -width -height}
-        set upd_opts {-rangebottom -rangetop -label -labelpos}
-        set conn_opts {-sendsymbol -receivesymbol}
-        set ui 0
-        set upd 0
-        foreach {k v} $optlist {
-            if {![dict exists $@config $k]} {
-                return -code error "unknown option '$k'"
-            }
-            if {[dict get $@config $k] == $v} {continue}
-            if {[lsearch -exact $int_opts $k] != -1} {set v [expr {int($v)}]}
-            if {[lsearch -exact $bool_opts $k] != -1} {set v [expr {int($v)!=0}]}
-            if {[lsearch -exact $ui_opts $k] != -1} {set ui 1}
-            if {[lsearch -exact $upd_opts $k] != -1} {set upd 1}
-            dict set newconf $k $v
-        }
-        # process -{send,receive}symbol
-        if {[dict exists $newconf -receivesymbol]} {
-            set new_recv [dict get $newconf -receivesymbol]
-            set selfpd [tclpd_get_instance_pd $self]
-            if {[dict get $@config -receivesymbol] != {}} {
-                pd_unbind $selfpd $@recv
-            }
-            if {$new_recv != {}} {
-                set @recv [canvas_realizedollar \
-                    [tclpd_get_glist $self] [gensym $new_recv]]
-                pd_bind $selfpd $@recv
-            } else {set @recv {}}
-        }
-        if {[dict exists $newconf -sendsymbol]} {
-            set new_send [dict get $newconf -sendsymbol]
-            if {$new_send != {}} {
-                set @send [canvas_realizedollar \
-                    [tclpd_get_glist $self] [gensym $new_send]]
-            } else {set @send {}}
-        }
-        # changing orient -> swap sizes
-        if {[dict exists $newconf -orient] && ![dict exists $newconf -width]
-            && ![dict exists $newconf -height]} {
-            dict set newconf -width [dict get $@config -height]
-            dict set newconf -height [dict get $@config -width]
-        }
-        # no errors up to this point. we can safely merge options
-        set @config [dict merge $@config $newconf]
-        # adjust reverse range
-        set a [dict get $@config -rangebottom]
-        set b [dict get $@config -rangetop]
-        dict set @state _min [expr {$a>$b?$b:$a}]
-        dict set @state _max [expr {$a>$b?$a:$b}]
-        dict set @state _rev [expr {$a>$b}]
-        set orient [dict get $@config -orient]
-        switch $orient {
-            horizontal {set dim [dict get $@config -width];  set mul  1}
-            vertical   {set dim [dict get $@config -height]; set mul -1}
-            default {return -code error "invalid value '$orient' for -orient"}
-        }
-        # recompute pix2units conversion
-        set @pix2units [expr {(2.0 * [dict get $@state _rev] - 1.0) *
-            ( [dict get $@state _max] - [dict get $@state _min] ) *
-            $mul / ( $dim - [dict get $@config -headsz])}]
-        # if ui changed, update it
-        if {$ui && [info exists @c]} {
-            sys_gui [list $@c delete $self]\n
-            sys_gui [list slider2_draw_new $self $@c $@x $@y $@config $@state]\n
-        } elseif {$upd && [info exists @c]} {
-            sys_gui [list slider2_update $self $@c $@x $@y $@config $@state]\n
-        }
-        if {[dict exists $newconf -width] || [dict exists $newconf -height]} {
-            canvas_fixlinesfor \
-                [tclpd_get_glist $self] [tclpd_get_instance_text $self]
-        }
-    }
-    
-    0_set {
-        foreach v {min max} {set $v [dict get $@state _$v]}
-        set f [pd::arg 0 float]
-        if {$f < $min} {set f $min}
-        if {$f > $max} {set f $max}
-        dict set @config -initvalue $f
-        if {[info exists @c]} {
-            # update ui:
-            sys_gui [list slider2_update $self $@c $@x $@y $@config $@state]\n
-        }
-    }
-
-    0_bang {
-        foreach v {initvalue} {set $v [dict get $@config -$v]}
-        pd::outlet $self 0 float $initvalue
-        if {$@send != {}} {
-            set s_thing [$@send cget -s_thing]
-            if {$s_thing != {NULL}} {pd_float $s_thing $initvalue}
-        }
-    }
-
-    0_float {
-        $self 0 set {*}$args
-        $self 0 bang
-    }
-
-    object_save {
-        return [list #X obj $@x $@y slider2 {*}[pd::add_empty $@config] \;]
-    }
-
-    object_properties {
-        set c [string map {$ \\$} $@config]
-        gfxstub_new [tclpd_get_object_pd $self] [tclpd_get_instance $self] \
-            [list propertieswindow %s $c "\[slider2\] properties"]\n
-    }
-
-    widgetbehavior_getrect {
-        lassign $args x1 y1
-        set x2 [expr {1+$x1+[dict get $@config -width]}]
-        set y2 [expr {1+$y1+[dict get $@config -height]}]
-        return [list $x1 $y1 $x2 $y2]
-    }
-
-    widgetbehavior_displace {
-        lassign $args dx dy
-        if {$dx != 0 || $dy != 0} {
-            incr @x $dx; incr @y $dy
-            sys_gui [list $@c move $self $dx $dy]\n
-        }
-        return [list $@x $@y]
-    }
-
-    widgetbehavior_select {
-        lassign $args sel
-        sys_gui [list $@c itemconfigure $self&&!label$self -outline [lindex \
-            [list [dict get $@config -fgcolor] {blue}] $sel]]\n
-    }
-
-    widgetbehavior_vis {
-        lassign $args @c @x @y vis
-        if {$vis} {
-            sys_gui [list slider2_draw_new $self $@c $@x $@y $@config $@state]\n
-        } else {
-            sys_gui [list $@c delete $self]\n
-        }
-    }
-
-    widgetbehavior_click {
-        lassign $args x y shift alt dbl doit
-        set h [dict get $@config -height]
-        set ypix [expr {[lindex $args 1]-$@y-1}]
-        if {$ypix < 0 || $ypix >= $h} {return}
-        if {$doit} {
-            switch [dict get $@config -orient] {
-                horizontal {
-                    set @motion_start_x $x
-                    set @motion_curr_x $x
-                }
-                vertical {
-                    set @motion_start_y $y
-                    set @motion_curr_y $y
-                }
-            }
-            set @motion_start_v [dict get $@config -initvalue]
-            tclpd_guiclass_grab [tclpd_get_instance $self] \
-                [tclpd_get_glist $self] $x $y
-        }
-    }
-
-    widgetbehavior_motion {
-        lassign $args dx dy
-        switch [dict get $@config -orient] {
-            horizontal {
-                set @motion_curr_x [expr {$dx+$@motion_curr_x}]
-                set pixdelta [expr {-1*($@motion_curr_x-$@motion_start_x)}]
-            }
-            vertical {
-                set @motion_curr_y [expr {$dy+$@motion_curr_y}]
-                set pixdelta [expr {-1*($@motion_curr_y-$@motion_start_y)}]
-            }
-        }
-        set f [expr {$@motion_start_v+$pixdelta*$@pix2units}]
-        $self 0 float {*}[pd::add_selectors [list $f]]
-    }
-}
diff --git a/externals/tclpd/tcl.i b/externals/tclpd/tcl.i
deleted file mode 100644
index 0e658473e..000000000
--- a/externals/tclpd/tcl.i
+++ /dev/null
@@ -1,106 +0,0 @@
-%module tclpd
-%include exception.i
-%include cpointer.i
-
-#define __attribute__(x)
-
-/* functions that are in m_pd.h but don't exist in modern versions of pd */
-%ignore pd_getfilename;
-%ignore pd_getdirname;
-%ignore pd_anything;
-%ignore class_parentwidget;
-%ignore sys_isreadablefile;
-%ignore garray_get;
-%ignore c_extern;
-%ignore c_addmess;
-
-/* functions that we can't auto-wrap, because they have varargs */
-%ignore post;
-%ignore class_new;
-
-/* functions that we can't auto-wrap, because <insert reason here> */
-%ignore glist_new;
-%ignore canvas_zapallfortemplate;
-%ignore canvas_fattenforscalars;
-%ignore canvas_visforscalars;
-%ignore canvas_clicksub;
-%ignore text_xcoord;
-%ignore text_ycoord;
-%ignore canvas_getglistonsuper;
-%ignore canvas_getfont;
-%ignore canvas_setusedastemplate;
-%ignore canvas_vistext;
-%ignore rtext_remove;
-%ignore canvas_recurapply;
-%ignore gobj_properties;
-
-/* end of ignore-list */
-
-%include "m_pd.h"
-%include "g_canvas.h"
-%include "tcl_extras.h"
-
-%{
-    #include "m_pd.h"
-    #include "tcl_extras.h"
-
-    typedef t_atom t_atom_array;
-
-    /* extern "C" SWIGEXPORT int Tclpd_SafeInit(Tcl_Interp *interp); */
-    /* extern "C" { void tcl_setup() {tclpd_setup(void);} } */
-%}
-
-/* this does the trick of solving
- TypeError in method 'xyz', argument 4 of type 't_atom *' */
-%name(outlet_list) EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom_array *argv);
-%name(outlet_anything) EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom_array *argv);
-
-%pointer_class(t_float, t_float)
-%pointer_class(t_symbol, t_symbol)
-
-%typemap(in) t_atom * {
-    t_atom *a = (t_atom*)getbytes(sizeof(t_atom));
-    if(tcl_to_pd($input, a) == TCL_ERROR) {
-#ifdef DEBUG
-        post("Tcl SWIG: typemap(in) error");
-#endif
-        return TCL_ERROR;
-    }
-    $1 = a;
-}
-
-%typemap(freearg) t_atom * {
-    freebytes($1, sizeof(t_atom));
-}
-
-%typemap(out) t_atom* {
-    Tcl_Obj* res_obj;
-    if(pd_to_tcl($1, &res_obj) == TCL_ERROR) {
-#ifdef DEBUG
-        post("Tcl SWIG: typemap(out) error");
-#endif
-        return TCL_ERROR;
-    }
-    Tcl_SetObjResult(tcl_for_pd, res_obj);
-}
-
-/* helper functions for t_atom arrays */
-%inline %{
-    t_atom_array *new_atom_array(int size) {
-        return (t_atom_array*)getbytes(size*sizeof(t_atom));
-    }
-
-    void delete_atom_array(t_atom_array *a, int size) {
-        freebytes(a, size*sizeof(t_atom));
-    }
-
-    t_atom* get_atom_array(t_atom_array *a, int index) {
-        return &a[index];
-    }
-
-    void set_atom_array(t_atom_array *a, int index, t_atom *n) {
-        memcpy(&a[index], n, sizeof(t_atom));
-    }
-%}
-
-
diff --git a/externals/tclpd/tcl_class.cxx b/externals/tclpd/tcl_class.cxx
deleted file mode 100644
index 16c7564d9..000000000
--- a/externals/tclpd/tcl_class.cxx
+++ /dev/null
@@ -1,314 +0,0 @@
-#include "tcl_extras.h"
-#include <map>
-#include <string>
-#include <string.h>
-
-using namespace std;
-
-static unsigned long objectSequentialId = 0;
-map<string,t_class*> class_table;
-map<string,t_pd*> object_table;
-
-/* set up the class that handles loading of tcl classes */
-t_class* tclpd_class_new(const char* name, int flags) {
-    t_class* c = class_new(gensym(name), (t_newmethod)tclpd_new,
-        (t_method)tclpd_free, sizeof(t_tcl), flags, A_GIMME, A_NULL);
-
-    class_table[string(name)] = c;
-    class_addanything(c, tclpd_anything);
-    class_addmethod(c, (t_method)tclpd_loadbang, gensym("loadbang"), A_NULL);
-    
-    // always set save function. it will call the default if
-    // none exists in tcl space.
-    class_setsavefn(c, tclpd_save);
-
-    // check if properties function exists in tcl space.
-    char buf[80];
-    int res_i;
-    snprintf(buf, 80, "llength [info procs ::%s_object_properties]", name);
-    if(Tcl_Eval(tcl_for_pd, buf) == TCL_OK) {
-        Tcl_Obj* res = Tcl_GetObjResult(tcl_for_pd);
-        if(Tcl_GetIntFromObj(tcl_for_pd, res, &res_i) == TCL_OK) {
-            if(res_i) {
-                class_setpropertiesfn(c, tclpd_properties);
-            }
-#ifdef DEBUG
-            else {
-                post("tclpd_class_new: propertiesfn does not exist", buf);
-            }
-#endif
-        }
-#ifdef DEBUG
-        else {
-            post("tclpd_class_new: Tcl_GetIntFromObj returned an error");
-        }
-#endif
-    }
-#ifdef DEBUG
-    else {
-        post("tclpd_class_new: [info procs] returned an error");
-    }
-#endif
-    return c;
-}
-
-t_class* tclpd_guiclass_new(const char* name, int flags) {
-    t_class* c = tclpd_class_new(name, flags);
-    t_widgetbehavior* wb = (t_widgetbehavior*)getbytes(sizeof(t_widgetbehavior));
-    wb->w_getrectfn = tclpd_guiclass_getrect;
-    wb->w_displacefn = tclpd_guiclass_displace;
-    wb->w_selectfn = tclpd_guiclass_select;
-    wb->w_activatefn = NULL;
-    wb->w_deletefn = tclpd_guiclass_delete;
-    wb->w_visfn = tclpd_guiclass_vis;
-    wb->w_clickfn = tclpd_guiclass_click;
-    class_setwidget(c, wb);
-    return c;
-}
-
-t_tcl* tclpd_new(t_symbol* classsym, int ac, t_atom* at) {
-    // lookup in class table
-    const char* name = classsym->s_name;
-    t_class* qlass = class_table[string(name)];
-
-    t_tcl* x = (t_tcl*)pd_new(qlass);
-    x->ninlets = 1 /* qlass->c_firstin ??? */;
-
-    x->classname = Tcl_NewStringObj(name, -1);
-    Tcl_IncrRefCount(x->classname);
-
-    char s[64];
-    snprintf(s, 64, "tclpd:%s:x%lx", name, objectSequentialId++);
-    x->self = Tcl_NewStringObj(s, -1);
-    Tcl_IncrRefCount(x->self);
-
-    x->x_glist = (t_glist*)canvas_getcurrent();
-
-    // store in object table (for later lookup)
-    object_table[string(s)] = (t_pd*)x;
-
-    // build constructor command
-    Tcl_Obj *av[ac+2]; InitArray(av, ac+2, NULL);
-    av[0] = x->classname;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = x->self;
-    Tcl_IncrRefCount(av[1]);
-    for(int i=0; i<ac; i++) {
-        if(pd_to_tcl(&at[i], &av[2+i]) == TCL_ERROR) {
-#ifdef DEBUG
-            post("pd_to_tcl: tclpd_new: failed during conversion. check memory leaks!");
-#endif
-            goto error;
-        }
-    }
-    // call constructor
-    if(Tcl_EvalObjv(tcl_for_pd, ac+2, av, 0) != TCL_OK) {
-        goto error;
-    }
-
-    for(int i = 0; i < (ac+2); i++)
-        Tcl_DecrRefCount(av[i]);
-
-    return x;
-
-error:
-    tclpd_interp_error(TCL_ERROR);
-    for(int i = 0; i < (ac+2); i++) {
-        if(!av[i]) break;
-        Tcl_DecrRefCount(av[i]);
-    }
-    pd_free((t_pd*)x);
-    return 0;
-}
-
-void tclpd_free(t_tcl* x) {
-    // build destructor command
-    Tcl_Obj *sym = Tcl_NewStringObj(Tcl_GetStringFromObj(x->classname, NULL), -1);
-    Tcl_AppendToObj(sym, "_destructor", -1);
-    Tcl_Obj *av[2]; InitArray(av, 2, NULL);
-    av[0] = sym;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = x->self;
-    Tcl_IncrRefCount(av[1]);
-    // call destructor
-    if(Tcl_EvalObjv(tcl_for_pd, 2, av, 0) != TCL_OK) {
-#ifdef DEBUG
-        post("tclpd_free: failed");
-#endif
-    }
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-
-    Tcl_DecrRefCount(x->self);
-    Tcl_DecrRefCount(x->classname);
-#ifdef DEBUG
-    post("tclpd_free called");
-#endif
-}
-
-void tclpd_anything(t_tcl* x, t_symbol* s, int ac, t_atom* at) {
-    tclpd_inlet_anything(x, 0, s, ac, at);
-}
-
-void tclpd_inlet_anything(t_tcl* x, int inlet, t_symbol* s, int ac, t_atom* at) {
-    // proxy method - format: <self> <inlet#> <selector> ...
-    Tcl_Obj* av[ac+3]; InitArray(av, ac+3, NULL);
-    int result;
-
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewIntObj(inlet);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj(s->s_name, -1);
-    Tcl_IncrRefCount(av[2]);
-    for(int i=0; i<ac; i++) {
-        if(pd_to_tcl(&at[i], &av[3+i]) == TCL_ERROR) {
-#ifdef DEBUG
-            post("pd_to_tcl: tclpd_inlet_anything: failed during conversion. check memory leaks!");
-#endif
-            goto error;
-        }
-    }
-    result = Tcl_EvalObjv(tcl_for_pd, ac+3, av, 0);
-    if(result != TCL_OK) {
-        goto error;
-    }
-
-    for(int i=0; i < (ac+3); i++)
-        Tcl_DecrRefCount(av[i]);
-
-    // OK
-    return;
-
-error:
-    tclpd_interp_error(TCL_ERROR);
-    for(int i=0; i < (ac+3); i++) {
-        if(!av[i]) break;
-        Tcl_DecrRefCount(av[i]);
-    }
-    return;
-}
-
-void tclpd_loadbang(t_tcl* x) {
-    tclpd_inlet_anything(x, 0, gensym("loadbang"), 0, NULL);
-}
-
-/* Tcl glue: */
-
-t_proxyinlet* tclpd_add_proxyinlet(t_tcl* x) {
-    t_proxyinlet* proxy = (t_proxyinlet*)pd_new(proxyinlet_class);
-    proxyinlet_init(proxy);
-    proxy->target = x;
-    proxy->ninlet = x->ninlets++;
-    inlet_new(&x->o, &proxy->obj.ob_pd, 0, 0);
-    return proxy;
-}
-
-t_tcl* tclpd_get_instance(const char* objectSequentialId) {
-    return (t_tcl*)object_table[objectSequentialId];
-}
-
-t_pd* tclpd_get_instance_pd(const char* objectSequentialId) {
-    return (t_pd*)object_table[objectSequentialId];
-}
-
-t_object* tclpd_get_object(const char* objectSequentialId) {
-    t_tcl* x = tclpd_get_instance(objectSequentialId);
-    return &x->o;
-}
-
-t_pd* tclpd_get_object_pd(const char* objectSequentialId) {
-    t_object* o = tclpd_get_object(objectSequentialId);
-    return &o->ob_pd;
-}
-
-t_glist* tclpd_get_glist(const char* objectSequentialId) {
-    t_tcl* x = tclpd_get_instance(objectSequentialId);
-    return x->x_glist;
-}
-
-t_symbol* null_symbol() {
-    return (t_symbol*)0;
-}
-
-void poststring2 (const char *s) {
-    post("%s", s);
-}
-
-void tclpd_save(t_gobj* z, t_binbuf* b) {
-    Tcl_Obj* av[3]; InitArray(av, 3, NULL);
-    Tcl_Obj* res;
-
-    t_tcl* x = (t_tcl*)z;
-
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("object", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("save", -1);
-    Tcl_IncrRefCount(av[2]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 3, av, 0);
-    if(result == TCL_OK) {
-        res = Tcl_GetObjResult(tcl_for_pd);
-        Tcl_IncrRefCount(res);
-        int objc;
-        Tcl_Obj** objv;
-        result = Tcl_ListObjGetElements(tcl_for_pd, res, &objc, &objv);
-        if(result == TCL_OK) {
-            if(objc == 0 && objv == NULL) {
-                // call default savefn
-                text_save(z, b);
-            } else {
-                // do custom savefn
-                int i;
-                double tmp;
-                for(i = 0; i < objc; i++) {
-                    result = Tcl_GetDoubleFromObj(tcl_for_pd, objv[i], &tmp);
-                    if(result == TCL_OK) {
-                        binbuf_addv(b, "f", (t_float)tmp);
-                    } else {
-                        char* tmps = Tcl_GetStringFromObj(objv[i], NULL);
-                        if(!strcmp(tmps, ";")) {
-                            binbuf_addv(b, ";");
-                        } else {
-                            binbuf_addv(b, "s", gensym(tmps));
-                        }
-                    }
-                }
-            }
-        } else {
-            pd_error(x, "Tcl: object save: failed");
-            tclpd_interp_error(result);
-        }
-        Tcl_DecrRefCount(res);
-    } else {
-        pd_error(x, "Tcl: object save: failed");
-        tclpd_interp_error(result);
-    }
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-}
-
-void tclpd_properties(t_gobj* z, t_glist* owner) {
-    Tcl_Obj* av[3]; InitArray(av, 3, NULL);
-    Tcl_Obj* res;
-
-    t_tcl* x = (t_tcl*)z;
-
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("object", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("properties", -1);
-    Tcl_IncrRefCount(av[2]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 3, av, 0);
-    if(result != TCL_OK) {
-        //res = Tcl_GetObjResult(tcl_for_pd);
-        pd_error(x, "Tcl: object properties: failed");
-        tclpd_interp_error(result);
-    }
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-}
diff --git a/externals/tclpd/tcl_extras.h b/externals/tclpd/tcl_extras.h
deleted file mode 100644
index 9c5ee844c..000000000
--- a/externals/tclpd/tcl_extras.h
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "m_pd.h"
-//#include "m_imp.h"
-#include "g_canvas.h"
-//#include "s_stuff.h"
-
-#include <tcl.h>
-
-/* PATH_MAX is not defined in limits.h on some platforms */
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
-#define TCLPD_VERSION "0.2.1"
-
-#define InitArray(name, size, value) for(int zz=0; zz<(size); zz++) name[zz]=value
-
-typedef struct _t_tcl {
-    t_object o;
-    t_glist* x_glist;
-    Tcl_Obj* self;
-    Tcl_Obj* classname;
-    int ninlets;
-} t_tcl;
-
-typedef struct _t_proxyinlet {
-    t_object obj;
-    t_tcl* target;
-    int ninlet;
-    t_symbol* sel;
-    int argc;
-    t_atom* argv;
-} t_proxyinlet;
-
-/* tcl_proxyinlet.cxx */
-extern t_class* proxyinlet_class;
-void proxyinlet_init(t_proxyinlet* x);
-void proxyinlet_clear(t_proxyinlet* x);
-void proxyinlet_anything(t_proxyinlet* x, t_symbol* s, int argc, t_atom* argv);
-void proxyinlet_trigger(t_proxyinlet* x);
-t_atom* proxyinlet_get_atoms(t_proxyinlet* x);
-void proxyinlet_clone(t_proxyinlet* x, t_proxyinlet* y);
-void proxyinlet_setup(void);
-
-/* tcl_wrap.cxx */
-extern "C" int Tclpd_SafeInit(Tcl_Interp *interp);
-
-/* tcl_typemap.cxx */
-int pd_to_tcl(t_atom* input, Tcl_Obj** output);
-int tcl_to_pd(Tcl_Obj* input, t_atom* output);
-
-/* tcl_setup.cxx */
-extern Tcl_Interp* tcl_for_pd;
-extern "C" void tclpd_setup(void);
-void tclpd_interp_error(int result);
-
-/* tcl_class.cxx */
-t_class* tclpd_class_new(const char* name, int flags);
-t_class* tclpd_guiclass_new(const char* name, int flags);
-t_tcl* tclpd_new(t_symbol* classsym, int ac, t_atom* at);
-void tclpd_free (t_tcl* self);
-void tclpd_anything(t_tcl* self, t_symbol* s, int ac, t_atom* at);
-void tclpd_inlet_anything(t_tcl *self, int inlet, t_symbol *s, int ac, t_atom *at);
-void tclpd_loadbang(t_tcl* x);
-t_proxyinlet* tclpd_add_proxyinlet(t_tcl* x);
-t_tcl* tclpd_get_instance(const char* objectSequentialId);
-t_pd* tclpd_get_instance_pd(const char* objectSequentialId);
-t_object* tclpd_get_object(const char* objectSequentialId);
-t_pd* tclpd_get_object_pd(const char* objectSequentialId);
-t_glist* tclpd_get_glist(const char* objectSequentialId);
-t_symbol* null_symbol();
-void poststring2(const char* s);
-extern "C" void text_save(t_gobj *z, t_binbuf *b);
-void tclpd_save(t_gobj* z, t_binbuf* b);
-void tclpd_properties(t_gobj* z, t_glist* owner);
-
-/* tcl_widgetbehavior.cxx */
-void tclpd_guiclass_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2);
-void tclpd_guiclass_displace(t_gobj* z, t_glist* glist, int dx, int dy);
-void tclpd_guiclass_select(t_gobj* z, t_glist* glist, int selected);
-void tclpd_guiclass_activate(t_gobj* z, t_glist* glist, int state);
-void tclpd_guiclass_delete(t_gobj* z, t_glist* glist);
-void tclpd_guiclass_vis(t_gobj* z, t_glist* glist, int vis);
-int tclpd_guiclass_click(t_gobj* z, t_glist* glist, int xpix, int ypix, int shift, int alt, int dbl, int doit);
-void tclpd_guiclass_motion(t_tcl* x, t_floatarg dx, t_floatarg dy);
-void tclpd_guiclass_grab(t_tcl* x, t_glist* glist, int xpix, int ypix);
-
-/* tcl_loader.cxx */
-extern "C" int tclpd_do_load_lib(t_canvas* canvas, char* objectname);
-/* pd loader private stuff: */
-typedef int (*loader_t)(t_canvas *canvas, char* classname);
-extern "C" void sys_register_loader(loader_t loader);
-extern "C" int sys_onloadlist(char* classname);
-extern "C" void sys_putonloadlist(char* classname);
-extern "C" void class_set_extern_dir(t_symbol* s);
diff --git a/externals/tclpd/tcl_loader.cxx b/externals/tclpd/tcl_loader.cxx
deleted file mode 100644
index 2dad0d1d5..000000000
--- a/externals/tclpd/tcl_loader.cxx
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "tcl_extras.h"
-#include <string.h>
-#include <unistd.h>
-
-extern "C" int tclpd_do_load_lib(t_canvas *canvas, char *objectname) {
-#ifdef DEBUG
-    post("Tcl loader: registering tcl class loader mechanism");
-#endif
-    char filename[MAXPDSTRING], dirbuf[MAXPDSTRING],
-        *classname, *nameptr;
-    int fd;
-
-    if ((classname = strrchr(objectname, '/')) != NULL)
-        classname++;
-    else
-        classname = objectname;
-
-    if(sys_onloadlist(objectname)) {
-        post("%s: already loaded", objectname);
-        return (1);
-    }
-
-        /* try looking in the path for (objectname).(tcl) ... */
-    if ((fd = canvas_open(canvas, objectname, ".tcl",
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
-            goto gotone;
-
-        /* next try (objectname)/(classname).(tcl) ... */
-    strncpy(filename, objectname, MAXPDSTRING);
-    filename[MAXPDSTRING-2] = 0;
-    strcat(filename, "/");
-    strncat(filename, classname, MAXPDSTRING-strlen(filename));
-    filename[MAXPDSTRING-1] = 0;
-    if ((fd = canvas_open(canvas, filename, ".tcl",
-        dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
-            goto gotone;
-
-    return 0;
-
-gotone:
-    close(fd);
-    class_set_extern_dir(gensym(dirbuf));
-        /* rebuild the absolute pathname */
-    strncpy(filename, dirbuf, MAXPDSTRING);
-    filename[MAXPDSTRING-2] = 0;
-    strcat(filename, "/");
-    strncat(filename, nameptr, MAXPDSTRING-strlen(filename));
-    filename[MAXPDSTRING-1] = 0;
-
-    // load tcl external:
-    int result = Tcl_EvalFile(tcl_for_pd, filename);
-    if(result == TCL_OK) {
-        post("Tcl loader: loaded %s", filename);
-    } else {
-        post("Tcl loader: error trying to load %s", filename);
-        tclpd_interp_error(result);
-        return 0;
-    }
-
-    class_set_extern_dir(&s_);
-    sys_putonloadlist(objectname);
-    return 1;
-}
-
diff --git a/externals/tclpd/tcl_proxyinlet.cxx b/externals/tclpd/tcl_proxyinlet.cxx
deleted file mode 100644
index e1cdb48f5..000000000
--- a/externals/tclpd/tcl_proxyinlet.cxx
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "tcl_extras.h"
-
-t_class* proxyinlet_class;
-
-void proxyinlet_init(t_proxyinlet* x) {
-    //x->pd = proxyinlet_class;
-    x->target = NULL;
-    x->sel = gensym("none");
-    x->argc = 0;
-    x->argv = NULL;
-}
-
-void proxyinlet_clear(t_proxyinlet* x) {
-    if(x->argv) {
-        freebytes(x->argv, x->argc * sizeof(*x->argv));
-    }
-}
-
-#define PROXYINLET_SEL_TO_LIST 0 // 0 or 1
-
-void proxyinlet_anything(t_proxyinlet* x, t_symbol* s, int argc, t_atom* argv) {
-    proxyinlet_clear(x);
-
-    if(!(x->argv = (t_atom*)getbytes((argc+PROXYINLET_SEL_TO_LIST) * sizeof(*x->argv)))) {
-        x->argc = 0;
-        error("proxyinlet: getbytes: out of memory");
-        return;
-    }
-
-    x->argc = argc + PROXYINLET_SEL_TO_LIST;
-    if(PROXYINLET_SEL_TO_LIST == 1) SETSYMBOL(&x->argv[0], s);
-    else x->sel = s;
-
-    int i;
-    for(i = 0; i < argc; i++) {
-        x->argv[i+PROXYINLET_SEL_TO_LIST] = argv[i];
-    }
-
-    proxyinlet_trigger(x);
-}
-
-void proxyinlet_trigger(t_proxyinlet* x) {
-    if(x->target != NULL && x->sel != gensym("none")) {
-        tclpd_inlet_anything(x->target, x->ninlet, x->sel, x->argc, x->argv);
-    }
-}
-
-t_atom* proxyinlet_get_atoms(t_proxyinlet* x) {
-    return x->argv;
-}
-
-void proxyinlet_clone(t_proxyinlet* x, t_proxyinlet* y) {
-    y->target = x->target;
-    y->sel = x->sel;
-
-    y->argc = x->argc;
-    if(!(y->argv = (t_atom*)getbytes(y->argc * sizeof(*y->argv)))) {
-        y->argc = 0;
-        error("proxyinlet: getbytes: out of memory");
-        return;
-    }
-
-    int i;
-    for(i = 0; i < x->argc; i++) {
-        y->argv[i] = x->argv[i];
-    }
-}
-
-void proxyinlet_setup(void) {
-    proxyinlet_class = class_new(gensym("tclpd proxyinlet"),
-        0, 0, sizeof(t_proxyinlet), 0, A_NULL);
-    class_addanything(proxyinlet_class, proxyinlet_anything);
-}
diff --git a/externals/tclpd/tcl_setup.cxx b/externals/tclpd/tcl_setup.cxx
deleted file mode 100644
index 51f82c24b..000000000
--- a/externals/tclpd/tcl_setup.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "tcl_extras.h"
-#include <unistd.h>
-#include <limits.h>
-
-Tcl_Interp *tcl_for_pd = NULL;
-
-extern "C" void tcl_setup(void) {
-    tclpd_setup();
-}
-
-void tclpd_setup(void) {
-    if(tcl_for_pd) {
-        return;
-    }
-
-    post("Tcl loader v" TCLPD_VERSION);
-
-    proxyinlet_setup();
-
-    tcl_for_pd = Tcl_CreateInterp();
-    Tcl_Init(tcl_for_pd);
-    Tclpd_SafeInit(tcl_for_pd);
-
-    char *dirname   = new char[PATH_MAX];
-    char *dirresult = new char[PATH_MAX];
-    /* nameresult is only a pointer in dirresult space so don't delete[] it. */
-    char *nameresult;
-    if(getcwd(dirname, PATH_MAX) < 0) {
-        post("Tcl loader: FATAL: cannot get current dir");
-        /* exit(69); */ return;
-    }
-
-    int fd = open_via_path(dirname, "tcl", PDSUF, dirresult, &nameresult, PATH_MAX, 1);
-    if(fd >= 0) {
-        close(fd);
-    } else {
-        post("Tcl loader: %s was not found via the -path!", "tcl" PDSUF);
-    }
-
-    Tcl_SetVar(tcl_for_pd, "TCLPD_DIR", dirresult, 0);
-    Tcl_Eval(tcl_for_pd, "package provide Tclpd " TCLPD_VERSION);
-
-    if(Tcl_Eval(tcl_for_pd, "source $TCLPD_DIR/pkgIndex.tcl") != TCL_OK) {
-        post("Tcl loader: error loading %s/pkgIndex.tcl", dirresult);
-    }
-
-    if(Tcl_Eval(tcl_for_pd, "source $TCLPD_DIR/tcl.tcl") == TCL_OK) {
-        post("Tcl loader: loaded %s/tcl.tcl", dirresult);
-    }
-
-    if(Tcl_Eval(tcl_for_pd,"source $env(HOME)/.pd.tcl") == TCL_OK) {
-        post("Tcl loader: loaded ~/.pd.tcl");
-    }
-
-    delete[] dirresult;
-    delete[] dirname;
-
-    sys_register_loader(tclpd_do_load_lib);
-}
-
-void tclpd_interp_error(int result) {
-    post("Tcl error: %s", Tcl_GetStringResult(tcl_for_pd));
-    post("  (see stderr for details)");
-
-    fprintf(stderr, "------------------- Tcl error: -------------------\n");
-
-    // Tcl_GetReturnOptions and Tcl_DictObjGet only available in Tcl >= 8.5
-
-#if ((TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || (TCL_MAJOR_VERSION > 8))
-    Tcl_Obj* dict = Tcl_GetReturnOptions(tcl_for_pd, result);
-    Tcl_Obj* errorInfo = NULL;
-    Tcl_Obj* errorInfoK = Tcl_NewStringObj("-errorinfo", -1);
-    Tcl_IncrRefCount(errorInfoK);
-    Tcl_DictObjGet(tcl_for_pd, dict, errorInfoK, &errorInfo);
-    Tcl_DecrRefCount(errorInfoK);
-    fprintf(stderr, "%s\n", Tcl_GetStringFromObj(errorInfo, 0));
-#else
-    fprintf(stderr, "Backtrace not available in Tcl < 8.5. Please upgrade Tcl.\n");
-#endif
-
-    fprintf(stderr, "--------------------------------------------------\n");
-}
diff --git a/externals/tclpd/tcl_typemap.cxx b/externals/tclpd/tcl_typemap.cxx
deleted file mode 100644
index 4044afbe3..000000000
--- a/externals/tclpd/tcl_typemap.cxx
+++ /dev/null
@@ -1,68 +0,0 @@
-#include "tcl_extras.h"
-#include <string.h>
-
-int tcl_to_pd(Tcl_Obj *input, t_atom *output) {
-    int llength;
-    if(Tcl_ListObjLength(tcl_for_pd, input, &llength) == TCL_ERROR)
-        return TCL_ERROR;
-    if(llength != 2)
-        /*SWIG_exception(SWIG_ValueError, "Bad t_atom: expeting a 2-elements list.");*/
-        return TCL_ERROR;
-
-    int i;
-    Tcl_Obj* obj[2];
-    for(i = 0; i < 2; i++) Tcl_ListObjIndex(tcl_for_pd, input, i, &obj[i]);
-    char* argv0 = Tcl_GetStringFromObj(obj[0], 0);
-
-    if(strcmp(argv0, "float") == 0) {
-        double dbl;
-        if(Tcl_GetDoubleFromObj(tcl_for_pd, obj[1], &dbl) == TCL_ERROR)
-            return TCL_ERROR;
-        SETFLOAT(output, dbl);
-    } else if(strcmp(argv0, "symbol") == 0) {
-        SETSYMBOL(output, gensym(Tcl_GetStringFromObj(obj[1], 0)));
-    } else if(strcmp(argv0, "pointer") == 0) {
-        // TODO:
-        return TCL_ERROR;
-    }
-    return TCL_OK;
-}
-
-int pd_to_tcl(t_atom *input, Tcl_Obj **output) {
-    Tcl_Obj* tcl_t_atom[2];
-#ifdef DEBUG
-    post("pd_to_tcl: atom type = %d (%s)",
-        input->a_type, input->a_type == A_FLOAT ? "A_FLOAT" :
-        input->a_type == A_SYMBOL ? "A_SYMBOL" :
-        input->a_type == A_POINTER ? "A_POINTER" : "?");
-#endif
-    switch (input->a_type) {
-        case A_FLOAT: {
-            tcl_t_atom[0] = Tcl_NewStringObj("float", -1);
-            tcl_t_atom[1] = Tcl_NewDoubleObj(input->a_w.w_float);
-            break;
-        }
-        case A_SYMBOL: {
-            tcl_t_atom[0] = Tcl_NewStringObj("symbol", -1);
-            tcl_t_atom[1] = Tcl_NewStringObj(input->a_w.w_symbol->s_name, strlen(input->a_w.w_symbol->s_name));
-            break;
-        }
-        case A_POINTER: {
-            return TCL_ERROR;
-            tcl_t_atom[0] = Tcl_NewStringObj("pointer", -1);
-            tcl_t_atom[1] = Tcl_NewDoubleObj((long)input->a_w.w_gpointer);
-            break;
-        }
-        default: {
-            tcl_t_atom[0] = Tcl_NewStringObj("?", -1);
-            tcl_t_atom[1] = Tcl_NewStringObj("", 0);
-            break;
-        }
-    }
-#ifdef DEBUG
-    post("pd_to_tcl: atom value = \"%s\"", Tcl_GetStringFromObj(tcl_t_atom[1], 0));
-#endif
-    *output = Tcl_NewListObj(2, &tcl_t_atom[0]);
-    Tcl_IncrRefCount(*output);
-    return TCL_OK;
-}
diff --git a/externals/tclpd/tcl_widgetbehavior.cxx b/externals/tclpd/tcl_widgetbehavior.cxx
deleted file mode 100644
index 818e9a460..000000000
--- a/externals/tclpd/tcl_widgetbehavior.cxx
+++ /dev/null
@@ -1,302 +0,0 @@
-#include "tcl_extras.h"
-#include <string.h>
-
-void tclpd_guiclass_motion(t_tcl* x, t_floatarg dx, t_floatarg dy) {
-    Tcl_Obj* av[5]; InitArray(av, 5, NULL);
-    int tmp[4], i, length;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("motion", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewDoubleObj(dx);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewDoubleObj(dy);
-    Tcl_IncrRefCount(av[4]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 5, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-}
-
-void tclpd_guiclass_grab(t_tcl* x, t_glist* glist, int xpix, int ypix) {
-    glist_grab(glist, &x->o.te_g, (t_glistmotionfn)tclpd_guiclass_motion, 0, \
-        (t_floatarg)xpix, (t_floatarg)ypix);
-}
-
-int tclpd_guiclass_click(t_gobj* z, t_glist* glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) {
-    Tcl_Obj* av[9]; InitArray(av, 9, NULL);
-    Tcl_Obj* o = NULL;
-    int i = 0;
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("click", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(xpix);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(ypix);
-    Tcl_IncrRefCount(av[4]);
-    av[5] = Tcl_NewIntObj(shift);
-    Tcl_IncrRefCount(av[5]);
-    av[6] = Tcl_NewIntObj(alt);
-    Tcl_IncrRefCount(av[6]);
-    av[7] = Tcl_NewIntObj(dbl);
-    Tcl_IncrRefCount(av[7]);
-    av[8] = Tcl_NewIntObj(doit);
-    Tcl_IncrRefCount(av[8]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 9, av, 0);
-    if(result != TCL_OK) {
-        goto error;
-    }
-    o = Tcl_GetObjResult(tcl_for_pd);
-    Tcl_IncrRefCount(o);
-    if(strlen(Tcl_GetStringFromObj(o, NULL)) > 0) {
-        result = Tcl_GetIntFromObj(tcl_for_pd, o, &i);
-        if(result != TCL_OK) {
-            goto error;
-        }
-    }
-    goto cleanup;
-
-error:
-    tclpd_interp_error(result);
-
-cleanup:
-    if(o) Tcl_DecrRefCount(o);
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-    Tcl_DecrRefCount(av[5]);
-    Tcl_DecrRefCount(av[6]);
-    Tcl_DecrRefCount(av[7]);
-    Tcl_DecrRefCount(av[8]);
-
-    // return value (BOOL) means 'object wants to be clicked' (g_editor.c:1270)
-    return i;
-}
-
-void tclpd_guiclass_getrect(t_gobj* z, t_glist* owner, int* xp1, int* yp1, int* xp2, int* yp2) {
-    Tcl_Obj* av[5]; InitArray(av, 5, NULL);
-    Tcl_Obj* o;
-    Tcl_Obj* theList = NULL;
-    int tmp[4], i, length;
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("getrect", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(text_xpix(&x->o, owner));
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(text_ypix(&x->o, owner));
-    Tcl_IncrRefCount(av[4]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 5, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    theList = Tcl_GetObjResult(tcl_for_pd);
-    Tcl_IncrRefCount(theList);
-    length = 0;
-    //result = Tcl_ListObjGetElements(tcl_for_pd, theList, @, @);
-    result = Tcl_ListObjLength(tcl_for_pd, theList, &length);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    if(length != 4) {
-        pd_error(x, "widgetbehavior getrect: must return a list of 4 integers");
-        goto error;
-    }
-    o = NULL;
-    for(i = 0; i < 4; i++) {
-        result = Tcl_ListObjIndex(tcl_for_pd, theList, i, &o);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-        result = Tcl_GetIntFromObj(tcl_for_pd, o, &tmp[i]);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-    }
-    *xp1 = tmp[0]; *yp1 = tmp[1]; *xp2 = tmp[2]; *yp2 = tmp[3];
-    goto cleanup;
-error:
-cleanup:
-    if(theList) Tcl_DecrRefCount(theList);
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-}
-
-void tclpd_guiclass_displace(t_gobj* z, t_glist* glist, int dx, int dy) {
-    Tcl_Obj* av[5]; InitArray(av, 5, NULL);
-    Tcl_Obj* theList = NULL;
-    Tcl_Obj* o;
-    int length, i, tmp[2];
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("displace", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(dx);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(dy);
-    Tcl_IncrRefCount(av[4]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 5, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    theList = Tcl_GetObjResult(tcl_for_pd);
-    Tcl_IncrRefCount(theList);
-    length = 0;
-    //result = Tcl_ListObjGetElements(tcl_for_pd, theList, @, @);
-    result = Tcl_ListObjLength(tcl_for_pd, theList, &length);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    if(length != 2) {
-        pd_error(x, "widgetbehavior displace: must return a list of 2 integers");
-        goto error;
-    }
-    o = NULL;
-    for(i = 0; i < 2; i++) {
-        result = Tcl_ListObjIndex(tcl_for_pd, theList, i, &o);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-        result = Tcl_GetIntFromObj(tcl_for_pd, o, &tmp[i]);
-        if(result != TCL_OK) {
-            tclpd_interp_error(result);
-            goto error;
-        }
-    }
-    x->o.te_xpix = tmp[0];
-    x->o.te_ypix = tmp[1];
-    canvas_fixlinesfor(glist_getcanvas(glist), (t_text*)x);
-    goto cleanup;
-error:
-cleanup:
-    if(theList) Tcl_DecrRefCount(theList);
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-}
-
-void tclpd_guiclass_select(t_gobj* z, t_glist* glist, int selected) {
-    Tcl_Obj* av[4]; InitArray(av, 4, NULL);
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("select", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(selected);
-    Tcl_IncrRefCount(av[3]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 4, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-}
-
-void tclpd_guiclass_activate(t_gobj* z, t_glist* glist, int state) {
-    Tcl_Obj* av[4]; InitArray(av, 4, NULL);
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("activate", -1);
-    Tcl_IncrRefCount(av[2]);
-    av[3] = Tcl_NewIntObj(state);
-    Tcl_IncrRefCount(av[3]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 4, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-}
-
-void tclpd_guiclass_delete(t_gobj* z, t_glist* glist) {
-    /* will this be ever need to be accessed in Tcl land? */
-    canvas_deletelinesfor(glist_getcanvas(glist), (t_text*)z);
-}
-
-void tclpd_guiclass_vis(t_gobj* z, t_glist* glist, int vis) {
-    Tcl_Obj* av[7]; InitArray(av, 7, NULL);
-    t_tcl* x = (t_tcl*)z;
-    av[0] = x->self;
-    Tcl_IncrRefCount(av[0]);
-    av[1] = Tcl_NewStringObj("widgetbehavior", -1);
-    Tcl_IncrRefCount(av[1]);
-    av[2] = Tcl_NewStringObj("vis", -1);
-    Tcl_IncrRefCount(av[2]);
-    char buf[32];
-    snprintf(buf, 32, ".x%lx.c", glist_getcanvas(glist));
-    av[3] = Tcl_NewStringObj(buf, -1);
-    Tcl_IncrRefCount(av[3]);
-    av[4] = Tcl_NewIntObj(text_xpix(&x->o, glist));
-    Tcl_IncrRefCount(av[4]);
-    av[5] = Tcl_NewIntObj(text_ypix(&x->o, glist));
-    Tcl_IncrRefCount(av[5]);
-    av[6] = Tcl_NewIntObj(vis);
-    Tcl_IncrRefCount(av[6]);
-    int result = Tcl_EvalObjv(tcl_for_pd, 7, av, 0);
-    if(result != TCL_OK) {
-        tclpd_interp_error(result);
-        goto error;
-    }
-    goto cleanup;
-error:
-cleanup:
-    Tcl_DecrRefCount(av[0]);
-    Tcl_DecrRefCount(av[1]);
-    Tcl_DecrRefCount(av[2]);
-    Tcl_DecrRefCount(av[3]);
-    Tcl_DecrRefCount(av[4]);
-    Tcl_DecrRefCount(av[5]);
-    Tcl_DecrRefCount(av[6]);
-}
diff --git a/externals/tkwidgets/Makefile b/externals/tkwidgets/Makefile
deleted file mode 100644
index 1c87a43a7..000000000
--- a/externals/tkwidgets/Makefile
+++ /dev/null
@@ -1,332 +0,0 @@
-## Pd library template version 1.0.6
-# For instructions on how to use this template, see:
-#  http://puredata.info/docs/developer/MakefileTemplate
-LIBRARY_NAME = tkwidgets
-
-# add your .c source files, one object per file, to the SOURCES
-# variable, help files will be included automatically
-SOURCES = checkbutton.c photo.c text.c
-
-# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will
-# be included automatically
-PDOBJECTS = 
-
-# example patches and related files, in the 'examples' subfolder
-EXAMPLES = 
-
-# manuals and related files, in the 'manual' subfolder
-MANUAL = 
-
-# if you want to include any other files in the source and binary tarballs,
-# list them here.  This can be anything from header files, test patches,
-# documentation, etc.  README.txt and LICENSE.txt are required and therefore
-# automatically included
-EXTRA_DIST = tkwidgets.h tkwidgets.c
-
-
-
-#------------------------------------------------------------------------------#
-#
-# things you might need to edit if you are using other C libraries
-#
-#------------------------------------------------------------------------------#
-
-# -I"$(PD_INCLUDE)/pd" supports the header location for 0.43
-CFLAGS = -I"$(PD_INCLUDE)/pd" -Wall -W -g
-LDFLAGS =  
-LIBS = 
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-# get library version from meta file
-LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd)
-
-CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"'
-
-PD_INCLUDE = $(PD_PATH)/include
-# where to install the library, overridden below depending on platform
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd-externals
-objectsdir = $(pkglibdir)
-
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL) -p -m 644
-INSTALL_DATA = $(INSTALL) -p -m 644
-INSTALL_DIR     = $(INSTALL) -p -m 755 -d
-
-ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \
-	         $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows)
-
-DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION)
-ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION)
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
-  CPU := $(shell uname -p)
-  ifeq ($(CPU),arm) # iPhone/iPod Touch
-    SOURCES += $(SOURCES_iphoneos)
-    EXTENSION = pd_darwin
-    OS = iphoneos
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
-    CC=$(IPHONE_BASE)/gcc
-    CPP=$(IPHONE_BASE)/cpp
-    CXX=$(IPHONE_BASE)/g++
-    ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
-    IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6
-    OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer
-	CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS)
-    LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-  else # Mac OS X
-    SOURCES += $(SOURCES_macosx)
-    EXTENSION = pd_darwin
-    OS = macosx
-    PD_PATH = /Applications/Pd-extended.app/Contents/Resources
-    OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
-# build universal 32-bit on 10.4 and 32/64 on newer
-    ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8)
-      FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
-    else
-      FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4
-      SOURCES += $(SOURCES_iphoneos)
-    endif
-    CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include
-    LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib
-    # if the 'pd' binary exists, check the linking against it to aid with stripping
-    LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd)
-    LIBS += -lc 
-    STRIP = strip -x
-    DISTBINDIR=$(DISTDIR)-$(OS)
-# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much
-    pkglibdir=$(HOME)/Library/Pd
-  endif
-endif
-ifeq ($(UNAME),Linux)
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU)
-  # GNU/Hurd, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq ($(UNAME),GNU/kFreeBSD)
-  # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_linux)
-  EXTENSION = pd_linux
-  OS = linux
-  PD_PATH = /usr
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -fPIC
-  LDFLAGS += -Wl,--export-dynamic  -shared -fPIC
-  LIBS += -lc
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m)
-endif
-ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_cygwin)
-  EXTENSION = dll
-  OS = cygwin
-  PD_PATH = $(cygpath $(PROGRAMFILES))/pd
-  OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
-  CFLAGS += 
-  LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin"
-  LIBS += -lc -lpd
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
-  CPU := $(shell uname -m)
-  SOURCES += $(SOURCES_windows)
-  EXTENSION = dll
-  OS = windows
-  PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd)
-  OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer
-  CFLAGS += -mms-bitfields
-  LDFLAGS += -s -shared -Wl,--enable-auto-import
-  LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-  STRIP = strip --strip-unneeded -R .note -R .comment
-  DISTBINDIR=$(DISTDIR)-$(OS)
-endif
-
-# in case somebody manually set the HELPPATCHES above
-HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd)
-
-CFLAGS += $(OPT_CFLAGS)
-
-
-.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME)
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
-	$(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o tkwidgets.o
-	$(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" tkwidgets.o  $(LIBS)
-	chmod a-x "$*.$(EXTENSION)"
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
-	$(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
-	chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there.  Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \
-		$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES))" || (\
-		$(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \
-		$(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION))))
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION)
-
-install-doc:
-	$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) \
-			$(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-	$(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
-	$(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt
-
-install-examples:
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \
-		done
-
-install-manual:
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \
-		done
-
-
-clean:
-	-rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o)
-	-rm -f -- $(SOURCES:.c=.$(EXTENSION))
-	-rm -f -- $(LIBRARY_NAME).o
-	-rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
-	-rm -f -- $(DISTBINDIR).tar.gz
-	-rm -rf -- $(DISTBINDIR)
-	-rm -f -- $(DISTDIR).tar.gz
-	-rm -rf -- $(DISTDIR)
-	-rm -f -- $(ORIGDIR).tar.gz
-	-rm -rf -- $(ORIGDIR)
-
-
-$(DISTBINDIR):
-	$(INSTALL_DIR) $(DISTBINDIR)
-
-libdir: all $(DISTBINDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTBINDIR)
-	$(INSTALL_DATA) $(SOURCES)  $(DISTBINDIR)
-	$(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTBINDIR)
-#	tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR)
-
-$(DISTDIR):
-	$(INSTALL_DIR) $(DISTDIR)
-
-$(ORIGDIR):
-	$(INSTALL_DIR) $(ORIGDIR)
-
-dist: $(DISTDIR)
-	$(INSTALL_DATA) Makefile  $(DISTDIR)
-	$(INSTALL_DATA) README.txt $(DISTDIR)
-	$(INSTALL_DATA) LICENSE.txt $(DISTDIR)
-	$(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd  $(DISTDIR)
-	test -z "$(strip $(ALLSOURCES))" || \
-		$(INSTALL_DATA) $(ALLSOURCES)  $(DISTDIR)
-	test -z "$(strip $(PDOBJECTS))" || \
-		$(INSTALL_DATA) $(PDOBJECTS)  $(DISTDIR)
-	test -z "$(strip $(HELPPATCHES))" || \
-		$(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR)
-	test -z "$(strip $(EXTRA_DIST))" || \
-		$(INSTALL_DATA) $(EXTRA_DIST)    $(DISTDIR)
-	test -z "$(strip $(EXAMPLES))" || \
-		$(INSTALL_DIR) $(DISTDIR)/examples && \
-		for file in $(EXAMPLES); do \
-			$(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \
-		done
-	test -z "$(strip $(MANUAL))" || \
-		$(INSTALL_DIR) $(DISTDIR)/manual && \
-		for file in $(MANUAL); do \
-			$(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \
-		done
-	tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR)
-
-# make a Debian source package
-dpkg-source:
-	debclean
-	make distclean dist
-	mv $(DISTDIR) $(ORIGDIR)
-	tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR)
-	rm -f -- $(DISTDIR).tar.gz
-	rm -rf -- $(DISTDIR) $(ORIGDIR)
-	cd .. && dpkg-source -b $(LIBRARY_NAME)
-
-etags:
-	etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showsetup:
-	@echo "CFLAGS: $(CFLAGS)"
-	@echo "LDFLAGS: $(LDFLAGS)"
-	@echo "LIBS: $(LIBS)"
-	@echo "PD_INCLUDE: $(PD_INCLUDE)"
-	@echo "PD_PATH: $(PD_PATH)"
-	@echo "objectsdir: $(objectsdir)"
-	@echo "LIBRARY_NAME: $(LIBRARY_NAME)"
-	@echo "LIBRARY_VERSION: $(LIBRARY_VERSION)"
-	@echo "SOURCES: $(SOURCES)"
-	@echo "PDOBJECTS: $(PDOBJECTS)"
-	@echo "ALLSOURCES: $(ALLSOURCES)"
-	@echo "UNAME: $(UNAME)"
-	@echo "CPU: $(CPU)"
-	@echo "pkglibdir: $(pkglibdir)"
-	@echo "DISTDIR: $(DISTDIR)"
-	@echo "ORIGDIR: $(ORIGDIR)"
diff --git a/externals/tkwidgets/checkbutton-help.pd b/externals/tkwidgets/checkbutton-help.pd
deleted file mode 100644
index e39553b58..000000000
--- a/externals/tkwidgets/checkbutton-help.pd
+++ /dev/null
@@ -1,44 +0,0 @@
-#N canvas 12 208 467 404 10;
-#X obj 171 211 checkbutton 90 20;
-#X msg 20 131 query;
-#X obj 263 275 print QUERY;
-#X msg 24 100 query size;
-#X obj 144 188 cnv 15 160 80 empty empty empty 20 12 0 14 -233017 -66577
-0;
-#X obj 69 279 print DATA;
-#X msg 204 164 cursor gumby;
-#X obj 155 282 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 192 141 text gumby;
-#X msg 159 73 size 90 20;
-#X msg 184 122 text "blah blah";
-#X obj 51 337 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/checkbutton.htm
-;
-#X msg 141 41 onvalue 5;
-#X msg 347 136 fg blue;
-#X msg 349 158 bg pink;
-#X msg 348 182 anchor w;
-#X msg 116 137 bang;
-#X obj 127 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
-1;
-#X msg 125 23 offvalue 3;
-#X msg 172 98 options;
-#X msg 29 160 set 1;
-#X connect 0 0 5 0;
-#X connect 0 0 7 0;
-#X connect 0 1 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 6 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 14 0 0 0;
-#X connect 15 0 0 0;
-#X connect 16 0 0 0;
-#X connect 17 0 0 0;
-#X connect 18 0 0 0;
-#X connect 19 0 0 0;
-#X connect 20 0 0 0;
diff --git a/externals/tkwidgets/checkbutton.c b/externals/tkwidgets/checkbutton.c
deleted file mode 100644
index 00f752b3b..000000000
--- a/externals/tkwidgets/checkbutton.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* [checkbutton] object for dislaying a check box
-
-   Copyright (C) 2007 Hans-Christoph Steiner <hans@at.or.at>
-
-   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., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-   This is part of the tkwidgets library for Pd.
-
-*/
-
-/* TODO rectify char and pixel widths/heights ug */
-/* TODO bind to <Configure> so that things are redrawn when the label changes */
-/* TODO add float method to set state based on == 0 and everything else */
-
-#include "tkwidgets.h"
-
-#define DEBUG(x) x
-
-#define TOTAL_INLETS            1
-#define TOTAL_OUTLETS           2
-
-/* ------------------------ class variables --------------------------------- */
-
-static t_class *checkbutton_class;
-static t_widgetbehavior checkbutton_widgetbehavior;
-
-typedef struct _checkbutton
-{
-    t_object    x_obj;
-    t_canvas*   x_canvas;      /* canvas this widget is currently drawn in */
-    t_glist*    x_glist;       /* glist that owns this widget */
-    t_binbuf*   options_binbuf;/* binbuf to save options state in */
-
-    int         width;
-    int         height;
-
-    int         x_resizing;
-    int         x_selected;
-    
-    /* IDs for Tk widgets */
-	t_symbol*   tcl_namespace;       
-    t_symbol*   receive_name;  /* name to bind to to receive callbacks */
-	t_symbol*   canvas_id;  
-	t_symbol*   widget_id;        
-	t_symbol*   handle_id;      
-    t_symbol*   window_tag;
-	t_symbol*   iolets_tag;
-	t_symbol*   all_tag;
-    
-    t_outlet*   x_data_outlet;
-    t_outlet*   x_status_outlet;
-} t_checkbutton;
-
-static char *checkbutton_tk_options[] = {
-    "activebackground",
-    "activeforeground",
-    "anchor",
-    "background",
-    "bitmap",
-    "borderwidth",
-//    "command", /* problematic since it uses names based on pointers */
-    "compound",
-    "cursor",
-    "disabledforeground",
-    "font",
-    "foreground",
-    "height",
-    "highlightbackground",
-    "highlightcolor",
-    "highlightthickness",
-    "image",
-    "indicatoron",
-    "justify",
-    "offrelief",
-    "offvalue",
-    "onvalue",
-    "overrelief",
-    "padx",
-    "pady",
-    "relief",
-    "selectcolor",
-    "selectimage",
-    "state",
-    "takefocus",
-    "text",
-    "textvariable",
-    "underline",
-//    "variable", /* problematic since it uses names based on pointers */
-    "width",
-    "wraplength"
-};
-
-/* -------------------- common symbols to preload --------------------------- */
-
-static t_symbol *id_symbol;
-static t_symbol *query_callback_symbol;
-static t_symbol *size_symbol;
-
-/* -------------------- function prototypes --------------------------------- */
-
-static void checkbutton_query_callback(t_checkbutton *x, t_symbol *s, int argc, t_atom *argv);
-static void checkbutton_set(t_checkbutton* x,  t_float f);
-
-/* -------------------- widget helper functions------------------------------ */
-
-static void set_tkwidgets_ids(t_checkbutton* x, t_canvas* canvas)
-{
-    x->x_canvas = canvas;
-    x->canvas_id = tkwidgets_gen_canvas_id(x->x_canvas);
-    x->widget_id = tkwidgets_gen_widget_id((t_object*)x, x->canvas_id);
-    x->window_tag = tkwidgets_gen_window_tag((t_object*)x, x->canvas_id);
-    x->handle_id = tkwidgets_gen_handle_id((t_object *)x, x->canvas_id);
-}
-
-static void drawme(t_checkbutton *x, t_glist *glist)
-{
-    set_tkwidgets_ids(x,glist_getcanvas(glist));
-    sys_vgui("destroy %s\n", x->widget_id->s_name); /* just in case it exists */
-    sys_vgui("namespace eval %s {} \n", x->tcl_namespace->s_name);
-    sys_vgui("set ::%s::state 0\n", x->tcl_namespace->s_name);
-    sys_vgui("checkbutton %s -variable ::%s::state \
--command {pd [concat %s output $::%s::state \\;]}\n", 
-             x->widget_id->s_name, x->tcl_namespace->s_name, 
-             x->receive_name->s_name, x->tcl_namespace->s_name);
-    if(x->x_glist == x->x_canvas) // if GOP, don't draw inlets
-        tkwidgets_draw_iolets((t_object*)x, glist, 
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-    sys_vgui("%s create window %d %d -anchor nw -window %s -tags {%s %s}\n", 
-             x->canvas_id->s_name, 
-             text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-             x->widget_id->s_name,
-             x->window_tag->s_name, x->all_tag->s_name);
-    tkwidgets_bind_key_events(x->canvas_id, x->widget_id);
-    tkwidgets_bind_mouse_events(x->canvas_id, x->widget_id);
-}
-
-
-static void eraseme(t_checkbutton* x)
-{
-    sys_vgui("destroy %s\n", x->widget_id->s_name);
-    sys_vgui("%s delete %s\n", x->canvas_id->s_name, x->all_tag->s_name);
-}
-
-/* --------------------- query functions ------------------------------------ */
-
-static void query_id(t_checkbutton *x)
-{
-    t_atom id[2];
-    t_symbol *widget_id = x->widget_id;
-    SETSYMBOL(id, id_symbol);
-    SETSYMBOL(id + 1, widget_id);
-    checkbutton_query_callback(x, query_callback_symbol, 2, id);
-}
-
-static void query_size(t_checkbutton *x)
-{
-    t_atom coords[3];
-    SETSYMBOL(coords, size_symbol);
-    SETFLOAT(coords + 1, (t_float)x->width);
-    SETFLOAT(coords + 2, (t_float)x->height);
-    checkbutton_query_callback(x, query_callback_symbol, 3, coords);
-}
-
-static void checkbutton_query(t_checkbutton *x, t_symbol *s)
-{
-    post("checkbutton_query %s", s->s_name);
-    if(s == &s_)
-    {
-        tkwidgets_query_options(x->receive_name, x->widget_id, 
-                                sizeof(checkbutton_tk_options)/sizeof(char *), 
-                                checkbutton_tk_options);
-        query_id(x);
-        query_size(x);
-    }
-    else if(s == id_symbol)
-        query_id(x);
-    else if(s == size_symbol)
-        query_size(x);
-    else
-        tkwidgets_query_options(x->receive_name, x->widget_id, 1, &(s->s_name));
-}
-
-
-/* --------------------- checkbutton widgetbehaviour ------------------------ */
-static void checkbutton_getrect(t_gobj *z, t_glist *glist,
-                          int *xp1, int *yp1, int *xp2, int *yp2)
-{
-    t_checkbutton* x = (t_checkbutton*)z;
-
-    *xp1 = text_xpix(&x->x_obj, glist);
-    *yp1 = text_ypix(&x->x_obj, glist);
-    *xp2 = text_xpix(&x->x_obj, glist) + x->width;
-    *yp2 = text_ypix(&x->x_obj, glist) + x->height;
-}
-
-static void checkbutton_displace(t_gobj *z, t_glist *glist, int dx, int dy)
-{
-    t_checkbutton *x = (t_checkbutton *)z;
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    if (glist_isvisible(glist))
-    {
-        sys_vgui("%s move %s %d %d\n", 
-                 x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
-        sys_vgui("%s move RSZ %d %d\n", x->canvas_id->s_name, dx, dy);
-        canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
-    }
-}
-
-static void checkbutton_select(t_gobj *z, t_glist *glist, int state)
-{
-    t_checkbutton *x = (t_checkbutton *)z;
-    DEBUG(post("checkbutton_select: canvas %lx glist %lx state %d", x->x_canvas, glist, state););
-    
-    if( (state) && (!x->x_selected))
-    {
-        sys_vgui("set ::%s::bg [%s cget -bg]\n", 
-                 x->tcl_namespace->s_name, x->widget_id->s_name);
-        sys_vgui("%s configure -bg %s\n",
-                 x->widget_id->s_name, TKW_SELECTION_COLOR);
-        x->x_selected = 1;
-    }
-    else if (!state)
-    {
-        sys_vgui("%s configure -bg $::%s::bg\n",
-                 x->widget_id->s_name, x->tcl_namespace->s_name);
-        /* activatefn never gets called with 0, so destroy handle here */
-        sys_vgui("destroy %s\n", x->handle_id->s_name);
-        x->x_selected = 0;
-    }
-}
-static void checkbutton_delete(t_gobj *z, t_glist *glist)
-{
-    t_text *x = (t_text *)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-}
-       
-static void checkbutton_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    t_checkbutton* s = (t_checkbutton*)z;
-    if (vis)
-        drawme(s, glist);
-    else
-        eraseme(s);
-}
-
-static void checkbutton_save(t_gobj *z, t_binbuf *b)
-{
-    t_checkbutton *x = (t_checkbutton *)z;
-    binbuf_addv(b, "ssiisii", &s__X, gensym("obj"),
-                x->x_obj.te_xpix, x->x_obj.te_ypix, 
-                atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-                x->width, x->height);
-// TODO    binbuf_addbinbuf(b, x->options_binbuf);
-    binbuf_addv(b, ";");
-}
-
-/* -------------------- methods for atoms ----------------------------------- */
-
-/* this function uses the selector as the Tk option and applies the whole
- * message directly to the Tk widget itself using Tk's "configure".  This
- * function is called when "anything" is received. */
-static void checkbutton_set_option(t_checkbutton *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(s != &s_list)
-    {
-        t_binbuf *argument_binbuf = binbuf_new();
-        char *argument_buffer;
-        int buffer_length;
-        
-        binbuf_add(argument_binbuf, argc, argv);
-        binbuf_gettext(argument_binbuf, &argument_buffer, &buffer_length);
-        binbuf_free(argument_binbuf);
-        argument_buffer[buffer_length] = 0;
-        post("%s configure -%s {%s} \n", 
-                 x->widget_id->s_name, s->s_name, argument_buffer);
-        sys_vgui("%s configure -%s {%s} \n", 
-                 x->widget_id->s_name, s->s_name, argument_buffer);
-        tkwidgets_store_options(x->receive_name, x->tcl_namespace, x->widget_id, 
-                                sizeof(checkbutton_tk_options)/sizeof(char *), 
-                                (char **)&checkbutton_tk_options);
-    }
-}
-
-/* Pass the contents of the text widget onto the checkbutton_output_callback
- * fuction above */
-static void checkbutton_bang_output(t_checkbutton* x)
-{
-    sys_vgui("%s invoke\n", x->widget_id->s_name);
-}
-
-/* Pass the contents of the text widget onto the checkbutton_output_callback
- * fuction above */
-static void checkbutton_float_output(t_checkbutton* x, t_float f)
-{
-    checkbutton_set(x, f);
-    outlet_float(x->x_data_outlet, f);
-}
-
-/* --------------------------- methods for pd space ------------------------- */
-
-static void checkbutton_options(t_checkbutton *x)
-{
-    tkwidgets_list_options(x->x_status_outlet,
-                           sizeof(checkbutton_tk_options)/sizeof(char *), 
-                           (char **)&checkbutton_tk_options);
-}
-
-static void checkbutton_set(t_checkbutton* x,  t_float f)
-{
-    /* TODO figure out which matches make sense, in terms of offvalue/onvalue */
-    sys_vgui("if {%g != 0} {%s select} else {%s deselect}\n",
-             f, x->widget_id->s_name, x->widget_id->s_name, x->widget_id->s_name);
-}
-
-static void checkbutton_size(t_checkbutton *x, t_float width, t_float height)
-{
-    DEBUG(post("checkbutton_size"););
-    x->height = height;
-    x->width = width;
-    if(glist_isvisible(x->x_glist))
-    {
-        sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                 x->canvas_id->s_name, x->window_tag->s_name, x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-}
-
-/* --------------------------- callback functions --------------------------- */
-
-static void checkbutton_output_callback(t_checkbutton* x, t_float f)
-{
-    outlet_float(x->x_data_outlet, f);
-}
-
-static void checkbutton_query_callback(t_checkbutton *x, t_symbol *s, 
-                                       int argc, t_atom *argv)
-{
-    t_symbol *tmp_symbol = atom_getsymbolarg(0, argc, argv);
-    if(tmp_symbol != &s_)
-        outlet_anything(x->x_status_outlet, tmp_symbol, argc - 1, argv + 1);
-    else
-        post("checkbutton_query_callback %s %d", s->s_name, argc);
-}
-
-static void checkbutton_store_callback(t_checkbutton *x, t_symbol *s, 
-                                       int argc, t_atom *argv)
-{
-    if(s != &s_)
-    {
-        binbuf_clear(x->options_binbuf);
-        binbuf_restore(x->options_binbuf, argc, argv);
-    }
-    else
-        post("ERROR: does this ever happen?");
-}
-
-static void checkbutton_resize_click_callback(t_checkbutton *x, t_floatarg f)
-{
-    t_canvas *canvas = (glist_isvisible(x->x_glist) ? x->x_canvas : 0);
-    int button_state = (int)f;
-    if(x->x_resizing && !button_state && canvas)
-    {
-        tkwidgets_draw_iolets((t_object*)x, canvas,
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-    else if(!x->x_resizing && button_state)
-    {
-        tkwidgets_erase_iolets(x->canvas_id, x->iolets_tag);
-    }
-    x->x_resizing = button_state;
-}
-
-static void checkbutton_resize_motion_callback(t_checkbutton *x, 
-                                               t_floatarg f1, t_floatarg f2)
-{
-    DEBUG(post("checkbutton_resize_motion_callback"););
-    if (x->x_resizing)
-    {
-        int dx = (int)f1, dy = (int)f2;
-        if (glist_isvisible(x->x_glist))
-        {
-            x->width += dx;
-            x->height += dy;
-            sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                     x->canvas_id->s_name, x->window_tag->s_name, 
-                     x->width, x->height);
-            sys_vgui("%s move RESIZE %d %d\n",
-                     x->canvas_id->s_name, dx, dy);
-            canvas_fixlinesfor(x->x_glist, (t_text *)x);
-        }
-    }
-}
-
-/* --------------------------- standard class functions --------------------- */
-
-static void checkbutton_free(t_checkbutton *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, x->receive_name);
-}
-
-static void *checkbutton_new(t_symbol* s, int argc, t_atom *argv)
-{
-    t_checkbutton *x = (t_checkbutton *)pd_new(checkbutton_class);
-
-    x->options_binbuf = binbuf_new();
-
-    x->width = 30;
-    x->height = 30;
-
-    if(argc > 0) x->width = atom_getint(argv);
-    if(argc > 1) x->height = atom_getint(argv + 1);
-    if(argc > 2) binbuf_add(x->options_binbuf, argc - 2, argv + 2);
-
-    x->tcl_namespace = tkwidgets_gen_tcl_namespace((t_object*)x, s);
-    x->receive_name = tkwidgets_gen_callback_name(x->tcl_namespace);
-    pd_bind(&x->x_obj.ob_pd, x->receive_name);
-
-    x->x_glist = canvas_getcurrent();
-    x->iolets_tag = tkwidgets_gen_iolets_tag((t_object*)x);
-    x->all_tag = tkwidgets_gen_all_tag((t_object*)x);
-
-    x->x_data_outlet = outlet_new(&x->x_obj, &s_float);
-    x->x_status_outlet = outlet_new(&x->x_obj, &s_anything);
-
-    return (x);
-}
-
-void checkbutton_setup(void)
-{
-    checkbutton_class = class_new(gensym("checkbutton"), 
-                                  (t_newmethod)checkbutton_new, 
-                                  (t_method)checkbutton_free, 
-                                  sizeof(t_checkbutton), 0, A_GIMME,0);
-/* methods for atoms */
-	class_addanything(checkbutton_class, (t_method)checkbutton_set_option);
-	class_addbang(checkbutton_class, (t_method)checkbutton_bang_output);
-	class_addfloat(checkbutton_class, (t_method)checkbutton_float_output);
-
-/* common symbols to preload */
-	id_symbol = gensym("id");
-    query_callback_symbol = gensym("query_callback");
-    size_symbol = gensym("size");
-    
-/* methods for pd space */
-	class_addmethod(checkbutton_class, (t_method)checkbutton_options,
-                    gensym("options"), 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_query,
-                    gensym("query"), A_DEFSYMBOL, 0);
-	class_addmethod(checkbutton_class, (t_method)checkbutton_set,
-                    gensym("set"), A_DEFFLOAT, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_size,
-                    gensym("size"), A_DEFFLOAT, A_DEFFLOAT, 0);
-
-/* callbacks */
-	class_addmethod(checkbutton_class, (t_method)checkbutton_output_callback,
-                    gensym("output"), A_DEFFLOAT, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_query_callback,
-                    query_callback_symbol, A_GIMME, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_store_callback,
-                    gensym("store_callback"), A_GIMME, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_resize_click_callback,
-                    gensym("resize_click"), A_FLOAT, 0);
-    class_addmethod(checkbutton_class, (t_method)checkbutton_resize_motion_callback,
-                    gensym("resize_motion"), A_FLOAT, A_FLOAT, 0);
-
-/* widget behavior */
-    checkbutton_widgetbehavior.w_getrectfn  = checkbutton_getrect;
-    checkbutton_widgetbehavior.w_displacefn = checkbutton_displace;
-    checkbutton_widgetbehavior.w_selectfn   = checkbutton_select;
-    checkbutton_widgetbehavior.w_activatefn = NULL;
-    checkbutton_widgetbehavior.w_deletefn   = checkbutton_delete;
-    checkbutton_widgetbehavior.w_visfn      = checkbutton_vis;
-    checkbutton_widgetbehavior.w_clickfn    = NULL;
-    class_setwidget(checkbutton_class, &checkbutton_widgetbehavior);
-    class_setsavefn(checkbutton_class, &checkbutton_save);
-}
-
-
diff --git a/externals/tkwidgets/frosch.gif b/externals/tkwidgets/frosch.gif
deleted file mode 100644
index 1c2fd41db38b0483908f5e5cdfac70e6445df1d4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10278
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
VrP~S_veCqclfRID7KH+w{tuMvcb@<N

diff --git a/externals/tkwidgets/photo-help.pd b/externals/tkwidgets/photo-help.pd
deleted file mode 100644
index af85b6496..000000000
--- a/externals/tkwidgets/photo-help.pd
+++ /dev/null
@@ -1,27 +0,0 @@
-#N canvas 140 178 568 628 10;
-#X text 19 18 Incorporate images. This is instantiated with;
-#X msg 86 132 open \$1;
-#X obj 86 88 bng 15 250 50 0 empty empty empty 0 -6 0 10 -4034 -1 -1
-;
-#X obj 86 109 openpanel;
-#X obj 66 555 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1
--1;
-#X msg 265 152 size \$1 \$2;
-#X obj 265 129 pack 0 0;
-#X obj 313 106 hsl 128 15 0 127 0 0 empty empty y 7 7 0 10 -203904
--1 -1 0 1;
-#X obj 263 88 hsl 128 15 0 127 0 0 empty empty x 7 7 0 10 -204800 -1
--1 0 1;
-#X obj 309 337 photo frosch.gif;
-#X obj 101 336 photo volga.gif;
-#X text 19 34 [photo volga.gif];
-#X text 17 57 [photo] works with .gif \, .ppm \, and .pgm image formats
-only.;
-#X connect 1 0 10 0;
-#X connect 2 0 3 0;
-#X connect 3 0 1 0;
-#X connect 5 0 10 0;
-#X connect 6 0 5 0;
-#X connect 7 0 6 1;
-#X connect 8 0 6 0;
-#X connect 10 0 4 0;
diff --git a/externals/tkwidgets/photo.c b/externals/tkwidgets/photo.c
deleted file mode 100644
index 258d101ef..000000000
--- a/externals/tkwidgets/photo.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* [photo] object for dislaying images in a patch
-
-   Copyright (C) 2002-2004 Guenter Geiger
-   Copyright (C) 2007 Hans-Christoph Steiner <hans@at.or.at>
-
-   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., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-   This is part of the tkwidgets library for Pd.
-
-*/
-
-#include "tkwidgets.h"
-
-/* ------------------------ photo ----------------------------- */
-
-static t_class *photo_class;
-
-typedef struct _photo
-{
-    t_object     x_obj;
-    t_glist*     x_glist;
-    t_symbol*    receive_name;
-    int          x_width;
-    int          x_height;
-    t_symbol*    filename;
-} t_photo;
-
-static char *photo_tk_options[] = {
-    "activeimage",
-    "disabledimage",
-    "gamma",
-    "image",
-    "state"
-};
-
-/* widget helper functions */
-
-    void photo_drawme(t_photo *x, t_glist *glist, int firsttime)
-{
-	if (firsttime) 
-    {
-		char fname[MAXPDSTRING];
-		canvas_makefilename(glist_getcanvas(x->x_glist), x->filename->s_name,
-							fname, MAXPDSTRING);
-
-        sys_vgui("image create photo img%x -file {%s}\n", x, fname);
-        sys_vgui(".x%x.c create image %d %d -image img%x -anchor nw -tags %xS\n", 
-                 glist_getcanvas(glist),text_xpix(&x->x_obj, glist), 
-                 text_ypix(&x->x_obj, glist),x,x);
-
-        /* TODO callback from gui
-           sys_vgui("photo_size logo");
-        */
-    }     
-    else 
-    {
-        sys_vgui(".x%x.c coords %xS %d %d\n",
-                 glist_getcanvas(glist), x,
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist));
-    }
-	
-}
-
-
-void photo_erase(t_photo* x,t_glist* glist)
-{
-    int n;
-    sys_vgui(".x%x.c delete %xS\n",
-             glist_getcanvas(glist), x);
-
-}
-	
-
-
-/* ------------------------ photo widgetbehaviour----------------------------- */
-
-
-static void photo_getrect(t_gobj *z, t_glist *glist,
-                          int *xp1, int *yp1, int *xp2, int *yp2)
-{
-    t_photo* x = (t_photo*)z;
-
-    *xp1 = text_xpix(&x->x_obj, glist);
-    *yp1 = text_ypix(&x->x_obj, glist);
-    *xp2 = text_xpix(&x->x_obj, glist) + x->x_width;
-    *yp2 = text_ypix(&x->x_obj, glist) + x->x_height;
-}
-
-static void photo_displace(t_gobj *z, t_glist *glist,
-                           int dx, int dy)
-{
-    t_photo *x = (t_photo *)z;
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n",
-             glist_getcanvas(glist), x,
-             text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-             text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height);
-
-    photo_drawme(x, glist, 0);
-    canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x);
-}
-
-static void photo_select(t_gobj *z, t_glist *glist, int state)
-{
-    t_photo *x = (t_photo *)z;
-    if (state) {
-        sys_vgui(".x%x.c create rectangle \
-%d %d %d %d -tags %xSEL -outline blue\n",
-                 glist_getcanvas(glist),
-                 text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-                 text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height,
-                 x);
-    }
-    else 
-    {
-        sys_vgui(".x%x.c delete %xSEL\n",
-                 glist_getcanvas(glist), x);
-    }
-}
-
-
-static void photo_activate(t_gobj *z, t_glist *glist, int state)
-{
-/*    t_text *x = (t_text *)z;
-      t_rtext *y = glist_findrtext(glist, x);
-      if (z->g_pd != gatom_class) rtext_activate(y, state);*/
-}
-
-static void photo_delete(t_gobj *z, t_glist *glist)
-{
-    t_text *x = (t_text *)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-}
-
-       
-static void photo_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    t_photo* s = (t_photo*)z;
-    if (vis)
-        photo_drawme(s, glist, 1);
-    else
-        photo_erase(s,glist);
-}
-
-/* can we use the normal text save function ?? */
-
-static void photo_save(t_gobj *z, t_binbuf *b)
-{
-    t_photo *x = (t_photo *)z;
-    binbuf_addv(b, "ssiiss;", gensym("#X"), gensym("obj"),
-                x->x_obj.te_xpix, x->x_obj.te_ypix,   
-                atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-                x->filename);
-}
-
-
-void photo_size(t_photo* x,t_floatarg w,t_floatarg h) {
-    x->x_width = w;
-    x->x_height = h;
-}
-
-void photo_open(t_photo* x, t_symbol* fname)
-{
-    x->filename = fname;
-    photo_erase(x, x->x_glist);
-    photo_drawme(x, x->x_glist, 1);
-}
-
-
-static void photo_free(t_photo *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, x->receive_name);
-}
-
-static void *photo_new(t_symbol* s)
-{
-    t_photo *x = (t_photo *)pd_new(photo_class);
-
-    x->x_glist = (t_glist*) canvas_getcurrent();
-
-    x->x_width = 15;
-    x->x_height = 15;
-
-    x->x_glist = canvas_getcurrent();
-
-	x->filename = s;
-    outlet_new(&x->x_obj, &s_float);
-    return (x);
-}
-
-
-static t_widgetbehavior photo_widgetbehavior = {
-w_getrectfn:	photo_getrect,
-w_displacefn:	photo_displace,
-w_selectfn:     photo_select,
-w_activatefn:	photo_activate,
-w_deletefn:	    photo_delete,
-w_visfn:        photo_vis,
-w_clickfn:      NULL,
-};
-
-void photo_setup(void)
-{
-    photo_class = class_new(gensym("photo"), (t_newmethod)photo_new, 
-                            (t_method)photo_free, 
-                            sizeof(t_photo), 0, A_DEFSYM,0);
-    
-    class_addmethod(photo_class, (t_method)photo_size, gensym("size"),
-                    A_FLOAT, A_FLOAT, 0);
-
-/*
-  class_addmethod(photo_class, (t_method)photo_color, gensym("color"),
-  A_SYMBOL, 0);
-*/
-
-    class_addmethod(photo_class, (t_method)photo_open, gensym("open"),
-                    A_SYMBOL, 0);
-	
-    class_setwidget(photo_class, &photo_widgetbehavior);
-    class_setsavefn(photo_class, &photo_save);
-}
-
-
diff --git a/externals/tkwidgets/text-help.pd b/externals/tkwidgets/text-help.pd
deleted file mode 100644
index eed5fae23..000000000
--- a/externals/tkwidgets/text-help.pd
+++ /dev/null
@@ -1,251 +0,0 @@
-#N canvas 245 42 785 704 10;
-#X obj 52 -43 text 130 60 0;
-#X obj 53 -193 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 12 65 print;
-#X msg 78 -197 clear;
-#X msg 107 -157 set one two three four five six;
-#X obj 36 142 text 130 60 0;
-#X obj 231 3 select return;
-#X obj 59 66 pddp/print;
-#X obj 198 -86 trigger bang bang;
-#X msg 198 -65 clear;
-#X symbolatom 196 68 10 0 0 1 last_key_typed - -;
-#X text 235 24 ^-- hit return to output;
-#X msg 118 -134 append seven eight nine;
-#X msg 122 -114 append ten eleven.;
-#X obj 554 -171 text 130 60 0 -autoseparators 1 -background white -borderwidth
-2 -cursor xterm -exportselection 1 -font {Courier 12} -foreground Black
--height 24 -highlightbackground systemWindowBody -highlightcolor Black
--highlightthickness 1 -insertbackground Black -insertborderwidth 0
--insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X obj 581 -213 symbol;
-#X msg 479 -240 flat;
-#X msg 514 -240 groove;
-#X msg 561 -240 raised;
-#X msg 609 -241 ridge;
-#X msg 650 -241 solid;
-#X msg 691 -241 sunken;
-#X obj 653 281 symbol;
-#X obj 557 283 symbol;
-#X msg 540 259 on;
-#X msg 574 258 off;
-#X msg 634 256 normal;
-#X msg 680 256 disabled;
-#X msg 26 110 size 100 50;
-#X text 633 236 disable editing;
-#X obj 582 -34 text 130 60 0;
-#X obj 581 -79 symbol;
-#X obj 597 107 symbol;
-#X msg 539 -104 none;
-#X msg 574 -104 char;
-#X msg 611 -104 word;
-#X text 628 -80 word wrapping;
-#X msg 612 75 purple;
-#X msg 659 75 orange;
-#X msg 707 74 magenta;
-#X obj 452 45 pddp/pddplink http://en.wikipedia.org/wiki/X11_color_names
-;
-#X obj 394 -34 text 130 60 0 -autoseparators 1 -background grey70 -borderwidth
-1 -cursor xterm -exportselection 1 -font {Courier 12} -foreground Black
--height 24 -highlightbackground systemWindowBody -highlightcolor Black
--highlightthickness 1 -insertbackground Black -insertborderwidth 0
--insertofftime 300 -insertontime 600 -insertwidth 0 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X obj 331 -90 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 10 -262144
--1 -1 0 1;
-#X obj 59 330 text 130 60 0 -autoseparators 1 -background grey70 -borderwidth
-1 -cursor gobbler -exportselection 1 -font {Courier 12} -foreground
-Black -height 24 -highlightbackground systemWindowBody -highlightcolor
-Black -highlightthickness 1 -insertbackground Black -insertborderwidth
-0 -insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlight -selectborderwidth
-1 -selectforeground systemHighlightText -setgrid 0 -spacing1 0 -spacing2
-0 -spacing3 0 -state normal -undo 0 -width 80 -wrap char;
-#X obj 58 285 symbol;
-#X obj 46 394 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/cursors.htm
-;
-#X msg 56 250 boat;
-#X msg 16 250 clock;
-#X msg 159 250 gumby;
-#X msg 202 250 gobbler;
-#X obj 404 -212 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 10 -262144
--1 -1 0 1;
-#X obj 470 -90 tgl 15 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0
-1;
-#X msg 109 -80 key a;
-#X msg 150 -80 key 32;
-#X obj 352 259 keyup;
-#X msg 352 298 key \$1;
-#X floatatom 369 280 5 0 0 0 - - -;
-#X msg 249 -41 key 3322;
-#X obj 560 335 text 130 60 0;
-#X obj 352 333 text 130 60 0;
-#X text 347 237 type single chars:;
-#X msg 421 284 key a;
-#X msg 422 306 key 9;
-#X text 201 372 for more cursors:;
-#X text 337 398 for more keynums:;
-#X msg 413 265 key 65228;
-#X msg 91 250 coffee_mug;
-#X msg 59 306 cursor \$1;
-#X msg 401 -192 borderwidth \$1;
-#X msg 582 -192 relief \$1;
-#X msg 582 -58 wrap \$1;
-#X msg 329 -70 insertwidth \$1;
-#X msg 557 305 undo \$1;
-#X msg 652 304 state \$1;
-#X msg 113 110 size 200 100;
-#X msg 577 75 #00f;
-#X text 528 236 turn off undo;
-#X obj 261 157 text 130 60 0 -autoseparators 1 -background grey70 -borderwidth
-1 -cursor xterm -exportselection 1 -font {"Lucida Sans" 18 bold} -foreground
-Black -height 24 -highlightbackground systemWindowBody -highlightcolor
-Black -highlightthickness 1 -insertbackground Black -insertborderwidth
-0 -insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X msg 285 133 font "Lucida Sans" 18 bold;
-#X msg 261 108 font Arial 16;
-#X obj 339 412 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/keysyms.htm
-;
-#X obj 140 -253 pddp/pddplink http://puredata.info/dev/TkWidget -text
-TkWidget library;
-#X text 22 -253 This is part of the;
-#X obj 186 -229 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/text.htm
--text text;
-#X text 37 -229 This object is based on:;
-#X msg 470 -70 scrollbars \$1;
-#X msg 598 128 background \$1;
-#X obj 469 160 text 300 60 0 -autoseparators 1 -background orange -borderwidth
-1 -cursor xterm -exportselection 1 -font {Courier 12} -foreground magenta
--height 24 -highlightbackground systemWindowBody -highlightcolor Black
--highlightthickness 1 -insertbackground Black -insertborderwidth 0
--insertofftime 300 -insertontime 600 -insertwidth 1 -maxundo 0 -padx
-1 -pady 1 -relief sunken -selectbackground systemHighlightSecondary
--selectborderwidth 1 -selectforeground systemHighlightText -setgrid
-0 -spacing1 0 -spacing2 0 -spacing3 0 -state normal -undo 0 -width
-80 -wrap char;
-#X obj 479 107 symbol;
-#X msg 519 74 magenta;
-#X msg 480 128 foreground \$1;
-#X msg 399 75 #ff0;
-#X msg 435 75 grey;
-#X msg 471 75 black;
-#N canvas 410 182 450 300 adding 0;
-#X obj 90 229 text 200 60 0;
-#X text 53 3 You can add text one character at a time using the "key"
-message. It works either with the character itself or the ASCII value
-of the character:;
-#X msg 90 82 key \$1;
-#X obj 94 57 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 0 1;
-#X msg 126 202 key ";
-#X msg 169 202 key a;
-#X msg 215 202 key B;
-#X msg 145 82 key 10;
-#X msg 259 202 key [;
-#X msg 145 102 key 32;
-#X text 198 83 carriage return;
-#X text 198 102 space;
-#X msg 145 163 key 92;
-#X text 199 161 backslash;
-#X msg 145 143 key 59;
-#X text 199 141 semicolon;
-#X msg 145 122 key 44;
-#X text 198 122 comma;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 0 0;
-#X connect 7 0 0 0;
-#X connect 8 0 0 0;
-#X connect 9 0 0 0;
-#X connect 12 0 0 0;
-#X connect 14 0 0 0;
-#X connect 16 0 0 0;
-#X restore 199 -200 pd adding with the key message;
-#X obj 107 -177 loadbang;
-#X connect 0 0 2 0;
-#X connect 0 0 7 0;
-#X connect 0 1 6 0;
-#X connect 0 1 10 0;
-#X connect 1 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 0 0;
-#X connect 6 0 8 0;
-#X connect 8 0 9 0;
-#X connect 8 1 0 0;
-#X connect 9 0 0 0;
-#X connect 12 0 0 0;
-#X connect 13 0 0 0;
-#X connect 15 0 69 0;
-#X connect 16 0 15 0;
-#X connect 17 0 15 0;
-#X connect 18 0 15 0;
-#X connect 19 0 15 0;
-#X connect 20 0 15 0;
-#X connect 21 0 15 0;
-#X connect 22 0 73 0;
-#X connect 23 0 72 0;
-#X connect 24 0 23 0;
-#X connect 25 0 23 0;
-#X connect 26 0 22 0;
-#X connect 27 0 22 0;
-#X connect 28 0 5 0;
-#X connect 31 0 70 0;
-#X connect 32 0 86 0;
-#X connect 33 0 31 0;
-#X connect 34 0 31 0;
-#X connect 35 0 31 0;
-#X connect 37 0 32 0;
-#X connect 38 0 32 0;
-#X connect 39 0 32 0;
-#X connect 42 0 71 0;
-#X connect 44 0 67 0;
-#X connect 46 0 44 0;
-#X connect 47 0 44 0;
-#X connect 48 0 44 0;
-#X connect 49 0 44 0;
-#X connect 50 0 68 0;
-#X connect 51 0 85 0;
-#X connect 52 0 0 0;
-#X connect 53 0 0 0;
-#X connect 54 0 55 0;
-#X connect 54 0 56 0;
-#X connect 55 0 59 0;
-#X connect 57 0 0 0;
-#X connect 61 0 59 0;
-#X connect 62 0 59 0;
-#X connect 65 0 59 0;
-#X connect 66 0 44 0;
-#X connect 67 0 43 0;
-#X connect 68 0 14 0;
-#X connect 69 0 14 0;
-#X connect 70 0 30 0;
-#X connect 71 0 41 0;
-#X connect 72 0 58 0;
-#X connect 73 0 58 0;
-#X connect 74 0 5 0;
-#X connect 75 0 32 0;
-#X connect 78 0 77 0;
-#X connect 79 0 77 0;
-#X connect 85 0 41 0;
-#X connect 86 0 87 0;
-#X connect 88 0 90 0;
-#X connect 89 0 88 0;
-#X connect 90 0 87 0;
-#X connect 91 0 88 0;
-#X connect 92 0 88 0;
-#X connect 93 0 88 0;
-#X connect 95 0 4 0;
diff --git a/externals/tkwidgets/text-test.pd b/externals/tkwidgets/text-test.pd
deleted file mode 100644
index 5926ed9eb..000000000
--- a/externals/tkwidgets/text-test.pd
+++ /dev/null
@@ -1,27 +0,0 @@
-#N canvas 525 280 538 519 10;
-#X obj 169 112 text 227 97 1;
-#X msg 174 40 bang;
-#X msg 289 83 key \$1;
-#X msg 273 48 123;
-#X msg 305 48 124;
-#X msg 335 48 125;
-#X msg 242 49 10;
-#X msg 368 47 92;
-#X obj 177 367 text 200 60 0;
-#X obj 190 283 loadbang;
-#X msg 182 319 set blah blah blah;
-#X msg 425 48 59;
-#X msg 397 47 44;
-#X obj 169 219 pddp/print;
-#X connect 0 0 13 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 2 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 2 0;
-#X connect 7 0 2 0;
-#X connect 9 0 10 0;
-#X connect 10 0 8 0;
-#X connect 11 0 2 0;
-#X connect 12 0 2 0;
diff --git a/externals/tkwidgets/text.c b/externals/tkwidgets/text.c
deleted file mode 100644
index 610d574ad..000000000
--- a/externals/tkwidgets/text.c
+++ /dev/null
@@ -1,783 +0,0 @@
-/* text widget for Pd
-
-  Copyright 2003 Guenter Geiger
-  Copyright 2004 Ben Bogart <ben@ekran.org>
-  Copyright 2007 Hans-Christoph Steiner <hans@at.or.at>
-
-  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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include "tkwidgets.h"
-
-/* TODO: append options messages to options_binbuf if not visible */
-/* TODO: window name "handle1376fc00" already exists in parent */
-/* TODO: figure out window vs. text width/height */
-/* TODO: add x scrollbar */
-/* TODO: make "insert" function based on the text widget "insert" */
-/* TODO: make [key( support chars > 127 */
-
-
-#define TEXT_DEFAULT_COLOR     "grey90"
-#define TEXT_DEFAULT_WIDTH     200
-#define TEXT_DEFAULT_HEIGHT    60
-#define TEXT_MIN_WIDTH         40
-#define TEXT_MIN_HEIGHT        20
-
-#define DEBUG(x)
-//#define DEBUG(x) x
-
-static t_class *textwidget_class;
-static t_widgetbehavior textwidget_widgetbehavior;
-
-typedef struct _textwidget
-{
-    t_object    x_obj;
-    t_canvas*   x_canvas;      /* canvas this widget is currently drawn in */
-    t_glist*    x_glist;       /* glist that owns this widget */
-    t_binbuf*   options_binbuf;/* binbuf to save options state in */
-    t_binbuf*   text_binbuf;   /* store text on copy/paste and [loadbang] set*/
-
-    int         width;
-    int         height;
-    int         have_scrollbars;
-
-    int         x_resizing;
-    int         x_selected;
-    
-    /* IDs for Tk widgets */
-	t_symbol*   tcl_namespace;       
-    t_symbol*   receive_name;  /* name to bind to to receive callbacks */
-	t_symbol*   canvas_id;  
-    t_symbol*   frame_id;       
-	t_symbol*   widget_id;        
-    t_symbol*   scrollbar_id;   
-	t_symbol*   handle_id;      
-	t_symbol*   window_tag;      
-	t_symbol*   iolets_tag;
-	t_symbol*   all_tag;
-    
-    t_outlet*   x_data_outlet;
-    t_outlet*   x_status_outlet;
-} t_textwidget;
-
-static char *textwidget_tk_options[] = {
-    "autoseparators",
-    "background",
-    "borderwidth",
-    "cursor",
-    "exportselection",
-    "font",
-    "foreground",
-    "height",
-    "highlightbackground",
-    "highlightcolor",
-    "highlightthickness",
-    "insertbackground",
-    "insertborderwidth",
-    "insertofftime",
-    "insertontime",
-    "insertwidth",
-    "maxundo",
-    "padx",
-    "pady",
-    "relief",
-    "selectbackground",
-    "selectborderwidth",
-    "selectforeground",
-    "setgrid",
-    "spacing1",
-    "spacing2",
-    "spacing3",
-    "state",
-    "tabs",
-    "takefocus",
-    "undo",
-    "width",
-    "wrap",
-//    "xscrollcommand", /* problematic since it uses the canvas_id, etc. */
-//    "yscrollcommand", /* problematic since it uses the canvas_id, etc. */
-};
-
-
-/* common symbols to preload */
-static t_symbol *backspace_symbol;
-static t_symbol *down_symbol;
-static t_symbol *escape_symbol;
-static t_symbol *id_symbol;
-static t_symbol *left_symbol;
-static t_symbol *query_callback_symbol;
-static t_symbol *return_symbol;
-static t_symbol *right_symbol;
-static t_symbol *scrollbars_symbol;
-static t_symbol *size_symbol;
-static t_symbol *space_symbol;
-static t_symbol *tab_symbol;
-static t_symbol *up_symbol;
-
-/* -------------------- function prototypes --------------------------------- */
-
-static void textwidget_query_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv);
-
-
-/* -------------------- widget helper functions ----------------------------- */
-
-
-static void query_id(t_textwidget *x)
-{
-    t_atom id[2];
-    t_symbol *widget_id = x->widget_id;
-    SETSYMBOL(id, id_symbol);
-    SETSYMBOL(id + 1, widget_id);
-    textwidget_query_callback(x, query_callback_symbol, 2, id);
-}
-
-static void query_scrollbars(t_textwidget *x)
-{
-    t_atom state[2];
-    SETSYMBOL(state, scrollbars_symbol);
-    SETFLOAT(state + 1, (t_float)x->have_scrollbars);
-    textwidget_query_callback(x, query_callback_symbol, 2, state);
-}
-
-static void query_size(t_textwidget *x)
-{
-    t_atom coords[3];
-    SETSYMBOL(coords, size_symbol);
-    SETFLOAT(coords + 1, (t_float)x->width);
-    SETFLOAT(coords + 2, (t_float)x->height);
-    textwidget_query_callback(x, query_callback_symbol, 3, coords);
-}
-
-static void set_tkwidgets_ids(t_textwidget *x, t_canvas *canvas)
-{
-    x->x_canvas = canvas;
-    x->canvas_id = tkwidgets_gen_canvas_id(x->x_canvas);
-    x->frame_id = tkwidgets_gen_frame_id((t_object*)x, x->canvas_id);
-    x->widget_id = tkwidgets_gen_widget_id((t_object*)x, x->frame_id);
-    x->scrollbar_id = tkwidgets_gen_scrollbar_id((t_object*)x, x->frame_id);
-    x->window_tag = tkwidgets_gen_window_tag((t_object*)x, x->frame_id);
-    x->handle_id = tkwidgets_gen_handle_id((t_object *)x, x->canvas_id);
-}
-
-static void create_widget(t_textwidget *x)
-{
-    DEBUG(post("create_widget"););
-
-    sys_vgui("namespace eval %s {} \n", x->tcl_namespace->s_name);
-    
-    /* Seems we have to delete the widget in case it already exists (Provided by Guenter)*/
-    sys_vgui("destroy %s\n", x->frame_id->s_name);
-    sys_vgui("frame %s \n", x->frame_id->s_name);
-    sys_vgui("text %s -bd 1 -highlightbackground grey70 -highlightthickness 1 -bg %s\n",
-             x->widget_id->s_name, TEXT_DEFAULT_COLOR);
-    sys_vgui("pack %s -side left -fill both -expand 1 \n", x->widget_id->s_name);
-    sys_vgui("pack %s -side bottom -fill both -expand 1 \n", x->frame_id->s_name);
-
-    tkwidgets_bind_key_events(x->canvas_id, x->widget_id);
-    tkwidgets_bind_mouse_events(x->canvas_id, x->widget_id);
-    /* bind to KeyRelease events to send out right outlet one key at a time */
-    sys_vgui("bind %s <KeyRelease> {+pd %s keyup %%N \\;} \n", 
-             x->widget_id->s_name, x->receive_name->s_name);
-/* override the standard Pd bindings for these since they cause trouble */
-#ifdef __APPLE__
-    sys_vgui("bind %s <Mod1-a> {%s tag add sel 1.0 end} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-    sys_vgui("bind %s <Mod1-v> {tk_textPaste %s} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-#else
-    sys_vgui("bind %s <Control-a> {%s tag add sel 1.0 end} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-    sys_vgui("bind %s <Control-v> {tk_textPaste %s} \n", 
-             x->widget_id->s_name, x->widget_id->s_name);
-#endif
-}
-
-static void drawme(t_textwidget *x, t_glist *glist)
-{
-    char *buf;
-    int bufsize;
-    DEBUG(post("drawme: firsttime %d canvas %lx glist %lx", x->x_canvas, glist););
-    set_tkwidgets_ids(x,glist_getcanvas(glist));	
-    create_widget(x);	
-    if(x->x_glist == x->x_canvas) // if GOP, don't draw inlets
-        tkwidgets_draw_iolets((t_object*)x, glist, 
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-    if(x->have_scrollbars) 
-        tkwidgets_draw_y_scrollbar(x->widget_id, x->scrollbar_id);
-    sys_vgui("%s create window %d %d -anchor nw -window %s    \
-                  -tags {%s %s} -width %d -height %d \n", x->canvas_id->s_name,
-             text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
-             x->frame_id->s_name, x->window_tag->s_name, x->all_tag->s_name, 
-             x->width, x->height);
-    tkwidgets_restore_options(x->widget_id, x->options_binbuf);
-    binbuf_gettext(x->text_binbuf, &buf, &bufsize);
-    buf[bufsize] = 0; // binbuf_gettext() doesn't terminate the string
-    post("%s insert end {%s}\n", x->widget_id->s_name, buf);
-    sys_vgui("%s insert end {%s}\n", x->widget_id->s_name, buf);
-}     
-
-static void eraseme(t_textwidget* x)
-{
-    DEBUG(post("eraseme: canvas %lx", x->x_canvas););
-    sys_vgui("destroy %s\n", x->frame_id->s_name);
-    sys_vgui("%s delete %s\n", x->canvas_id->s_name, x->all_tag->s_name);
-}
-	
-
-
-/* ------------------------ text widgetbehaviour----------------------------- */
-
-static void textwidget_getrect(t_gobj *z, t_glist *owner, 
-                          int *xp1, int *yp1, int *xp2, int *yp2)
-{
-//    DEBUG(post("textwidget_getrect");); /* this one is very chatty :D */
-    t_textwidget *x = (t_textwidget*)z;
-    *xp1 = text_xpix(&x->x_obj, owner);
-    *yp1 = text_ypix(&x->x_obj, owner);
-    *xp2 = *xp1 + x->width;
-    *yp2 = *yp1 + x->height + 2; // add 2 to give space for outlets
-}
-
-static void textwidget_displace(t_gobj *z, t_glist *glist, int dx, int dy)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    DEBUG(post("textwidget_displace: canvas %lx glist %lx", x->x_canvas, glist););
-    x->x_obj.te_xpix += dx;
-    x->x_obj.te_ypix += dy;
-    if (glist_isvisible(glist))
-    {
-//        set_tkwidgets_ids(x,glist_getcanvas(glist)); /* TODO is this needed here? */
-        sys_vgui("%s move %s %d %d\n", x->canvas_id->s_name, x->all_tag->s_name, dx, dy);
-        sys_vgui("%s move RESIZE %d %d\n", x->canvas_id->s_name, dx, dy);
-        canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
-    }
-    DEBUG(post("displace end"););
-}
-
-static void textwidget_select(t_gobj *z, t_glist *glist, int state)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    DEBUG(post("textwidget_select: canvas %lx glist %lx state %d", x->x_canvas, glist, state););
-    
-    if( (state) && (!x->x_selected))
-    {
-        sys_vgui("set ::%s::bg [%s cget -bg]\n", 
-                 x->tcl_namespace->s_name, x->widget_id->s_name);
-        sys_vgui("%s configure -bg %s -state disabled -cursor $cursor_editmode_nothing\n",
-                 x->widget_id->s_name, TKW_SELECTION_COLOR);
-        x->x_selected = 1;
-    }
-    else if (!state)
-    {
-        sys_vgui("%s configure -bg $::%s::bg -state normal -cursor xterm\n",
-                 x->widget_id->s_name, x->tcl_namespace->s_name);
-        /* activatefn never gets called with 0, so destroy handle here */
-        sys_vgui("destroy %s\n", x->handle_id->s_name);
-        x->x_selected = 0;
-    }
-}
-
-static void textwidget_activate(t_gobj *z, t_glist *glist, int state)
-{
-    DEBUG(post("textwidget_activate"););    
-    t_textwidget *x = (t_textwidget *)z;
- 	int x1, y1, x2, y2;
-
-    if(state)
-    {
-        textwidget_getrect(z, glist, &x1, &y1, &x2, &y2);
-        sys_vgui("canvas %s -width %d -height %d -bg #ddd -bd 0 \
--highlightthickness 3 -highlightcolor {#f00} -cursor bottom_right_corner\n",
-                 x->handle_id->s_name, TKW_HANDLE_WIDTH, TKW_HANDLE_HEIGHT);
-        int handle_x1 = x2 - TKW_HANDLE_WIDTH;
-        int handle_y1 = y2 - (TKW_HANDLE_HEIGHT - TKW_HANDLE_INSET);
-//        int handle_x2 = x2;
-//        int handle_y2 = y2 - TKW_HANDLE_INSET;
-/* no worky, this should draw MAC OS X style lines on the resize handle */
-/*         sys_vgui("%s create line %d %d %d %d -fill black -tags RESIZE_LINES\n",  */
-/*                  x->handle_id->s_name, handle_x2, handle_y1, handle_x1, handle_y2); */
-/* TODO split out the handle and the handle binding into common functions */
-        sys_vgui("%s create window %d %d -anchor nw -width %d -height %d -window %s -tags RESIZE\n",
-                 x->canvas_id->s_name, handle_x1, handle_y1,
-                 TKW_HANDLE_WIDTH, TKW_HANDLE_HEIGHT,
-                 x->handle_id->s_name, x->all_tag->s_name);
-        sys_vgui("raise %s\n", x->handle_id->s_name);
-        sys_vgui("bind %s <Button> {pd [concat %s resize_click 1 \\;]}\n",
-                 x->handle_id->s_name, x->receive_name->s_name);
-        sys_vgui("bind %s <ButtonRelease> {pd [concat %s resize_click 0 \\;]}\n",
-                 x->handle_id->s_name, x->receive_name->s_name);
-        sys_vgui("bind %s <Motion> {pd [concat %s resize_motion %%x %%y \\;]}\n",
-                 x->handle_id->s_name, x->receive_name->s_name);
-    }
-}
-
-static void textwidget_delete(t_gobj *z, t_glist *glist)
-{
-    DEBUG(post("textwidget_delete: glist %lx", glist););    
-    t_text *x = (t_text *)z;
-    canvas_deletelinesfor(glist_getcanvas(glist), x);
-}
-
-       
-static void textwidget_vis(t_gobj *z, t_glist *glist, int vis)
-{
-    t_textwidget *x = (t_textwidget*)z;
-    DEBUG(post("textwidget_vis: vis %d canvas %lx glist %lx", vis, x->x_canvas, glist););
-    if (vis)
-        drawme(x, glist);
-    else 
-        eraseme(x);
-}
-
-/*  the clickfn is only called in run mode and is therefore not useful AFAIK
- *  for this text widget, unless there is something like click to output words
- *  implemented, which is what Max/MSP's textedit does */
-/*
-static int textwidget_click(t_gobj *z, t_glist *glist, int xpix, int ypix, 
-                       int shift, int alt, int dbl, int doit)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    DEBUG(post("textwidget_click x:%d y:%d edit: %d", xpix, ypix, x->x_canvas->gl_edit););
-    return 0;
-}
-*/
-
-static void textwidget_save(t_gobj *z, t_binbuf *b)
-{
-    t_textwidget *x = (t_textwidget *)z;
-    
-    binbuf_addv(b, "ssiisiii", &s__X, gensym("obj"),
-                x->x_obj.te_xpix, x->x_obj.te_ypix, 
-                atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
-                x->width, x->height, x->have_scrollbars);
-    binbuf_addbinbuf(b, x->options_binbuf);
-    binbuf_addv(b, ";");
-}
-
-
-/* -------------------- methods for atoms ----------------------------------- */
-
-/* this function uses the selector as the Tk option and applies the whole
- * message directly to the Tk widget itself using Tk's "configure".  This
- * function is called when "anything" is received. */
-static void textwidget_set_option(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(s != &s_list)
-    {
-        t_binbuf *argument_binbuf = binbuf_new();
-        char *argument_buffer;
-        int buffer_length;
-        
-        binbuf_add(argument_binbuf, argc, argv);
-        binbuf_gettext(argument_binbuf, &argument_buffer, &buffer_length);
-        binbuf_free(argument_binbuf);
-        argument_buffer[buffer_length] = 0;
-        sys_vgui("%s configure -%s {%s} \n", 
-                 x->widget_id->s_name, s->s_name, argument_buffer);
-        tkwidgets_store_options(x->receive_name, x->tcl_namespace, x->widget_id, 
-                                sizeof(textwidget_tk_options)/sizeof(char *), 
-                                (char **)&textwidget_tk_options);
-    }
-}
-
-/* Pass the contents of the text widget onto the textwidget_output_callback
- * fuction above */
-static void textwidget_bang_output(t_textwidget* x)
-{
-    /* With "," and ";" escaping thanks to JMZ */
-    sys_vgui("pd [concat %s output [string map {\",\" \"\\\\,\" \";\" \"\\\\;\"} \
-              [%s get 0.0 end]] \\;]\n", 
-             x->receive_name->s_name, x->widget_id->s_name);
-}
-
-/* -------------------- methods for pd space -------------------------------- */
-
-static void textwidget_append(t_textwidget* x,  t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_append"););
-    int i;
-    t_symbol *tmp_symbol = s; /* <-- this gets rid of the unused variable warning */
-    t_float tmp_float;
-
-    for(i=0; i<argc ; i++)
-    {
-        tmp_symbol = atom_getsymbolarg(i, argc, argv);
-        if(tmp_symbol == &s_)
-        {
-            tmp_float = atom_getfloatarg(i, argc , argv);
-            sys_vgui("lappend ::%s::list %g \n", x->tcl_namespace->s_name, tmp_float );
-        }
-        else 
-        {
-            sys_vgui("lappend ::%s::list %s \n", x->tcl_namespace->s_name, tmp_symbol->s_name );
-        }
-    }
-    sys_vgui("append ::%s::list \" \"\n", x->tcl_namespace->s_name);
-    sys_vgui("%s insert end $::%s::list ; unset ::%s::list \n", 
-               x->widget_id->s_name, x->tcl_namespace->s_name, x->tcl_namespace->s_name );
-    sys_vgui("%s yview end-2char \n", x->widget_id->s_name );
-}
-
-/* Clear the contents of the text widget */
-static void textwidget_clear(t_textwidget* x)
-{
-    sys_vgui("%s delete 0.0 end \n", x->widget_id->s_name);
-}
-
-static void textwidget_key(t_textwidget* x,  t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_key"););
-    t_symbol *tmp_symbol = s; /* <-- this gets rid of the unused variable warning */
-    char charbuf;
-
-    tmp_symbol = atom_getsymbolarg(0, argc, argv);
-    if(tmp_symbol == &s_)
-        charbuf = (t_int) atom_getfloatarg(0, argc , argv);
-    else
-        charbuf = tmp_symbol->s_name[0];
-    if(charbuf < 10)
-    {
-        sys_vgui("%s insert end %d\n", x->widget_id->s_name, charbuf);
-    }
-    else 
-    {
-        switch(charbuf)
-        {
-        case '\\': 
-            sys_vgui("%s insert end \"\\\\\"\n", x->widget_id->s_name); break;
-        case '{': 
-            sys_vgui("%s insert end {\\{}\n", x->widget_id->s_name); break;
-        case '}': 
-            sys_vgui("%s insert end \"}\"\n", x->widget_id->s_name); break;
-        default:
-            sys_vgui("%s insert end {%c}\n", x->widget_id->s_name, charbuf);
-        }
-    }
-    sys_vgui("%s yview end-2char\n", x->widget_id->s_name );
-}
-
-/* Function to reset the contents of the textwidget box */
-static void textwidget_set(t_textwidget* x,  t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_set"););
-
-    if(glist_isvisible(x->x_glist))
-    {
-        textwidget_clear(x);
-        textwidget_append(x, s, argc, argv);
-    }
-    else
-    {
-        binbuf_clear(x->text_binbuf);
-        binbuf_add(x->text_binbuf, argc, argv);
-    }
-}
-
-static void textwidget_options(t_textwidget *x)
-{
-    tkwidgets_list_options(x->x_status_outlet,
-                           sizeof(textwidget_tk_options)/sizeof(char *), 
-                           (char **)&textwidget_tk_options);
-}
-
-static void textwidget_query(t_textwidget *x, t_symbol *s)
-{
-    post("textwidget_query %s", s->s_name);
-    if(s == &s_)
-    {
-        tkwidgets_query_options(x->receive_name, x->widget_id, 
-                                sizeof(textwidget_tk_options)/sizeof(char *), 
-                                textwidget_tk_options);
-        query_id(x);
-        query_scrollbars(x);
-        query_size(x);
-    }
-    else if(s == id_symbol)
-        query_id(x);
-    else if(s == scrollbars_symbol)
-        query_scrollbars(x);
-    else if(s == size_symbol)
-        query_size(x);
-    else
-        tkwidgets_query_options(x->receive_name, x->widget_id, 1, &(s->s_name));
-}
-
-static void textwidget_scrollbars(t_textwidget *x, t_float f)
-{
-    int value = (int) f;
-    if(value > 0)
-    {
-        x->have_scrollbars = 1;
-        tkwidgets_draw_y_scrollbar(x->widget_id, x->scrollbar_id);
-    }
-    else
-    {
-        x->have_scrollbars = 0;
-        tkwidgets_erase_y_scrollbar(x->widget_id, x->scrollbar_id);
-    }
-}
-
-static void textwidget_size(t_textwidget *x, t_float width, t_float height)
-{
-    DEBUG(post("textwidget_size"););
-    x->height = height;
-    x->width = width;
-    if(glist_isvisible(x->x_glist))
-    {
-        sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                 x->canvas_id->s_name, x->window_tag->s_name, x->width, x->height);
-        tkwidgets_erase_iolets(x->canvas_id, x->iolets_tag);
-        tkwidgets_draw_iolets((t_object*)x, x->x_glist, 
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-}
-
-/* -------------------- callback functions ---------------------------------- */
-
-static void textwidget_click_callback(t_textwidget *x, t_floatarg f)
-{
-    if( (x->x_glist->gl_edit) && (x->x_glist == x->x_canvas) )
-    {	
-        textwidget_select((t_gobj *)x, x->x_glist, f);
-    }
-}
-
-static void textwidget_keyup_callback(t_textwidget *x, t_float f)
-{
-/*     DEBUG(post("textwidget_keyup_callback");); */
-    int keycode = (int) f;
-    char buf[10];
-    t_symbol *output_symbol;
-
-    if( (keycode > 32 ) && (keycode < 65288) )
-    {
-        snprintf(buf, 2, "%c", keycode);
-        output_symbol = gensym(buf);
-    } else
-        switch(keycode) /* TODO find a way to make this work with all keysyms */
-        {
-        case 32: /* space */
-            output_symbol = space_symbol;
-            break;
-        case 65293: /* return */
-            output_symbol = return_symbol;
-            break;
-        case 65288: /* backspace */
-            output_symbol = backspace_symbol;
-            break;
-        case 65289: /* tab */
-            output_symbol = tab_symbol;
-            break;
-        case 65307: /* escape */
-            output_symbol = escape_symbol;
-            break;
-        case 65361: /* left */
-            output_symbol = left_symbol;
-            break;
-        case 65363: /* right */
-            output_symbol = right_symbol;
-            break;
-        case 65362: /* up */
-            output_symbol = up_symbol;
-            break;
-        case 65364: /* down */
-            output_symbol = down_symbol;
-            break;
-        default:
-            snprintf(buf, 10, "key_%d", keycode);
-            DEBUG(post("keyup: %d", keycode););
-            output_symbol = gensym(buf);
-        }
-    outlet_symbol(x->x_status_outlet, output_symbol);
-}
-
-static void textwidget_output_callback(t_textwidget* x, t_symbol *s, int argc, t_atom *argv)
-{
-    outlet_list(x->x_data_outlet, s, argc, argv );
-}
-
-static void textwidget_query_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
-{
-    t_symbol *tmp_symbol = atom_getsymbolarg(0, argc, argv);
-    if(tmp_symbol != &s_)
-        outlet_anything(x->x_status_outlet, tmp_symbol, argc - 1, argv + 1);
-    else
-        post("ERROR: textwidget_query_callback %s %d", s->s_name, argc);
-}
-
-static void textwidget_store_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
-{
-    if(s != &s_)
-    {
-        binbuf_clear(x->options_binbuf);
-        binbuf_restore(x->options_binbuf, argc, argv);
-    }
-    else
-        post("ERROR: does this ever happen?");
-}
-
-static void textwidget_resize_click_callback(t_textwidget *x, t_floatarg f)
-{
-    t_canvas *canvas = (glist_isvisible(x->x_glist) ? x->x_canvas : 0);
-    int button_state = (int)f;
-    if(x->x_resizing && !button_state && canvas)
-    {
-        tkwidgets_draw_iolets((t_object*)x, canvas,
-                              x->canvas_id, x->iolets_tag, x->all_tag,
-                              x->width, x->height);
-        canvas_fixlinesfor(x->x_glist, (t_text *)x);  // 2nd inlet
-    }
-    else if(!x->x_resizing && button_state)
-    {
-        tkwidgets_erase_iolets(x->canvas_id, x->iolets_tag);
-    }
-    x->x_resizing = button_state;
-}
-
-static void textwidget_resize_motion_callback(t_textwidget *x, t_floatarg f1, t_floatarg f2)
-{
-    DEBUG(post("textwidget_resize_motion_callback"););
-    if (x->x_resizing)
-    {
-        int dx = (int)f1, dy = (int)f2;
-        if (glist_isvisible(x->x_glist))
-        {
-            x->width += dx;
-            x->height += dy;
-            sys_vgui("%s itemconfigure %s -width %d -height %d\n",
-                     x->canvas_id->s_name, x->window_tag->s_name, 
-                     x->width, x->height);
-            sys_vgui("%s move RESIZE %d %d\n",
-                     x->canvas_id->s_name, dx, dy);
-            canvas_fixlinesfor(x->x_glist, (t_text *)x);
-        }
-    }
-}
-
-/* --------------------------- standard class functions --------------------- */
-
-static void textwidget_free(t_textwidget *x)
-{
-    pd_unbind(&x->x_obj.ob_pd, x->receive_name);
-}
-
-static void *textwidget_new(t_symbol *s, int argc, t_atom *argv)
-{
-    DEBUG(post("textwidget_new"););
-    t_textwidget *x = (t_textwidget *)pd_new(textwidget_class);
-    
-    x->options_binbuf = binbuf_new();
-    x->text_binbuf = binbuf_new();
-
-    x->x_selected = 0;
-    x->x_resizing = 0;
-    x->width = TEXT_DEFAULT_WIDTH;
-    x->height = TEXT_DEFAULT_HEIGHT;
-    x->have_scrollbars = 0;
-
-    if(argc > 0) x->width = atom_getint(argv);
-    if(argc > 1) x->height = atom_getint(argv + 1);
-    if(argc > 2) x->have_scrollbars = atom_getint(argv + 2);
-    if(argc > 3) binbuf_add(x->options_binbuf, argc - 3, argv + 3);
-    
-    x->tcl_namespace = tkwidgets_gen_tcl_namespace((t_object*)x, s);
-    x->receive_name = tkwidgets_gen_callback_name(x->tcl_namespace);
-    pd_bind(&x->x_obj.ob_pd, x->receive_name);
-
-    x->x_glist = canvas_getcurrent();
-//    set_tkwidgets_ids(x, x->x_glist); /* TODO: is this needed here? */
-    x->iolets_tag = tkwidgets_gen_iolets_tag((t_object*)x);
-    x->all_tag = tkwidgets_gen_all_tag((t_object*)x);
-
-    x->x_data_outlet = outlet_new(&x->x_obj, &s_float);
-    x->x_status_outlet = outlet_new(&x->x_obj, &s_symbol);
-
-    return (x);
-}
-
-void text_setup(void) {
-    textwidget_class = class_new(gensym("text"), (t_newmethod)textwidget_new, 
-                                 (t_method)textwidget_free,sizeof(t_textwidget),
-                                 0, A_GIMME, 0);
-
-/* methods for atoms */
-	class_addbang(textwidget_class, (t_method)textwidget_bang_output);
-	class_addanything(textwidget_class, (t_method)textwidget_set_option);
-
-/* methods for pd space */
-	class_addmethod(textwidget_class, (t_method)textwidget_append,
-                    gensym("append"), A_GIMME, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_clear,
-                    gensym("clear"), 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_key,
-                    gensym("key"), A_GIMME, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_options,
-                    gensym("options"), 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_query,
-                    gensym("query"), A_DEFSYMBOL, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_scrollbars,
-                    gensym("scrollbars"), A_DEFFLOAT, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_set,
-                    gensym("set"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_size,
-                    gensym("size"), A_DEFFLOAT, A_DEFFLOAT, 0);
-
-/* callbacks */
-    class_addmethod(textwidget_class, (t_method)textwidget_click_callback,
-                    gensym("click"), A_FLOAT, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_keyup_callback,
-                    gensym("keyup"), A_DEFFLOAT, 0);
-	class_addmethod(textwidget_class, (t_method)textwidget_output_callback,
-                    gensym("output"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_query_callback,
-                    gensym("query_callback"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_store_callback,
-                    gensym("store_callback"), A_GIMME, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_resize_click_callback,
-                    gensym("resize_click"), A_FLOAT, 0);
-    class_addmethod(textwidget_class, (t_method)textwidget_resize_motion_callback,
-                    gensym("resize_motion"), A_FLOAT, A_FLOAT, 0);
-
-/* widget behavior */
-    textwidget_widgetbehavior.w_getrectfn  = textwidget_getrect;
-    textwidget_widgetbehavior.w_displacefn = textwidget_displace;
-    textwidget_widgetbehavior.w_selectfn   = textwidget_select;
-    textwidget_widgetbehavior.w_activatefn = textwidget_activate;
-    textwidget_widgetbehavior.w_deletefn   = textwidget_delete;
-    textwidget_widgetbehavior.w_visfn      = textwidget_vis;
-    textwidget_widgetbehavior.w_clickfn    = NULL;
-    class_setwidget(textwidget_class, &textwidget_widgetbehavior);
-    class_setsavefn(textwidget_class, &textwidget_save);
-
-/* commonly used symbols */
-    backspace_symbol = gensym("backspace");
-	down_symbol = gensym("down");
-	escape_symbol = gensym("escape");
-	id_symbol = gensym("id");
-	left_symbol = gensym("left");
-    query_callback_symbol = gensym("query_callback");
-    return_symbol = gensym("return");
-	right_symbol = gensym("right");
-    size_symbol = gensym("size");
-    scrollbars_symbol = gensym("scrollbars");
-	space_symbol = gensym("space");
-	tab_symbol = gensym("tab");
-	up_symbol = gensym("up");
-}
diff --git a/externals/tkwidgets/tkwidgets-meta.pd b/externals/tkwidgets/tkwidgets-meta.pd
deleted file mode 100644
index efe295c12..000000000
--- a/externals/tkwidgets/tkwidgets-meta.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#N canvas 15 49 200 200 10;
-#N canvas 25 49 420 300 META 1;
-#X text 13 41 NAME tkwidgets;
-#X text 10 25 AUTHOR Hans-Christoph Steiner <hans@eds.org>;
-#X text 10 10 VERSION 0.0;
-#X restore 10 10 pd META;
diff --git a/externals/tkwidgets/tkwidgets.c b/externals/tkwidgets/tkwidgets.c
deleted file mode 100644
index b37e03f57..000000000
--- a/externals/tkwidgets/tkwidgets.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* 
-    Copyright (C) 2007 Free Software Foundation
-    written by Hans-Christoph Steiner <hans@at.or.at>
-
-    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., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    This is the shared library for the tkwidgets library for Pd.
-
-*/
-
-/* TODO apply store logic to query so query doesn't send blank options */
-
-#include "tkwidgets.h"
-#include <stdio.h>
-#include <string.h>
-
-#define DEBUG(x)
-//#define DEBUG(x) x
-
-/* -------------------- options handling ------------------------------------ */
-
-void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, 
-                             int argc, char** argv)
-{
-    int i;
-    for(i = 0; i < argc; i++)
-        sys_vgui("pd [concat %s query_callback %s [%s cget -%s] \\;]\n",
-                 receive_name->s_name, argv[i], widget_id->s_name, argv[i]);
-}
-
-/* this queries the widget for each option listed in the tk_options struct,
- * builts a list in Tcl-space, then send that list to the store_callback */
-void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace,
-                             t_symbol *widget_id, int argc, char **argv)
-{
-    int i;
-    for(i = 0; i < argc; i++)
-    {
-        sys_vgui("set ::%s::tmp [%s cget -%s]\n",
-                 tcl_namespace->s_name, widget_id->s_name, argv[i]);
-        sys_vgui("if {[string length $::%s::tmp] > 0} {\n",
-                 tcl_namespace->s_name);
-        sys_vgui("lappend ::%s::list -%s; lappend ::%s::list $::%s::tmp}\n", 
-                 tcl_namespace->s_name, argv[i], 
-                 tcl_namespace->s_name, tcl_namespace->s_name);
-    }
-    sys_vgui("pd [concat %s store_callback $::%s::list \\;]\n",
-             receive_name->s_name, tcl_namespace->s_name);
-    sys_vgui("unset ::%s::list \n", tcl_namespace->s_name);  
-}
-
-void tkwidgets_restore_options(t_symbol *widget_id, t_binbuf *options_binbuf)
-{
-    int length;
-    char *options;
-    binbuf_gettext(options_binbuf, &options, &length);
-    options[length] = 0; //binbuf_gettext() doesn't put a null, so we do
-    sys_vgui("%s configure %s\n", widget_id->s_name, options);
-}
-
-/* output a list of available options for this widget */ 
-void tkwidgets_list_options(t_outlet *status_outlet, int argc, char** argv)
-{
-    int i;
-    t_binbuf *bb = binbuf_new();
-    for(i = 0; i < argc; ++i)
-    {
-        binbuf_addv(bb, "s", gensym(argv[i]));
-    }
-    outlet_anything(status_outlet, gensym("options"), 
-                    binbuf_getnatom(bb), binbuf_getvec(bb));
-}
-
-
-/* -------------------- generate names for various elements ----------------- */
-
-t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s%lx", widget_name->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_callback_name(t_symbol* tcl_namespace)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"#%s", tcl_namespace->s_name);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_canvas_id(t_canvas* canvas)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,".x%lx.c", (long unsigned int) canvas);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_frame_id(t_object* x, t_symbol* canvas_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.frame%lx", canvas_id->s_name, (long unsigned int)x);
-    return gensym(buf);    
-}
-
-t_symbol* tkwidgets_gen_widget_id(t_object* x, t_symbol* parent_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.widget%lx", parent_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_handle_id(t_object *x, t_symbol* canvas_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.handle%lx", canvas_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_scrollbar_id(t_object *x, t_symbol* frame_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.scrollbar%lx", frame_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_window_tag(t_object* x, t_symbol* canvas_id)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"%s.window%lx", canvas_id->s_name, (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_iolets_tag(t_object* x)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"iolets%lx", (long unsigned int)x);
-    return gensym(buf);
-}
-
-t_symbol* tkwidgets_gen_all_tag(t_object *x)
-{
-    char buf[MAXPDSTRING];
-    sprintf(buf,"all%lx", (long unsigned int)x);
-    return gensym(buf);
-}
-
-/* -------------------- inlets/outlets -------------------------------------- */
- 
-static int calculate_onset(int x_location, int width,
-                           int current_iolet, int total_iolets)
-{
-    DEBUG(post("calculate_onset"););
-    return(x_location + (width - IOWIDTH)                               \
-           * current_iolet / (total_iolets == 1 ? 1 : total_iolets - 1));
-}
-
-/* standard method for drawing inlets and outlets.  Currently, the number of
- * inlets and outlets is set in tkwidgets.h since I think all of the
- * objectclasses will have the same ones.  If that needs to change, then this
- * function can use obj_ninlets() and obj_noutlets() */
-void tkwidgets_draw_iolets(t_object *x, t_glist *glist, t_symbol *canvas_id,
-                           t_symbol *iolets_tag, t_symbol *all_tag,
-                           int width, int height)
-{
-    int i, onset;
-    int x_location = text_xpix(x, glist);
-    int y_location = text_ypix(x, glist);
-
-/* TODO: make inlets draw on top of widget */
-    for (i = 0; i < TOTAL_INLETS; i++)  /* inlets */
-    {
-        onset = calculate_onset(x_location, width, i, TOTAL_INLETS);
-        sys_vgui("%s create rectangle %d %d %d %d -tags {%s %s}\n",
-                 canvas_id->s_name, onset, y_location - 2,
-                 onset + IOWIDTH, y_location,
-                 iolets_tag->s_name, all_tag->s_name);
-        sys_vgui("%s raise %s\n", canvas_id->s_name, iolets_tag->s_name);
-    }
-    for (i = 0; i < TOTAL_OUTLETS; i++) /* outlets */
-    {
-        onset = calculate_onset(x_location, width, i, TOTAL_OUTLETS);
-        sys_vgui("%s create rectangle %d %d %d %d -tags {%s %s}\n",
-                 canvas_id->s_name, onset, y_location + height,
-                 onset + IOWIDTH, y_location + height + 2,
-                 iolets_tag->s_name, all_tag->s_name);
-        sys_vgui("%s raise %s\n", canvas_id->s_name, iolets_tag->s_name);
-    }
-}
-
-void tkwidgets_erase_iolets(t_symbol* canvas_id, t_symbol* iolets_tag)
-{
-    sys_vgui("%s delete %s\n", canvas_id->s_name, iolets_tag->s_name); 
-}
-
-/* -------------------- scrollbars ------------------------------------------ */
-
-void tkwidgets_draw_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id)
-{
-    sys_vgui("scrollbar %s -orient vertical -command {%s yview}\n",
-             scrollbar_id->s_name, widget_id->s_name);
-    sys_vgui("pack %s -side right -fill y -before %s \n",
-             scrollbar_id->s_name, widget_id->s_name);
-    sys_vgui("%s configure -yscrollcommand {%s set}\n",
-             widget_id->s_name, scrollbar_id->s_name);
-}
-
-void tkwidgets_erase_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id)
-{
-    sys_vgui("%s configure -yscrollcommand {}\n", widget_id->s_name);
-    sys_vgui("pack forget %s \n", scrollbar_id->s_name);
-    sys_vgui("destroy %s \n", scrollbar_id->s_name);
-}
-
-/* -------------------- bind to keys and mouse events ----------------------- */
-
-void tkwidgets_bind_key_events(t_symbol *canvas_id, t_symbol *widget_id)
-{
-#ifdef __APPLE__
-    sys_vgui("bind %s <Mod1-Key> {pdtk_canvas_ctrlkey %s %%K 0}\n",
-             widget_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Mod1-Shift-Key> {pdtk_canvas_ctrlkey %s %%K 1}\n",
-             widget_id->s_name, canvas_id->s_name);
-#else
-    sys_vgui("bind %s <Control-Key> {pdtk_canvas_ctrlkey %s %%K 0}\n",
-             widget_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Control-Shift-Key> {pdtk_canvas_ctrlkey %s %%K 1}\n",
-             widget_id->s_name, canvas_id->s_name);
-#endif
-}
-
-void tkwidgets_bind_mouse_events(t_symbol *canvas_id, t_symbol *widget_id)
-{
-    /* mouse buttons */
-    sys_vgui("bind %s <Button> {pdtk_canvas_sendclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b 0}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <ButtonRelease> {pdtk_canvas_mouseup %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Shift-Button> {pdtk_canvas_click %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b 1}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Button-2> {pdtk_canvas_rightclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Button-3> {pdtk_canvas_rightclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    sys_vgui("bind %s <Control-Button> {pdtk_canvas_rightclick %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] %%b}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-    /* mouse motion */
-    sys_vgui("bind %s <Motion> {pdtk_canvas_motion %s \
-[expr %%X - [winfo rootx %s]] [expr %%Y - [winfo rooty %s]] 0}\n",
-             widget_id->s_name, canvas_id->s_name, 
-             canvas_id->s_name, canvas_id->s_name);
-}
-
-/* -------------------- gui elements for resizing --------------------------- */
-
-void tkwidgets_draw_handle()
-{
-    // TODO draw resize handle when selected in editmode
-}
-
-void tkwidgets_draw_resize_window()
-{
-    // TODO draw the resize window while resizing
-}
diff --git a/externals/tkwidgets/tkwidgets.h b/externals/tkwidgets/tkwidgets.h
deleted file mode 100644
index e234ccd39..000000000
--- a/externals/tkwidgets/tkwidgets.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* 
-    Copyright (C) 2007 Free Software Foundation
-    written by Hans-Christoph Steiner <hans@at.or.at>
-
-    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., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    This is the shared library for the tkwidgets library for Pd.
-
-*/
-
-#ifndef __TKWIDGETS_H
-#define __TKWIDGETS_H
-
-#include "m_pd.h"
-#include "m_imp.h"
-#include "g_canvas.h"
-
-/* I don't know what these do, but they seem to be everywhere */
-#ifdef _MSC_VER
-#pragma warning( disable : 4244 )
-#pragma warning( disable : 4305 )
-#endif
-
-/* so far, all of the tkwidgets objects have the same inlets/outlets */
-#define TOTAL_INLETS            1
-#define TOTAL_OUTLETS           2
-
-#define TKW_SELECTION_COLOR     "#bdbddd"
-
-/* size and offset for the resizing handle */
-#define TKW_HANDLE_HEIGHT       15
-#define TKW_HANDLE_WIDTH        15
-#define TKW_HANDLE_INSET        -2
-
-/* sketch for a common struct */
-typedef struct _tkwidgets
-{
-    t_canvas* canvas;        /* canvas/glist this widget is currently drawn in*/
-    t_glist*  glist;         /* glist that owns this widget */
-    t_binbuf* options_binbuf;/* binbuf to save options state in */
-    t_symbol* receive_name;  /* name to bind to, to receive callbacks */
-    t_symbol* tcl_namespace; /* namespace to prevent name collisions */
-    t_symbol* canvas_id;     /* the canvas that is showing this widget */
-    t_symbol* frame_id;      /* the frame around the widget and supporters */
-    t_symbol* window_tag;     /* the window that contains the widget */
-    t_symbol* widget_id;     /* the core widget */
-    t_symbol* handle_id;     /* the resizing handle */
-    t_symbol* all_tag;       /* the tag for moving/deleting everything */
-    int       resizing;      /* flag to tell when being resized */
-    int       selected;      /* flag for when widget is selected */
-} t_tkwidgets;   
-
-/* handle options */
-void tkwidgets_store_options(t_symbol *receive_name, t_symbol *tcl_namespace,
-                             t_symbol *widget_id, int argc, char **argv);
-void tkwidgets_restore_options(t_symbol *widget_id, t_binbuf *options_binbuf);
-void tkwidgets_query_options(t_symbol *receive_name, t_symbol *widget_id, 
-                             int argc, char** argv);
-void tkwidgets_list_options(t_outlet *status_outlet, int argc, char** argv);
-
-/* generate ID and tag names for using in Tcl/Tk space */
-t_symbol* tkwidgets_gen_tcl_namespace(t_object* x, t_symbol* widget_name);
-t_symbol* tkwidgets_gen_callback_name(t_symbol* tcl_namespace);
-t_symbol* tkwidgets_gen_canvas_id(t_canvas* canvas);
-t_symbol* tkwidgets_gen_frame_id(t_object* x, t_symbol* canvas_id);
-t_symbol* tkwidgets_gen_widget_id(t_object* x, t_symbol* parent_id);
-t_symbol* tkwidgets_gen_handle_id(t_object *x, t_symbol* canvas_id);
-t_symbol* tkwidgets_gen_scrollbar_id(t_object *x, t_symbol* frame_id);
-t_symbol* tkwidgets_gen_window_tag(t_object* x, t_symbol* canvas_id);
-t_symbol* tkwidgets_gen_iolets_tag(t_object* x);
-t_symbol* tkwidgets_gen_all_tag(t_object *x);
-
-
-// TODO perhaps I should try to use glist_drawiofor() from g_text.c
-void tkwidgets_draw_iolets(t_object *x, t_glist *glist, t_symbol *canvas_id,
-                           t_symbol *iolets_tag, t_symbol *all_tag,
-                           int width, int height);
-void tkwidgets_erase_iolets(t_symbol* canvas_id, t_symbol* iolets_tag);
-void tkwidgets_draw_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id);
-void tkwidgets_erase_y_scrollbar(t_symbol *widget_id, t_symbol *scrollbar_id);
-
-void tkwidgets_draw_handle(); // TODO draw resize handle when selected in editmode
-void tkwidgets_draw_resize_window(); // TODO draw the resize window while resizing
-
-/* selection */
-
-
-
-/* bind this widget to Cmd/Ctrl keys and mouse events to support things like
- * then standard keys and right-click to bring up the Properties/Open/Help
- * menu when the Tk widgets have focus */
-void tkwidgets_bind_key_events(t_symbol *canvas_id, t_symbol *widget_id);
-void tkwidgets_bind_mouse_events(t_symbol *canvas_id, t_symbol *widget_id);
-
-
-
-#endif /* NOT __TK_WIDGETS_H */
diff --git a/externals/tkwidgets/volga.gif b/externals/tkwidgets/volga.gif
deleted file mode 100644
index e5fc301db9f0cc018bad8bbe125ce159c04c3618..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14645
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

-- 
GitLab