From 70f92eeaa16426f888e59e8273ed580ebe849d38 Mon Sep 17 00:00:00 2001 From: Jimmy Huang Date: Fri, 31 Aug 2012 14:12:33 -0700 Subject: [PATCH] Initial import to Gerrit. Signed-off-by: Jimmy Huang --- ACKNOWLEDGMENTS | 83 + COPYING | 103 + INSTALL | 454 ++ Makefile | 85 + NEWS | 219 + README | 54 + bin/Makefile | 57 + bin/VCLocalRules | 4 + config.guess | 1327 +++ config.sub | 1450 ++++ config/Makefile | 48 + config/common_make_rules | 67 + config/config.in | 76 + config/make_system.mak | 44 + config/modules/Makefile | 50 + config/modules/debugging.mak | 50 + config/modules/descriptions | 14 + config/modules/dmalloc.mak | 54 + config/modules/editline.mak | 52 + config/modules/efence.mak | 46 + config/modules/esd_audio.mak | 49 + config/modules/freebsd16_audio.mak | 46 + config/modules/irix_audio.mak | 46 + config/modules/linux16_audio.mak | 57 + config/modules/macosx_audio.mak | 16 + config/modules/mplayer_audio.mak | 46 + config/modules/nas_audio.mak | 49 + config/modules/native_audio.mak | 45 + config/modules/ols.mak | 46 + config/modules/psola_tm.mak | 47 + config/modules/scfg.mak | 43 + config/modules/siod.mak | 44 + config/modules/sun16_audio.mak | 46 + config/modules/tcl.mak | 49 + config/modules/wagon.mak | 46 + config/modules/wfst.mak | 44 + config/modules/win32_audio.mak | 46 + config/project.mak | 118 + config/project_config_check.mak | 41 + config/system.sh | 115 + config/systems/DebianGNULinux.mak | 41 + config/systems/Linux.mak | 63 + config/systems/Makefile | 107 + config/systems/RedHatLinux.mak | 42 + config/systems/alpha_Linux.mak | 45 + config/systems/alpha_OSF1V4.0.mak | 48 + config/systems/alpha_RedHatLinux.mak | 48 + config/systems/default.mak | 144 + config/systems/hp9000_HP-UX.mak | 62 + config/systems/hp9000_HP-UXB.10.mak | 41 + config/systems/ip_IRIX.mak | 53 + config/systems/ip_IRIX5.3.mak | 46 + config/systems/ip_IRIX6.3.mak | 44 + config/systems/ip_IRIX6.4.mak | 44 + config/systems/ip_IRIX646.4.mak | 44 + config/systems/ix86_CYGWIN1.0.mak | 47 + config/systems/ix86_CYGWIN1.1.mak | 47 + config/systems/ix86_CYGWIN1.3.mak | 47 + config/systems/ix86_CYGWIN1.4.mak | 44 + config/systems/ix86_CYGWIN1.5.mak | 44 + config/systems/ix86_CYGWIN1.7.mak | 44 + config/systems/ix86_CYGWIN20.1.mak | 47 + config/systems/ix86_CYGWIN32.mak | 61 + config/systems/ix86_CYGWIN324.0.mak | 44 + config/systems/ix86_Darwin.mak | 41 + config/systems/ix86_FreeBSD.mak | 60 + config/systems/ix86_FreeBSD2.1.mak | 47 + config/systems/ix86_FreeBSD2.2.mak | 47 + config/systems/ix86_FreeBSD3.0.mak | 53 + config/systems/ix86_FreeBSD3.1.mak | 55 + config/systems/ix86_FreeBSD3.2.mak | 46 + config/systems/ix86_FreeBSD3.3.mak | 46 + config/systems/ix86_FreeBSD4.0.mak | 48 + config/systems/ix86_OS22.mak | 67 + config/systems/ix86_RedHatLinux4.0.mak | 46 + config/systems/ix86_RedHatLinux4.1.mak | 46 + config/systems/ix86_RedHatLinux4.2.mak | 46 + config/systems/ix86_RedHatLinux5.0.mak | 46 + config/systems/ix86_RedHatLinux5.1.mak | 47 + config/systems/ix86_RedHatLinux5.2.mak | 46 + config/systems/ix86_RedHatLinux6.0.mak | 53 + config/systems/ix86_RedHatLinux6.1.mak | 54 + config/systems/ix86_RedHatLinux6.2.mak | 41 + config/systems/ix86_RedHatLinux7.0.mak | 43 + config/systems/ix86_SunOS5.5.mak | 43 + config/systems/ix86_SunOS5.6.mak | 43 + config/systems/ix86_SunOS5.7.mak | 43 + config/systems/ix86_SunOS5.8.mak | 41 + config/systems/ix86_SunOS5.mak | 57 + config/systems/power_macintosh_Darwin.mak | 55 + config/systems/rs6000_AIX4.1.mak | 42 + config/systems/sparc_SunOS4.1.mak | 44 + config/systems/sparc_SunOS4.mak | 46 + config/systems/sparc_SunOS5.5.mak | 46 + config/systems/sparc_SunOS5.6.mak | 44 + config/systems/sparc_SunOS5.7.mak | 41 + config/systems/sparc_SunOS5.8.mak | 41 + config/systems/sparc_SunOS5.mak | 65 + config/systems/unknown_DebianGNULinux.mak | 41 + config/systems/unknown_Linux.mak | 40 + config/systems/unknown_RedHatLinux.mak | 42 + config/systems/unknown_unknown.mak | 54 + config/systems/x86_64_Darwin.mak | 41 + config/test_make_rules | 113 + config/vc_common_make_rules | 71 + config/vc_config_make_rules-dist | 37 + configure | 1286 +++ configure.in | 45 + doc/Makefile | 114 + doc/banner.inc | 14 + doc/classHeader.inc | 14 + doc/cstr.gif | Bin 0 -> 724 bytes doc/edcrest.gif | Bin 0 -> 3659 bytes doc/est.jpg | Bin 0 -> 4398 bytes doc/est_small.jpg | Bin 0 -> 1999 bytes doc/festival.head | 25 + doc/festival.jpg | Bin 0 -> 9001 bytes doc/festival.tail | 25 + doc/festival.texi | 8576 ++++++++++++++++++++ doc/festival_client.head | 23 + doc/festival_client.tail | 17 + doc/festival_small.jpg | Bin 0 -> 3504 bytes doc/festival_tiny.jpg | Bin 0 -> 2223 bytes doc/hierHeader.inc | 19 + doc/indexHeader.inc | 20 + doc/refcard.tex | 321 + examples/Makefile | 72 + examples/addr-mode.scm | 361 + examples/apml.dtd | 31 + examples/benchmark | 86 + examples/benchmark.text | 132 + examples/dumpfeats.sh | 198 + examples/durmeanstd.sh | 212 + examples/ex1.email | 34 + examples/ex1.ogi | 17 + examples/example.apml | 114 + examples/example.sable | 63 + examples/example.th | 4 + examples/example2.sable | 38 + examples/festival_client.c | 451 + examples/festival_client.h | 90 + examples/festival_client.pl | 164 + examples/intro.text | 4 + examples/latest.sh | 115 + examples/make_utts.sh | 558 ++ examples/powmeanstd.sh | 178 + examples/run-festival-script.sh | 47 + examples/saytime.sh | 158 + examples/scfg_parse_text.sh | 147 + examples/songs/Makefile | 44 + examples/songs/america1.xml | 16 + examples/songs/america2.xml | 16 + examples/songs/america3.xml | 16 + examples/songs/america4.xml | 16 + examples/songs/daisy.xml | 49 + examples/songs/doremi.xml | 14 + examples/songs/lochlomond.xml | 47 + examples/songs/spice1.xml | 29 + examples/songs/spice2.xml | 31 + examples/songs/spice3.xml | 29 + examples/songs/spice4.xml | 29 + examples/speech_pm_1.0.tar | Bin 0 -> 51202 bytes examples/spintro.text | 4 + examples/text2pos.sh | 83 + examples/text2wave.sh | 176 + examples/th-mode.scm | 180 + examples/tobi.stml | 28 + examples/toksearch.scm | 109 + examples/webdemo.scm | 103 + festival-2.1-release.tar.gz | Bin 0 -> 787313 bytes install-sh | 251 + lib/Makefile | 107 + lib/Sable.v0_2.dtd | 137 + lib/Singing.v0_1.dtd | 34 + lib/VCLocalRules | 8 + lib/apml.scm | 547 ++ lib/apml_f2bf0lr.scm | 530 ++ lib/apml_kaldurtreeZ.scm | 996 +++ lib/cart_aux.scm | 183 + lib/clunits.scm | 287 + lib/clunits_build.scm | 465 ++ lib/cmusphinx2_phones.scm | 119 + lib/cslush.scm | 79 + lib/darpa_phones.scm | 115 + lib/display.scm | 69 + lib/duration.scm | 196 + lib/email-mode.scm | 89 + lib/engmorph.scm | 151 + lib/engmorphsyn.scm | 170 + lib/etc/Makefile | 45 + lib/etc/email_filter | 47 + lib/f2bdurtreeZ.scm | 869 ++ lib/f2bf0lr.scm | 314 + lib/festdoc.scm | 178 + lib/festival.el | 282 + lib/festival.scm | 633 ++ lib/festtest.scm | 72 + lib/gswdurtreeZ.scm | 947 +++ lib/holmes_phones.scm | 118 + lib/hts.scm | 522 ++ lib/init.scm | 157 + lib/intonation.scm | 187 + lib/java.scm | 39 + lib/klatt_durs.scm | 85 + lib/languages.scm | 120 + lib/lexicons.scm | 274 + lib/lts.scm | 212 + lib/lts_build.scm | 723 ++ lib/mbrola.scm | 103 + lib/mettree.scm | 88 + lib/module_description.scm | 117 + lib/mrpa_allophones.scm | 111 + lib/mrpa_durs.scm | 136 + lib/mrpa_phones.scm | 114 + lib/multisyn/Makefile | 46 + lib/multisyn/multisyn.scm | 195 + lib/multisyn/multisyn_pauses.scm | 102 + lib/multisyn/radio_phones_multisyn.scm | 136 + lib/multisyn/send_xwaves.scm | 318 + lib/multisyn/target_cost.scm | 410 + lib/ogimarkup-mode.scm | 191 + lib/pauses.scm | 242 + lib/phoneset.scm | 134 + lib/phrase.scm | 171 + lib/pos.scm | 225 + lib/postlex.scm | 587 ++ lib/radio_phones.scm | 122 + lib/sable-latin.ent | 171 + lib/sable-mode.scm | 560 ++ lib/scfg.scm | 62 + lib/scfg_wsj_wp20.gram | 523 ++ lib/sec.B.hept.ngrambin | Bin 0 -> 545 bytes lib/sec.ts20.quad.ngrambin | Bin 0 -> 34376 bytes lib/singing-mode.scm | 671 ++ lib/siteinit.scm | 57 + lib/soleml-mode.scm | 336 + lib/speech.properties | 2 + lib/synthesis.scm | 443 + lib/tilt.scm | 972 +++ lib/tobi.scm | 338 + lib/tobi_rules.scm | 1002 +++ lib/token.scm | 639 ++ lib/tokenpos.scm | 265 + lib/tts.scm | 304 + lib/unilex_phones.scm | 189 + lib/voices.scm | 360 + missing | 190 + mkinstalldirs | 40 + packaging/festival-1.95-audsp.patch | 11 + packaging/festival-1.95-examples.patch | 12 + packaging/festival-1.95-libdir.patch | 10 + packaging/festival-1.96-chroot.patch | 111 + .../festival-no-LD_LIBRARY_PATH-extension.patch | 69 + packaging/festival-safe-temp-file.patch | 27 + packaging/festival-text2wave-manpage.patch | 122 + packaging/festival-use-pacat.patch | 14 + packaging/festival.changes | 3 + packaging/festival.spec | 155 + packaging/festlex_CMU.tar.gz | Bin 0 -> 1925748 bytes packaging/festlex_POSLEX.tar.gz | Bin 0 -> 243656 bytes packaging/festvox_kallpc16k.tar.gz | Bin 0 -> 4101857 bytes packaging/rcfestival | 125 + packaging/speech_tools-1.2.95-config.patch | 11 + packaging/speech_tools-2.1-release.tar.gz | Bin 0 -> 1681999 bytes packaging/speech_tools-gcc47.patch | 89 + ...speech_tools-no-LD_LIBRARY_PATH-extension.patch | 69 + packaging/speech_tools-undefined-operation.patch | 12 + packaging/sysconfig.festival | 27 + src/Makefile | 54 + src/arch/Makefile | 49 + src/arch/festival/Makefile | 67 + src/arch/festival/ModuleDescription.cc | 153 + src/arch/festival/Phone.cc | 675 ++ src/arch/festival/audspio.cc | 261 + src/arch/festival/client.cc | 100 + src/arch/festival/features.cc | 467 ++ src/arch/festival/festival.cc | 588 ++ src/arch/festival/festivalP.h | 62 + src/arch/festival/linreg.cc | 88 + src/arch/festival/ngram.cc | 128 + src/arch/festival/server.cc | 298 + src/arch/festival/tcl.cc | 127 + src/arch/festival/utterance.cc | 1041 +++ src/arch/festival/viterbi.cc | 232 + src/arch/festival/wagon_interp.cc | 184 + src/arch/festival/wave.cc | 704 ++ src/arch/festival/web.cc | 219 + src/arch/festival/wfst.cc | 150 + src/include/Makefile | 42 + src/include/ModuleDescription.h | 148 + src/include/Phone.h | 147 + src/include/festival.h | 167 + src/include/fngram.h | 46 + src/include/intonation.h | 51 + src/include/lexicon.h | 130 + src/include/module_support.h | 108 + src/include/modules.h | 57 + src/include/text.h | 68 + src/lib/Makefile | 40 + src/main/Makefile | 72 + src/main/audsp.cc | 472 ++ src/main/festival_client.cc | 482 ++ src/main/festival_main.cc | 259 + src/modules/Duration/Klatt.cc | 428 + src/modules/Duration/Makefile | 53 + src/modules/Duration/dur_aux.cc | 130 + src/modules/Duration/duration.cc | 179 + src/modules/Duration/durationP.h | 55 + src/modules/Intonation/Makefile | 53 + src/modules/Intonation/duffint.cc | 120 + src/modules/Intonation/gen_int.cc | 131 + src/modules/Intonation/int_aux.cc | 232 + src/modules/Intonation/int_tree.cc | 420 + src/modules/Intonation/simple.cc | 144 + src/modules/Lexicon/Makefile | 53 + src/modules/Lexicon/complex.cc | 221 + src/modules/Lexicon/lex_aux.cc | 193 + src/modules/Lexicon/lex_ff.cc | 306 + src/modules/Lexicon/lexicon.cc | 797 ++ src/modules/Lexicon/lexiconP.h | 48 + src/modules/Lexicon/lts.cc | 105 + src/modules/Lexicon/lts.h | 52 + src/modules/Lexicon/lts_rules.cc | 438 + src/modules/Makefile | 107 + src/modules/MultiSyn/DiphoneBackoff.cc | 256 + src/modules/MultiSyn/DiphoneBackoff.h | 74 + src/modules/MultiSyn/DiphoneUnitVoice.cc | 900 ++ src/modules/MultiSyn/DiphoneUnitVoice.h | 226 + src/modules/MultiSyn/DiphoneVoiceModule.cc | 640 ++ src/modules/MultiSyn/DiphoneVoiceModule.h | 196 + src/modules/MultiSyn/EST_DiphoneCoverage.cc | 170 + src/modules/MultiSyn/EST_DiphoneCoverage.h | 68 + src/modules/MultiSyn/EST_FlatTargetCost.cc | 559 ++ src/modules/MultiSyn/EST_FlatTargetCost.h | 131 + src/modules/MultiSyn/EST_JoinCost.cc | 80 + src/modules/MultiSyn/EST_JoinCost.h | 277 + src/modules/MultiSyn/EST_JoinCostCache.cc | 168 + src/modules/MultiSyn/EST_JoinCostCache.h | 100 + src/modules/MultiSyn/EST_TargetCost.cc | 762 ++ src/modules/MultiSyn/EST_TargetCost.h | 188 + src/modules/MultiSyn/Makefile | 78 + src/modules/MultiSyn/TargetCostRescoring.cc | 121 + src/modules/MultiSyn/TargetCostRescoring.h | 107 + src/modules/MultiSyn/UnitSelection.cc | 812 ++ src/modules/MultiSyn/UnitSelection.h | 59 + src/modules/MultiSyn/VoiceBase.cc | 51 + src/modules/MultiSyn/VoiceBase.h | 103 + src/modules/MultiSyn/VoiceModuleBase.cc | 49 + src/modules/MultiSyn/VoiceModuleBase.h | 94 + src/modules/MultiSyn/inst_tmpl/Makefile | 63 + .../MultiSyn/inst_tmpl/hash_itemp_tcdatap_t.cc | 59 + .../MultiSyn/inst_tmpl/hash_s_itemlistp_t.cc | 60 + src/modules/MultiSyn/inst_tmpl/list_itemp_t.cc | 60 + src/modules/MultiSyn/inst_tmpl/list_scorepair_t.cc | 53 + src/modules/MultiSyn/inst_tmpl/list_strlist_t.cc | 51 + src/modules/MultiSyn/inst_tmpl/list_uttp_t.cc | 60 + .../MultiSyn/inst_tmpl/list_voicemodulep_t.cc | 59 + src/modules/MultiSyn/inst_tmpl/vector_jccp_t.cc | 60 + src/modules/MultiSyn/safety.h | 57 + src/modules/Text/Makefile | 51 + src/modules/Text/text.cc | 300 + src/modules/Text/text_aux.cc | 60 + src/modules/Text/text_modes.cc | 159 + src/modules/Text/tok_ext.cc | 166 + src/modules/Text/token.cc | 674 ++ src/modules/Text/tokenP.h | 45 + src/modules/Text/token_pos.cc | 73 + src/modules/Text/xxml.cc | 293 + src/modules/UniSyn/Makefile | 54 + src/modules/UniSyn/UniSyn.cc | 379 + src/modules/UniSyn/UniSyn.h | 403 + src/modules/UniSyn/ps_synthesis.cc | 302 + src/modules/UniSyn/us_features.cc | 285 + src/modules/UniSyn/us_features.h | 68 + src/modules/UniSyn/us_mapping.cc | 856 ++ src/modules/UniSyn/us_prosody.cc | 541 ++ src/modules/UniSyn/us_synthesis.h | 132 + src/modules/UniSyn/us_unit.cc | 631 ++ src/modules/UniSyn_diphone/Makefile | 51 + src/modules/UniSyn_diphone/UniSyn_diphone.cc | 200 + src/modules/UniSyn_diphone/us_diphone.h | 97 + src/modules/UniSyn_diphone/us_diphone_index.cc | 605 ++ src/modules/UniSyn_diphone/us_diphone_unit.cc | 278 + src/modules/UniSyn_phonology/Makefile | 56 + src/modules/UniSyn_phonology/UniSyn_build.cc | 987 +++ src/modules/UniSyn_phonology/UniSyn_phonology.cc | 653 ++ src/modules/UniSyn_phonology/mettree.cc | 1338 +++ src/modules/UniSyn_phonology/subword.cc | 216 + src/modules/UniSyn_phonology/syllabify.cc | 666 ++ src/modules/UniSyn_phonology/unisyn_phonology.mak | 50 + src/modules/UniSyn_phonology/unisyn_tilt.cc | 79 + src/modules/UniSyn_phonology/us_aux.cc | 136 + src/modules/UniSyn_phonology/us_duration.cc | 210 + src/modules/UniSyn_phonology/us_duration.h | 61 + src/modules/VCLocalRules | 6 + src/modules/base/Makefile | 51 + src/modules/base/ff.cc | 998 +++ src/modules/base/module_support.cc | 192 + src/modules/base/modules.cc | 226 + src/modules/base/parameters.cc | 126 + src/modules/base/phrasify.cc | 692 ++ src/modules/base/phrinfo.cc | 120 + src/modules/base/pos.cc | 213 + src/modules/base/postlex.cc | 123 + src/modules/base/word.cc | 270 + src/modules/clunits/Makefile | 71 + src/modules/clunits/acost.cc | 380 + src/modules/clunits/acost.scm | 58 + src/modules/clunits/cldb.cc | 421 + src/modules/clunits/cljoin.cc | 204 + src/modules/clunits/clunits.cc | 816 ++ src/modules/clunits/clunits.h | 111 + src/modules/clustergen/Makefile | 67 + src/modules/clustergen/clustergen.cc | 68 + src/modules/clustergen/me_mlsa.cc | 1355 ++++ src/modules/clustergen/mlsa_resynthesis.cc | 942 +++ src/modules/clustergen/mlsa_resynthesis.h | 129 + src/modules/clustergen/simple_mlpg.cc | 1007 +++ src/modules/clustergen/simple_mlpg.h | 204 + src/modules/clustergen/vc.cc | 276 + src/modules/clustergen/vc.h | 101 + src/modules/diphone/Makefile | 58 + src/modules/diphone/di_io.cc | 1097 +++ src/modules/diphone/di_pitch.cc | 117 + src/modules/diphone/di_psola.cc | 74 + src/modules/diphone/di_reslpc.cc | 466 ++ src/modules/diphone/di_select.cc | 196 + src/modules/diphone/diphone.cc | 837 ++ src/modules/diphone/diphone.h | 202 + src/modules/diphone/oc.cc | 304 + src/modules/donovan/Makefile | 55 + src/modules/donovan/coeffs.c | 72 + src/modules/donovan/donovan.cc | 360 + src/modules/donovan/donovan.h | 56 + src/modules/donovan/durations.c | 87 + src/modules/donovan/excitation.c | 94 + src/modules/donovan/load_diphs.c | 186 + src/modules/donovan/makewav.c | 128 + src/modules/donovan/pitch.c | 106 + src/modules/donovan/t2s.h | 284 + src/modules/hts_engine/AUTHORS | 13 + src/modules/hts_engine/COPYING | 43 + src/modules/hts_engine/HTS_audio.c | 249 + src/modules/hts_engine/HTS_engine.c | 836 ++ src/modules/hts_engine/HTS_engine.h | 863 ++ src/modules/hts_engine/HTS_gstream.c | 230 + src/modules/hts_engine/HTS_hidden.h | 173 + src/modules/hts_engine/HTS_label.c | 330 + src/modules/hts_engine/HTS_misc.c | 306 + src/modules/hts_engine/HTS_model.c | 1157 +++ src/modules/hts_engine/HTS_pstream.c | 537 ++ src/modules/hts_engine/HTS_sstream.c | 476 ++ src/modules/hts_engine/HTS_vocoder.c | 856 ++ src/modules/hts_engine/INSTALL | 16 + src/modules/hts_engine/Makefile | 66 + src/modules/hts_engine/README | 126 + src/modules/hts_engine/fest2hts_engine.cc | 250 + src/modules/java/Makefile | 45 + src/modules/java/NoInit | 1 + src/modules/java/cstr/Makefile | 46 + src/modules/java/cstr/festival/Client.java | 221 + src/modules/java/cstr/festival/Makefile | 48 + .../java/cstr/festival/client/Festival.java | 368 + .../java/cstr/festival/client/JobQueue.java | 104 + src/modules/java/cstr/festival/client/Makefile | 46 + src/modules/java/cstr/festival/client/Request.java | 132 + .../java/cstr/festival/client/RequestListener.java | 51 + src/modules/java/cstr/festival/client/Session.java | 186 + .../java/cstr/festival/jsapi/EngineCentral.java | 98 + .../java/cstr/festival/jsapi/FestivalModeDesc.java | 82 + .../cstr/festival/jsapi/FestivalQueueItem.java | 159 + .../cstr/festival/jsapi/FestivalSynthesizer.java | 278 + src/modules/java/cstr/festival/jsapi/Makefile | 48 + .../java/cstr/festival/jsapi/MessageQueue.java | 97 + src/modules/java/cstr/festival/jsapi/ReadMe | 226 + src/modules/java/cstr/festival/scheme/Makefile | 46 + .../festival/scheme/ReflectingSchemeReader.java | 168 + .../java/cstr/festival/scheme/SchemeReader.java | 66 + .../java/cstr/festival/scheme/SchemeTokenizer.java | 151 + src/modules/java/cstr/testPrograms/Makefile | 48 + .../java/cstr/testPrograms/SayHelloWorld.java | 337 + src/modules/java/java.mak | 68 + src/modules/java/java_cpp.mak | 63 + src/modules/java/java_media.mak | 66 + src/modules/java/jsapi.mak | 80 + src/modules/parser/Makefile | 55 + src/modules/parser/parser.h | 47 + src/modules/parser/pparser.cc | 149 + src/modules/rxp/Makefile | 59 + src/modules/rxp/rxp.mak | 50 + src/modules/rxp/ttsxml.cc | 216 + src/scripts/Makefile | 50 + src/scripts/festival_client_java.sh | 58 + src/scripts/festival_server.sh | 285 + src/scripts/festival_server_control.sh | 123 + src/scripts/jsapi_example.sh | 107 + src/scripts/shared_script | 25 + src/scripts/shared_setup_prl | 10 + src/scripts/shared_setup_sh | 20 + testsuite/Makefile | 57 + testsuite/correct/Makefile | 45 + testsuite/correct/fest_script.out | 123 + testsuite/correct/modes_script.out | 302 + testsuite/correct/parse_script.out | 21 + testsuite/correct/scherr_script.out | 27 + testsuite/correct/text_script.out | 90 + testsuite/correct/voice_script.out | 4 + testsuite/data/.festivalrc | 8 + testsuite/data/Makefile | 43 + testsuite/data/dump1.scm | 49 + testsuite/data/fest1.scm | 74 + testsuite/data/fest2.scm | 92 + testsuite/data/htstest.scm | 58 + testsuite/data/modes.scm | 58 + testsuite/data/scherr.scm | 50 + testsuite/data/testinstall.scm | 53 + testsuite/data/utt1.scm | 66 + testsuite/data/voices.scm | 78 + testsuite/fest.sh | 69 + testsuite/modes.sh | 51 + testsuite/parse.sh | 51 + testsuite/scherr.sh | 56 + testsuite/testinstall.sh | 43 + testsuite/text.sh | 53 + testsuite/voice.sh | 63 + 525 files changed, 102436 insertions(+) create mode 100644 ACKNOWLEDGMENTS create mode 100644 COPYING create mode 100644 INSTALL create mode 100644 Makefile create mode 100644 NEWS create mode 100644 README create mode 100644 bin/Makefile create mode 100644 bin/VCLocalRules create mode 100755 config.guess create mode 100755 config.sub create mode 100644 config/Makefile create mode 100644 config/common_make_rules create mode 100644 config/config.in create mode 100644 config/make_system.mak create mode 100644 config/modules/Makefile create mode 100644 config/modules/debugging.mak create mode 100644 config/modules/descriptions create mode 100644 config/modules/dmalloc.mak create mode 100644 config/modules/editline.mak create mode 100644 config/modules/efence.mak create mode 100644 config/modules/esd_audio.mak create mode 100644 config/modules/freebsd16_audio.mak create mode 100644 config/modules/irix_audio.mak create mode 100644 config/modules/linux16_audio.mak create mode 100644 config/modules/macosx_audio.mak create mode 100644 config/modules/mplayer_audio.mak create mode 100644 config/modules/nas_audio.mak create mode 100644 config/modules/native_audio.mak create mode 100644 config/modules/ols.mak create mode 100644 config/modules/psola_tm.mak create mode 100644 config/modules/scfg.mak create mode 100644 config/modules/siod.mak create mode 100644 config/modules/sun16_audio.mak create mode 100644 config/modules/tcl.mak create mode 100644 config/modules/wagon.mak create mode 100644 config/modules/wfst.mak create mode 100644 config/modules/win32_audio.mak create mode 100644 config/project.mak create mode 100644 config/project_config_check.mak create mode 100644 config/system.sh create mode 100644 config/systems/DebianGNULinux.mak create mode 100644 config/systems/Linux.mak create mode 100644 config/systems/Makefile create mode 100644 config/systems/RedHatLinux.mak create mode 100644 config/systems/alpha_Linux.mak create mode 100644 config/systems/alpha_OSF1V4.0.mak create mode 100644 config/systems/alpha_RedHatLinux.mak create mode 100644 config/systems/default.mak create mode 100644 config/systems/hp9000_HP-UX.mak create mode 100644 config/systems/hp9000_HP-UXB.10.mak create mode 100644 config/systems/ip_IRIX.mak create mode 100644 config/systems/ip_IRIX5.3.mak create mode 100644 config/systems/ip_IRIX6.3.mak create mode 100644 config/systems/ip_IRIX6.4.mak create mode 100644 config/systems/ip_IRIX646.4.mak create mode 100644 config/systems/ix86_CYGWIN1.0.mak create mode 100644 config/systems/ix86_CYGWIN1.1.mak create mode 100644 config/systems/ix86_CYGWIN1.3.mak create mode 100644 config/systems/ix86_CYGWIN1.4.mak create mode 100644 config/systems/ix86_CYGWIN1.5.mak create mode 100644 config/systems/ix86_CYGWIN1.7.mak create mode 100644 config/systems/ix86_CYGWIN20.1.mak create mode 100644 config/systems/ix86_CYGWIN32.mak create mode 100644 config/systems/ix86_CYGWIN324.0.mak create mode 100644 config/systems/ix86_Darwin.mak create mode 100644 config/systems/ix86_FreeBSD.mak create mode 100644 config/systems/ix86_FreeBSD2.1.mak create mode 100644 config/systems/ix86_FreeBSD2.2.mak create mode 100644 config/systems/ix86_FreeBSD3.0.mak create mode 100644 config/systems/ix86_FreeBSD3.1.mak create mode 100644 config/systems/ix86_FreeBSD3.2.mak create mode 100644 config/systems/ix86_FreeBSD3.3.mak create mode 100644 config/systems/ix86_FreeBSD4.0.mak create mode 100644 config/systems/ix86_OS22.mak create mode 100644 config/systems/ix86_RedHatLinux4.0.mak create mode 100644 config/systems/ix86_RedHatLinux4.1.mak create mode 100644 config/systems/ix86_RedHatLinux4.2.mak create mode 100644 config/systems/ix86_RedHatLinux5.0.mak create mode 100644 config/systems/ix86_RedHatLinux5.1.mak create mode 100644 config/systems/ix86_RedHatLinux5.2.mak create mode 100644 config/systems/ix86_RedHatLinux6.0.mak create mode 100644 config/systems/ix86_RedHatLinux6.1.mak create mode 100644 config/systems/ix86_RedHatLinux6.2.mak create mode 100644 config/systems/ix86_RedHatLinux7.0.mak create mode 100644 config/systems/ix86_SunOS5.5.mak create mode 100644 config/systems/ix86_SunOS5.6.mak create mode 100644 config/systems/ix86_SunOS5.7.mak create mode 100644 config/systems/ix86_SunOS5.8.mak create mode 100644 config/systems/ix86_SunOS5.mak create mode 100644 config/systems/power_macintosh_Darwin.mak create mode 100644 config/systems/rs6000_AIX4.1.mak create mode 100644 config/systems/sparc_SunOS4.1.mak create mode 100644 config/systems/sparc_SunOS4.mak create mode 100644 config/systems/sparc_SunOS5.5.mak create mode 100644 config/systems/sparc_SunOS5.6.mak create mode 100644 config/systems/sparc_SunOS5.7.mak create mode 100644 config/systems/sparc_SunOS5.8.mak create mode 100644 config/systems/sparc_SunOS5.mak create mode 100644 config/systems/unknown_DebianGNULinux.mak create mode 100644 config/systems/unknown_Linux.mak create mode 100644 config/systems/unknown_RedHatLinux.mak create mode 100644 config/systems/unknown_unknown.mak create mode 100644 config/systems/x86_64_Darwin.mak create mode 100644 config/test_make_rules create mode 100644 config/vc_common_make_rules create mode 100644 config/vc_config_make_rules-dist create mode 100755 configure create mode 100644 configure.in create mode 100644 doc/Makefile create mode 100644 doc/banner.inc create mode 100644 doc/classHeader.inc create mode 100644 doc/cstr.gif create mode 100644 doc/edcrest.gif create mode 100644 doc/est.jpg create mode 100644 doc/est_small.jpg create mode 100644 doc/festival.head create mode 100644 doc/festival.jpg create mode 100644 doc/festival.tail create mode 100644 doc/festival.texi create mode 100644 doc/festival_client.head create mode 100644 doc/festival_client.tail create mode 100644 doc/festival_small.jpg create mode 100644 doc/festival_tiny.jpg create mode 100644 doc/hierHeader.inc create mode 100644 doc/indexHeader.inc create mode 100644 doc/refcard.tex create mode 100644 examples/Makefile create mode 100644 examples/addr-mode.scm create mode 100644 examples/apml.dtd create mode 100755 examples/benchmark create mode 100644 examples/benchmark.text create mode 100644 examples/dumpfeats.sh create mode 100644 examples/durmeanstd.sh create mode 100644 examples/ex1.email create mode 100644 examples/ex1.ogi create mode 100644 examples/example.apml create mode 100644 examples/example.sable create mode 100644 examples/example.th create mode 100644 examples/example2.sable create mode 100644 examples/festival_client.c create mode 100644 examples/festival_client.h create mode 100644 examples/festival_client.pl create mode 100644 examples/intro.text create mode 100644 examples/latest.sh create mode 100644 examples/make_utts.sh create mode 100644 examples/powmeanstd.sh create mode 100755 examples/run-festival-script.sh create mode 100644 examples/saytime.sh create mode 100644 examples/scfg_parse_text.sh create mode 100644 examples/songs/Makefile create mode 100644 examples/songs/america1.xml create mode 100644 examples/songs/america2.xml create mode 100644 examples/songs/america3.xml create mode 100644 examples/songs/america4.xml create mode 100644 examples/songs/daisy.xml create mode 100644 examples/songs/doremi.xml create mode 100644 examples/songs/lochlomond.xml create mode 100644 examples/songs/spice1.xml create mode 100644 examples/songs/spice2.xml create mode 100644 examples/songs/spice3.xml create mode 100644 examples/songs/spice4.xml create mode 100644 examples/speech_pm_1.0.tar create mode 100644 examples/spintro.text create mode 100644 examples/text2pos.sh create mode 100755 examples/text2wave.sh create mode 100644 examples/th-mode.scm create mode 100644 examples/tobi.stml create mode 100644 examples/toksearch.scm create mode 100644 examples/webdemo.scm create mode 100644 festival-2.1-release.tar.gz create mode 100755 install-sh create mode 100644 lib/Makefile create mode 100644 lib/Sable.v0_2.dtd create mode 100644 lib/Singing.v0_1.dtd create mode 100644 lib/VCLocalRules create mode 100644 lib/apml.scm create mode 100644 lib/apml_f2bf0lr.scm create mode 100644 lib/apml_kaldurtreeZ.scm create mode 100644 lib/cart_aux.scm create mode 100644 lib/clunits.scm create mode 100644 lib/clunits_build.scm create mode 100644 lib/cmusphinx2_phones.scm create mode 100644 lib/cslush.scm create mode 100644 lib/darpa_phones.scm create mode 100644 lib/display.scm create mode 100644 lib/duration.scm create mode 100644 lib/email-mode.scm create mode 100644 lib/engmorph.scm create mode 100644 lib/engmorphsyn.scm create mode 100644 lib/etc/Makefile create mode 100755 lib/etc/email_filter create mode 100644 lib/f2bdurtreeZ.scm create mode 100644 lib/f2bf0lr.scm create mode 100644 lib/festdoc.scm create mode 100644 lib/festival.el create mode 100644 lib/festival.scm create mode 100644 lib/festtest.scm create mode 100644 lib/gswdurtreeZ.scm create mode 100644 lib/holmes_phones.scm create mode 100644 lib/hts.scm create mode 100644 lib/init.scm create mode 100644 lib/intonation.scm create mode 100644 lib/java.scm create mode 100644 lib/klatt_durs.scm create mode 100644 lib/languages.scm create mode 100644 lib/lexicons.scm create mode 100644 lib/lts.scm create mode 100644 lib/lts_build.scm create mode 100644 lib/mbrola.scm create mode 100644 lib/mettree.scm create mode 100644 lib/module_description.scm create mode 100644 lib/mrpa_allophones.scm create mode 100644 lib/mrpa_durs.scm create mode 100644 lib/mrpa_phones.scm create mode 100644 lib/multisyn/Makefile create mode 100644 lib/multisyn/multisyn.scm create mode 100644 lib/multisyn/multisyn_pauses.scm create mode 100644 lib/multisyn/radio_phones_multisyn.scm create mode 100644 lib/multisyn/send_xwaves.scm create mode 100644 lib/multisyn/target_cost.scm create mode 100644 lib/ogimarkup-mode.scm create mode 100644 lib/pauses.scm create mode 100644 lib/phoneset.scm create mode 100644 lib/phrase.scm create mode 100644 lib/pos.scm create mode 100644 lib/postlex.scm create mode 100644 lib/radio_phones.scm create mode 100644 lib/sable-latin.ent create mode 100644 lib/sable-mode.scm create mode 100644 lib/scfg.scm create mode 100644 lib/scfg_wsj_wp20.gram create mode 100644 lib/sec.B.hept.ngrambin create mode 100644 lib/sec.ts20.quad.ngrambin create mode 100644 lib/singing-mode.scm create mode 100644 lib/siteinit.scm create mode 100644 lib/soleml-mode.scm create mode 100644 lib/speech.properties create mode 100644 lib/synthesis.scm create mode 100644 lib/tilt.scm create mode 100644 lib/tobi.scm create mode 100644 lib/tobi_rules.scm create mode 100644 lib/token.scm create mode 100644 lib/tokenpos.scm create mode 100644 lib/tts.scm create mode 100644 lib/unilex_phones.scm create mode 100644 lib/voices.scm create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 packaging/festival-1.95-audsp.patch create mode 100644 packaging/festival-1.95-examples.patch create mode 100644 packaging/festival-1.95-libdir.patch create mode 100644 packaging/festival-1.96-chroot.patch create mode 100644 packaging/festival-no-LD_LIBRARY_PATH-extension.patch create mode 100644 packaging/festival-safe-temp-file.patch create mode 100644 packaging/festival-text2wave-manpage.patch create mode 100644 packaging/festival-use-pacat.patch create mode 100644 packaging/festival.changes create mode 100644 packaging/festival.spec create mode 100644 packaging/festlex_CMU.tar.gz create mode 100644 packaging/festlex_POSLEX.tar.gz create mode 100644 packaging/festvox_kallpc16k.tar.gz create mode 100644 packaging/rcfestival create mode 100644 packaging/speech_tools-1.2.95-config.patch create mode 100644 packaging/speech_tools-2.1-release.tar.gz create mode 100644 packaging/speech_tools-gcc47.patch create mode 100644 packaging/speech_tools-no-LD_LIBRARY_PATH-extension.patch create mode 100644 packaging/speech_tools-undefined-operation.patch create mode 100644 packaging/sysconfig.festival create mode 100644 src/Makefile create mode 100644 src/arch/Makefile create mode 100644 src/arch/festival/Makefile create mode 100644 src/arch/festival/ModuleDescription.cc create mode 100644 src/arch/festival/Phone.cc create mode 100644 src/arch/festival/audspio.cc create mode 100644 src/arch/festival/client.cc create mode 100644 src/arch/festival/features.cc create mode 100644 src/arch/festival/festival.cc create mode 100644 src/arch/festival/festivalP.h create mode 100644 src/arch/festival/linreg.cc create mode 100644 src/arch/festival/ngram.cc create mode 100644 src/arch/festival/server.cc create mode 100644 src/arch/festival/tcl.cc create mode 100644 src/arch/festival/utterance.cc create mode 100644 src/arch/festival/viterbi.cc create mode 100644 src/arch/festival/wagon_interp.cc create mode 100644 src/arch/festival/wave.cc create mode 100644 src/arch/festival/web.cc create mode 100644 src/arch/festival/wfst.cc create mode 100644 src/include/Makefile create mode 100644 src/include/ModuleDescription.h create mode 100644 src/include/Phone.h create mode 100644 src/include/festival.h create mode 100644 src/include/fngram.h create mode 100644 src/include/intonation.h create mode 100644 src/include/lexicon.h create mode 100644 src/include/module_support.h create mode 100644 src/include/modules.h create mode 100644 src/include/text.h create mode 100644 src/lib/Makefile create mode 100644 src/main/Makefile create mode 100644 src/main/audsp.cc create mode 100644 src/main/festival_client.cc create mode 100644 src/main/festival_main.cc create mode 100644 src/modules/Duration/Klatt.cc create mode 100644 src/modules/Duration/Makefile create mode 100644 src/modules/Duration/dur_aux.cc create mode 100644 src/modules/Duration/duration.cc create mode 100644 src/modules/Duration/durationP.h create mode 100644 src/modules/Intonation/Makefile create mode 100644 src/modules/Intonation/duffint.cc create mode 100644 src/modules/Intonation/gen_int.cc create mode 100644 src/modules/Intonation/int_aux.cc create mode 100644 src/modules/Intonation/int_tree.cc create mode 100644 src/modules/Intonation/simple.cc create mode 100644 src/modules/Lexicon/Makefile create mode 100644 src/modules/Lexicon/complex.cc create mode 100644 src/modules/Lexicon/lex_aux.cc create mode 100644 src/modules/Lexicon/lex_ff.cc create mode 100644 src/modules/Lexicon/lexicon.cc create mode 100644 src/modules/Lexicon/lexiconP.h create mode 100644 src/modules/Lexicon/lts.cc create mode 100644 src/modules/Lexicon/lts.h create mode 100644 src/modules/Lexicon/lts_rules.cc create mode 100644 src/modules/Makefile create mode 100644 src/modules/MultiSyn/DiphoneBackoff.cc create mode 100644 src/modules/MultiSyn/DiphoneBackoff.h create mode 100644 src/modules/MultiSyn/DiphoneUnitVoice.cc create mode 100644 src/modules/MultiSyn/DiphoneUnitVoice.h create mode 100644 src/modules/MultiSyn/DiphoneVoiceModule.cc create mode 100644 src/modules/MultiSyn/DiphoneVoiceModule.h create mode 100644 src/modules/MultiSyn/EST_DiphoneCoverage.cc create mode 100644 src/modules/MultiSyn/EST_DiphoneCoverage.h create mode 100644 src/modules/MultiSyn/EST_FlatTargetCost.cc create mode 100644 src/modules/MultiSyn/EST_FlatTargetCost.h create mode 100644 src/modules/MultiSyn/EST_JoinCost.cc create mode 100644 src/modules/MultiSyn/EST_JoinCost.h create mode 100644 src/modules/MultiSyn/EST_JoinCostCache.cc create mode 100644 src/modules/MultiSyn/EST_JoinCostCache.h create mode 100644 src/modules/MultiSyn/EST_TargetCost.cc create mode 100644 src/modules/MultiSyn/EST_TargetCost.h create mode 100644 src/modules/MultiSyn/Makefile create mode 100644 src/modules/MultiSyn/TargetCostRescoring.cc create mode 100644 src/modules/MultiSyn/TargetCostRescoring.h create mode 100644 src/modules/MultiSyn/UnitSelection.cc create mode 100644 src/modules/MultiSyn/UnitSelection.h create mode 100644 src/modules/MultiSyn/VoiceBase.cc create mode 100644 src/modules/MultiSyn/VoiceBase.h create mode 100644 src/modules/MultiSyn/VoiceModuleBase.cc create mode 100644 src/modules/MultiSyn/VoiceModuleBase.h create mode 100644 src/modules/MultiSyn/inst_tmpl/Makefile create mode 100644 src/modules/MultiSyn/inst_tmpl/hash_itemp_tcdatap_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/hash_s_itemlistp_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/list_itemp_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/list_scorepair_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/list_strlist_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/list_uttp_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/list_voicemodulep_t.cc create mode 100644 src/modules/MultiSyn/inst_tmpl/vector_jccp_t.cc create mode 100644 src/modules/MultiSyn/safety.h create mode 100644 src/modules/Text/Makefile create mode 100644 src/modules/Text/text.cc create mode 100644 src/modules/Text/text_aux.cc create mode 100644 src/modules/Text/text_modes.cc create mode 100644 src/modules/Text/tok_ext.cc create mode 100644 src/modules/Text/token.cc create mode 100644 src/modules/Text/tokenP.h create mode 100644 src/modules/Text/token_pos.cc create mode 100644 src/modules/Text/xxml.cc create mode 100644 src/modules/UniSyn/Makefile create mode 100644 src/modules/UniSyn/UniSyn.cc create mode 100644 src/modules/UniSyn/UniSyn.h create mode 100644 src/modules/UniSyn/ps_synthesis.cc create mode 100644 src/modules/UniSyn/us_features.cc create mode 100644 src/modules/UniSyn/us_features.h create mode 100644 src/modules/UniSyn/us_mapping.cc create mode 100644 src/modules/UniSyn/us_prosody.cc create mode 100644 src/modules/UniSyn/us_synthesis.h create mode 100644 src/modules/UniSyn/us_unit.cc create mode 100644 src/modules/UniSyn_diphone/Makefile create mode 100644 src/modules/UniSyn_diphone/UniSyn_diphone.cc create mode 100644 src/modules/UniSyn_diphone/us_diphone.h create mode 100644 src/modules/UniSyn_diphone/us_diphone_index.cc create mode 100644 src/modules/UniSyn_diphone/us_diphone_unit.cc create mode 100644 src/modules/UniSyn_phonology/Makefile create mode 100644 src/modules/UniSyn_phonology/UniSyn_build.cc create mode 100644 src/modules/UniSyn_phonology/UniSyn_phonology.cc create mode 100644 src/modules/UniSyn_phonology/mettree.cc create mode 100644 src/modules/UniSyn_phonology/subword.cc create mode 100644 src/modules/UniSyn_phonology/syllabify.cc create mode 100644 src/modules/UniSyn_phonology/unisyn_phonology.mak create mode 100644 src/modules/UniSyn_phonology/unisyn_tilt.cc create mode 100644 src/modules/UniSyn_phonology/us_aux.cc create mode 100644 src/modules/UniSyn_phonology/us_duration.cc create mode 100644 src/modules/UniSyn_phonology/us_duration.h create mode 100755 src/modules/VCLocalRules create mode 100644 src/modules/base/Makefile create mode 100644 src/modules/base/ff.cc create mode 100644 src/modules/base/module_support.cc create mode 100644 src/modules/base/modules.cc create mode 100644 src/modules/base/parameters.cc create mode 100644 src/modules/base/phrasify.cc create mode 100644 src/modules/base/phrinfo.cc create mode 100644 src/modules/base/pos.cc create mode 100644 src/modules/base/postlex.cc create mode 100644 src/modules/base/word.cc create mode 100644 src/modules/clunits/Makefile create mode 100644 src/modules/clunits/acost.cc create mode 100644 src/modules/clunits/acost.scm create mode 100644 src/modules/clunits/cldb.cc create mode 100644 src/modules/clunits/cljoin.cc create mode 100644 src/modules/clunits/clunits.cc create mode 100644 src/modules/clunits/clunits.h create mode 100644 src/modules/clustergen/Makefile create mode 100644 src/modules/clustergen/clustergen.cc create mode 100644 src/modules/clustergen/me_mlsa.cc create mode 100644 src/modules/clustergen/mlsa_resynthesis.cc create mode 100644 src/modules/clustergen/mlsa_resynthesis.h create mode 100644 src/modules/clustergen/simple_mlpg.cc create mode 100644 src/modules/clustergen/simple_mlpg.h create mode 100644 src/modules/clustergen/vc.cc create mode 100644 src/modules/clustergen/vc.h create mode 100644 src/modules/diphone/Makefile create mode 100644 src/modules/diphone/di_io.cc create mode 100644 src/modules/diphone/di_pitch.cc create mode 100644 src/modules/diphone/di_psola.cc create mode 100644 src/modules/diphone/di_reslpc.cc create mode 100644 src/modules/diphone/di_select.cc create mode 100644 src/modules/diphone/diphone.cc create mode 100644 src/modules/diphone/diphone.h create mode 100644 src/modules/diphone/oc.cc create mode 100644 src/modules/donovan/Makefile create mode 100644 src/modules/donovan/coeffs.c create mode 100644 src/modules/donovan/donovan.cc create mode 100644 src/modules/donovan/donovan.h create mode 100644 src/modules/donovan/durations.c create mode 100644 src/modules/donovan/excitation.c create mode 100644 src/modules/donovan/load_diphs.c create mode 100644 src/modules/donovan/makewav.c create mode 100644 src/modules/donovan/pitch.c create mode 100644 src/modules/donovan/t2s.h create mode 100644 src/modules/hts_engine/AUTHORS create mode 100644 src/modules/hts_engine/COPYING create mode 100644 src/modules/hts_engine/HTS_audio.c create mode 100644 src/modules/hts_engine/HTS_engine.c create mode 100644 src/modules/hts_engine/HTS_engine.h create mode 100644 src/modules/hts_engine/HTS_gstream.c create mode 100644 src/modules/hts_engine/HTS_hidden.h create mode 100644 src/modules/hts_engine/HTS_label.c create mode 100644 src/modules/hts_engine/HTS_misc.c create mode 100644 src/modules/hts_engine/HTS_model.c create mode 100644 src/modules/hts_engine/HTS_pstream.c create mode 100644 src/modules/hts_engine/HTS_sstream.c create mode 100644 src/modules/hts_engine/HTS_vocoder.c create mode 100644 src/modules/hts_engine/INSTALL create mode 100644 src/modules/hts_engine/Makefile create mode 100644 src/modules/hts_engine/README create mode 100644 src/modules/hts_engine/fest2hts_engine.cc create mode 100644 src/modules/java/Makefile create mode 100644 src/modules/java/NoInit create mode 100644 src/modules/java/cstr/Makefile create mode 100644 src/modules/java/cstr/festival/Client.java create mode 100644 src/modules/java/cstr/festival/Makefile create mode 100644 src/modules/java/cstr/festival/client/Festival.java create mode 100644 src/modules/java/cstr/festival/client/JobQueue.java create mode 100644 src/modules/java/cstr/festival/client/Makefile create mode 100644 src/modules/java/cstr/festival/client/Request.java create mode 100644 src/modules/java/cstr/festival/client/RequestListener.java create mode 100644 src/modules/java/cstr/festival/client/Session.java create mode 100644 src/modules/java/cstr/festival/jsapi/EngineCentral.java create mode 100644 src/modules/java/cstr/festival/jsapi/FestivalModeDesc.java create mode 100644 src/modules/java/cstr/festival/jsapi/FestivalQueueItem.java create mode 100644 src/modules/java/cstr/festival/jsapi/FestivalSynthesizer.java create mode 100644 src/modules/java/cstr/festival/jsapi/Makefile create mode 100644 src/modules/java/cstr/festival/jsapi/MessageQueue.java create mode 100644 src/modules/java/cstr/festival/jsapi/ReadMe create mode 100644 src/modules/java/cstr/festival/scheme/Makefile create mode 100644 src/modules/java/cstr/festival/scheme/ReflectingSchemeReader.java create mode 100644 src/modules/java/cstr/festival/scheme/SchemeReader.java create mode 100644 src/modules/java/cstr/festival/scheme/SchemeTokenizer.java create mode 100644 src/modules/java/cstr/testPrograms/Makefile create mode 100644 src/modules/java/cstr/testPrograms/SayHelloWorld.java create mode 100644 src/modules/java/java.mak create mode 100644 src/modules/java/java_cpp.mak create mode 100644 src/modules/java/java_media.mak create mode 100644 src/modules/java/jsapi.mak create mode 100644 src/modules/parser/Makefile create mode 100644 src/modules/parser/parser.h create mode 100644 src/modules/parser/pparser.cc create mode 100644 src/modules/rxp/Makefile create mode 100644 src/modules/rxp/rxp.mak create mode 100644 src/modules/rxp/ttsxml.cc create mode 100644 src/scripts/Makefile create mode 100644 src/scripts/festival_client_java.sh create mode 100644 src/scripts/festival_server.sh create mode 100644 src/scripts/festival_server_control.sh create mode 100644 src/scripts/jsapi_example.sh create mode 100644 src/scripts/shared_script create mode 100644 src/scripts/shared_setup_prl create mode 100644 src/scripts/shared_setup_sh create mode 100644 testsuite/Makefile create mode 100644 testsuite/correct/Makefile create mode 100644 testsuite/correct/fest_script.out create mode 100644 testsuite/correct/modes_script.out create mode 100644 testsuite/correct/parse_script.out create mode 100644 testsuite/correct/scherr_script.out create mode 100644 testsuite/correct/text_script.out create mode 100644 testsuite/correct/voice_script.out create mode 100644 testsuite/data/.festivalrc create mode 100644 testsuite/data/Makefile create mode 100644 testsuite/data/dump1.scm create mode 100644 testsuite/data/fest1.scm create mode 100644 testsuite/data/fest2.scm create mode 100644 testsuite/data/htstest.scm create mode 100644 testsuite/data/modes.scm create mode 100644 testsuite/data/scherr.scm create mode 100644 testsuite/data/testinstall.scm create mode 100644 testsuite/data/utt1.scm create mode 100644 testsuite/data/voices.scm create mode 100644 testsuite/fest.sh create mode 100644 testsuite/modes.sh create mode 100644 testsuite/parse.sh create mode 100644 testsuite/scherr.sh create mode 100644 testsuite/testinstall.sh create mode 100644 testsuite/text.sh create mode 100644 testsuite/voice.sh diff --git a/ACKNOWLEDGMENTS b/ACKNOWLEDGMENTS new file mode 100644 index 0000000..b6f320a --- /dev/null +++ b/ACKNOWLEDGMENTS @@ -0,0 +1,83 @@ +Festival is currently actively developed by: + + Alan W Black (Carnegie Mellon University) + Rob Clark (Edinburgh University) + Junichi Yamagishi (Edinburgh University) + Keiichiro Oura (Nagoya Institute of Technology) + +The following people and organisations have contributed to the +development of Festival in various ways. It is their work that makes +it all possible. + +Alan W Black Overall design, most of the front end and software control +Paul Taylor Overall design, most of the back end +Richard Caley for doing lots of difficult and boring bits +Rob Clark Intonation, multisyn voice building, general developement and + maintenance. +Keiichiro Oura Updated HTS engine and API +Junichi Yamagishi + HTS voices +Korin Richmond Multisyn engine, swig wrappers and general developement. +Heiga Zen HTS engine +Brian Foley Mac OSX support +Kevin Lenzo for speaking a bunch of different nonsense words, + design and improvements to the clunits module, + and co-author of the whole festvox project +Alistair Conkie various low level code points and some design work + Spanish synthesis, recording Roger +Steve Isard design of diphone schema, LPC diphone code, and + directorship +EPSRC who funded awb and pault +Carnegie Mellon University + who fund awb +David Huggins Daines (Cepstral, LLC) + configure, and lots of Linux associated bugs +Sun Microsystems Laboratories + For believing in us and their generosity. +AT&T Research Labs + For providing funding and using our work +Paradigm Assoc. and George Carrett + For Scheme In One Defun +CNET, France Telecom + for use of Donovan diphones and some code in + modules/donovan (used with permission) +The beta testers + Thanks for wanting to use the system, you make it + worth doing. (And thanks for helping me debug my code.) + You all responded to my requests fast and accurately + thanks, even when I dumped last minute changes on you +Andy Donovan for speaking a bunch of nonsense words +Roger Burroughes for speaking another bunch of nonsense words +Kurt Dusterhoff for speaking another bunch of nonsense words +Amy Isard for her SSML project and related synthesizer +Mike Macon for signal processing advice +Richard Tobin for answering all those difficult questions, + and the socket code, and rxp the XML parser +Simmule Turner and Rich Salz + command line editor: editline +Borja Etxebarria + For Spanish synthesis and answer signal processing + questions +Briony Williams Welsh synthesis +Jacques H. de Villiers + from CSLU at OGI, for the TCL interface. +ATR and Nick Campbell + for first allowing Paul and Alan to work together +Oxford Text Archive + For the computer users version of Oxford Advanced + Learners' Dictionary redistributed with permission +Reading University + for access to MARSEC from which the phrase break + model was trained. +Mari Ostendorf For giving access to the FM Radio Corpus from which + some models were trained. +LDC & Penn Tree Bank + from which the POS ragger was trained, redistribution + of the models is with permission from the LDC. +Grady Ward for the MOBY pronunciation lexicon +FSF for G++, make, .... + +and others too. + + + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..82dc313 --- /dev/null +++ b/COPYING @@ -0,0 +1,103 @@ +The system as a whole and most of the files in it are distributed +under the following copyright and conditions + + The Festival Speech Synthesis System + Centre for Speech Technology Research + University of Edinburgh, UK + Copyright (c) 1996-2004 + All Rights Reserved. + + Permission is hereby granted, free of charge, to use and distribute + this software and its documentation without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of this work, and to + permit persons to whom this work is furnished to do so, subject to + the following conditions: + 1. The code must retain the above copyright notice, this list of + conditions and the following disclaimer. + 2. Any modifications must be clearly marked as such. + 3. Original authors' names are not deleted. + 4. The authors' names are not used to endorse or promote products + derived from this software without specific prior written + permission. + + THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK + DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT + SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. + +Some further comments: + +Every effort has been made to ensure that Festival does not contain +any violation of intellectual property rights through disclosure of +trade secrets, copyright or patent violation. Considerable time and +effort has been spent to ensure that this is the case. However, +especially with patent problems, it is not always within our control +to know what has or has not been restricted. If you do suspect that +some part of Festival cannot be legally distributed please inform us +so that an alternative may be sought. Festival is only useful if it +is truly free to distribute. + +As of 1.4.0 the core distribution (and speech tools) is free. Unlike +previous versions which had a commercial restriction. You are free to +incorporate Festival in commercial (and of course non-commercial +systems), without any further communication or licence from us. +However if you are seriously using Festival within a commercial +application we would like to know, both so we know we are contributing +and so we can keep you informed of future developments. Also if you +require maintenance, support or wish us to provide consultancy feel +free to contact us. + +The voices however aren't all free. At present the US voices, kal and +ked are free. Our British voices are free themselves but they use OALD +which is restricted for non-commercial use. Our Spanish voice is also +so restricted. + +Note other modules that festival supports e.g MBROLA and OGI +extensions, may have different licencing please take care when using +the system to understand what you are actually using. + +-------------------------------------------------- + +A number of individual files in the system fall under a different +copyright from the above. All however are termed "free software" +but most people. + +./src/arch/festival/tcl.c + * Copyright (C)1997 Jacques H. de Villiers + * Copyright (C)1997 Center for Spoken Language Understanding, + * Oregon Graduate Institute of Science & Technology + See conditions in file. This is the standard TCL licence and hence + shouldn't cause problems from most people. + +./examples/festival_client.pl +# Copyright (C) 1997 +# Kevin A. Lenzo (lenzo@cs.cmu.edu) 7/97 + See condition in file + +./src/modules/clunits/* +./lib/*clunits* + Joint copyright University of Edinburgh and Carnegie Mellon University + Conditions remain as free software like the rest of distribution + +./src/modules/hts_engine/* +./lib/hts.scm + The HMM-based speech synthesis system (HTS) + hts_engine API version 1.04 (http://hts-engine.sourceforge.net/) + Copyright (C) 2001-2010 Nagoya Institute of Technology + 2001-2008 Tokyo Institute of Technology + All rights reserved. + distributed under a New and Simplified BSD licence. + +./lib/festival.el +;;; Copyright (C) Alan W Black 1996 +copyright under FSF General Public Licence + +Please also read the COPYING section of speech_tools/README for the +conditions on those files. + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..862a2b7 --- /dev/null +++ b/INSTALL @@ -0,0 +1,454 @@ +Installation +************ + + This section describes how to install Festival from source in a new +location and customize that installation. + +* Menu: + +* Requirements:: Software/Hardware requirements for Festival +* Configuration:: Setting up compilation +* Site initialization:: Settings for your particular site +* Checking an installation:: But does it work ... + +Requirements +============ + + In order to compile Festival you first need the following source +packages + +`festival-2.0-release.tar.gz' + Festival Speech Synthesis System source + +`speech_tools-1.2.4-release.tar.gz' + The Edinburgh Speech Tools Library + +`festlex_NAME.tar.gz' + The lexicon distribution, where possible, includes the lexicon + input file as well as the compiled form, for your convenience. + The lexicons have varying distribution policies, but are all free + except OALD, which is only free for non-commercial use (we are + working on a free replacement). In some cases only a pointer to + an ftp'able file plus a program to convert that file to the + Festival format is included. + +`festvox_NAME.tar.gz' + You'll need a speech database. A number are available (with + varying distribution policies). Each voice may have other + dependencies such as requiring particular lexicons + +`festdoc_2.0.tar.gz' + Full postscript, info and html documentation for Festival and the + Speech Tools. The source of the documentation is available in the + standard distributions but for your conveniences it has been + pre-generated. + + In addition to Festival specific sources you will also need + +_A UNIX machine_ + Currently we have compiled and tested the system under Solaris + (2.5(.1), 2.6, 2.7, 2.8 and 2.9), SunOS (4.1.3), FreeBSD 3.x, 4.x Linux + (Redhat 4.1, 5.0, 5.1, 5.2, 6.[012], 7.[01], 8.0, 9, FC1 and other Linux + distributions), and it should work under OSF (Dec Alphas) SGI + (Irix), HPs (HPUX). But any standard UNIX machine should be + acceptable. We have now successfully ported this version to + Windows XP, Windows NT and Windows 95 (using the Cygnus GNU win32 + environment). This is still a young port but seems to work. + +_A C++ compiler_ + Note that C++ is not very portable even between different versions + of the compiler from the same vendor. Although we've tried very + hard to make the system portable, we know it is very unlikely to + compile without change except with compilers that have already + been tested. The currently tested systems are + * Sun Sparc Solaris 2.5, 2.5.1, 2.6, 2.7, 2.9: GCC 2.95.1, GCC + 3.2 + + * FreeBSD for Intel 3.x and 4.x GCC 2.95.1, GCC 3.0 + + * Linux for Intel (RedHat 4.1/5.0/5.1/5.2/6.0/7.x/8.0): GCC + 2.7.2, GCC 2.7.2/egcs-1.0.2, egcs 1.1.1, egcs-1.1.2, GCC + 2.95.[123], GCC "2.96", GCC 3.0, GCC 3.0.1, GCC 3.2, GCC 3.2.1 + GCC 3.2.3, GCC 3.3.2 + + * Windows NT 4.0: GCC 2.7.2 plus egcs (from Cygnus GNU win32 + b19), Visual C++ PRO v5.0, Visual C++ v6.0 + Note if GCC works on one version of Unix it usually works on + others. + + We have compiled both the speech tools and Festival under Windows + NT 4.0 and Windows 95 using the GNU tools available from Cygnus. + http://www.cygwin.com/ + +_GNU make_ + Due to there being too many different `make' programs out there we + have tested the system using GNU make on all systems we use. + Others may work but we know GNU make does. + +_Audio hardware_ + You can use Festival without audio output hardware but it doesn't + sound very good (though admittedly you can hear less problems with + it). A number of audio systems are supported (directly inherited + from the audio support in the Edinburgh Speech Tools Library): + NCD's NAS (formerly called netaudio) a network transparent audio + system (which can be found at + `ftp://ftp.x.org/contrib/audio/nas/'); `/dev/audio' (at 8k ulaw + and 8/16bit linear), found on Suns, Linux machines and FreeBSD; + and a method allowing arbitrary UNIX commands. *Note Audio + output::. + + Earlier versions of Festival mistakenly offered a command line editor +interface to the GNU package readline, but due to conflicts with the GNU +Public Licence and Festival's licence this interface was removed in +version 1.3.1. Even Festival's new free licence would cause problems as +readline support would restrict Festival linking with non-free code. A +new command line interface based on editline was provided that offers +similar functionality. Editline remains a compilation option as it is +probably not yet as portable as we would like it to be. + + In addition to the above, in order to process the documentation you +will need `TeX', `dvips' (or similar), GNU's `makeinfo' (part of the +texinfo package) and `texi2html' which is available from +`http://wwwcn.cern.ch/dci/texi2html/'. + + However the document files are also available pre-processed into, +postscript, DVI, info and html as part of the distribution in +`festdoc-1.4.X.tar.gz'. + + Ensure you have a fully installed and working version of your C++ +compiler. Most of the problems people have had in installing Festival +have been due to incomplete or bad compiler installation. It might be +worth checking if the following program works if you don't know if +anyone has used your C++ installation before. + #include + int main (int argc, char **argv) + { + cout << "Hello world\n"; + } + + Unpack all the source files in a new directory. The directory will +then contain two subdirectories + speech_tools/ + festival/ + +Configuration +============= + + First ensure you have a compiled version of the Edinburgh Speech +Tools Library. See `speech_tools/INSTALL' for instructions. + + The system now supports the standard GNU `configure' method for set +up. In most cases this will automatically configure festival for your +particular system. In most cases you need only type + gmake + and the system will configure itself and conpile, (note you need to +have compiled the Edinburgh Speech Tools `speech_tools-1.2.4' first. + + In some case hand configure is require. All of the configuration +choise are held in the file `config/config' + + For the most part Festival configuration inherits the configuration +from your speech tools config file (`../speech_tools/config/config'). +Additional optional modules may be added by adding them to the end of +your config file e.g. + ALSO_INCLUDE += clunits + Adding and new module here will treat is as a new directory in the +`src/modules/' and compile it into the system in the same way the +`OTHER_DIRS' feature was used in previous versions. + + If the compilation directory being accessed by NFS or if you use an +automounter (e.g. amd) it is recommend to explicitly set the variable +`FESTIVAL_HOME' in `config/config'. The command `pwd' is not reliable +when a directory may have multiple names. + + There is a simple test suite with Festival but it requires the three +basic voices and their respective lexicons install before it will work. +Thus you need to install + festlex_CMU.tar.gz + festlex_OALD.tar.gz + festlex_POSLEX.tar.gz + festvox_don.tar.gz + festvox_kedlpc16k.tar.gz + festvox_rablpc16k.tar.gz + If these are installed you can test the installation with + gmake test + + To simply make it run with a male US English voiuce it is sufficient +to install just + festlex_CMU.tar.gz + festlex_POSLEX.tar.gz + festvox_kallpc16k.tar.gz + + Note that the single most common reason for problems in compilation +and linking found amongst the beta testers was a bad installation of GNU +C++. If you get many strange errors in G++ library header files or link +errors it is worth checking that your system has the compiler, header +files and runtime libraries properly installed. This may be checked by +compiling a simple program under C++ and also finding out if anyone at +your site has ever used the installation. Most of these installation +problems are caused by upgrading to a newer version of libg++ without +removing the older version so a mixed version of the `.h' files exist. + + Although we have tried very hard to ensure that Festival compiles +with no warnings this is not possible under some systems. + + Under SunOS the system include files do not declare a number of +system provided functions. This a bug in Sun's include files. This +will causes warnings like "implicit definition of fprintf". These are +harmless. + + Under Linux a warning at link time about reducing the size of some +symbols often is produced. This is harmless. There is often +occasional warnings about some socket system function having an +incorrect argument type, this is also harmless. + + The speech tools and festival compile under Windows95 or Windows NT +with Visual C++ v5.0 using the Microsoft `nmake' make program. We've +only done this with the Professonal edition, but have no reason to +believe that it relies on anything not in the standard edition. + + In accordance to VC++ conventions, object files are created with +extension .obj, executables with extension .exe and libraries with +extension .lib. This may mean that both unix and Win32 versions can be +built in the same directory tree, but I wouldn't rely on it. + + To do this you require nmake Makefiles for the system. These can be +generated from the gnumake Makefiles, using the command + gnumake VCMakefile + in the speech_tools and festival directories. I have only done this +under unix, it's possible it would work under the cygnus gnuwin32 +system. + + If `make.depend' files exist (i.e. if you have done `gnumake depend' +in unix) equivalent `vc_make.depend' files will be created, if not the +VCMakefiles will not contain dependency information for the `.cc' +files. The result will be that you can compile the system once, but +changes will not cause the correct things to be rebuilt. + + In order to compile from the DOS command line using Visual C++ you +need to have a collection of environment variables set. In Windows NT +there is an instalation option for Visual C++ which sets these +globally. Under Windows95 or if you don't ask for them to be set +globally under NT you need to run + vcvars32.bat + See the VC++ documentation for more details. + + Once you have the source trees with VCMakefiles somewhere visible +from Windows, you need to copy `peech_tools\config\vc_config-dist' to +`speech_tools\config\vc_config' and edit it to suit your local +situation. Then do the same with `festival\config\vc_config-dist'. + + The thing most likely to need changing is the definition of +`FESTIVAL_HOME' in `festival\config\vc_config_make_rules' which needs +to point to where you have put festival. + + Now you can compile. cd to the speech_tools directory and do + nmake /nologo /fVCMakefile +and the library, the programs in main and the test programs should be + compiled. + + The tests can't be run automatically under Windows. A simple test to +check that things are probably OK is: + main\na_play testsuite\data\ch_wave.wav +which reads and plays a waveform. + Next go into the festival directory and do + nmake /nologo /fVCMakefile +to build festival. When it's finished, and assuming you have the + voices and lexicons unpacked in the right place, festival should run +just as under unix. + + We should remind you that the NT/95 ports are still young and there +may yet be problems that we've not found yet. We only recommend the +use the speech tools and Festival under Windows if you have significant +experience in C++ under those platforms. + + Most of the modules `src/modules' are actually optional and the +system could be compiled without them. The basic set could be reduced +further if certain facilities are not desired. Particularly: `donovan' +which is only required if the donovan voice is used; `rxp' if no XML +parsing is required (e.g. Sable); and `parser' if no stochastic paring +is required (this parser isn't used for any of our currently released +voices). Actually even `UniSyn' and `UniSyn_diphone' could be removed +if some external waveform synthesizer is being used (e.g. MBROLA) or +some alternative one like `OGIresLPC'. Removing unused modules will +make the festival binary smaller and (potentially) start up faster but +don't expect too much. You can delete these by changing the +`BASE_DIRS' variable in `src/modules/Makefile'. + +Site initialization +=================== + + Once compiled Festival may be further customized for particular +sites. At start up time Festival loads the file `init.scm' from its +library directory. This file further loads other necessary files such +as phoneset descriptions, duration parameters, intonation parameters, +definitions of voices etc. It will also load the files `sitevars.scm' +and `siteinit.scm' if they exist. `sitevars.scm' is loaded after the +basic Scheme library functions are loaded but before any of the +festival related functions are loaded. This file is intended to set +various path names before various subsystems are loaded. Typically +variables such as `lexdir' (the directory where the lexicons are held), +and `voices_dir' (pointing to voice directories) should be reset here +if necessary. + + The default installation will try to find its lexicons and voices +automatically based on the value of `load-path' (this is derived from +`FESTIVAL_HOME' at compilation time or by using the `--libdir' at +run-time). If the voices and lexicons have been unpacked into +subdirectories of the library directory (the default) then no site +specific initialization of the above pathnames will be necessary. + + The second site specific file is `siteinit.scm'. Typical examples +of local initialization are as follows. The default audio output method +is NCD's NAS system if that is supported as that's what we use normally +in CSTR. If it is not supported, any hardware specific mode is the +default (e.g. sun16audio, freebas16audio, linux16audio or mplayeraudio). +But that default is just a setting in `init.scm'. If for example in +your environment you may wish the default audio output method to be 8k +mulaw through `/dev/audio' you should add the following line to your +`siteinit.scm' file + (Parameter.set 'Audio_Method 'sunaudio) + Note the use of `Parameter.set' rather than `Parameter.def' the +second function will not reset the value if it is already set. +Remember that you may use the audio methods `sun16audio'. +`linux16audio' or `freebsd16audio' only if `NATIVE_AUDIO' was selected +in `speech_tools/config/config' and your are on such machines. The +Festival variable `*modules*' contains a list of all supported +functions/modules in a particular installation including audio support. +Check the value of that variable if things aren't what you expect. + + If you are installing on a machine whose audio is not directly +supported by the speech tools library, an external command may be +executed to play a waveform. The following example is for an imaginary +machine that can play audio files through a program called `adplay' +with arguments for sample rate and file type. When playing waveforms, +Festival, by default, outputs as unheadered waveform in native byte +order. In this example you would set up the default audio playing +mechanism in `siteinit.scm' as follows + (Parameter.set 'Audio_Method 'Audio_Command) + (Parameter.set 'Audio_Command "adplay -raw -r $SR $FILE") + For `Audio_Command' method of playing waveforms Festival supports +two additional audio parameters. `Audio_Required_Rate' allows you to +use Festivals internal sample rate conversion function to any desired +rate. Note this may not be as good as playing the waveform at the +sample rate it is originally created in, but as some hardware devices +are restrictive in what sample rates they support, or have naive +resample functions this could be optimal. The second addition audio +parameter is `Audio_Required_Format' which can be used to specify the +desired output forms of the file. The default is unheadered raw, but +this may be any of the values supported by the speech tools (including +nist, esps, snd, riff, aiff, audlab, raw and, if you really want it, +ascii). + + For example suppose you run Festival on a remote machine and are not +running any network audio system and want Festival to copy files back to +your local machine and simply cat them to `/dev/audio'. The following +would do that (assuming permissions for rsh are allowed). + (Parameter.set 'Audio_Method 'Audio_Command) + ;; Make output file ulaw 8k (format ulaw implies 8k) + (Parameter.set 'Audio_Required_Format 'ulaw) + (Parameter.set 'Audio_Command + "userhost=`echo $DISPLAY | sed 's/:.*$//'`; rcp $FILE $userhost:$FILE; \ + rsh $userhost \"cat $FILE >/dev/audio\" ; rsh $userhost \"rm $FILE\"") + Note there are limits on how complex a command you want to put in the +`Audio_Command' string directly. It can get very confusing with respect +to quoting. It is therefore recommended that once you get past a +certain complexity consider writing a simple shell script and calling +it from the `Audio_Command' string. + + A second typical customization is setting the default speaker. +Speakers depend on many things but due to various licence (and resource) +restrictions you may only have some diphone/nphone databases available +in your installation. The function name that is the value of +`voice_default' is called immediately after `siteinit.scm' is loaded +offering the opportunity for you to change it. In the standard +distribution no change should be required. If you download all the +distributed voices `voice_rab_diphone' is the default voice. You may +change this for a site by adding the following to `siteinit.scm' or per +person by changing your `.festivalrc'. For example if you wish to +change the default voice to the American one `voice_ked_diphone' + (set! voice_default 'voice_ked_diphone) + Note the single quote, and note that unlike in early versions +`voice_default' is not a function you can call directly. + + A second level of customization is on a per user basis. After +loading `init.scm', which includes `sitevars.scm' and `siteinit.scm' +for local installation, Festival loads the file `.festivalrc' from the +user's home directory (if it exists). This file may contain arbitrary +Festival commands. + +Checking an installation +======================== + + Once compiled and site initialization is set up you should test to +see if Festival can speak or not. + + Start the system + $ bin/festival + Festival Speech Synthesis System 2.0:release July 2004 + Copyright (C) University of Edinburgh, 1996-2004. All rights reserved. + For details type `(festival_warranty)' + festival> ^D + If errors occur at this stage they are most likely to do with +pathname problems. If any error messages are printed about +non-existent files check that those pathnames point to where you +intended them to be. Most of the (default) pathnames are dependent on +the basic library path. Ensure that is correct. To find out what it +has been set to, start the system without loading the init files. + $ bin/festival -q + Festival Speech Synthesis System 1.4.3:release Jan 2003 + Copyright (C) University of Edinburgh, 1996-2003. All rights reserved. + For details type `(festival_warranty)' + festival> libdir + "/projects/festival/lib/" + festival> ^D + This should show the pathname you set in your `config/config'. + + If the system starts with no errors try to synthesize something + festival> (SayText "hello world") + Some files are only accessed at synthesis time so this may show up +other problem pathnames. If it talks, you're in business, if it +doesn't, here are some possible problems. + + If you get the error message + Can't access NAS server + You have selected NAS as the audio output but have no server running +on that machine or your `DISPLAY' or `AUDIOSERVER' environment variable +is not set properly for your output device. Either set these properly +or change the audio output device in `lib/siteinit.scm' as described +above. + + Ensure your audio device actually works the way you think it does. +On Suns, the audio output device can be switched into a number of +different output modes, speaker, jack, headphones. If this is set to +the wrong one you may not hear the output. Use one of Sun's tools to +change this (try `/usr/demo/SOUND/bin/soundtool'). Try to find an audio +file independent of Festival and get it to play on your audio. Once +you have done that ensure that the audio output method set in Festival +matches that. + + Once you have got it talking, test the audio spooling device. + festival> (intro) + This plays a short introduction of two sentences, spooling the audio +output. + + Finally exit from Festival (by end of file or `(quit)') and test the +script mode with. + $ examples/saytime + + A test suite is included with Festival but it makes certain +assumptions about which voices are installed. It assumes that +`voice_rab_diphone' (`festvox_rabxxxx.tar.gz') is the default voice and +that `voice_ked_diphone' and `voice_don_diphone' +(`festvox_kedxxxx.tar.gz' and `festvox_don.tar.gz') are installed. +Also local settings in your `festival/lib/siteinit.scm' may affect +these tests. However, after installation it may be worth trying + gnumake test + from the `festival/' directory. This will do various tests +including basic utterance tests and tokenization tests. It also checks +that voices are installed and that they don't interfere with each other. +These tests are primarily regression tests for the developers of +Festival, to ensure new enhancements don't mess up existing supported +features. They are not designed to test an installation is successful, +though if they run correctly it is most probable the installation has +worked. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..992877b --- /dev/null +++ b/Makefile @@ -0,0 +1,85 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996-2002 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## The Festival Speech Synthesis System ## +## ## +## Authors: Alan W Black, Paul Taylor, Richard Caley and others ## +## Date: January 2003 ## +## ## +########################################################################### +TOP=. +DIRNAME=. +BUILD_DIRS = src lib examples bin doc +ALL_DIRS=config $(BUILD_DIRS) testsuite +CONFIG=configure configure.in config.sub config.guess \ + missing install-sh mkinstalldirs +FILES = Makefile README ACKNOWLEDGMENTS NEWS COPYING INSTALL $(CONFIG) +VERSION=$(PROJECT_VERSION) + +LOCAL_CLEAN= Templates.DB + +ALL = .config_error $(BUILD_DIRS) + +# Try and say if config hasn't been created +config_dummy := $(shell test -f config/config || ( echo '*** '; echo '*** Making default config file ***'; echo '*** '; ./configure; ) >&2) + +# force a check on the system file +system_dummy := $(shell $(MAKE) -C $(TOP)/config -f make_system.mak TOP=.. system.mak) + +include $(TOP)/config/common_make_rules + +backup: time-stamp + @ $(RM) -f $(TOP)/FileList + @ $(MAKE) file-list + @ sed 's/^\.\///' .file-list-all + @ (cd ..; tar cvf - `cat festival/.file-list-all` festival/.time-stamp | gzip > festival/festival-$(VERSION)-$(PROJECT_STATE).tar.gz ) + @ $(RM) -f $(TOP)/.file-list-all + @ ls -l festival-$(VERSION)-$(PROJECT_STATE).tar.gz + +time-stamp : + @ echo festival $(VERSION) >.time-stamp +# Too many randomly different unices out there .... +# @ echo `id -u -n`@`hostname`.`domainname` >>.time-stamp + @ date >>.time-stamp + +test: + @ $(MAKE) --no-print-directory -C testsuite test + +config/config: config/config.in config.status + ./config.status + +configure: configure.in + autoconf + +include $(EST)/config/rules/top_level.mak +include $(EST)/config/rules/install.mak diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..57eeb31 --- /dev/null +++ b/NEWS @@ -0,0 +1,219 @@ + +Note that not all features discussed in this file are included in +the standard distribution. + +HISTORY + +June 21st 2001 1.4.2 Release + Various new gcc's support + Visual C++ 6.0 support + uses configure (though could do so even more) + substantial updates to the clunits unit selection module + lots of wee bugs fixed + a few very hard bugs fixed + (client/server race condition) + (dropped bytes in reading files when machine overloaded) + (FreeBSD memory/gc problem) + default waverform type is now RIFF. + +Nov 21st 1999 1.4.1 Release + SSFF (for emulabel) track support + AIX support + Java fixes + various minor bug fixes + WFST with proper quoting + Wagon sample counts + gcc-2.95.1 support + +June 20th 1999 1.4.0 Release + becomes free software + +June 6th 1999 1.3.95 Beta + size/speed/memory leak overhaul (no memory leaks) + XML support for relation loading (for SOLE support) + JSAPI initial support + GalaxyCommunicator architecture interface + ked_mttilt_diphone voice built + Parser trained on MARSEC (prosodic) brackets rather than syntax + Unisyn_selection fully integrated + Unisyn_phonology fully integrated + viterbi cart/ngram/wfst base LTS prediction (did improve but BIG) + viterbi cart/ngram based accent prediction (didn't improve) + tilt working (again) + audioin (na_record) for many architectures + viterbi from Scheme (with cart, ngram, wfst models) + +January 26th 1999 1.3.1 Release + egcs-1.1.1 support + tobi_rules update (GM) + replace readline with editline (+ extensions) + Lots of little bug fixes + cluster code tidied up + kal voice + ked power normalization + updated lexicons with addenda for US and UK + New LTS models for US and UK English + "Building Voices in Festival" document + +August 24th 1998 1.3.0 Release + UniSun/groupfile optimizations + Java client support + Fixed ESPS so both track and wave output works + Retraining of most modules with new architecture (durations improved) + rxp, (Richard's XML parser) integrated and Sable XMLified + Fringe display program for labels and utterances + Metrical tree synthesis + A new utterance architecture (Relations and Items) + utterance save and load work properly now + Trainable LTS system + Lexicon cache system + Substantial optimization of front end (twice the speed) + UniSyn, new signal processing and generic waveform synthesis module + OLS code added + WFST support for kk rules, regular grammars etc, simple English morphology + +November 30th 1997 1.2.4 BETA + Tilt analysis and Tilt intonation modules added. + make_utts substantially improved (> 100 times faster) + text2wave script added + Pitch synchronous lpc analysis and support + rab consonant clusters labelled + New duration tree (wagon stepwise) much smaller if not better + SCFG grammar and parser (scfg_parse_text added as festival script) + change config stuff (again) + +October 1st 1997 1.2.1 RELEASE + preliminary support for Visual C++ + Use path-append rather than string-append (in buckets of places) + Minor bugs fixes throughout the code (end silences are now *always* + inserted in tts) + Linux socket bug fixed (get_url didn't work) + native irix audio support + +September 5th 1997 1.2.0 RELEASE + Proclaim modules and voices + automatic detection of voices + Phonset, lexicon, ltsrules listing and printing + 16 bit linear native support for Solaris i386 (sb16) + Update Festival Tutorial to 1.2.0 + +Aygust 15th 1997 1.1.99 Beta release + Win NT (and 95) initial support Cygnus win32 and Visual C++ + 100 more pages of documentation + LPC analysis for voices now ESPS independent + Spanish el voices tidy up (Borja) + ToBI by rule implementation + Confirmed support for gcc-2.7.2, gcc-2.6.3, Linux, FreeBSD, SunOS + Alpha and SunCC port on Solaris + reference card added + return s-expressions in server/client mode + OGI markup mode added. + Native support for sun16, linux16 and freebsd (compile time option) + Changed names of .C files to .cc files for bILL + wagon integrated into speech tools (plus docs) + auto-text-mode-alist for automatic selection of text mode from file name + Associated token tests added + Many more tokens dealt with (numbers, money, roman, phone, etc.) + (analysed databases to see what coverage is like) + A probablistic chart parser (no significant grammars though) + RJC's new database/units/join/modify modules taking shape + Some more examples added to the tutorial (with answers) + Integrated CSLU changes for OGItoolkit including TCL support + stml support for phrase types and words inline + ssml -> stml + Postlexical rules done in Scheme rather than C++ + Rest of functions to allow any manipulation of utterance from scheme + New duration models trained for both English and American + New lexicon (CMU based) + Consonant cluster support (for kd) + American diphone set + Cluster unit selection algorithm more robust + Ngram backoff smoothing + Token pos, for numbers (97.5%) but does poor on phone numbers + New lexicon with final Rs and r deletion as postlex rule + Update pos prediction (ts39) and phrase break ngrams (faster to load) + New ngram format (binary files, and smoothing) + Vowel reduction module + Sun CC port + New string class (rjc) remove dependence on libg++ + Update of course notes and new section on building models from dbs + Yarowsky homograph disambiguation + +Jan 24th 1997 1.1.1 release (first public release) + a number of configuration and INSTALL documentation bugs fixed + SSML tidied up and a festival script provided for it. + Diphones, again, checked and copyright explicitly added + +Jan 6th 1997 1.1.0 release + Roger diphones now default speaker + A new unit clustering algorithm with acoustic costs and + optimal coupling + BSD socket client/server support + A format function in Scheme (fprintf-like) + A short course on Speech Synthesis in Festival + (with course notes and exercises) + A programmable form of text modes including externally customizable + token to word rules. + Fully programmable intonation module (for ToBI-like theories) + Backtrace facility in Lisp + Externally specified Utterance end (for all tts modes) with lookahead + Roger diphones, first draft + +Nov 8th 1.0.0 release + Substantial bug fixes, stabilization and documentation updates + Added residual excited LPC synthesizer and removed PSOLA code. + Made sucs and taylor optional modules, new modules + can be added without modifying the base code + MOBY lexicon (not as good as cuvoald but free) + New diphone grouping software + A new diphone database module (free from adc) + +Sept 30th 0.1 release + MBROLA support (good example of external module) + latest news: read out the latest news (from Time Warner, Pathfinder) + audio spooler + --language option on command line + Spanish synthesis + Letter to sound rules as external system (replacing all the NRL code) + Welsh synthesis, making the whole system more language independent + sucs spoke in reasonably way (gsw_450 and f2b dbs) + document strings for functions (built in and user) and variables + access from command line and dumped automatically into texinfo + cleaned up SSML implementation + break prediction integrated using viterbi and pos + sucs module started (selection of units for concatenative synthesis) + a part-of-speech tagging system (ngram/viterbi based) + viterbi code added + fixes in SIOD for running batch and stdin, also sub_prompts added + saytime example + Memory leaks fixed, no leaks for tts + +July 30th 0.0 release (just for the sake of it) + a significiant start at documentation (texinfo -> info & html) + festival scripts using #! on first line + donovan diphone support + can compile (with too many warnings) under g++ 2.7.2 + copyrights on all files + memory leak checks (only 8 bytes for "unknown" words) + SSML (and tts file modes) + cuvoald cmu and beep lexicons + lexicon compilation + web page, emacs interface +June 2nd + Klatt duration module + syllabification in phones from letter to sound rules + Linear Regression model for F0 prediction (from ToBI labels) + CART (wagon) built trees for duration (zscores), phrase boundaries, + accent and endtone prediction. + ffeatures allowing specification of features of an utterance +May + integrated Taylor diphone module + US Naval Research letter to sound rules + CSTR lexicon + +12th April first words "hello" + + start with speech_tools library, scheme-in-one-defun and readline + and external CSTR diphone synthesizer + +7th April 1996 work started diff --git a/README b/README new file mode 100644 index 0000000..f47376e --- /dev/null +++ b/README @@ -0,0 +1,54 @@ + + The Festival Speech Synthesis System + version 2.1 RELEASE November 2010 + +This directory contains the Festival Speech Synthesis System, +developed at CSTR, University of Edinburgh. The project was originally +started by Alan W Black and Paul Taylor but many others have been +involved (see ACKNOWLEDGEMENTS file for full list). + +Festival offers a general framework for building speech synthesis +systems as well as including examples of various modules. As a whole +it offers full text to speech through a number APIs: from shell level, +though a Scheme command interpreter, as a C++ library, and an Emacs +interface. Festival is multi-lingual (currently English (US and UK) +and Spanish are distributed but a host of other voices have been +developed by others) though English is the most advanced. + +The system is written in C++ and uses the Edinburgh Speech Tools +for low level architecture and has a Scheme (SIOD) based command +interpreter for control. Documentation is given in the FSF texinfo +format which can generate, a printed manual, info files and HTML. + +COPYING + +Festival is free. Earlier versions were restricted to non-commercial +use but we have now relaxed those conditions. The licence is an X11 +style licence thus it can be incorporated in commercial products +and free source products without restriction. See COPYING for the +actual details. + +INSTALL + +Festival should run on any standard Unix platform. It has already run +on Solaris, SunOS, Linux and FreeBSD. It requires a C++ compiler (GCC +2.7.2, 2.8.1, 2.95.[123], 3.2.3 3.3.2 RedHat "gcc-2.96", gcc 3.3, gcc +4.4.x and gcc-4.5.x are our standard compilers) to install. A port to +Windows XP/NT/95/98 and 2000 using either Cygnus GNUWIN32, this is +still new but many people are successfully using it. + +A detailed description of installation and requirements for the whole +system is given in the file INSTALL read that for details. + +NEWS + +Keep abreast of Festival News by regularly checking the Festival homepage + http://www.cstr.ed.ac.uk/projects/festival/ +or the US site + http://festvox.org/festival/ + +New in Festival 2.1 + Support for various new GCC compilers + Improved support for hts, clustergen, clunits and multisyn voices + lots of wee bugs fixed + diff --git a/bin/Makefile b/bin/Makefile new file mode 100644 index 0000000..f788344 --- /dev/null +++ b/bin/Makefile @@ -0,0 +1,57 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1994,1995,1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: June 1997 ## + ## --------------------------------------------------------------------- ## + ## Makefile for bin directory. ## + ## ## + ## If we are staticly linked, we link to things in main, otherwise we ## + ## write scripts which set LD_LIBRARY_PATH. ## + ## ## + ## Things in scripts are preprocessed. ## + ## ## + ########################################################################### + +TOP=.. +DIRNAME=bin +FILES= Makefile VCLocalRules + +ALL = .remove_links .link_main .process_scripts text2wave + +include $(TOP)/config/common_make_rules +include $(EST)/config/rules/bin_process.mak + +text2wave: + @ cp -p $(TOP)/examples/text2wave . + diff --git a/bin/VCLocalRules b/bin/VCLocalRules new file mode 100644 index 0000000..c3ae385 --- /dev/null +++ b/bin/VCLocalRules @@ -0,0 +1,4 @@ +# don't make text2wave + +text2wave: + @echo "no text to wave" diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..83c544d --- /dev/null +++ b/config.guess @@ -0,0 +1,1327 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. + +timestamp='2002-01-30' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c ; + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $dummy.c $dummy.o $dummy.rel ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + UNAME_MACHINE_ARCH=`(uname -p) 2>/dev/null` || \ + UNAME_MACHINE_ARCH=unknown + case "${UNAME_MACHINE_ARCH}" in + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy + fi ;; + esac + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i386-pc-interix3 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + rm -f $dummy.c + test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Export LANG=C to prevent ld from outputting information in other + # languages. + ld_supported_targets=`LANG=C; export LANG; cd /; ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + echo i386-${UNAME_MACHINE}-nto-qnx + else + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + fi + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..c840398 --- /dev/null +++ b/config.sub @@ -0,0 +1,1450 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. + +timestamp='2002-02-01' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dsp16xx \ + | fr30 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips16 | mips64 | mips64el | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el | mips64vr4300 \ + | mips64vr4300el | mips64vr5000 | mips64vr5000el \ + | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \ + | mipsisa32 \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[34] | sh[34]eb | shbe | shle | sh64 \ + | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c54x-* \ + | clipper-* | cray2-* | cydra-* \ + | d10v-* | d30v-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | m32r-* \ + | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \ + | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \ + | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \ + | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [cjt]90) + basic_machine=${basic_machine}-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh3eb | sh4eb) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* | -morphos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/Makefile b/config/Makefile new file mode 100644 index 0000000..977fff9 --- /dev/null +++ b/config/Makefile @@ -0,0 +1,48 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Makefile for config directory ## +## ## +########################################################################### +TOP=.. +DIRNAME=config + +CONFIGS = config.in vc_config_make_rules-dist +FILES=Makefile common_make_rules vc_common_make_rules \ + test_make_rules project.mak project_config_check.mak \ + system.sh make_system.mak \ + $(CONFIGS) +ALL_DIRS = modules systems + +include $(TOP)/config/common_make_rules + diff --git a/config/common_make_rules b/config/common_make_rules new file mode 100644 index 0000000..ef2775c --- /dev/null +++ b/config/common_make_rules @@ -0,0 +1,67 @@ + ########################################################-*-mode:Makefile-*- + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Various People ## + ## : Reorganised (and probably broken) ## + ## : by Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: June 1997 ## + ## --------------------------------------------------------------------- ## + ## Default Makefile rules includede everywhere. ## + ## ## + ########################################################################### + +# This is the default rule +all: $(ALL) .sub_directories + @ : Do nothing but shut up make + +# Include generated system description + +include $(TOP)/config/system.mak + +ifeq ($(SYSTEM_LOADED),) + MACHINETYPE=unknown + OSTYPE=unknown + OSREV= +endif + +# Include project specific rules + +-include $(TOP)/config/project.mak + +# Include installation specific information + +-include $(TOP)/config/config + +# indirect to shared rule sets directory + +include $(EST)/config/rules/common_make_rules.mak diff --git a/config/config.in b/config/config.in new file mode 100644 index 0000000..d7a28e5 --- /dev/null +++ b/config/config.in @@ -0,0 +1,76 @@ +########################################################-*-mode:Makefile-*- +## ## +## Festival: local configuration file ## +## ## +########################################################################### +## +## Specific config file for local installation +## + +########################################################################### +## Which speech tools to use + +EST=$(TOP)/../speech_tools + +########################################################################### +## Where the festival tree will be installed. +## +## The default is that festival will remain where it is compiled. +## +## You may need to set this explicitly if automounter or NFS +## side effects cause problems + +FESTIVAL_HOME := $(shell (cd $(TOP); pwd)) + +########################################################################### +## Feature selection. +## +## Select modules to include. + +## Non Free PSOLA synthesis. This isn't distributed with festival because +## of a patent, if you have src/modules/diphone/di_psolaTM.cc you can +## include this feature. +# INCLUDE_PSOLA_TM=1 + +## Support for TCL. So that festival may eval TCL commands and TCL may eval +## festival commands. This was added to support the CSLU toolkit but +## others may want it too. +# INCLUDE_TCL=1 + +########################################################################### +## Take most settings from speech tools. + +include $(EST)/config/config + +########################################################################### +## Add any extra modules you wish to include + +## These sub modules are *optional* and unless you know what they are +## you probabaly don't want them or need them. They are typically +## new code that isn't yet stable yet and being used for research or +## old code left in for compatibility for some users + +## Experimental UniSyn, metrical tree, phonological structure matching +## code +# ALSO_INCLUDE += UniSyn_phonology UniSyn_selection +## Cluster unit selection code as described in "Building Voices in +## Festival", again experimental and suitable for research purposes only. +ALSO_INCLUDE += clunits clustergen MultiSyn + +## NITECH and Tokyo Institute of Technologies HTS support +ALSO_INCLUDE += hts_engine + +## Old diphone code that will be delete, left in only for some +## compatibility +# ALSO_INCLUDE += diphone + +## Other (non-Edinburgh) modules may also be specified here (e.g. OGI code), + +ALSO_INCLUDE += + +########################################################################### +## +## Describe your local system below by redefining things defined +## in config/configs/default.mak. + + diff --git a/config/make_system.mak b/config/make_system.mak new file mode 100644 index 0000000..5acf40a --- /dev/null +++ b/config/make_system.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Guess what kind of system we are on. ## + ## ## + ########################################################################### + +system.mak : config + @echo Check system type >&2 + @/bin/sh $(TOP)/config/system.sh $(TOP)/config/systems > system.mak + diff --git a/config/modules/Makefile b/config/modules/Makefile new file mode 100644 index 0000000..b950f75 --- /dev/null +++ b/config/modules/Makefile @@ -0,0 +1,50 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Makefile for config directory ## +## ## +########################################################################### +TOP=../.. +DIRNAME=config/modules + +RULESETS = efence.mak dmalloc.mak \ + psola_tm.mak editline.mak tcl.mak \ + freebsd16_audio.mak irix_audio.mak linux16_audio.mak \ + sun16_audio.mak win32_audio.mak macosx_audio.mak \ + mplayer_audio.mak nas_audio.mak esd_audio.mak native_audio.mak \ + siod.mak wagon.mak scfg.mak wfst.mak ols.mak debugging.mak + +FILES = Makefile descriptions $(RULESETS) + +include $(TOP)/config/common_make_rules + diff --git a/config/modules/debugging.mak b/config/modules/debugging.mak new file mode 100644 index 0000000..30f5db7 --- /dev/null +++ b/config/modules/debugging.mak @@ -0,0 +1,50 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Turn on various debugging facilities. ## + ## ## + ########################################################################### + +ifndef INCLUDE_DEBUGGING + INCLUDE_DEBUGGING=1 +endif + + +MOD_DESC_DEBUGGING=Compile in some debugging facilities + + +MODULE_DEFINES += -DEST_DEBUGGING + + diff --git a/config/modules/descriptions b/config/modules/descriptions new file mode 100644 index 0000000..5b60ed4 --- /dev/null +++ b/config/modules/descriptions @@ -0,0 +1,14 @@ + + ########################################################################### + ## ## + ## Descriptions of uninteresting modules. ## + ## ## + ########################################################################### + +desc_asr="(From EST) Speech recognition code" +desc_native_audio="(from EST) Native audio module for your system" +desc_ols="(from EST) Ordinary Least Squares support" +desc_scfg="(from EST) Stochastic context free grammars" +desc_siod="(from EST) Scheme In One Defun" +desc_wagon="(from EST) Wagon CART tree system" +desc_wfst="(from EST) Weighted Finite State Automata" diff --git a/config/modules/dmalloc.mak b/config/modules/dmalloc.mak new file mode 100644 index 0000000..63e4ada --- /dev/null +++ b/config/modules/dmalloc.mak @@ -0,0 +1,54 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed Jun 3 1998 ## + ## -------------------------------------------------------------------- ## + ## Link in the dmalloc library and include the header. ## + ## ## + ########################################################################### + +ifndef INCLUDE_DMALLOC + INCLUDE_DMALLOC=1 +endif + +MOD_DESC_DMALLOC=Compile with debugging malloc library + +DEBUG_LIBS += -L$(DMALLOC_LIB) -ldmalloc + +ifdef DMALLOC_INCLUDE + DEBUG_DEFINES += -I $(DMALLOC_INCLUDE) +endif + +DEBUG_DEFINES += -DINCLUDE_DMALLOC + diff --git a/config/modules/editline.mak b/config/modules/editline.mak new file mode 100644 index 0000000..fe83c37 --- /dev/null +++ b/config/modules/editline.mak @@ -0,0 +1,52 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: December 1998 ## + ## -------------------------------------------------------------------- ## + ## Command line editor based on editline ## + ## ## + ########################################################################### + +INCLUDE_EDITLINE=1 + +MOD_DESC_EDITLINE=Use editline for command line editing and history + +IO_DEFINES += -DSUPPORT_EDITLINE $(MODULE_EDITLINE_OPTIONS:%=-DEDITLINE_%) +MODULE_LIBS += $(TERMCAPLIB) + +ifeq ($(DIRNAME),siod) + CSRCS := $(CSRCS) el_complete.c editline.c el_sys_unix.c +endif + + diff --git a/config/modules/efence.mak b/config/modules/efence.mak new file mode 100644 index 0000000..0a01e4f --- /dev/null +++ b/config/modules/efence.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for whan compiling with efence. ## + ## ## + ########################################################################### + +INCLUDE_EFENCE=1 + +MOD_DESC_EFENCE=Compile with efence memory error detection package + +DEBUG_LIBS += -L$(EFENCE_LIB) -lefence + diff --git a/config/modules/esd_audio.mak b/config/modules/esd_audio.mak new file mode 100644 index 0000000..e113ffc --- /dev/null +++ b/config/modules/esd_audio.mak @@ -0,0 +1,49 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for ESD audio support. ## + ## ## + ########################################################################### + +INCLUDE_ESD_AUDIO=1 + +MOD_DESC_ESD_AUDIO=(from EST) Use ESD Audio + +AUDIO_DEFINES += -DSUPPORT_ESD +AUDIO_INCLUDES += -I$(ESD_INCLUDE) +MODULE_LIBS += -L$(ESD_LIB) -lesd -laudiofile + + diff --git a/config/modules/freebsd16_audio.mak b/config/modules/freebsd16_audio.mak new file mode 100644 index 0000000..e1bfc99 --- /dev/null +++ b/config/modules/freebsd16_audio.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for Freebsd 16 bit audio support. ## + ## ## + ########################################################################### + +INCLUDE_FREEBSD16_AUDIO=1 + +MOD_DESC_FREEBSD16_AUDIO=(from EST) Native audio module for FreeBSD systems + +AUDIO_DEFINES += -DSUPPORT_FREEBSD16 + diff --git a/config/modules/irix_audio.mak b/config/modules/irix_audio.mak new file mode 100644 index 0000000..6d08ed0 --- /dev/null +++ b/config/modules/irix_audio.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for Irix audio support. ## + ## ## + ########################################################################### + +INCLUDE_IRIX_AUDIO=1 + +MOD_DESC_IRIX_AUDIO=(from EST) Native audio module for Irix systems + +AUDIO_DEFINES += -DSUPPORT_IRIX + diff --git a/config/modules/linux16_audio.mak b/config/modules/linux16_audio.mak new file mode 100644 index 0000000..e19ea82 --- /dev/null +++ b/config/modules/linux16_audio.mak @@ -0,0 +1,57 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for Linux 16 bit audio support. ## + ## ## + ########################################################################### + + +INCLUDE_LINUX16_AUDIO=1 + +MOD_DESC_LINUX16_AUDIO=(from EST) Native audio module for Linux systems + +ifeq ($(LINUXAUDIO),alsa) + AUDIO_DEFINES += -DSUPPORT_ALSALINUX + MODULE_LIBS += -lasound +endif + +ifeq ($(LINUXAUDIO),none) + AUDIO_DEFINES += -DSUPPORT_VOXWARE +endif + +ifdef INCLUDE_JAVA_CPP + MODULE_LIBS += -lpthread +endif diff --git a/config/modules/macosx_audio.mak b/config/modules/macosx_audio.mak new file mode 100644 index 0000000..3c6b48d --- /dev/null +++ b/config/modules/macosx_audio.mak @@ -0,0 +1,16 @@ + ########################################################################### + ## ## + ## Author: Brian Foley (bfoley@compsoc.nuigalway.ie) ## + ## Date: Wed Feb 17 2004 ## + ## -------------------------------------------------------------------- ## + ## Definitions for MacOS X audio support. ## + ## ## + ########################################################################### + +INCLUDE_MACOSX_AUDIO=1 + +MOD_DESC_MACOSX_AUDIO=(from EST) CoreAudio audio module for MacOS X systems + +AUDIO_DEFINES += -DSUPPORT_MACOSX_AUDIO + +MODULE_LIBS += -framework CoreAudio -framework AudioUnit -framework AudioToolbox -framework Carbon diff --git a/config/modules/mplayer_audio.mak b/config/modules/mplayer_audio.mak new file mode 100644 index 0000000..cfd20b1 --- /dev/null +++ b/config/modules/mplayer_audio.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for Mplayer audio support. ## + ## ## + ########################################################################### + +INCLUDE_MPLAYER_AUDIO=1 + +MOD_DESC_MPLAYER_AUDIO=(from EST) Audio module for calling windows mplayer + +AUDIO_DEFINES += -DSUPPORT_MPLAYER + diff --git a/config/modules/nas_audio.mak b/config/modules/nas_audio.mak new file mode 100644 index 0000000..04740e3 --- /dev/null +++ b/config/modules/nas_audio.mak @@ -0,0 +1,49 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for NAS audio support. ## + ## ## + ########################################################################### + +INCLUDE_NAS_AUDIO=1 + +MOD_DESC_NAS_AUDIO=(from EST) Use Network Audio + +AUDIO_DEFINES += -DSUPPORT_NAS +AUDIO_INCLUDES += -I$(NAS_INCLUDE) +MODULE_LIBS += -L$(NAS_LIB) -laudio -L$(X11_LIB) -lX11 -lXt + + diff --git a/config/modules/native_audio.mak b/config/modules/native_audio.mak new file mode 100644 index 0000000..f893963 --- /dev/null +++ b/config/modules/native_audio.mak @@ -0,0 +1,45 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Dummy module to document native audio selection. ## + ## ## + ########################################################################### + + +INCLUDE_NATIVE_AUDIO=1 + +MOD_DESC_NATIVE_AUDIO=(from EST) Native audio module for your system + + diff --git a/config/modules/ols.mak b/config/modules/ols.mak new file mode 100644 index 0000000..9dae697 --- /dev/null +++ b/config/modules/ols.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Mon Jun 1 1998 ## + ## -------------------------------------------------------------------- ## + ## NOthing special to do. ## + ## ## + ########################################################################### + +INCLUDE_OLS=1 + +MOD_DESC_OLS=(from EST) Ordinary Least Squares support + + + diff --git a/config/modules/psola_tm.mak b/config/modules/psola_tm.mak new file mode 100644 index 0000000..748f575 --- /dev/null +++ b/config/modules/psola_tm.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for psola(tm) audio support. ## + ## ## + ########################################################################### + +INCLUDE_PSOLA_TM=1 + +MOD_DESC_PSOLA_TM=Include PSOLA(tm) synthesis code. + +MODULE_DIPHONE_DEFINES += -DSUPPORT_PSOLA_TM $(MODULE_PSOLA_TM_OPTIONS:%=-DPSOLA_TM_%) + + diff --git a/config/modules/scfg.mak b/config/modules/scfg.mak new file mode 100644 index 0000000..5e5602c --- /dev/null +++ b/config/modules/scfg.mak @@ -0,0 +1,43 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Mon Jun 1 1998 ## + ## -------------------------------------------------------------------- ## + ## NOthing special to do. ## + ## ## + ########################################################################### + +INCLUDE_SCFG=1 + +MOD_DESC_SCFG=(from EST) Stochastic context free grammars diff --git a/config/modules/siod.mak b/config/modules/siod.mak new file mode 100644 index 0000000..9a74c39 --- /dev/null +++ b/config/modules/siod.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Mon Jun 1 1998 ## + ## -------------------------------------------------------------------- ## + ## NOthing special to do. ## + ## ## + ########################################################################### + +INCLUDE_SIOD=1 + +MOD_DESC_SIOD=(from EST) Scheme In One Defun + diff --git a/config/modules/sun16_audio.mak b/config/modules/sun16_audio.mak new file mode 100644 index 0000000..f694552 --- /dev/null +++ b/config/modules/sun16_audio.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for Sun 16 bit audio support. ## + ## ## + ########################################################################### + +INCLUDE_SUN16_AUDIO=1 + +MOD_DESC_SUN16_AUDIO=(from EST) Native audio module for Solaris systems + +AUDIO_DEFINES += -DSUPPORT_SUN16 + diff --git a/config/modules/tcl.mak b/config/modules/tcl.mak new file mode 100644 index 0000000..2778751 --- /dev/null +++ b/config/modules/tcl.mak @@ -0,0 +1,49 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for TCL audio support. ## + ## ## + ########################################################################### + +INCLUDE_TCL=1 + +MOD_DESC_TCL=(from EST) Include TCL interface + +FESTIVAL_DEFINES += -DSUPPORT_TCL +FESTIVAL_INCLUDES += -I$(TCL_INCLUDE) +MODULE_LIBS += -L$(TCL_LIB) -ltcl7.6 + + diff --git a/config/modules/wagon.mak b/config/modules/wagon.mak new file mode 100644 index 0000000..fb52d6b --- /dev/null +++ b/config/modules/wagon.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Mon Jun 1 1998 ## + ## -------------------------------------------------------------------- ## + ## NOthing special to do. ## + ## ## + ########################################################################### + +INCLUDE_WAGON=1 + +MOD_DESC_WAGON=(from EST) Wagon CART tree system + + + diff --git a/config/modules/wfst.mak b/config/modules/wfst.mak new file mode 100644 index 0000000..be89651 --- /dev/null +++ b/config/modules/wfst.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Mon Jun 1 1998 ## + ## -------------------------------------------------------------------- ## + ## NOthing special to do. ## + ## ## + ########################################################################### + +INCLUDE_WFST=1 + +MOD_DESC_WFST=(from EST) Weighted Finite State Automata + diff --git a/config/modules/win32_audio.mak b/config/modules/win32_audio.mak new file mode 100644 index 0000000..5f0536a --- /dev/null +++ b/config/modules/win32_audio.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Wed May 27 1998 ## + ## -------------------------------------------------------------------- ## + ## Defenitions for Win32 audio support. ## + ## ## + ########################################################################### + +INCLUDE_WIN32_AUDIO=1 + +MOD_DESC_WIN32_AUDIO=(from EST) Audio for Win32 systems + +AUDIO_DEFINES += -DSUPPORT_WIN32AUDIO + diff --git a/config/project.mak b/config/project.mak new file mode 100644 index 0000000..de0cee3 --- /dev/null +++ b/config/project.mak @@ -0,0 +1,118 @@ + ########################################################-*-mode:Makefile-*- + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Tue Oct 7 1997 ## + ## -------------------------------------------------------------------- ## + ## Description of festival. ## + ## ## + ########################################################################### + +PROJECT_NAME = Festival Speech Synthesis System +PROJECT_PREFIX = FESTIVAL +PROJECT_VERSION = 2.1 +PROJECT_DATE = November 2010 +PROJECT_STATE = release + + +# config files of projects we depend on + +PROJECT_OTHER_CONFIGS = $(EST)/config/config + +# Place to find the optional modules for this project. + +MODULE_DIRECTORY = $(TOP)/src/modules + +DISTRIBUTED_MODULES = \ + JAVA + +DEVELOPMENT_MODULES = RJC_SYNTHESIS \ + UNISYN_PHONOLOGY + +UTILITY_MODULES = + +ALL_REAL_MODULES = \ + $(DISTRIBUTED_MODULES) \ + $(DEVELOPMENT_MODULES) + +ALL_MODULES = \ + $(ALL_REAL_MODULES) \ + $(UTILITY_MODULES) + +# Place where programs are compiled + +PROJECT_MAIN_DIR=$(FESTIVAL_HOME)/src/main +PROJECT_SCRIPTS_DIR=$(FESTIVAL_HOME)/src/scripts + +# Where the main RCS tree is, probably only used within CSTR + +CENTRAL_DIR = $(LOCAL_REPOSITORY)/festival/code_base/festival + +# Libraries defined in this project + +PROJECT_LIBRARIES = Festival +PROJECT_LIBRARY_DIR_Festival = $(TOP)/src/lib +PROJECT_DEFAULT_LIBRARY = Festival + +# Libraries used from other projects + +REQUIRED_LIBRARIES = estools estbase eststring +REQUIRED_LIBRARY_DIR_estools = $(EST)/lib +REQUIRED_LIBRARY_DIR_estbase = $(EST)/lib +REQUIRED_LIBRARY_DIR_eststring = $(EST)/lib + +REQUIRED_MAKE_INCLUDE = $(EST)/make.include + +# Includes for this and related projects + +PROJECT_INCLUDES = -I$(TOP)/src/include -I$(EST)/include + +PROJECT_TEMPLATE_DIRS = src/arch/festival +PROJECT_TEMPLATE_DBS = $(TOP) $(EST) + +LIBRARY_TEMPLATE_DIRS_estools = $(LIBRARY_TEMPLATE_DIRS:%=$(EST)/%) + +JAVA_CLASS_LIBRARY = $(TOP)/src/lib/festival.jar + +JAVA_CLASSPATH= $(TOP)/lib/festival.jar:$(EST_HOME)/lib/est_$(EST_JAVA_VERSION).jar:$(SYSTEM_JAVA_CLASSPATH) + +PROJECT_JAVA_ROOT=$(TOP)/src/modules/java + +# Places to look for documentation + +DOCXX_DIRS = $(TOP)/src +MODULE_TO_DOCXX = perl $(TOP)/src/modules/utilities/extract_module_doc++.prl + +FTLIBDIR = $(FESTIVAL_HOME)/lib + + diff --git a/config/project_config_check.mak b/config/project_config_check.mak new file mode 100644 index 0000000..82c0041 --- /dev/null +++ b/config/project_config_check.mak @@ -0,0 +1,41 @@ + +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### + +ifndef INCLUDE_SIOD +.config_error:: FORCE + @echo "+--------------------------------------------------" + @echo "| Must compile speech tools with SIOD support" + @echo "+--------------------------------------------------" + @exit 1 +endif diff --git a/config/system.sh b/config/system.sh new file mode 100644 index 0000000..af07781 --- /dev/null +++ b/config/system.sh @@ -0,0 +1,115 @@ +#!/bin/sh + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Guess what kind of system we are on. ## + ## ## + ########################################################################### + +# Where the Makefile fragments live +SYSTEMS=$1 + +# Drop and _xxx from the end +OSTYPE=`uname -s | + sed -e '/^\([^_]*\).*/s//\1/' -e '/\//s///g'` + +# CPU, downcased, /s and some uninteresting details eliminated +MACHINETYPE=`{ mach || uname -m || echo unknown ; } 2>/dev/null | + tr ABCDEFGHIJKLMNOPQRSTUVWXYZ/ abcdefghijklmnopqrstuvwxyz_ | + sed -e 's/i[0-9]86/ix86/' \ + -e 's/sun4/sparc/' \ + -e 's/ip[0-9]*/ip/'\ + -e 's/ /_/g'\ + -e 's/9000_7../hp9000/' + ` + +# OR revision, only take first two numbers. +OSREV=`{ uname -r || echo ""; } 2> /dev/null | + sed -e 's/^\([^.]*\)\(\.[^-. ]*\).*/\1\2/'` + +# Sort out various flavours of Linux +if [ "$OSTYPE" = Linux ] + then + if [ -f "/etc/redhat-release" ] + then + OSTYPE=RedHatLinux + OSREV=`cat /etc/redhat-release | sed -e 's/[^0-9]*\([0-9.]*\).*/\1/'` + elif [ -f "/etc/debian_version" ] + then + OSTYPE=DebianGNULinux + OSREV=`cat /etc/debian_version` + else + # Generic unknown GNU/Linux system. + OSTYPE=Linux + fi +fi + +# Make sure we actually have a .mak file for it, otherwise fall back +# to sensible defaults (for example, kernel version and architecture +# are completely irrelevant on Linux) +if [ ! -f "${SYSTEMS}/${MACHINETYPE}_${OSTYPE}${OSREV}.mak" ]; then + if [ -f "${SYSTEMS}/${OSTYPE}${OSREV}.mak" ]; then + MACHINETYPE=unknown + elif [ -f "${SYSTEMS}/${MACHINETYPE}_${OSTYPE}.mak" ]; then + OSREV= + elif [ -f "${SYSTEMS}/unknown_${OSTYPE}.mak" ]; then + MACHINETYPE=unknown + OSREV= + elif [ "$OSTYPE" = "RedHatLinux" -o "$OSTYPE" = "DebianGNULinux" ]; then + MACHINETYPE=unknown + OSTYPE=Linux + OSREV= + elif [ "$OSTYPE" = "Darwin" ]; then + OSREV= + else + OSTYPE=unknown + OSREV= + fi +fi + +echo ' ###########################################################################' +echo ' ## This file is created automatically from your config file.' +echo ' ## Do not hand edit.' +echo ' ## Created:'`date` +echo ' ###########################################################################' + +echo '' + +echo "OSTYPE:=$OSTYPE" +echo "MACHINETYPE:=$MACHINETYPE" +echo "OSREV:=$OSREV" +echo "SYSTEM_LOADED:=1" + +exit 0 diff --git a/config/systems/DebianGNULinux.mak b/config/systems/DebianGNULinux.mak new file mode 100644 index 0000000..9a0a23e --- /dev/null +++ b/config/systems/DebianGNULinux.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: David Huggins-Daines ## + ## -------------------------------------------------------------------- ## + ## Settings for Debian GNU/Linux distributions. ## + ## ## + ########################################################################### + +# Debian does not use termcap +OS_LIBS = -ldl -lncurses diff --git a/config/systems/Linux.mak b/config/systems/Linux.mak new file mode 100644 index 0000000..923c9a7 --- /dev/null +++ b/config/systems/Linux.mak @@ -0,0 +1,63 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for Linux. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +DEFAULT_JAVA_HOME=/usr/lib/jdk-1.1.6 +JAVA=/usr/bin/java +JAVAC=/usr/bin/javac +JAVAH=/usr/bin/javah + +TCL_LIBRARY = -ltcl +OS_LIBS = -ldl + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = LINUX16 + +## echo -n doesn't work +ECHO_N = /usr/bin/printf "%s" + +GNUTEST=test + +## awk is gawk, so it does all we could desire and then more. +NAWK=awk + + + diff --git a/config/systems/Makefile b/config/systems/Makefile new file mode 100644 index 0000000..6b9fdaf --- /dev/null +++ b/config/systems/Makefile @@ -0,0 +1,107 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Makefile for config directory ## +## ## +########################################################################### +TOP=../.. +DIRNAME=config/systems + +SYSTEMS = \ + Linux.mak \ + RedHatLinux.mak \ + DebianGNULinux.mak \ + alpha_Linux.mak \ + alpha_OSF1V4.0.mak \ + alpha_RedHatLinux.mak \ + hp9000_HP-UX.mak \ + hp9000_HP-UXB.10.mak \ + ip_IRIX.mak \ + ip_IRIX5.3.mak \ + ip_IRIX6.3.mak \ + ip_IRIX6.4.mak \ + ip_IRIX646.4.mak \ + ix86_CYGWIN1.0.mak \ + ix86_CYGWIN1.1.mak \ + ix86_CYGWIN1.3.mak \ + ix86_CYGWIN1.4.mak \ + ix86_CYGWIN1.5.mak \ + ix86_CYGWIN1.7.mak \ + ix86_CYGWIN20.1.mak \ + ix86_CYGWIN32.mak \ + ix86_CYGWIN324.0.mak \ + ix86_Darwin.mak \ + ix86_FreeBSD.mak \ + ix86_FreeBSD2.1.mak \ + ix86_FreeBSD2.2.mak \ + ix86_FreeBSD3.0.mak \ + ix86_FreeBSD3.1.mak \ + ix86_FreeBSD3.2.mak \ + ix86_FreeBSD3.3.mak \ + ix86_FreeBSD4.0.mak \ + ix86_OS22.mak \ + ix86_RedHatLinux4.0.mak \ + ix86_RedHatLinux4.1.mak \ + ix86_RedHatLinux4.2.mak \ + ix86_RedHatLinux5.0.mak \ + ix86_RedHatLinux5.1.mak \ + ix86_RedHatLinux5.2.mak \ + ix86_RedHatLinux6.0.mak \ + ix86_RedHatLinux6.1.mak \ + ix86_RedHatLinux6.2.mak \ + ix86_RedHatLinux7.0.mak \ + ix86_SunOS5.5.mak \ + ix86_SunOS5.6.mak \ + ix86_SunOS5.7.mak \ + ix86_SunOS5.8.mak \ + ix86_SunOS5.mak \ + rs6000_AIX4.1.mak \ + sparc_SunOS4.1.mak \ + sparc_SunOS4.mak \ + sparc_SunOS5.5.mak \ + sparc_SunOS5.6.mak \ + sparc_SunOS5.7.mak \ + sparc_SunOS5.8.mak \ + sparc_SunOS5.mak \ + unknown_DebianGNULinux.mak \ + unknown_Linux.mak \ + unknown_RedHatLinux.mak \ + power_macintosh_Darwin.mak \ + unknown_unknown.mak \ + x86_64_Darwin.mak \ + + +FILES = Makefile default.mak $(SYSTEMS) + +include $(TOP)/config/common_make_rules + diff --git a/config/systems/RedHatLinux.mak b/config/systems/RedHatLinux.mak new file mode 100644 index 0000000..a751a67 --- /dev/null +++ b/config/systems/RedHatLinux.mak @@ -0,0 +1,42 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux distributions. ## + ## ## + ########################################################################### + + + + diff --git a/config/systems/alpha_Linux.mak b/config/systems/alpha_Linux.mak new file mode 100644 index 0000000..ffccade --- /dev/null +++ b/config/systems/alpha_Linux.mak @@ -0,0 +1,45 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux distributions. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak + +CFLAGS += -mieee + + + diff --git a/config/systems/alpha_OSF1V4.0.mak b/config/systems/alpha_OSF1V4.0.mak new file mode 100644 index 0000000..2b61df6 --- /dev/null +++ b/config/systems/alpha_OSF1V4.0.mak @@ -0,0 +1,48 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Sat Oct 18 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for DEC Alpha OSF1 V4.0 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = /bin/printf "%s" + + + + diff --git a/config/systems/alpha_RedHatLinux.mak b/config/systems/alpha_RedHatLinux.mak new file mode 100644 index 0000000..9c45ebf --- /dev/null +++ b/config/systems/alpha_RedHatLinux.mak @@ -0,0 +1,48 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux on Alpha. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/alpha_Linux.mak + +ifndef GCC + GCC=egcs +endif +EGCS_CC=gcc +EGCS_CXX=g++ + + diff --git a/config/systems/default.mak b/config/systems/default.mak new file mode 100644 index 0000000..69e8835 --- /dev/null +++ b/config/systems/default.mak @@ -0,0 +1,144 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Very common settings to avoid repetition. ## + ## ## + ########################################################################### + +########################################################################### +## Installation directories + +INSTALL_PREFIX=/usr/local + +BINDIR=$(INSTALL_PREFIX)/bin +LIBDIR=$(INSTALL_PREFIX)/lib +INCDIR=$(INSTALL_PREFIX)/include +MANDIR=$(INSTALL_PREFIX)/man + +########################################################################### +## Where the central RCS masters are stored. +## +## Used for development at CSTR, you can probably ignore it. + +LOCAL_REPOSITORY = + +########################################################################### +## Where to find Network Audio + +NAS_INCLUDE = /usr/X11R6/include +NAS_LIB = /usr/X11R6/lib + +########################################################################### +## Where to find Enlightenment Speech Demon + +ESD_INCLUDE = /usr/local/include +ESD_LIB = /usr/local/lib + +########################################################################### +## Where to find X11 + +X11_INCLUDE = /usr/X11R6/include +X11_LIB = /usr/X11R6/lib + +########################################################################### +## TCL support + +TCL_INCLUDE = /usr/local/include +TCL_LIB = /usr/local/lib +TCL_LIBRARY = -ltcl7.6 + +########################################################################### +## Efence library for malloc debugging + +EFENCE_LIB = /usr/local/lib + +########################################################################### +## Commands. + +## Must support -nt +GNUTEST = gnutest + +## +INSTALL_PROG = install + +## Used to index libraries +RANLIB = ranlib + +## echo without a newline +ECHO_N = echo -n + +## make depend for when we haven't specified a compiler +MAKE_DEPEND = makedepend $(INCLUDES) $(TEMPLATES) $(TEMPLATE_SPECIFIC) + +## Generic library building +BUILD_LIB =$(AR) cruv + +## generic library indexing +INDEX_LIB = $(RANLIB) + +## shrink executables +STRIP = strip + +## Useful sloth +DO_NOTHING = true +DO_NOTHING_ARGS = : + +## different types of awk. For our purposes gawk can be used for nawk +AWK = awk +NAWK = nawk + +## Perl. Not used in build, but we have some perl scripts. +PERL=/usr/bin/perl + +## Just in case someone has a broken test +TEST = test + +## Must understand -nt +GNUTEST = gnutest + +## Avoid clever RMs people may have on their path +RM = /bin/rm + +########################################################################### +## Arguments for DOC++ for creating documentation + +DOCXX = doc++_sane +DOCXX_ARGS = -a -f -B banner.inc -M sane -D 'SYSTEM "$(EST_HOME)/doc/sane.dtd"' + + +COMPILER_VERSION_COMMAND=true +JAVA_COMPILER_VERSION_COMMAND=true + +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include/genunix diff --git a/config/systems/hp9000_HP-UX.mak b/config/systems/hp9000_HP-UX.mak new file mode 100644 index 0000000..336ce20 --- /dev/null +++ b/config/systems/hp9000_HP-UX.mak @@ -0,0 +1,62 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## HP 9000 series. ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/default.mak + +## Just guesses for what people are likely to have +GCC=gcc27 + +## Libraries needed for sockets based programs. +OS_LIBS = -lsocket -lnsl + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = + +## Official location for java +DEFAULT_JAVA_HOME=/usr/java1.1 + +GCC_SYSTEM_OPTIONS = + +## specific java files +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include/SOMETHING_HP_HERE + +## echo -n doesn't work +ECHO_N = /bin/printf "%s" + diff --git a/config/systems/hp9000_HP-UXB.10.mak b/config/systems/hp9000_HP-UXB.10.mak new file mode 100644 index 0000000..bf4ce46 --- /dev/null +++ b/config/systems/hp9000_HP-UXB.10.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Specifics for this version of HP-UX. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/hp9000_HP-UX.mak + diff --git a/config/systems/ip_IRIX.mak b/config/systems/ip_IRIX.mak new file mode 100644 index 0000000..3f458dc --- /dev/null +++ b/config/systems/ip_IRIX.mak @@ -0,0 +1,53 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh,UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Author: Alan W Black ## +## Date: Nov 1997 ## +########################################################################### +## Settings for Irix ## +## ## +########################################################################### + +include $(EST)/config/systems/default.mak + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = IRIX + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = /bin/printf "%s" + +## Doesn't have or need RANLIB +RANLIB = true + +## IRIX specific java include files. +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include/irix diff --git a/config/systems/ip_IRIX5.3.mak b/config/systems/ip_IRIX5.3.mak new file mode 100644 index 0000000..56ab4d2 --- /dev/null +++ b/config/systems/ip_IRIX5.3.mak @@ -0,0 +1,46 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh,UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Author: Alan W Black ## +## Date: Nov 1997 ## +########################################################################### +## Settings for Irix 5.3. ## +## ## +########################################################################### + +include $(EST)/config/systems/ip_IRIX.mak + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = IRIX53 + + diff --git a/config/systems/ip_IRIX6.3.mak b/config/systems/ip_IRIX6.3.mak new file mode 100644 index 0000000..90d2514 --- /dev/null +++ b/config/systems/ip_IRIX6.3.mak @@ -0,0 +1,44 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh,UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Author: Alan W Black ## +## Date: Nov 1997 ## +########################################################################### +## Settings for Irix 6.3. ## +## ## +########################################################################### + +include $(EST)/config/systems/ip_IRIX.mak + + + diff --git a/config/systems/ip_IRIX6.4.mak b/config/systems/ip_IRIX6.4.mak new file mode 100644 index 0000000..b453eb6 --- /dev/null +++ b/config/systems/ip_IRIX6.4.mak @@ -0,0 +1,44 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh,UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Author: Alan W Black ## +## Date: Nov 1997 ## +########################################################################### +## Settings for Irix 6.4. ## +## ## +########################################################################### + +include $(EST)/config/systems/ip_IRIX.mak + + + diff --git a/config/systems/ip_IRIX646.4.mak b/config/systems/ip_IRIX646.4.mak new file mode 100644 index 0000000..b453eb6 --- /dev/null +++ b/config/systems/ip_IRIX646.4.mak @@ -0,0 +1,44 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh,UK ## +## Copyright (c) 1996 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Author: Alan W Black ## +## Date: Nov 1997 ## +########################################################################### +## Settings for Irix 6.4. ## +## ## +########################################################################### + +include $(EST)/config/systems/ip_IRIX.mak + + + diff --git a/config/systems/ix86_CYGWIN1.0.mak b/config/systems/ix86_CYGWIN1.0.mak new file mode 100644 index 0000000..e71b4c8 --- /dev/null +++ b/config/systems/ix86_CYGWIN1.0.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin1.0 + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + +## Cygwin version of egcs has optimisatin problems with some files. + +HONOUR_NOOPT=1 + + diff --git a/config/systems/ix86_CYGWIN1.1.mak b/config/systems/ix86_CYGWIN1.1.mak new file mode 100644 index 0000000..d129bae --- /dev/null +++ b/config/systems/ix86_CYGWIN1.1.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin1.1 + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + +## Cygwin version of egcs has optimisatin problems with some files. + +HONOUR_NOOPT=1 + + diff --git a/config/systems/ix86_CYGWIN1.3.mak b/config/systems/ix86_CYGWIN1.3.mak new file mode 100644 index 0000000..413dc3d --- /dev/null +++ b/config/systems/ix86_CYGWIN1.3.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin1.3 + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + +## Cygwin version of egcs has optimisatin problems with some files. + +HONOUR_NOOPT=1 + + diff --git a/config/systems/ix86_CYGWIN1.4.mak b/config/systems/ix86_CYGWIN1.4.mak new file mode 100644 index 0000000..1254815 --- /dev/null +++ b/config/systems/ix86_CYGWIN1.4.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin32 v 4.0 (b19). ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + + + diff --git a/config/systems/ix86_CYGWIN1.5.mak b/config/systems/ix86_CYGWIN1.5.mak new file mode 100644 index 0000000..1254815 --- /dev/null +++ b/config/systems/ix86_CYGWIN1.5.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin32 v 4.0 (b19). ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + + + diff --git a/config/systems/ix86_CYGWIN1.7.mak b/config/systems/ix86_CYGWIN1.7.mak new file mode 100644 index 0000000..1254815 --- /dev/null +++ b/config/systems/ix86_CYGWIN1.7.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin32 v 4.0 (b19). ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + + + diff --git a/config/systems/ix86_CYGWIN20.1.mak b/config/systems/ix86_CYGWIN20.1.mak new file mode 100644 index 0000000..c3466fa --- /dev/null +++ b/config/systems/ix86_CYGWIN20.1.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin32 v 4.0 (b19). ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + +## Cygwin version of egcs has optimisatin problems with some files. + +HONOUR_NOOPT=1 + + diff --git a/config/systems/ix86_CYGWIN32.mak b/config/systems/ix86_CYGWIN32.mak new file mode 100644 index 0000000..3799244 --- /dev/null +++ b/config/systems/ix86_CYGWIN32.mak @@ -0,0 +1,61 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygwin32. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +DEFAULT_JAVA_HOME=/usr/lib/jdk-1.1.6 + +gcc=gcc27 + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = WIN32 + +GNUTEST=test + +RM=rm + +## awk is gawk, so it does all we could desire and then more. +NAWK=awk + +## EGCS installs as gcc +EGCS_CC=gcc +EGCS_CXX=gcc + +OS_LIBS = -lwinmm -luser32 + diff --git a/config/systems/ix86_CYGWIN324.0.mak b/config/systems/ix86_CYGWIN324.0.mak new file mode 100644 index 0000000..1254815 --- /dev/null +++ b/config/systems/ix86_CYGWIN324.0.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Cygnus gnuwin32 v 4.0 (b19). ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_CYGWIN32.mak + + + diff --git a/config/systems/ix86_Darwin.mak b/config/systems/ix86_Darwin.mak new file mode 100644 index 0000000..74a5a7e --- /dev/null +++ b/config/systems/ix86_Darwin.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Aug 3 2006 ## + ## -------------------------------------------------------------------- ## + ## Settings for Apple Darwin. ## + ## Thanks to Brian West ## + ########################################################################### + +include $(EST)/config/systems/ix86_Darwin.mak diff --git a/config/systems/ix86_FreeBSD.mak b/config/systems/ix86_FreeBSD.mak new file mode 100644 index 0000000..7c18a8b --- /dev/null +++ b/config/systems/ix86_FreeBSD.mak @@ -0,0 +1,60 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Fri Oct 3 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = FREEBSD16 + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = /usr/bin/printf "%s" + +NAWK=awk + +# GCC_MAKE_SHARED_LIB = ld -Bshareable -x -o XXX + +DEFAULT_JAVA_HOME=/usr/local/jdk + +JAVA=$(JAVA_HOME)/bin/java +JAVAC=$(JAVA_HOME)/bin/javac +JAVAH=$(JAVA_HOME)/bin/javah -jni +JAR=$(JAVA_HOME)/bin/jar cf0v + + diff --git a/config/systems/ix86_FreeBSD2.1.mak b/config/systems/ix86_FreeBSD2.1.mak new file mode 100644 index 0000000..c6ba80c --- /dev/null +++ b/config/systems/ix86_FreeBSD2.1.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Sat Oct 11 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 2.2 ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_FreeBSD.mak + +GCC=gcc26 + + + diff --git a/config/systems/ix86_FreeBSD2.2.mak b/config/systems/ix86_FreeBSD2.2.mak new file mode 100644 index 0000000..0630da7 --- /dev/null +++ b/config/systems/ix86_FreeBSD2.2.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Sat Oct 11 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 2.2 ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/ix86_FreeBSD.mak + +GCC=gcc27 + + + diff --git a/config/systems/ix86_FreeBSD3.0.mak b/config/systems/ix86_FreeBSD3.0.mak new file mode 100644 index 0000000..cd3e488 --- /dev/null +++ b/config/systems/ix86_FreeBSD3.0.mak @@ -0,0 +1,53 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Wed Mar 10 1999 ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 3.0 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_FreeBSD.mak + +GCC=gcc27 + +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd +GCC=gcc27 + +JAVA=$(JAVA_HOME)/bin/java +JAVAC=$(JAVA_HOME)/bin/javac +JAVAH=$(JAVA_HOME)/bin/javah -jni +JAR=$(JAVA_HOME)/bin/jar cf0v + + diff --git a/config/systems/ix86_FreeBSD3.1.mak b/config/systems/ix86_FreeBSD3.1.mak new file mode 100644 index 0000000..d61f73b --- /dev/null +++ b/config/systems/ix86_FreeBSD3.1.mak @@ -0,0 +1,55 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Wed Mar 10 1999 ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 3.1 ## + ## ## + ########################################################################### + +# They went to ELF at this point, but everything seems fine as is + +include $(EST)/config/systems/ix86_FreeBSD.mak + +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd +GCC=gcc27 + +JAVA=$(JAVA_HOME)/bin/java +JAVAC=$(JAVA_HOME)/bin/javac +JAVAH=$(JAVA_HOME)/bin/javah -jni +JAR=$(JAVA_HOME)/bin/jar cf0v + +GCC_MAKE_SHARED_LIB = gcc -shared -o XXX + + diff --git a/config/systems/ix86_FreeBSD3.2.mak b/config/systems/ix86_FreeBSD3.2.mak new file mode 100644 index 0000000..9006aa6 --- /dev/null +++ b/config/systems/ix86_FreeBSD3.2.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 3.2 ## + ## ## + ########################################################################### + +# They went to ELF at this point, but everything seems fine as is + +include $(EST)/config/systems/ix86_FreeBSD3.1.mak + + + + diff --git a/config/systems/ix86_FreeBSD3.3.mak b/config/systems/ix86_FreeBSD3.3.mak new file mode 100644 index 0000000..9f278e6 --- /dev/null +++ b/config/systems/ix86_FreeBSD3.3.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 3.3 ## + ## ## + ########################################################################### + +# They went to ELF at this point, but everything seems fine as is + +include $(EST)/config/systems/ix86_FreeBSD3.1.mak + + + + diff --git a/config/systems/ix86_FreeBSD4.0.mak b/config/systems/ix86_FreeBSD4.0.mak new file mode 100644 index 0000000..05de2ad --- /dev/null +++ b/config/systems/ix86_FreeBSD4.0.mak @@ -0,0 +1,48 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for FreeBSD 4.0 (not actually checked yet) ## + ## ## + ########################################################################### + +# They went to ELF at this point, but everything seems fine as is + +include $(EST)/config/systems/ix86_FreeBSD.mak + +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd +GCC=gcc27 + + + diff --git a/config/systems/ix86_OS22.mak b/config/systems/ix86_OS22.mak new file mode 100644 index 0000000..cf1cd66 --- /dev/null +++ b/config/systems/ix86_OS22.mak @@ -0,0 +1,67 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Samuel Audet ## + ## Date: Sat Aug 1 1998 ## + ## -------------------------------------------------------------------- ## + ## Settings for OS/2 Warp 3 and 4 using EMX/GCC ## + ## ## + ########################################################################### + + +include $(TOP)/config/systems/default.mak + +## custom settings needed +GCC=gcc27emx + +## Libraries needed for sockets based programs. +OS_LIBS = -lsocket + +## uses the path +RM = rm + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = OS2 + +## Must support -nt +GNUTEST = test + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = echo -n + +## awk is gawk, so it does all we could desire and then more. +NAWK=awk + +## Used to index libraries +RANLIB = ar s + diff --git a/config/systems/ix86_RedHatLinux4.0.mak b/config/systems/ix86_RedHatLinux4.0.mak new file mode 100644 index 0000000..0c25c28 --- /dev/null +++ b/config/systems/ix86_RedHatLinux4.0.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 4.0. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +GCC=gcc27 + + + diff --git a/config/systems/ix86_RedHatLinux4.1.mak b/config/systems/ix86_RedHatLinux4.1.mak new file mode 100644 index 0000000..7904296 --- /dev/null +++ b/config/systems/ix86_RedHatLinux4.1.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 4.1. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +GCC=gcc27 + + + diff --git a/config/systems/ix86_RedHatLinux4.2.mak b/config/systems/ix86_RedHatLinux4.2.mak new file mode 100644 index 0000000..7904296 --- /dev/null +++ b/config/systems/ix86_RedHatLinux4.2.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 4.1. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +GCC=gcc27 + + + diff --git a/config/systems/ix86_RedHatLinux5.0.mak b/config/systems/ix86_RedHatLinux5.0.mak new file mode 100644 index 0000000..f657065 --- /dev/null +++ b/config/systems/ix86_RedHatLinux5.0.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 5.1. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +GCC=gcc27 + + + diff --git a/config/systems/ix86_RedHatLinux5.1.mak b/config/systems/ix86_RedHatLinux5.1.mak new file mode 100644 index 0000000..ef3e54e --- /dev/null +++ b/config/systems/ix86_RedHatLinux5.1.mak @@ -0,0 +1,47 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 5.1. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +ifndef GCC +GCC=egcs +endif +EGCS_CC=gcc +EGCS_CXX=g++ diff --git a/config/systems/ix86_RedHatLinux5.2.mak b/config/systems/ix86_RedHatLinux5.2.mak new file mode 100644 index 0000000..1aa82be --- /dev/null +++ b/config/systems/ix86_RedHatLinux5.2.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 5.1. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_RedHatLinux5.1.mak + +DEFAULT_JAVA_HOME=/usr/local/jdk-1.1.6 +JAVA=$(JAVA_HOME)/bin/java +JAVAC=$(JAVA_HOME)/bin/javac +JAVAH=$(JAVA_HOME)/bin/javah -jni +JAR=$(JAVA_HOME)/bin/jar cf0v diff --git a/config/systems/ix86_RedHatLinux6.0.mak b/config/systems/ix86_RedHatLinux6.0.mak new file mode 100644 index 0000000..d4d39c5 --- /dev/null +++ b/config/systems/ix86_RedHatLinux6.0.mak @@ -0,0 +1,53 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 6.0. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +ifndef GCC +GCC=egcs +endif +EGCS_CC=gcc +EGCS_CXX=g++ + +DEFAULT_JAVA_HOME=/usr/local/jdk1.1.6 +JAVA=$(JAVA_HOME)/bin/java +JAVAC=$(JAVA_HOME)/bin/javac +JAVAH=$(JAVA_HOME)/bin/javah -jni +JAR=$(JAVA_HOME)/bin/jar cf0v diff --git a/config/systems/ix86_RedHatLinux6.1.mak b/config/systems/ix86_RedHatLinux6.1.mak new file mode 100644 index 0000000..39d750b --- /dev/null +++ b/config/systems/ix86_RedHatLinux6.1.mak @@ -0,0 +1,54 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 6.1. (guess) ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + +ifndef GCC +GCC=egcs +endif +EGCS_CC=gcc +EGCS_CXX=g++ + +DEFAULT_JAVA_HOME=/usr/local/jdk1.1.6 +JAVA=$(JAVA_HOME)/bin/java +JAVAC=$(JAVA_HOME)/bin/javac +JAVAH=$(JAVA_HOME)/bin/javah -jni +JAR=$(JAVA_HOME)/bin/jar cf0v + diff --git a/config/systems/ix86_RedHatLinux6.2.mak b/config/systems/ix86_RedHatLinux6.2.mak new file mode 100644 index 0000000..5834f94 --- /dev/null +++ b/config/systems/ix86_RedHatLinux6.2.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 6.2. (guess) ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_RedHatLinux6.1.mak + diff --git a/config/systems/ix86_RedHatLinux7.0.mak b/config/systems/ix86_RedHatLinux7.0.mak new file mode 100644 index 0000000..2a85c2b --- /dev/null +++ b/config/systems/ix86_RedHatLinux7.0.mak @@ -0,0 +1,43 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for Red Hat Linux 7.0. (guess) ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_RedHatLinux6.1.mak +GCC=gcc296 + + diff --git a/config/systems/ix86_SunOS5.5.mak b/config/systems/ix86_SunOS5.5.mak new file mode 100644 index 0000000..ed36800 --- /dev/null +++ b/config/systems/ix86_SunOS5.5.mak @@ -0,0 +1,43 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Settings for i386 SunOS 5.5 ## + ## ## + ## Like sparc except no mv8 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_SunOS5.mak + + + diff --git a/config/systems/ix86_SunOS5.6.mak b/config/systems/ix86_SunOS5.6.mak new file mode 100644 index 0000000..41dd5bb --- /dev/null +++ b/config/systems/ix86_SunOS5.6.mak @@ -0,0 +1,43 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Settings for i386 SunOS 5.6 ## + ## ## + ## Like sparc but no mv8 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_SunOS5.mak + + + diff --git a/config/systems/ix86_SunOS5.7.mak b/config/systems/ix86_SunOS5.7.mak new file mode 100644 index 0000000..c3ea801 --- /dev/null +++ b/config/systems/ix86_SunOS5.7.mak @@ -0,0 +1,43 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Settings for i386 SunOS 5.7 ## + ## ## + ## Like sparc but no mv8 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_SunOS5.mak + + + diff --git a/config/systems/ix86_SunOS5.8.mak b/config/systems/ix86_SunOS5.8.mak new file mode 100644 index 0000000..cef476a --- /dev/null +++ b/config/systems/ix86_SunOS5.8.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5.8 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/ix86_SunOS5.mak + diff --git a/config/systems/ix86_SunOS5.mak b/config/systems/ix86_SunOS5.mak new file mode 100644 index 0000000..d27e104 --- /dev/null +++ b/config/systems/ix86_SunOS5.mak @@ -0,0 +1,57 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5 on Intel platform. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +DEFAULT_JAVA_HOME=/usr/java1.1 + +## Libraries needed for sockets based programs. +OS_LIBS = -lsocket -lnsl + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = SUN16 + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = /bin/printf "%s" + +SYSTEM_JAVA_INCLUDES = -I$(JAVA_HOME)/include/solaris + + + diff --git a/config/systems/power_macintosh_Darwin.mak b/config/systems/power_macintosh_Darwin.mak new file mode 100644 index 0000000..f098509 --- /dev/null +++ b/config/systems/power_macintosh_Darwin.mak @@ -0,0 +1,55 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Fri Oct 3 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for Apple Darwin. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = MACOSX + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = /usr/bin/printf "%s" + +NAWK=awk + +GCC295=cc + +# GCC_MAKE_SHARED_LIB = ld -Bshareable -x -o XXX + + diff --git a/config/systems/rs6000_AIX4.1.mak b/config/systems/rs6000_AIX4.1.mak new file mode 100644 index 0000000..8dee60d --- /dev/null +++ b/config/systems/rs6000_AIX4.1.mak @@ -0,0 +1,42 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1999 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cs.cmu.edu) ## + ## -------------------------------------------------------------------- ## + ## For AIX 4.1 (from Stan Chen) ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +LINKFLAGS += -Wl,-bbigtoc diff --git a/config/systems/sparc_SunOS4.1.mak b/config/systems/sparc_SunOS4.1.mak new file mode 100644 index 0000000..9d35936 --- /dev/null +++ b/config/systems/sparc_SunOS4.1.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 4.1 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/sparc_SunOS4.mak + + + diff --git a/config/systems/sparc_SunOS4.mak b/config/systems/sparc_SunOS4.mak new file mode 100644 index 0000000..cb202e5 --- /dev/null +++ b/config/systems/sparc_SunOS4.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 4. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = SUN16 + + diff --git a/config/systems/sparc_SunOS5.5.mak b/config/systems/sparc_SunOS5.5.mak new file mode 100644 index 0000000..1b25879 --- /dev/null +++ b/config/systems/sparc_SunOS5.5.mak @@ -0,0 +1,46 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5.5 ## + ## ## + ########################################################################### + +CC_OTHER_FLAGS += -Dolder_solaris + +include $(EST)/config/systems/sparc_SunOS5.mak + + + diff --git a/config/systems/sparc_SunOS5.6.mak b/config/systems/sparc_SunOS5.6.mak new file mode 100644 index 0000000..c4714c5 --- /dev/null +++ b/config/systems/sparc_SunOS5.6.mak @@ -0,0 +1,44 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Tue Nov 4 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5.6 ## + ## ## + ########################################################################### + +CC_OTHER_FLAGS += -Dolder_solaris + +include $(EST)/config/systems/sparc_SunOS5.mak + diff --git a/config/systems/sparc_SunOS5.7.mak b/config/systems/sparc_SunOS5.7.mak new file mode 100644 index 0000000..fc3bc95 --- /dev/null +++ b/config/systems/sparc_SunOS5.7.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5.7 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/sparc_SunOS5.mak + diff --git a/config/systems/sparc_SunOS5.8.mak b/config/systems/sparc_SunOS5.8.mak new file mode 100644 index 0000000..64202ae --- /dev/null +++ b/config/systems/sparc_SunOS5.8.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5.8 ## + ## ## + ########################################################################### + +include $(EST)/config/systems/sparc_SunOS5.mak + diff --git a/config/systems/sparc_SunOS5.mak b/config/systems/sparc_SunOS5.mak new file mode 100644 index 0000000..131b34f --- /dev/null +++ b/config/systems/sparc_SunOS5.mak @@ -0,0 +1,65 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Thu Oct 2 1997 ## + ## -------------------------------------------------------------------- ## + ## Settings for SunOS 5.* (aka Solaris 2, aka 'Solaris') ## + ## ## + ########################################################################### + +include $(EST)/config/systems/default.mak + +## Just guesses for what people are likely to have +GCC=gcc27 +SUNCC=suncc40 + +## Libraries needed for sockets based programs. +OS_LIBS = -lsocket -lnsl + +## the native audio module for this type of system +NATIVE_AUDIO_MODULE = SUN16 + +## Official location for java +DEFAULT_JAVA_HOME=/usr/java1.1 + +## Tell gcc we are a v8 sparc or better. Any legacy machines lose. +GCC_SYSTEM_OPTIONS = -mv8 + +## echo -n doesn't work +ECHO_N = /bin/printf "%s" + +JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include/solaris + +## Force use of nawk +AWK=nawk diff --git a/config/systems/unknown_DebianGNULinux.mak b/config/systems/unknown_DebianGNULinux.mak new file mode 100644 index 0000000..079eb43 --- /dev/null +++ b/config/systems/unknown_DebianGNULinux.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: David Huggins-Daines ## + ## -------------------------------------------------------------------- ## + ## Settings for generic/unknown Debian GNU/Linux systems ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/DebianGNULinux.mak diff --git a/config/systems/unknown_Linux.mak b/config/systems/unknown_Linux.mak new file mode 100644 index 0000000..d3b3654 --- /dev/null +++ b/config/systems/unknown_Linux.mak @@ -0,0 +1,40 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Linux v2. ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak diff --git a/config/systems/unknown_RedHatLinux.mak b/config/systems/unknown_RedHatLinux.mak new file mode 100644 index 0000000..9307e08 --- /dev/null +++ b/config/systems/unknown_RedHatLinux.mak @@ -0,0 +1,42 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Robert Clark (robert@cstr.ed.ac.uk) ## + ## -------------------------------------------------------------------- ## + ## Settings for unknown Red Hat Linux versions ## + ## ## + ########################################################################### + +include $(EST)/config/systems/Linux.mak +include $(EST)/config/systems/RedHatLinux.mak + diff --git a/config/systems/unknown_unknown.mak b/config/systems/unknown_unknown.mak new file mode 100644 index 0000000..06e26a5 --- /dev/null +++ b/config/systems/unknown_unknown.mak @@ -0,0 +1,54 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Richard Caley (rjc@cstr.ed.ac.uk) ## + ## Date: Tue Oct 7 1997 ## + ## -------------------------------------------------------------------- ## + ## A default description used to bootstrap. ## + ## ## + ########################################################################### + + +include $(EST)/config/systems/default.mak + +## Must support -nt +GNUTEST = gnutest + +## echo -n doesn't work (well only sometimes ?) +ECHO_N = echo + + + + + + diff --git a/config/systems/x86_64_Darwin.mak b/config/systems/x86_64_Darwin.mak new file mode 100644 index 0000000..a3dda3a --- /dev/null +++ b/config/systems/x86_64_Darwin.mak @@ -0,0 +1,41 @@ + ########################################################################### + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + ## ## + ## Author: Alan W Black (awb@cstr.ed.ac.uk) ## + ## Date: Aug 3 2006 ## + ## -------------------------------------------------------------------- ## + ## Settings for Apple Darwin. ## + ## Thanks to Brian West ## + ########################################################################### + +include $(EST)/config/systems/x86_64_Darwin.mak diff --git a/config/test_make_rules b/config/test_make_rules new file mode 100644 index 0000000..099b627 --- /dev/null +++ b/config/test_make_rules @@ -0,0 +1,113 @@ + ########################################################-*-mode:Makefile-*- + ## ## + ## Centre for Speech Technology Research ## + ## University of Edinburgh, UK ## + ## Copyright (c) 1996,1997 ## + ## All Rights Reserved. ## + ## ## + ## Permission is hereby granted, free of charge, to use and distribute ## + ## this software and its documentation without restriction, including ## + ## without limitation the rights to use, copy, modify, merge, publish, ## + ## distribute, sublicense, and/or sell copies of this work, and to ## + ## permit persons to whom this work is furnished to do so, subject to ## + ## the following conditions: ## + ## 1. The code must retain the above copyright notice, this list of ## + ## conditions and the following disclaimer. ## + ## 2. Any modifications must be clearly marked as such. ## + ## 3. Original authors' names are not deleted. ## + ## 4. The authors' names are not used to endorse or promote products ## + ## derived from this software without specific prior written ## + ## permission. ## + ## ## + ## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## + ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## + ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## + ## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## + ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## + ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## + ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## + ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## + ## THIS SOFTWARE. ## + ## ## + ########################################################################### + # Makefile rules for testing things # + ########################################################################### + +TEST_PROGRAMS = $(TEST_MODULES:%=%_example) $(TEST_MODULES:%=%_regression) +#TSRCS = $(TEST_PROGRAMS:%=%.C) +#SRCS = $(TSRCS) +#OBJS = $(SRCS:%.C=%.o) + +include $(TOP)/config/common_make_rules + +test_scripts: $(TEST_SCRIPTS:%=%_script_test) + +test_modules: $(TEST_MODULES:%=%_module_build_and_test) + +$(TEST_MODULES:%=%_module_build_and_test) : %_module_build_and_test : %_module_rebuild %_module_test + +$(TEST_MODULES:%=%_module_rebuild) : %_module_rebuild : + @echo 'build $* (module)' + @/bin/rm -f $(OBJS) + @if $(MAKE) --no-print-directory OPTIMISE=$(TEST_OPTIMISE) WARN=1 $*_example $*_regression ;\ + then \ + : ;\ + else \ + echo $* example status: FAILED ; exit 1 ;\ + fi + +$(TEST_MODULES:%=%_module_test) : %_module_test : correct/%_example.out correct/%_regression.out + @echo 'test $* (module)' + @if ./$*_example $($(*:=_example_args)) > $*_example.out ;\ + then \ + echo $*_example completed ;\ + if [ ! -f $*_example.out ] || diff $*_example.out correct/$*_example.out ;\ + then \ + echo $* example status: CORRECT ;\ + else \ + echo $* example status: INCORRECT ;\ + fi ;\ + else \ + echo $* example status: FAILED ;\ + fi + @if ./$*_regression $($(*:=_regression_args)) > $*_regression.out ;\ + then \ + echo $*_regression completed ;\ + if [ ! -f $*_regression.out ] || diff $*_regression.out correct/$*_regression.out ;\ + then \ + echo $* regression status: CORRECT ;\ + else \ + echo $* regression status: INCORRECT ;\ + fi ;\ + else \ + echo $* regression status: FAILED ;\ + fi + @echo + @echo + +$(TEST_SCRIPTS:%=%_script_test) : %_script_test : %.sh correct/%_script.out + @echo 'test $* (script)' + @OUTPUT='$*_script.out' ;\ + TOP='$(TOP)' ;\ + export TOP OUTPUT ;\ + if /bin/sh $*.sh $($(*:=_script_args)) ;\ + then \ + echo $* script completed ;\ + if [ ! -f $*_script.out ] || diff $*_script.out correct/$*_script.out ;\ + then \ + echo $* script status: CORRECT ;\ + else \ + echo $* script status: INCORRECT ;\ + fi ;\ + else \ + echo $* script status: FAILED ;\ + fi + @echo + @echo + +$(SRCS:%.C=%.o) : %.o : %.C + +% : %.o + $(CXX) $(CXXFLAGS) $(TEMPLATES) -o $@ $@.o $(ESTLIB) $($(@:=_LIBS)) $(LIBS) + + diff --git a/config/vc_common_make_rules b/config/vc_common_make_rules new file mode 100644 index 0000000..26e09bf --- /dev/null +++ b/config/vc_common_make_rules @@ -0,0 +1,71 @@ + +###################################################################### +# # +# Make rules for MicroCruft Visual C++ # +# # +###################################################################### + +!include $(TOP)\config\vc_config_make_rules +!include $(TOP)\config\project.mak + +.SUFFIXES: .cc .obj +CPP=cl /nologo /DSYSTEM_IS_WIN32=1 /DINSTANTIATE_TEMPLATES=1 $(MODULEFLAGS) +CC=cl /nologo /DSYSTEM_IS_WIN32=1 $(MODULEFLAGS) + +default_target: $(DIRS) all + @echo done $(DIRNAME) + +all: $(ALL) + +$(DIRS) x1 : FORCE + @echo building in $(DIRNAME)\$@ + @cd $@ + @nmake /nologo /fVCMakefile + @cd .. + +FORCE: + +.vcbuildlib: $(OBJS) + @echo add to $(INLIB) $(OBJS) + @if EXIST $(INLIB) lib/nologo $(INLIB) $(OBJS) + @if NOT EXIST $(INLIB) lib/nologo /out:$(INLIB) $(OBJS) + @echo built > .vcbuildlib + +.vc_add_to_lib: $(TOADD) + lib/nologo $(ADDLIB) $(TOADD) + @echo built > .vc_add_to_lib + +.libraries: + @echo Libraries not touched for VC++ + +relink: + @echo Links not made for Visual C++ + +.vc_build_scripts: + @echo Scripts not built for Visual C++ + +.vc_build_manpages: + @echo manual pages not built for Visual C++ + +.config_error:: + @echo Config OK + +.sub_directories: $(BUILD_DIRS) + +.remove_links: + @echo Links not made for Visual C++ +.process_scripts: + @echo Scripts not created for VC +.process_docs: + @echo Documentation not created for VC +.link_main: + @echo Links not made for Visual C++ + +.cc.obj: + $(CPP) $(CFLAGS) /c /Tp$*.cc /Fo$*.obj +.c.obj: + $(CC) $(CFLAGS) /c /Tc$*.c /Fo$*.obj + +# this dummy rule stops the comment in make.depend getting +# interpreted as a command... YEUCH +hack_dummy_target: diff --git a/config/vc_config_make_rules-dist b/config/vc_config_make_rules-dist new file mode 100644 index 0000000..b1d0f38 --- /dev/null +++ b/config/vc_config_make_rules-dist @@ -0,0 +1,37 @@ + + ###################################################################### + # # + # Configuration variable make settings for MicroCruft Visual C++ # + # # + ###################################################################### + +EST=$(TOP)\..\speech_tools + +SYSTEM_LIB=c:\\festival\\lib + +MODULEFLAGS=/DSUPPORT_EDITLINE=1 +AUDIOFLAGS= + +DEBUGFLAGS= /Zi +LINKDEBUGFLAGS = /debug + +OPTFLAGS= /EHsc /wd4675 /GR + +DEFINES=/DFTLIBDIRC=$(SYSTEM_LIB) "/DFTOSTYPEC=win32_vc" "/DFTNAME=$(PROJECT_NAME)" "/DFTVERSION=$(PROJECT_VERSION)" "/DFTSTATE=$(PROJECT_STATE)" "/DFTDATE=$(PROJECT_DATE)" + +INCLUDEFLAGS= /I$(TOP)/src/include /I$(EST)\include $(LOCAL_INCLUDES) /DNO_READLINE=1 /DNO_SPOOLER=1 $(DEFINES) + +LINKFLAGS=$(LINKDEBUGFLAGS) + +LIB_DIR=src\lib + +FESTLIBS = $(TOP)\src\lib\libfestival.lib + +ESTLIBS = $(EST)\lib\libestools.lib $(EST)\lib\libestbase.lib $(EST)\lib\libeststring.lib + +WINLIBS = wsock32.lib winmm.lib + +!ifndef VCLIBS +VCLIBS = $(FESTLIBS) $(ESTLIBS) +!endif + diff --git a/configure b/configure new file mode 100755 index 0000000..95d29da --- /dev/null +++ b/configure @@ -0,0 +1,1286 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +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' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +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 + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # 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 ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$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" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) 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) + # 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 << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$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) + 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 ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + 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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# 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 + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=src/include/festival.h + +# 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_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + 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 "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# 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 "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +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 + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + + +# Do some error checking and defaulting for the host and target type. +# The inputs are: +# configure --host=HOST --target=TARGET --build=BUILD NONOPT +# +# The rules are: +# 1. You are not allowed to specify --host, --target, and nonopt at the +# same time. +# 2. Host defaults to nonopt. +# 3. If nonopt is not specified, then host defaults to the current host, +# as determined by config.guess. +# 4. Target and build default to nonopt. +# 5. If nonopt is not specified, then target and build default to host. + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +case $host---$target---$nonopt in +NONE---*---* | *---NONE---* | *---*---NONE) ;; +*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; +esac + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:573: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +echo $ac_n "checking target system type""... $ac_c" 1>&6 +echo "configure:594: checking target system type" >&5 + +target_alias=$target +case "$target_alias" in +NONE) + case $nonopt in + NONE) target_alias=$host_alias ;; + *) target_alias=$nonopt ;; + esac ;; +esac + +target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` +target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$target" 1>&6 + +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:612: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +test "$host_alias" != "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:637: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:667: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +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 $# -gt 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 + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:718: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:750: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 761 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:792: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:797: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:825: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 + +if test "x$GCC" = "xyes"; then + CFLAGS="$CFLAGS -Wall" +fi +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:862: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test $host != $build; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + +# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:898: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar" +fi +fi +AR="$ac_cv_prog_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + + +echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +echo "configure:929: checking whether byte ordering is bigendian" >&5 +if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_bigendian=unknown +# See if sys/param.h defines the BYTE_ORDER macro. +cat > conftest.$ac_ext < +#include +int main() { + +#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN + bogus endian macros +#endif +; return 0; } +EOF +if { (eval echo configure:947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. +cat > conftest.$ac_ext < +#include +int main() { + +#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif +; return 0; } +EOF +if { (eval echo configure:962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_bigendian=no +fi +rm -f conftest* +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +if test $ac_cv_c_bigendian = unknown; then +if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_bigendian=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_bigendian=yes +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_c_bigendian" 1>&6 +if test $ac_cv_c_bigendian = yes; then + cat >> confdefs.h <<\EOF +#define WORDS_BIGENDIAN 1 +EOF + +fi + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# 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 \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo "config/config" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@target@%$target%g +s%@target_alias@%$target_alias%g +s%@target_cpu@%$target_cpu%g +s%@target_vendor@%$target_vendor%g +s%@target_os@%$target_os%g +s%@build@%$build%g +s%@build_alias@%$build_alias%g +s%@build_cpu@%$build_cpu%g +s%@build_vendor@%$build_vendor%g +s%@build_os@%$build_os%g +s%@CC@%$CC%g +s%@RANLIB@%$RANLIB%g +s%@AR@%$AR%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# 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_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # 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" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..76b3c5d --- /dev/null +++ b/configure.in @@ -0,0 +1,45 @@ +dnl######################################################################## +dnl ## +dnl Centre for Speech Technology Research ## +dnl University of Edinburgh, UK ## +dnl Copyright (c) 1996-2001 ## +dnl All Rights Reserved. ## +dnl ## +dnl Permission is hereby granted, free of charge, to use and distribute ## +dnl this software and its documentation without restriction, including ## +dnl without limitation the rights to use, copy, modify, merge, publish, ## +dnl distribute, sublicense, and/or sell copies of this work, and to ## +dnl permit persons to whom this work is furnished to do so, subject to ## +dnl the following conditions: ## +dnl 1. The code must retain the above copyright notice, this list of ## +dnl conditions and the following disclaimer. ## +dnl 2. Any modifications must be clearly marked as such. ## +dnl 3. Original authors' names are not deleted. ## +dnl 4. The authors' names are not used to endorse or promote products ## +dnl derived from this software without specific prior written ## +dnl permission. ## +dnl ## +dnl THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +dnl DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +dnl ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +dnl SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +dnl FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +dnl AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +dnl ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +dnl THIS SOFTWARE. ## +dnl ## +dnl######################################################################## +AC_INIT(src/include/festival.h) + +AC_CANONICAL_SYSTEM +AC_PROG_CC +if test "x$GCC" = "xyes"; then + CFLAGS="$CFLAGS -Wall" +fi +AC_PROG_RANLIB +AC_CHECK_TOOL(AR, ar) + +AC_C_BIGENDIAN + +AC_OUTPUT(config/config) diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..e38e419 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,114 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +TOP=.. +DIRNAME=doc + +DOCNAME=festival +DSSL_SANE_DB=$(EST)/doc/sane_to_docbook.dsl +DSSSL_HTML=$(EST)/doc/cstr.dssl +DSSSL=$(DSSSL_HTML) + +# Temporarilly we explicitly list the programs which have been documented + +MAIN_TO_DOCUMENT= + +EXAMPLE_TO_DOCUMENT= + +FESTIVAL=$(TOP)/bin/festival --libdir $(TOP)/lib + +# Include some of EST documentation. +DOCXX_EXTRA_FILES = + +DOCXXIMAGES = edcrest.gif cstr.gif \ + est.jpg est_small.jpg \ + festival.jpg festival_small.jpg festival_tiny.jpg +DOCXXFILES= classHeader.inc hierHeader.inc indexHeader.inc \ + banner.inc $(DOCXXIMAGES) + +MANPAGES = festival.head festival.tail \ + festival_client.head festival_client.tail + +#SGMLFILES = festival.sgml \ +# introductory.sgml basics.sgml core.sgml advanced.sgml programming.sgml + +FILES=Makefile $(MANPAGES) festival.texi $(SGMLFILES) refcard.tex $(DOCXXFILES) +LOCAL_CLEAN = *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr + +ALL = festival.1 festival_client.1 + +include $(TOP)/config/common_make_rules +include $(EST)/config/rules/doc.mak + +%.1 : %.head %.options %.tail + cat $^ >$@ +%.options : $(TOP)/src/main/% + $(TOP)/bin/$* -man_options >$@ +%.options : $(TOP)/src/main/%.exe + $(TOP)/bin/$* -man_options >$@ + +festival.info: festival.texi festfunc.texi festvars.texi festfeat.texi + @ if [ ! -d info ] ; \ + then mkdir -p info ; fi + @ sed 's/@url{/@file{/g' info/festival.texi + @ cp festfunc.texi info/festfunc.texi + @ cp festvars.texi info/festvars.texi + @ cp festfeat.texi info/festfeat.texi + ( cd info; makeinfo festival.texi ) + @ rm info/*.texi +# texi2html is available from http://wwwcn.cern.ch/dci/texi2html/ +festival.html: festival.texi festfunc.texi festvars.texi + @ if [ ! -d html ] ; \ + then mkdir -p html ; fi + (cd html; texi2html -number -split_chapter ../festival.texi) +# give the html files background color of white + @ for i in html/*.html ; \ + do \ + sed 's///' $$i >ttt.html; \ + mv ttt.html $$i ; \ + done +festival.ps: festival.dvi + dvips -f festival.dvi >festival.ps +festival.dvi: festival.texi festfunc.texi festvars.texi + tex festival.texi + texindex festival.cp + tex festival.texi +doc: festival.ps festival.html festival.info + +festfunc.texi festvars.texi festfeat.texi: $(TOP)/src/main/festival + echo "(load_library \"festdoc.scm\") (make-doc)" | $(FESTIVAL) + +refcard.dvi: refcard.tex + latex refcard.tex +refcard.ps: refcard.dvi + dvips -f -t landscape refcard.dvi >refcard.ps + diff --git a/doc/banner.inc b/doc/banner.inc new file mode 100644 index 0000000..fc23d8d --- /dev/null +++ b/doc/banner.inc @@ -0,0 +1,14 @@ + + + + +

This page is part of the + +Festival Text to Speech System documentation +
+Copyright University of Edinburgh 1997 +
+Contact: + festival@cstr.ed.ac.uk +

+
diff --git a/doc/classHeader.inc b/doc/classHeader.inc new file mode 100644 index 0000000..ef733c6 --- /dev/null +++ b/doc/classHeader.inc @@ -0,0 +1,14 @@ + + + + + + + +
+ + +
+

diff --git a/doc/cstr.gif b/doc/cstr.gif new file mode 100644 index 0000000000000000000000000000000000000000..24dda8f37069488485980e304309a8338454c14c GIT binary patch literal 724 zcmV;_0xSJTNk%v~VSE5T0Pz3-0003000960{{R30EC2ui0DJ&H00091l#i*)?GK}z z3D}FX-n{z{hT?b$0EMRN%0g!V$MQ_q_KoNI&co69>IsL$qA^e@RZPdG^C>);HU^*o zip^?~RcY57+=|D&uEJtUlhhk#ba1bB65 z^afW_xc7(zNp!%WczNiVsk51}sW$hB8agx~mjx=Ss<csg;W9lN)mzJ9Cz{2g|0eIoO1k;17IPNF4Ya+zom>d%Fz;Dnc^AlY;m+4y zy*}vzg$l6#jbwMS+#4-azj58NDFJo%&#LPHf{Cs$s~9RuIih+IN_01jkPu!gW)Vw%ZL|8 ziydG#tJZ;A>x!dUYs9Xpdu7A?9=x#XU9v75-ctNz&aa#NgH0Sc+MsvTew~OhR8aKM za_ zG|6Q^MrPS#m~^m{lSgKr`G6JDy$NTWfKftcHFc)hQJz5Rd1s$_+W9A*fJ!omY&!u^ G002AYS!K`w literal 0 HcmV?d00001 diff --git a/doc/edcrest.gif b/doc/edcrest.gif new file mode 100644 index 0000000000000000000000000000000000000000..7a7ac8965512e48eb46d9bd7adac263028b8d116 GIT binary patch literal 3659 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 NE)@_j`y0yizX0zU8BPEI literal 0 HcmV?d00001 diff --git a/doc/est_small.jpg b/doc/est_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0738394919b9184d4b3eba975f75fdbe6c6fadec GIT binary patch literal 1999 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 literal 0 HcmV?d00001 diff --git a/doc/festival.tail b/doc/festival.tail new file mode 100644 index 0000000..2bcf499 --- /dev/null +++ b/doc/festival.tail @@ -0,0 +1,25 @@ +.SH BUGS +More than you can imagine. + +A manual with much detail (though not complete) is available +in distributed as part of the system and is also accessible at +.br +http://www.cstr.ed.ac.uk/projects/festival/manual/ + +Although we cannot guarantee the time required to fix bugs, we +would appreciated it if they were reported to +.br +festival-bug@cstr.ed.ac.uk + +.SH AUTHOR +Alan W Black, Richard Caley and Paul Taylor +.br +(C) Centre for Speech Technology Research, 1996-1998 +.br +University of Edinburgh +.br +80 South Bridge +.br +Edinburgh EH1 1HN +.br +http://www.cstr.ed.ac.uk/projects/festival.html diff --git a/doc/festival.texi b/doc/festival.texi new file mode 100644 index 0000000..94cfb8b --- /dev/null +++ b/doc/festival.texi @@ -0,0 +1,8576 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename festival.info +@settitle Festival Speech Synthesis System +@finalout +@setchapternewpage odd +@c %**end of header + +@c This document was modelled on the numerous examples of texinfo +@c documentation available with GNU software, primarily the hello +@c world example, but many others too. I happily acknowledge their +@c aid in producing this document -- awb + +@set EDITION 1.4 +@set VERSION 1.4.3 +@set UPDATED 27th December 2002 + +@ifinfo +This file documents the @code{Festival} Speech Synthesis System a general +text to speech system for making your computer talk and developing +new synthesis techniques. + +Copyright (C) 1996-2004 University of Edinburgh + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX, or otherwise and +print the results, provided the printed document carries copying +permission notice identical to this one except for the removal of this +paragraph (this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the authors. +@end ifinfo + +@titlepage +@title The Festival Speech Synthesis System +@subtitle System documentation +@subtitle Edition @value{EDITION}, for Festival Version @value{VERSION} +@subtitle @value{UPDATED} +@author by Alan W Black, Paul Taylor and Richard Caley. + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1996-2004 University of Edinburgh, all rights +reserved. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the University of Edinburgh +@end titlepage + +@node Top, , , (dir) + +@ifinfo +This file documents the @emph{Festival Speech Synthesis System} +@value{VERSION}. This document contains many gaps and is still in the +process of being written. +@end ifinfo + +@menu +* Abstract:: initial comments +* Copying:: How you can copy and share the code +* Acknowledgements:: List of contributors +* What is new:: Enhancements since last public release + +* Overview:: Generalities and Philosophy +* Installation:: Compilation and Installation +* Quick start:: Just tell me what to type +* Scheme:: A quick introduction to Festival's scripting language + +Text methods for interfacing to Festival +* TTS:: Text to speech modes +* XML/SGML mark-up:: XML/SGML mark-up Language +* Emacs interface:: Using Festival within Emacs + +Internal functions +* Phonesets:: Defining and using phonesets +* Lexicons:: Building and compiling Lexicons +* Utterances:: Existing and defining new utterance types + +Modules +* Text analysis:: Tokenizing text +* POS tagging:: Part of speech tagging +* Phrase breaks:: Finding phrase breaks +* Intonation:: Intonations modules +* Duration:: Duration modules +* UniSyn synthesizer:: The UniSyn waveform synthesizer +* Diphone synthesizer:: Building and using diphone synthesizers +* Other synthesis methods:: other waveform synthesis methods +* Audio output:: Getting sound from Festival + +* Voices:: Adding new voices (and languages) + +* Tools:: CART, Ngrams etc + +* Building models from databases:: + +Adding new modules and writing C++ code +* Programming:: Programming in Festival (Lisp/C/C++) +* API:: Using Festival in other programs + +* Examples:: Some simple (and not so simple) examples + +* Problems:: Reporting bugs. +* References:: Other sources of information +* Feature functions:: List of builtin feature functions. +* Variable list:: Short descriptions of all variables +* Function list:: Short descriptions of all functions +* Index:: Index of concepts. +@end menu + +@node Abstract, Copying, , Top +@chapter Abstract + +This document provides a user manual for the Festival +Speech Synthesis System, version @value{VERSION}. + +Festival offers a general framework for building speech synthesis +systems as well as including examples of various modules. As a whole it +offers full text to speech through a number APIs: from shell level, +though a Scheme command interpreter, as a C++ library, and an Emacs +interface. Festival is multi-lingual, we have develeoped voices in many +languages including English (UK and US), Spanish and Welsh, though +English is the most advanced. + +The system is written in C++ and uses the Edinburgh Speech Tools +for low level architecture and has a Scheme (SIOD) based command +interpreter for control. Documentation is given in the FSF texinfo +format which can generate a printed manual, info files and HTML. + +The latest details and a full software distribution of the Festival Speech +Synthesis System are available through its home page which may be found +at +@example +@url{http://www.cstr.ed.ac.uk/projects/festival.html} +@end example + +@node Copying, Acknowledgements, Abstract, Top +@chapter Copying + +@cindex restrictions +@cindex redistribution +As we feeel the core system has reached an acceptable level of maturity +from 1.4.0 the basic system is released under a free lience, without the +commercial restrictions we imposed on early versions. The basic system +has been placed under an X11 type licence which as free licences go is +pretty free. No GPL code is included in festival or the speech tools +themselves (though some auxiliary files are GPL'd e.g. the Emacs mode +for Festival). We have deliberately choosen a licence that should be +compatible with our commercial partners and our free software users. + +However although the code is free, we still offer no warranties and no +maintenance. We will continue to endeavor to fix bugs and answer +queries when can, but are not in a position to guarantee it. We will +consider maintenance contracts and consultancy if desired, please +contacts us for details. + +Also note that not all the voices and lexicons we distribute with +festival are free. Particularly the British English lexicon derived +from Oxford Advanced Learners' Dictionary is free only for +non-commercial use (we will release an alternative soon). Also the +Spanish diphone voice we relase is only free for non-commercial use. + +If you are using Festival or the speech tools in commercial environment, +even though no licence is required, we would be grateful if you let us +know as it helps justify ourselves to our various sponsors. + +The current copyright on the core system is +@example + The Festival Speech Synthesis System: version 1.4.3 + Centre for Speech Technology Research + University of Edinburgh, UK + Copyright (c) 1996-2004 + All Rights Reserved. + + Permission is hereby granted, free of charge, to use and distribute + this software and its documentation without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of this work, and to + permit persons to whom this work is furnished to do so, subject to + the following conditions: + 1. The code must retain the above copyright notice, this list of + conditions and the following disclaimer. + 2. Any modifications must be clearly marked as such. + 3. Original authors' names are not deleted. + 4. The authors' names are not used to endorse or promote products + derived from this software without specific prior written + permission. + + THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK + DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT + SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. +@end example + +@node Acknowledgements, What is new, Copying, Top +@chapter Acknowledgements +@cindex acknowledgements +@cindex thanks + +The code in this system was primarily written by Alan W Black, Paul +Taylor and Richard Caley. Festival sits on top of the Edinburgh Speech +Tools Library, and uses much of its functionality. + +Amy Isard wrote a synthesizer for her MSc project in 1995, which first +used the Edinburgh Speech Tools Library. Although Festival doesn't +contain any code from that system, her system was used as a basic model. + +Much of the design and philosophy of Festival has been built on the +experience both Paul and Alan gained from the development of various +previous synthesizers and software systems, especially CSTR's Osprey and +Polyglot systems @cite{taylor91} and ATR's CHATR system @cite{black94}. + +However, it should be stated that Festival is fully developed at CSTR +and contains neither proprietary code or ideas. + +Festival contains a number of subsystems integrated from other sources +and we acknowledge those systems here. + +@section SIOD +@cindex SIOD +@cindex Scheme +@cindex Paradigm Associates + +The Scheme interpreter (SIOD -- Scheme In One Defun 3.0) was +written by George Carrett (gjc@@mitech.com, gjc@@paradigm.com) +and offers a basic small Scheme (Lisp) interpreter suitable +for embedding in applications such as Festival as a scripting +language. A number of changes and improvements have been added +in our development but it still remains that basic system. +We are grateful to George and Paradigm Associates Incorporated +for providing such a useful and well-written sub-system. +@example + Scheme In One Defun (SIOD) + COPYRIGHT (c) 1988-1994 BY + PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS. + ALL RIGHTS RESERVED + +Permission to use, copy, modify, distribute and sell this software +and its documentation for any purpose and without fee is hereby +granted, 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 Paradigm Associates +Inc not be used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. + +PARADIGM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +PARADIGM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. +@end example + +@section editline + +Because of conflicts between the copyright for GNU readline, for which +an optional interface was included in earlier versions, we have replace +the interface with a complete command line editing system based on +@file{editline}. @file{Editline} was posted to the USENET newsgroup +@file{comp.sources.misc} in 1992. A number of modifications have been +made to make it more useful to us but the original code (contained +within the standard speech tools distribution) and our modifications +fall under the following licence. +@example +Copyright 1992 Simmule Turner and Rich Salz. All rights reserved. + +This software is not subject to any license of the American Telephone +and Telegraph Company or of the Regents of the University of California. + +Permission is granted to anyone to use this software for any purpose on +any computer system, and to alter it and redistribute it freely, subject +to the following restrictions: +1. The authors are not responsible for the consequences of use of this + software, no matter how awful, even if they arise from flaws in it. +2. The origin of this software must not be misrepresented, either by + explicit claim or by omission. Since few users ever read sources, + credits must appear in the documentation. +3. Altered versions must be plainly marked as such, and must not be + misrepresented as being the original software. Since few users + ever read sources, credits must appear in the documentation. +4. This notice may not be removed or altered. +@end example + +@section Edinburgh Speech Tools Library + +@cindex Edinburgh Speech Tools Library +The Edinburgh Speech Tools lies at the core of Festival. Although +developed separately, much of the development of certain parts of the +Edinburgh Speech Tools has been directed by Festival's needs. In turn +those who have contributed to the Speech Tools make Festival +a more usable system. + +@xref{Acknowledgements, , Acknowledgements, speechtools, + Edinburgh Speech Tools Library Manual}. + +Online information about the Edinburgh Speech Tools library +is available through +@example +@url{http://www.cstr.ed.ac.uk/projects/speech_tools.html} +@end example + +@section Others + +Many others have provided actual code and support for Festival, +for which we are grateful. Specifically, + +@itemize @bullet +@item Alistair Conkie: +various low level code points and some design work, +Spanish synthesis, the old diphone synthesis code. +@item Steve Isard: +directorship and LPC diphone code, design of diphone schema. +@item EPSRC: +who fund Alan Black and Paul Taylor. +@item Sun Microsystems Laboratories: +for supporting the project and funding Richard. +@item AT&T Labs - Research: +for supporting the project. +@item Paradigm Associates and George Carrett: +for Scheme in one defun. +@item Mike Macon: +Improving the quality of the diphone synthesizer and LPC analysis. +@item Kurt Dusterhoff: +Tilt intonation training and modelling. +@item Amy Isard: +for her SSML project and related synthesizer. +@item Richard Tobin: +for answering all those difficult questions, the socket code, +and the XML parser. +@item Simmule Turner and Rich Salz: +command line editor (editline) +@item Borja Etxebarria: +Help with the Spanish synthesis +@item Briony Williams: +Welsh synthesis +@item Jacques H. de Villiers: @file{jacques@@cse.ogi.edu} from CSLU +at OGI, for the TCL interface, and other usability issues +@item Kevin Lenzo: @file{lenzo@@cs.cmu.edu} from CMU for the PERL +interface. +@item Rob Clarke: +for support under Linux. +@item Samuel Audet @file{guardia@@cam.org}: +OS/2 support +@item Mari Ostendorf: +For providing access to the BU FM Radio corpus from which some +modules were trained. +@item Melvin Hunt: +from whose work we based our residual LPC synthesis model on +@item Oxford Text Archive: +For the computer users version of Oxford Advanced +Learners' Dictionary (redistributed with permission). +@item Reading University: +for access to MARSEC from which the phrase break +model was trained. +@item LDC & Penn Tree Bank: +from which the POS tagger was trained, redistribution +of the models is with permission from the LDC. +@item Roger Burroughes and Kurt Dusterhoff: +For letting us capture their voices. +@item ATR and Nick Campbell: +for first getting Paul and Alan to work together and for the +experience we gained. +@item FSF: +for G++, make, .... +@item Center for Spoken Language Understanding: +CSLU at OGI, particularly Ron Cole and Mike Macon, have acted as +significant users for the system giving significant feedback and +allowing us to teach courses on Festival offering valuable real-use +feedback. +@item Our beta testers: +Thanks to all the people who put up with previous versions of the system +and reported bugs, both big and small. These comments are very important +to the constant improvements in the system. And thanks for your quick +responses when I had specific requests. +@item And our users ... +Many people have downloaded earlier versions of the system. Many have +found problems with installation and use and have reported it to us. +Many of you have put up with multiple compilations trying to fix bugs +remotely. We thank you for putting up with us and are pleased you've +taken the time to help us improve our system. Many of you have come up +with uses we hadn't thought of, which is always rewarding. + +Even if you haven't actively responded, the fact that you use the system +at all makes it worthwhile. +@end itemize + +@node What is new, Overview, Acknowledgements , Top +@chapter What is new + +Compared to the the previous major release (1.3.0 release Aug 1998) +1.4.0 is not functionally so different from its previous versions. +This release is primarily a consolidation release fixing and tidying +up some of the lower level aspects of the system to allow better +modularity for some of our future planned modules. + +@itemize @bullet +@item Copyright change: +The system is now free and has no commercial restriction. Note that +currently on the US voices (ked and kal) are also now unrestricted. The +UK English voices depend on the Oxford Advanced Learners' Dictionary of +Current English which cannot be used for commercial use without +permission from Oxford University Press. + +@item Architecture tidy up: +the interfaces to lower level part parts of the system have been tidied +up deleting some of the older code that was supported for +compatibility reasons. This is a much higher dependence of features +and easier (and safer) ways to register new objects as feature values +and Scheme objects. Scheme has been tidied up. It is no longer +"in one defun" but "in one directory". + +@item New documentation system for speech tools: +A new docbook based documentation system has been added to the +speech tools. Festival's documentation will will move +over to this sometime soon too. + +@item initial JSAPI support: both JSAPI and JSML (somewhat +similar to Sable) now have initial impelementations. They of course +depend on Java support which so far we have only (successfully) +investgated under Solaris and Linux. + +@item Generalization of statistical models: CART, ngrams, +and WFSTs are now fully supported from Lisp and can be used with a +generalized viterbi function. This makes adding quite complex statistical +models easy without adding new C++. + +@item Tilt Intonation modelling: +Full support is now included for the Tilt intomation models, +both training and use. + +@item Documentation on Bulding New Voices in Festival: +documentation, scripts etc. for building new voices and languages in +the system, see +@example +@url{http://www.cstr.ed.ac.uk/projects/festival/docs/festvox/} +@end example + +@end itemize + +@node Overview, Installation , What is new, Top +@chapter Overview + +Festival is designed as a speech synthesis system for at least three +levels of user. First, those who simply want high quality speech from +arbitrary text with the minimum of effort. Second, those who are +developing language systems and wish to include synthesis output. In +this case, a certain amount of customization is desired, such as +different voices, specific phrasing, dialog types etc. The third level +is in developing and testing new synthesis methods. + +This manual is not designed as a tutorial on converting text to speech +but for documenting the processes and use of our system. We do not +discuss the detailed algorithms involved in converting text to speech or +the relative merits of multiple methods, though we will often give +references to relevant papers when describing the use of each module. + +For more general information about text to speech we recommend Dutoit's +@file{An introduction to Text-to-Speech Synthesis} @cite{dutoit97}. For +more detailed research issues in TTS see @cite{sproat98} or +@cite{vansanten96}. + +@menu +* Philosophy:: Why we did it like it is +* Future:: How much better its going to get +@end menu + +@node Philosophy, Future, , Overview +@section Philosophy + +One of the biggest problems in the development of speech synthesis, and +other areas of speech and language processing systems, is that there are +a lot of simple well-known techniques lying around which can help you +realise your goal. But in order to improve some part of the whole +system it is necessary to have a whole system in which you can test and +improve your part. Festival is intended as that whole system in which +you may simply work on your small part to improve the whole. Without a +system like Festival, before you could even start to test your new +module you would need to spend significant effort to build a whole +system, or adapt an existing one before you could start working on your +improvements. + +Festival is specifically designed to allow the addition of new +modules, easily and efficiently, so that development need not +get bogged down in re-implementing the wheel. + +But there is another aspect of Festival which makes it more useful than +simply an environment for researching into new synthesis techniques. +It is a fully usable text-to-speech system suitable for embedding in +other projects that require speech output. The provision of a fully +working easy-to-use speech synthesizer in addition to just a testing +environment is good for two specific reasons. First, it offers a conduit +for our research, in that our experiments can quickly and directly +benefit users of our synthesis system. And secondly, in ensuring we have +a fully working usable system we can immediately see what problems exist +and where our research should be directed rather where our whims take +us. + +These concepts are not unique to Festival. ATR's CHATR system +(@cite{black94}) follows very much the same philosophy and Festival +benefits from the experiences gained in the development of that system. +Festival benefits from various pieces of previous work. As well as +CHATR, CSTR's previous synthesizers, Osprey and the Polyglot projects +influenced many design decisions. Also we are influenced by more +general programs in considering software engineering issues, especially +GNU Octave and Emacs on which the basic script model was based. + +Unlike in some other speech and language systems, software engineering is +considered very important to the development of Festival. Too often +research systems consist of random collections of hacky little scripts +and code. No one person can confidently describe the algorithms it +performs, as parameters are scattered throughout the system, with tricks +and hacks making it impossible to really evaluate why the system is good +(or bad). Such systems do not help the advancement of speech +technology, except perhaps in pointing at ideas that should be further +investigated. If the algorithms and techniques cannot be described +externally from the program @emph{such that} they can reimplemented by +others, what is the point of doing the work? + +Festival offers a common framework where multiple techniques may be +implemented (by the same or different researchers) so that they may +be tested more fairly in the same environment. + +As a final word, we'd like to make two short statements which both +achieve the same end but unfortunately perhaps not for the same reasons: +@quotation +Good software engineering makes good research easier +@end quotation +But the following seems to be true also +@quotation +If you spend enough effort on something it can be shown to be better +than its competitors. +@end quotation + +@node Future, , Philosophy , Overview +@section Future + +Festival is still very much in development. Hopefully this state will +continue for a long time. It is never possible to complete software, +there are always new things that can make it better. However as time +goes on Festival's core architecture will stabilise and little or +no changes will be made. Other aspects of the system will gain +greater attention such as waveform synthesis modules, intonation +techniques, text type dependent analysers etc. + +Festival will improve, so don't expected it to be the same six months +from now. + +A number of new modules and enhancements are already under consideration +at various stages of implementation. The following is a non-exhaustive +list of what we may (or may not) add to Festival over the +next six months or so. +@itemize @bullet +@item Selection-based synthesis: +Moving away from diphone technology to more generalized selection +of units for speech database. +@item New structure for linguistic content of utterances: +Using techniques for Metrical Phonology we are building more structure +representations of utterances reflecting there linguistic significance +better. This will allow improvements in prosody and unit selection. +@item Non-prosodic prosodic control: +For language generation systems and custom tasks where the speech +to be synthesized is being generated by some program, more information +about text structure will probably exist, such as phrasing, contrast, +key items etc. We are investigating the relationship of high-level +tags to prosodic information through the Sole project +@url{http://www.cstr.ed.ac.uk/projects/sole.html} +@item Dialect independent lexicons: +Currently for each new dialect we need a new lexicon, we are currently +investigating a form of lexical specification that is dialect independent +that allows the core form to be mapped to different dialects. This +will make the generation of voices in different dialects much easier. +@end itemize + +@node Installation, Quick start, Overview, Top +@chapter Installation + +This section describes how to install Festival from source in a new +location and customize that installation. + +@menu +* Requirements:: Software/Hardware requirements for Festival +* Configuration:: Setting up compilation +* Site initialization:: Settings for your particular site +* Checking an installation:: But does it work ... +@end menu + +@node Requirements, Configuration, , Installation +@section Requirements + +@cindex requirements +In order to compile Festival you first need the following +source packages + +@table @code +@item festival-1.4.3-release.tar.gz +Festival Speech Synthesis System source +@item speech_tools-1.2.3-release.tar.gz +The Edinburgh Speech Tools Library +@item festlex_NAME.tar.gz +@cindex lexicon +The lexicon distribution, where possible, includes the lexicon input +file as well as the compiled form, for your convenience. The lexicons +have varying distribution policies, but are all free except OALD, which +is only free for non-commercial use (we are working on a free +replacement). In some cases only a pointer to an ftp'able file plus a +program to convert that file to the Festival format is included. +@item festvox_NAME.tar.gz +You'll need a speech database. A number are available (with varying +distribution policies). Each voice may have other dependencies such as +requiring particular lexicons +@item festdoc_1.4.3.tar.gz +Full postscript, info and html documentation for Festival and the +Speech Tools. The source of the documentation is available +in the standard distributions but for your conveniences it has +been pre-generated. +@end table + +In addition to Festival specific sources you will also need + +@table @emph +@item A UNIX machine +Currently we have compiled and tested the system under Solaris (2.5(.1), +2.6, 2.7 and 2.8), SunOS (4.1.3), FreeBSD (3.x, 4.x), Linux (Redhat 4.1, +5.0, 5.1, 5.2, 6.[012], 7.[01], 8.0 and other Linux distributions), and it +should work under OSF (Dec Alphas), SGI (Irix), HPs (HPUX). But any +standard UNIX machine should be acceptable. We have now successfully +ported this version to Windows NT and Windows 95 (using the Cygnus GNU +win32 environment). This is still a young port but seems to work. +@item A C++ compiler +@cindex GNU g++ +@cindex g++ +@cindex C++ +Note that C++ is not very portable even between different versions +of the compiler from the same vendor. Although we've tried very +hard to make the system portable, we know it is very unlikely to +compile without change except with compilers that have already been tested. +The currently tested systems are +@itemize @bullet +@item Sun Sparc Solaris 2.5, 2.5.1, 2.6, 2.7, 2.9: +GCC 2.95.1, GCC 3.2 +@item FreeBSD for Intel 3.x and 4.x: +GCC 2.95.1, GCC 3.0 +@item Linux for Intel (RedHat 4.1/5.0/5.1/5.2/6.0/7.x/8.0): +GCC 2.7.2, GCC 2.7.2/egcs-1.0.2, egcs 1.1.1, egcs-1.1.2, GCC 2.95.[123], +GCC "2.96", GCC 3.0, GCC 3.0.1 GCC 3.2 GCC 3.2.1 +@item Windows NT 4.0: +GCC 2.7.2 plus egcs (from Cygnus GNU win32 b19), Visual C++ PRO v5.0, +Visual C++ v6.0 +@end itemize +Note if GCC works on one version of Unix it usually works on +others. + +@cindex Windows NT/95 +We have compiled both the speech tools and Festival under Windows NT 4.0 +and Windows 95 using the GNU tools available from Cygnus. +@example +@url{ftp://ftp.cygnus.com/pub/gnu-win32/}. +@end example + +@item GNU make +Due to there being too many different @code{make} programs out there +we have tested the system using GNU make on all systems we use. +Others may work but we know GNU make does. +@item Audio hardware +@cindex audio hardware +You can use Festival without audio output hardware but it doesn't sound +very good (though admittedly you can hear less problems with it). A +number of audio systems are supported (directly inherited from the +audio support in the Edinburgh Speech Tools Library): NCD's NAS +(formerly called netaudio) a network transparent audio system (which can +be found at @url{ftp://ftp.x.org/contrib/audio/nas/}); +@file{/dev/audio} (at 8k ulaw and 8/16bit linear), found on Suns, Linux +machines and FreeBSD; and a method allowing arbitrary UNIX +commands. @xref{Audio output}. +@end table + +@cindex readline +@cindex editline +@cindex GNU readline +Earlier versions of Festival mistakenly offered a command line editor +interface to the GNU package readline, but due to conflicts with the GNU +Public Licence and Festival's licence this interface was removed in +version 1.3.1. Even Festival's new free licence would cause problems as +readline support would restrict Festival linking with non-free code. A +new command line interface based on editline was provided that offers +similar functionality. Editline remains a compilation option as it is +probably not yet as portable as we would like it to be. + +@cindex @file{texi2html} +In addition to the above, in order to process the documentation you will +need @file{TeX}, @file{dvips} (or similar), GNU's @file{makeinfo} (part +of the texinfo package) and @file{texi2html} which is available from +@url{http://wwwcn.cern.ch/dci/texi2html/}. + +@cindex documentation +However the document files are also available pre-processed into, +postscript, DVI, info and html as part of the distribution in +@file{festdoc-1.4.X.tar.gz}. + +Ensure you have a fully installed and working version of your C++ +compiler. Most of the problems people have had in installing Festival +have been due to incomplete or bad compiler installation. It +might be worth checking if the following program works if you don't +know if anyone has used your C++ installation before. +@example +#include +int main (int argc, char **argv) +@{ + cout << "Hello world\n"; +@} +@end example + +Unpack all the source files in a new directory. The directory +will then contain two subdirectories +@example +speech_tools/ +festival/ +@end example + +@node Configuration, Site initialization, Requirements , Installation +@section Configuration + +First ensure you have a compiled version of the Edinburgh +Speech Tools Library. See @file{speech_tools/INSTALL} for +instructions. + +@cindex configuration +The system now supports the standard GNU @file{configure} method +for set up. In most cases this will automatically configure festival +for your particular system. In most cases you need only +type +@example +gmake +@end example +and the system will configure itself and compile, (note you +need to have compiled the Edinburgh Speech Tools +@file{speech_tools-1.2.2} first. + +@cindex @file{config/config} +In some case hand configuration is required. All of the configuration +choices are kept in the file @file{config/config}. + +@cindex OTHER_DIRS +For the most part Festival configuration inherits the configuration from +your speech tools config file (@file{../speech_tools/config/config}). +Additional optional modules may be added by adding them to the end of +your config file e.g. +@example +ALSO_INCLUDE += clunits +@end example +Adding and new module here will treat is as a new directory in +the @file{src/modules/} and compile it into the system in the +same way the @code{OTHER_DIRS} feature was used in +previous versions. + +@cindex NFS +@cindex automounter +If the compilation directory being accessed by NFS or if you use an +automounter (e.g. amd) it is recommend to explicitly set the variable +@code{FESTIVAL_HOME} in @file{config/config}. The command @code{pwd} is +not reliable when a directory may have multiple names. + +There is a simple test suite with Festival but it requires the three +basic voices and their respective lexicons installed before it will work. +Thus you need to install +@example +festlex_CMU.tar.gz +festlex_OALD.tar.gz +festlex_POSLEX.tar.gz +festvox_don.tar.gz +festvox_kedlpc16k.tar.gz +festvox_rablpc16k.tar.gz +@end example +If these are installed you can test the installation with +@example +gmake test +@end example + +To simply make it run with a male US English voice it is +sufficient to install just +@example +festlex_CMU.tar.gz +festlex_POSLEX.tar.gz +festvox_kallpc16k.tar.gz +@end example + +Note that the single most common reason for problems in compilation and +linking found amongst the beta testers was a bad installation of GNU +C++. If you get many strange errors in G++ library header files or link +errors it is worth checking that your system has the compiler, header +files and runtime libraries properly installed. This may be checked by +compiling a simple program under C++ and also finding out if anyone at +your site has ever used the installation. Most of these installation +problems are caused by upgrading to a newer version of libg++ without +removing the older version so a mixed version of the @file{.h} files +exist. + +Although we have tried very hard to ensure that Festival compiles with +no warnings this is not possible under some systems. + +@cindex SunOS +Under SunOS the system include files do not declare a number of +system provided functions. This a bug in Sun's include files. This +will causes warnings like "implicit definition of fprintf". These +are harmless. + +@cindex Linux +Under Linux a warning at link time about reducing the size of some +symbols often is produced. This is harmless. There is often +occasional warnings about some socket system function having an +incorrect argument type, this is also harmless. + +@cindex Visual C++ +The speech tools and festival compile under Windows95 or Windows NT +with Visual C++ v5.0 using the Microsoft @file{nmake} make program. We've +only done this with the Professonal edition, but have no reason to +believe that it relies on anything not in the standard edition. + +In accordance to VC++ conventions, object files are created with extension +.obj, executables with extension .exe and libraries with extension +.lib. This may mean that both unix and Win32 versions can be built in +the same directory tree, but I wouldn't rely on it. + +To do this you require nmake Makefiles for the system. These can be +generated from the gnumake Makefiles, using the command +@example +gnumake VCMakefile +@end example +in the speech_tools and festival directories. I have only done this +under unix, it's possible it would work under the cygnus gnuwin32 +system. + +If @file{make.depend} files exist (i.e. if you have done @file{gnumake +depend} in unix) equivalent @file{vc_make.depend} files will be created, if not +the VCMakefiles will not contain dependency information for the @file{.cc} +files. The result will be that you can compile the system once, but +changes will not cause the correct things to be rebuilt. + +In order to compile from the DOS command line using Visual C++ you +need to have a collection of environment variables set. In Windows NT +there is an instalation option for Visual C++ which sets these +globally. Under Windows95 or if you don't ask for them to be set +globally under NT you need to run +@example +vcvars32.bat +@end example +See the VC++ documentation for more details. + +Once you have the source trees with VCMakefiles somewhere visible from +Windows, you need to copy +@file{peech_tools\config\vc_config-dist} to +@file{speech_tools\config\vc_config} and edit it to suit your +local situation. Then do the same with +@file{festival\config\vc_config-dist}. + +The thing most likely to need changing is the definition of +@code{FESTIVAL_HOME} in @file{festival\config\vc_config_make_rules} +which needs to point to where you have put festival. + +Now you can compile. cd to the speech_tools directory and do +@example +nmake /nologo /fVCMakefile +@end example +@exdent and the library, the programs in main and the test programs should be +compiled. + +The tests can't be run automatically under Windows. A simple test to +check that things are probably OK is: +@example +main\na_play testsuite\data\ch_wave.wav +@end example +@exdent which reads and plays a waveform. + +Next go into the festival directory and do +@example +nmake /nologo /fVCMakefile +@end example +@exdent to build festival. When it's finished, and assuming you have the +voices and lexicons unpacked in the right place, festival should run +just as under unix. + +We should remind you that the NT/95 ports are still young and there may +yet be problems that we've not found yet. We only recommend the use the +speech tools and Festival under Windows if you have significant +experience in C++ under those platforms. + +@cindex smaller system +@cindex minimal system +Most of the modules @file{src/modules} are actually optional and the +system could be compiled without them. The basic set could be reduced +further if certain facilities are not desired. Particularly: +@file{donovan} which is only required if the donovan voice is used; +@file{rxp} if no XML parsing is required (e.g. Sable); and @file{parser} +if no stochastic paring is required (this parser isn't used for any of +our currently released voices). Actually even @file{UniSyn} and +@file{UniSyn_diphone} could be removed if some external waveform +synthesizer is being used (e.g. MBROLA) or some alternative one like +@file{OGIresLPC}. Removing unused modules will make the festival binary +smaller and (potentially) start up faster but don't expect too much. +You can delete these by changing the @code{BASE_DIRS} variable in +@file{src/modules/Makefile}. + +@node Site initialization, Checking an installation, Configuration, Installation +@section Site initialization + +@cindex run-time configuration +@cindex initialization +@cindex installation initialization +@cindex @file{init.scm} +@cindex @file{siteinit.scm} +Once compiled Festival may be further customized for particular sites. +At start up time Festival loads the file @file{init.scm} from its +library directory. This file further loads other necessary files such +as phoneset descriptions, duration parameters, intonation parameters, +definitions of voices etc. It will also load the files +@file{sitevars.scm} and @file{siteinit.scm} if they exist. +@file{sitevars.scm} is loaded after the basic Scheme library functions +are loaded but before any of the festival related functions are +loaded. This file is intended to set various path names before +various subsystems are loaded. Typically variables such +as @code{lexdir} (the directory where the lexicons are held), and +@code{voices_dir} (pointing to voice directories) should +be reset here if necessary. + +@cindex change libdir at run-time +@cindex run-time configuration +@cindex @code{load-path} +The default installation will try to find its lexicons and voices +automatically based on the value of @code{load-path} (this is derived +from @code{FESTIVAL_HOME} at compilation time or by using the @code{--libdir} +at run-time). If the voices and lexicons have been unpacked into +subdirectories of the library directory (the default) then no site +specific initialization of the above pathnames will be necessary. + +The second site specific file is @file{siteinit.scm}. Typical examples +of local initialization are as follows. The default audio output method +is NCD's NAS system if that is supported as that's what we use normally +in CSTR. If it is not supported, any hardware specific mode is the +default (e.g. sun16audio, freebas16audio, linux16audio or mplayeraudio). +But that default is just a setting in @file{init.scm}. If for example +in your environment you may wish the default audio output method to be +8k mulaw through @file{/dev/audio} you should add the following line to +your @file{siteinit.scm} file +@lisp +(Parameter.set 'Audio_Method 'sunaudio) +@end lisp +Note the use of @code{Parameter.set} rather than @code{Parameter.def} +the second function will not reset the value if it is already set. +Remember that you may use the audio methods @code{sun16audio}. +@code{linux16audio} or @code{freebsd16audio} only if @code{NATIVE_AUDIO} +was selected in @file{speech_tools/config/config} and your are +on such machines. The Festival variable @code{*modules*} contains +a list of all supported functions/modules in a particular installation +including audio support. Check the value of that variable if things +aren't what you expect. + +If you are installing on a machine whose audio is not directly supported +by the speech tools library, an external command may be executed to play +a waveform. The following example is for an imaginary machine that can +play audio files through a program called @file{adplay} with arguments +for sample rate and file type. When playing waveforms, Festival, by +default, outputs as unheadered waveform in native byte order. In this +example you would set up the default audio playing mechanism in +@file{siteinit.scm} as follows +@lisp +(Parameter.set 'Audio_Method 'Audio_Command) +(Parameter.set 'Audio_Command "adplay -raw -r $SR $FILE") +@end lisp +@cindex output sample rate +@cindex output file type +@cindex audio command output +@cindex audio output rate +@cindex audio output filetype +For @code{Audio_Command} method of playing waveforms Festival supports +two additional audio parameters. @code{Audio_Required_Rate} allows you +to use Festivals internal sample rate conversion function to any desired +rate. Note this may not be as good as playing the waveform at the +sample rate it is originally created in, but as some hardware devices +are restrictive in what sample rates they support, or have naive +resample functions this could be optimal. The second addition +audio parameter is @code{Audio_Required_Format} which can be +used to specify the desired output forms of the file. The default +is unheadered raw, but this may be any of the values supported by +the speech tools (including nist, esps, snd, riff, aiff, audlab, raw +and, if you really want it, ascii). + +For example suppose you run Festival on a remote machine and are not +running any network audio system and want Festival to copy files back to +your local machine and simply cat them to @file{/dev/audio}. The +following would do that (assuming permissions for rsh are allowed). +@lisp +(Parameter.set 'Audio_Method 'Audio_Command) +;; Make output file ulaw 8k (format ulaw implies 8k) +(Parameter.set 'Audio_Required_Format 'ulaw) +(Parameter.set 'Audio_Command + "userhost=`echo $DISPLAY | sed 's/:.*$//'`; rcp $FILE $userhost:$FILE; \ + rsh $userhost \"cat $FILE >/dev/audio\" ; rsh $userhost \"rm $FILE\"") +@end lisp +Note there are limits on how complex a command you want to put in the +@code{Audio_Command} string directly. It can get very confusing with respect +to quoting. It is therefore recommended that once you get past a certain +complexity consider writing a simple shell script and calling it from +the @code{Audio_Command} string. + +@cindex default voice +A second typical customization is setting the default speaker. Speakers +depend on many things but due to various licence (and resource) +restrictions you may only have some diphone/nphone databases available +in your installation. The function name that is the value of +@code{voice_default} is called immediately after @file{siteinit.scm} is +loaded offering the opportunity for you to change it. In +the standard distribution no change should be required. If you +download all the distributed voices @code{voice_rab_diphone} is +the default voice. You may change this for a site by adding +the following to @file{siteinit.scm} or per person by changing +your @file{.festivalrc}. For example if you wish to +change the default voice to the American one @code{voice_ked_diphone} +@lisp +(set! voice_default 'voice_ked_diphone) +@end lisp +Note the single quote, and note that unlike in early versions +@code{voice_default} is not a function you can call directly. + +@cindex @file{.festivalrc} +@cindex user initialization +A second level of customization is on a per user basis. After loading +@file{init.scm}, which includes @file{sitevars.scm} and +@file{siteinit.scm} for local installation, Festival loads the file +@file{.festivalrc} from the user's home directory (if it exists). This +file may contain arbitrary Festival commands. + +@node Checking an installation, , Site initialization, Installation +@section Checking an installation + +Once compiled and site initialization is set up you should test +to see if Festival can speak or not. + +Start the system +@example +$ bin/festival +Festival Speech Synthesis System 1.4.3:release Jan 2003 +Copyright (C) University of Edinburgh, 1996-2003. All rights reserved. +For details type `(festival_warranty)' +festival> ^D +@end example +If errors occur at this stage they are most likely to do +with pathname problems. If any error messages are printed +about non-existent files check that those pathnames +point to where you intended them to be. Most of the (default) +pathnames are dependent on the basic library path. Ensure that +is correct. To find out what it has been set to, start the +system without loading the init files. +@example +$ bin/festival -q +Festival Speech Synthesis System 1.4.3:release Jan 2003 +Copyright (C) University of Edinburgh, 1996-2003. All rights reserved. +For details type `(festival_warranty)' +festival> libdir +"/projects/festival/lib/" +festival> ^D +@end example +This should show the pathname you set in your @file{config/config}. + +If the system starts with no errors try to synthesize something +@example +festival> (SayText "hello world") +@end example +Some files are only accessed at synthesis time so this may +show up other problem pathnames. If it talks, you're in business, +if it doesn't, here are some possible problems. + +@cindex audio problems +If you get the error message +@example +Can't access NAS server +@end example +You have selected NAS as the audio output but have no server running on +that machine or your @code{DISPLAY} or @code{AUDIOSERVER} environment +variable is not set properly for your output device. Either set these +properly or change the audio output device in @file{lib/siteinit.scm} as +described above. + +Ensure your audio device actually works the way you think it does. On +Suns, the audio output device can be switched into a number of different +output modes, speaker, jack, headphones. If this is set to the wrong +one you may not hear the output. Use one of Sun's tools to change this +(try @file{/usr/demo/SOUND/bin/soundtool}). Try to find an audio +file independent of Festival and get it to play on your audio. +Once you have done that ensure that the audio output method set in +Festival matches that. + +Once you have got it talking, test the audio spooling device. +@example +festival> (intro) +@end example +This plays a short introduction of two sentences, spooling the audio +output. + +Finally exit from Festival (by end of file or @code{(quit)}) and test +the script mode with. +@example +$ examples/saytime +@end example + +A test suite is included with Festival but it makes certain assumptions +about which voices are installed. It assumes that +@code{voice_rab_diphone} (@file{festvox_rabxxxx.tar.gz}) is the default +voice and that @code{voice_ked_diphone} and @code{voice_don_diphone} +(@file{festvox_kedxxxx.tar.gz} and @file{festvox_don.tar.gz}) are +installed. Also local settings in your @file{festival/lib/siteinit.scm} +may affect these tests. However, after installation it may +be worth trying +@example +gnumake test +@end example +from the @file{festival/} directory. This will do various tests +including basic utterance tests and tokenization tests. It also checks +that voices are installed and that they don't interfere with each other. +These tests are primarily regression tests for the developers of +Festival, to ensure new enhancements don't mess up existing supported +features. They are not designed to test an installation is successful, +though if they run correctly it is most probable the installation has +worked. + +@node Quick start, Scheme, Installation, Top +@chapter Quick start + +This section is for those who just want to know the absolute basics +to run the system. + +@cindex command mode +@cindex text-to-speech mode +@cindex tts mode +Festival works in two fundamental modes, @emph{command mode} and +@emph{text-to-speech mode} (tts-mode). In command mode, information (in +files or through standard input) is treated as commands and is +interpreted by a Scheme interpreter. In tts-mode, information (in files +or through standard input) is treated as text to be rendered as speech. +The default mode is command mode, though this may change in later +versions. + +@menu +* Basic command line options:: +* Simple command driven session:: +* Getting some help:: +@end menu + +@node Basic command line options, Simple command driven session, , Quick start +@section Basic command line options + +@cindex command line options +Festival's basic calling method is as + +@lisp +festival [options] file1 file2 ... +@end lisp + +Options may be any of the following + +@table @code +@item -q +start Festival without loading @file{init.scm} or user's +@file{.festivalrc} +@item -b +@itemx --batch +@cindex batch mode +After processing any file arguments do not become interactive +@item -i +@itemx --interactive +@cindex interactive mode +After processing file arguments become interactive. This option overrides +any batch argument. +@item --tts +@cindex tts mode +Treat file arguments in text-to-speech mode, causing them to be +rendered as speech rather than interpreted as commands. When selected +in interactive mode the command line edit functions are not available +@item --command +@cindex command mode +Treat file arguments in command mode. This is the default. +@item --language LANG +@cindex language specification +Set the default language to @var{LANG}. Currently @var{LANG} may be +one of @code{english}, @code{spanish} or @code{welsh} (depending on +what voices are actually available in your installation). +@item --server +After loading any specified files go into server mode. This is +a mode where Festival waits for clients on a known port (the +value of @code{server_port}, default is 1314). Connected +clients may send commands (or text) to the server and expect +waveforms back. @xref{Server/client API}. Note server mode +may be unsafe and allow unauthorised access to your +machine, be sure to read the security recommendations in +@ref{Server/client API} +@item --script scriptfile +@cindex script files +@cindex Festival script files +Run scriptfile as a Festival script file. This is similar to +to @code{--batch} but it encapsulates the command line arguments into +the Scheme variables @code{argv} and @code{argc}, so that Festival +scripts may process their command line arguments just like +any other program. It also does not load the the basic initialisation +files as sometimes you may not want to do this. If you wish them, +you should copy the loading sequence from an example Festival +script like @file{festival/examples/saytext}. +@item --heap NUMBER +@cindex heap size +@cindex Scheme heap size +The Scheme heap (basic number of Lisp cells) is of a fixed size and +cannot be dynamically increased at run time (this would complicate +garbage collection). The default size is 210000 which seems to be more +than adequate for most work. In some of our training experiments where +very large list structures are required it is necessary to increase +this. Note there is a trade off between size of the heap and time it +takes to garbage collect so making this unnecessarily big is not a good +idea. If you don't understand the above explanation you almost +certainly don't need to use the option. +@end table +In command mode, if the file name starts with a left parenthesis, the +name itself is read and evaluated as a Lisp command. This is often +convenient when running in batch mode and a simple command is necessary +to start the whole thing off after loading in some other specific files. + +@node Simple command driven session, Getting some help, Basic command line options, Quick start +@section Sample command driven session + +Here is a short session using Festival's command interpreter. + +Start Festival with no arguments +@lisp +$ festival +Festival Speech Synthesis System 1.4.3:release Dec 2002 +Copyright (C) University of Edinburgh, 1996-2002. All rights reserved. +For details type `(festival_warranty)' +festival> +@end lisp + +Festival uses the a command line editor based on editline for terminal +input so command line editing may be done with Emacs commands. Festival +also supports history as well as function, variable name, and file name +completion via the @key{TAB} key. + +Typing @code{help} will give you more information, that is @code{help} +without any parenthesis. (It is actually a variable name whose value is a +string containing help.) + +@cindex Scheme +@cindex read-eval-print loop +Festival offers what is called a read-eval-print loop, because +it reads an s-expression (atom or list), evaluates it and prints +the result. As Festival includes the SIOD Scheme interpreter most +standard Scheme commands work +@lisp +festival> (car '(a d)) +a +festival> (+ 34 52) +86 +@end lisp +In addition to standard Scheme commands a number of commands specific to +speech synthesis are included. Although, as we will see, there are +simpler methods for getting Festival to speak, here are the basic +underlying explicit functions used in synthesizing an utterance. + +@cindex utterance +@cindex hello world +Utterances can consist of various types @xref{Utterance types}, +but the simplest form is plain text. We can create an utterance +and save it in a variable +@lisp +festival> (set! utt1 (Utterance Text "Hello world")) +# +festival> +@end lisp +The (hex) number in the return value may be different for your +installation. That is the print form for utterances. Their internal +structure can be very large so only a token form is printed. + +@cindex synthesizing an utterance +Although this creates an utterance it doesn't do anything else. +To get a waveform you must synthesize it. +@lisp +festival> (utt.synth utt1) +# +festival> +@end lisp +@cindex playing an utterance +This calls various modules, including tokenizing, duration,. intonation +etc. Which modules are called are defined with respect to the type +of the utterance, in this case @code{Text}. It is possible to +individually call the modules by hand but you just wanted it to talk didn't +you. So +@lisp +festival> (utt.play utt1) +# +festival> +@end lisp +@exdent will send the synthesized waveform to your audio device. You should +hear "Hello world" from your machine. + +@cindex @code{SayText} +To make this all easier a small function doing these three steps exists. +@code{SayText} simply takes a string of text, synthesizes it and sends it +to the audio device. +@lisp +festival> (SayText "Good morning, welcome to Festival") +# +festival> +@end lisp +Of course as history and command line editing are supported @key{c-p} +or up-arrow will allow you to edit the above to whatever you wish. + +Festival may also synthesize from files rather than simply text. +@lisp +festival> (tts "myfile" nil) +nil +festival> +@end lisp +@cindex exiting Festival +@cindex @code{quit} +The end of file character @key{c-d} will exit from Festival and +return you to the shell, alternatively the command @code{quit} may +be called (don't forget the parentheses). + +@cindex TTS +@cindex text to speech +Rather than starting the command interpreter, Festival may synthesize +files specified on the command line +@lisp +unix$ festival --tts myfile +unix$ +@end lisp + +@cindex text to wave +@cindex offline TTS +Sometimes a simple waveform is required from text that is to be kept and +played at some later time. The simplest way to do this with festival is +by using the @file{text2wave} program. This is a festival script that +will take a file (or text from standard input) and produce a single +waveform. + +@cindex text2wave +An example use is +@example +text2wave myfile.txt -o myfile.wav +@end example +Options exist to specify the waveform file type, for example if +Sun audio format is required +@example +text2wave myfile.txt -otype snd -o myfile.wav +@end example +Use @file{-h} on @file{text2wave} to see all options. + +@node Getting some help, , Simple command driven session, Quick start +@section Getting some help + +@cindex help +If no audio is generated then you must check to see if audio is +properly initialized on your machine. @xref{Audio output}. + +In the command interpreter @key{m-h} (meta-h) will give you help +on the current symbol before the cursor. This will be a short +description of the function or variable, how to use it and what +its arguments are. A listing of all such help strings appears +at the end of this document. @key{m-s} will synthesize and say +the same information, but this extra function is really just for show. + +@cindex @code{manual} +The lisp function @code{manual} will send the appropriate command to an +already running Netscape browser process. If @code{nil} is given as an +argument the browser will be directed to the tables of contents of the +manual. If a non-nil value is given it is assumed to be a section title +and that section is searched and if found displayed. For example +@example +festival> (manual "Accessing an utterance") +@end example +Another related function is @code{manual-sym} which given a symbol will +check its documentation string for a cross reference to a manual +section and request Netscape to display it. This function is +bound to @key{m-m} and will display the appropriate section for +the given symbol. + +Note also that the @key{TAB} key can be used to find out the name +of commands available as can the function @code{Help} (remember the +parentheses). + +For more up to date information on Festival regularly check +the Festival Home Page at +@example +@url{http://www.cstr.ed.ac.uk/projects/festival.html} +@end example + +Further help is available by mailing questions to +@example +festival-help@@cstr.ed.ac.uk +@end example +Although we cannot guarantee the time required to answer you, we +will do our best to offer help. + +@cindex bug reports +Bug reports should be submitted to +@example +festival-bug@@cstr.ed.ac.uk +@end example + +If there is enough user traffic a general mailing list will be +created so all users may share comments and receive announcements. +In the mean time watch the Festival Home Page for news. + +@node Scheme, TTS, Quick start, Top +@chapter Scheme + +@cindex Scheme introduction +Many people seem daunted by the fact that Festival uses Scheme as its +scripting language and feel they can't use Festival because they don't +know Scheme. However most of those same people use Emacs everyday which +also has (a much more complex) Lisp system underneath. The number of +Scheme commands you actually need to know in Festival is really very +small and you can easily just find out as you go along. Also people use +the Unix shell often but only know a small fraction of actual commands +available in the shell (or in fact that there even is a distinction +between shell builtin commands and user definable ones). So take it +easy, you'll learn the commands you need fairly quickly. + +@menu +* Scheme references:: Places to learn more about Scheme +* Scheme fundamentals:: Syntax and semantics +* Scheme Festival specifics:: +* Scheme I/O:: +@end menu + +@node Scheme references, Scheme fundamentals, , Scheme +@section Scheme references + +If you wish to learn about Scheme in more detail I recommend +the book @cite{abelson85}. + +The Emacs Lisp documentation is reasonable as it is comprehensive and +many of the underlying uses of Scheme in Festival were influenced +by Emacs. Emacs Lisp however is not Scheme so there are some +differences. + +@cindex Scheme references +Other Scheme tutorials and resources available on the Web are +@itemize @bullet +@item +The Revised Revised Revised Revised Scheme Report, the document +defining the language is available from +@example +@url{http://tinuviel.cs.wcu.edu/res/ldp/r4rs-html/r4rs_toc.html} +@end example +@item +a Scheme tutorials from the net: +@itemize @bullet +@item @url{http://www.cs.uoregon.edu/classes/cis425/schemeTutorial.html} +@end itemize +@item the Scheme FAQ +@itemize @bullet +@item @url{http://www.landfield.com/faqs/scheme-faq/part1/} +@end itemize +@end itemize + +@node Scheme fundamentals, Scheme Festival specifics, Scheme references, Scheme +@section Scheme fundamentals + +But you want more now, don't you, not just be referred to some +other book. OK here goes. + +@emph{Syntax}: an expression is an @emph{atom} or a @emph{list}. A +list consists of a left paren, a number of expressions and right +paren. Atoms can be symbols, numbers, strings or other special +types like functions, hash tables, arrays, etc. + +@emph{Semantics}: All expressions can be evaluated. Lists are +evaluated as function calls. When evaluating a list all the +members of the list are evaluated first then the first item (a +function) is called with the remaining items in the list as arguments. +Atoms are evaluated depending on their type: symbols are +evaluated as variables returning their values. Numbers, strings, +functions, etc. evaluate to themselves. + +Comments are started by a semicolon and run until end of line. + +And that's it. There is nothing more to the language that. But just +in case you can't follow the consequences of that, here are +some key examples. + +@lisp +festival> (+ 2 3) +5 +festival> (set! a 4) +4 +festival> (* 3 a) +12 +festival> (define (add a b) (+ a b)) +# +festival> (add 3 4) +7 +festival> (set! alist '(apples pears bananas)) +(apples pears bananas) +festival> (car alist) +apples +festival> (cdr alist) +(pears bananas) +festival> (set! blist (cons 'oranges alist)) +(oranges apples pears bananas) +festival> (append alist blist) +(apples pears bananas oranges apples pears bananas) +festival> (cons alist blist) +((apples pears bananas) oranges apples pears bananas) +festival> (length alist) +3 +festival> (length (append alist blist)) +7 +@end lisp + +@node Scheme Festival specifics, Scheme I/O, Scheme fundamentals, Scheme +@section Scheme Festival specifics + +There a number of additions to SIOD that are Festival specific though +still part of the Lisp system rather than the synthesis functions per se. + +By convention if the first statement of a function is a string, +it is treated as a documentation string. The string will be +printed when help is requested for that function symbol. + +@cindex debugging Scheme errors +@cindex debugging scripts +@cindex backtrace +In interactive mode if the function @code{:backtrace} is called (within +parenthesis) the previous stack trace is displayed. Calling +@code{:backtrace} with a numeric argument will display that particular +stack frame in full. Note that any command other than @code{:backtrace} +will reset the trace. You may optionally call +@lisp +(set_backtrace t) +@end lisp +Which will cause a backtrace to be displayed whenever a Scheme error +occurs. This can be put in your @file{.festivalrc} if you wish. This +is especially useful when running Festival in non-interactive mode +(batch or script mode) so that more information is printed when an error +occurs. + +@cindex hooks +A @emph{hook} in Lisp terms is a position within some piece of code +where a user may specify their own customization. The notion is used +heavily in Emacs. In Festival there a number of places where hooks are +used. A hook variable contains either a function or list of functions +that are to be applied at some point in the processing. For example the +@code{after_synth_hooks} are applied after synthesis has been applied to +allow specific customization such as resampling or modification of the +gain of the synthesized waveform. The Scheme function +@code{apply_hooks} takes a hook variable as argument and an object and +applies the function/list of functions in turn to the object. + +@cindex catching errors in Scheme +@cindex @code{unwind-protect} +@cindex errors in Scheme +When an error occurs in either Scheme or within the C++ part of Festival +by default the system jumps to the top level, resets itself and +continues. Note that errors are usually serious things, pointing to +bugs in parameters or code. Every effort has been made to ensure +that the processing of text never causes errors in Festival. +However when using Festival as a development system it is often +that errors occur in code. + +Sometimes in writing Scheme code you know there is a potential for +an error but you wish to ignore that and continue on to the next +thing without exiting or stopping and returning to the top level. For +example you are processing a number of utterances from a database and +some files containing the descriptions have errors in them but you +want your processing to continue through every utterance that can +be processed rather than stopping 5 minutes after you gone home after +setting a big batch job for overnight. + +@cindex @code{unwind-protect} +@cindex catching errors +Festival's Scheme provides the function @code{unwind-protect} which +allows the catching of errors and then continuing normally. For example +suppose you have the function @code{process_utt} which takes a filename +and does things which you know might cause an error. You can write the +following to ensure you continue processing even in an error +occurs. +@lisp +(unwind-protect + (process_utt filename) + (begin + (format t "Error found in processing %s\n" filename) + (format t "continuing\n"))) +@end lisp +The @code{unwind-protect} function takes two arguments. The first is +evaluated and if no error occurs the value returned from that expression +is returned. If an error does occur while evaluating the first +expression, the second expression is evaluated. @code{unwind-protect} +may be used recursively. Note that all files opened while evaluating +the first expression are closed if an error occurs. All global +variables outside the scope of the @code{unwind-protect} will be left as +they were set up until the error. Care should be taken in using this +function but its power is necessary to be able to write robust Scheme +code. + +@node Scheme I/O, , Scheme Festival specifics, Scheme +@section Scheme I/O + +@cindex file i/o in Scheme +@cindex i/o in Scheme +Different Scheme's may have quite different implementations of +file i/o functions so in this section we will describe the +basic functions in Festival SIOD regarding i/o. + +Simple printing to the screen may be achieved with the function +@code{print} which prints the given s-expression to the screen. +The printed form is preceded by a new line. This is often useful +for debugging but isn't really powerful enough for much else. + +@cindex @code{fopen} +@cindex @code{fclose} +Files may be opened and closed and referred to file descriptors +in a direct analogy to C's stdio library. The SIOD functions +@code{fopen} and @code{fclose} work in the exactly the same +way as their equivalently named partners in C. + +@cindex @code{format} +@cindex formatted output +The @code{format} command follows the command of the same name in Emacs +and a number of other Lisps. C programmers can think of it as +@code{fprintf}. @code{format} takes a file descriptor, format string +and arguments to print. The file description may be a file descriptor +as returned by the Scheme function @code{fopen}, it may also be @code{t} +which means the output will be directed as standard out +(cf. @code{printf}). A third possibility is @code{nil} which will cause +the output to printed to a string which is returned (cf. @code{sprintf}). + +The format string closely follows the format strings +in ANSI C, but it is not the same. Specifically the directives +currently supported are, @code{%%}, @code{%d}, @code{%x}, +@code{%s}, @code{%f}, @code{%g} and @code{%c}. All modifiers +for these are also supported. In addition @code{%l} is provided +for printing of Scheme objects as objects. + +For example +@lisp +(format t "%03d %3.4f %s %l %l %l\n" 23 23 "abc" "abc" '(a b d) utt1) +@end lisp +will produce +@lisp +023 23.0000 abc "abc" (a b d) # +@end lisp +on standard output. + +@cindex pretty printing +When large lisp expressions are printed they are difficult to read +because of the parentheses. The function @code{pprintf} prints an +expression to a file description (or @code{t} for standard out). It +prints so the s-expression is nicely lined up and indented. This +is often called pretty printing in Lisps. + +@cindex reading from files +@cindex loading data from files +For reading input from terminal or file, there is currently no +equivalent to @code{scanf}. Items may only be read as Scheme +expressions. The command +@lisp +(load FILENAME t) +@end lisp +@exdent +will load all s-expressions in @code{FILENAME} and return them, +unevaluated as a list. Without the third argument the @code{load} +function will load and evaluate each s-expression in the file. + +To read individual s-expressions use @code{readfp}. For +example +@lisp +(let ((fd (fopen trainfile "r")) + (entry) + (count 0)) + (while (not (equal? (set! entry (readfp fd)) (eof-val))) + (if (string-equal (car entry) "home") + (set! count (+ 1 count)))) + (fclose fd)) +@end lisp + +@cindex @code{parse-number} +@cindex @code{atof} +@cindex string to number +@cindex convert string to number +To convert a symbol whose print name is a number to a number +use @code{parse-number}. This is the equivalent to @code{atof} +in C. + +Note that, all i/o from Scheme input files is assumed to be +basically some form of Scheme data (though can be just numbers, +tokens). For more elaborate analysis of incoming data it is +possible to use the text tokenization functions which offer +a fully programmable method of reading data. + +@node TTS, XML/SGML mark-up, Scheme, Top +@chapter TTS + +Festival supports text to speech for raw text files. If you +are not interested in using Festival in any other way except as +black box for rendering text as speech, the following method +is probably what you want. +@example +festival --tts myfile +@end example +This will say the contents of @file{myfile}. Alternatively text +may be submitted on standard input +@example +echo hello world | festival --tts +cat myfile | festival --tts +@end example + +@cindex text modes +Festival supports the notion of @emph{text modes} where the text file +type may be identified, allowing Festival to process the file in an +appropriate way. Currently only two types are considered stable: +@code{STML} and @code{raw}, but other types such as @code{email}, +@code{HTML}, @code{Latex}, etc. are being developed and discussed below. +This follows the idea of buffer modes in Emacs where a file's type can +be utilized to best display the text. Text mode may also be selected +based on a filename's extension. + +Within the command interpreter the function @code{tts} is used +to render files as text; it takes a filename and the text mode +as arguments. + +@menu +* Utterance chunking:: From text to utterances +* Text modes:: Mode specific text analysis +* Example text mode:: An example mode for reading email +@end menu + +@node Utterance chunking, Text modes, , TTS +@section Utterance chunking + +@cindex utterance chunking +@cindex @code{eou_tree} +Text to speech works by first tokenizing the file and chunking the +tokens into utterances. The definition of utterance breaks is +determined by the utterance tree in variable @code{eou_tree}. A default +version is given in @file{lib/tts.scm}. This uses a decision tree to +determine what signifies an utterance break. Obviously blank lines are +probably the most reliable, followed by certain punctuation. The +confusion of the use of periods for both sentence breaks and +abbreviations requires some more heuristics to best guess their +different use. The following tree is currently used which +works better than simply using punctuation. +@lisp +(defvar eou_tree +'((n.whitespace matches ".*\n.*\n\\(.\\|\n\\)*") ;; 2 or more newlines + ((1)) + ((punc in ("?" ":" "!")) + ((1)) + ((punc is ".") + ;; This is to distinguish abbreviations vs periods + ;; These are heuristics + ((name matches "\\(.*\\..*\\|[A-Z][A-Za-z]?[A-Za-z]?\\|etc\\)") + ((n.whitespace is " ") + ((0)) ;; if abbrev single space isn't enough for break + ((n.name matches "[A-Z].*") + ((1)) + ((0)))) + ((n.whitespace is " ") ;; if it doesn't look like an abbreviation + ((n.name matches "[A-Z].*") ;; single space and non-cap is no break + ((1)) + ((0))) + ((1)))) + ((0))))) +@end lisp +The token items this is applied to will always (except in the +end of file case) include one following token, so look ahead is +possible. The "n." and "p." and "p.p." prefixes allow access to the +surrounding token context. The features @code{name}, @code{whitespace} +and @code{punc} allow access to the contents of the token itself. At +present there is no way to access the lexicon form this tree which +unfortunately might be useful if certain abbreviations were identified +as such there. + +Note these are heuristics and written by hand not trained from data, +though problems have been fixed as they have been observed in data. The +above rules may make mistakes where abbreviations appear at end of +lines, and when improper spacing and capitalization is used. This is +probably worth changing, for modes where more casual text appears, such +as email messages and USENET news messages. A possible improvement +could be made by analysing a text to find out its basic threshold of +utterance break (i.e. if no full stop, two spaces, followed by a +capitalized word sequences appear and the text is of a reasonable length +then look for other criteria for utterance breaks). + +Ultimately what we are trying to do is to chunk the text into utterances +that can be synthesized quickly and start to play them quickly to +minimise the time someone has to wait for the first sound when starting +synthesis. Thus it would be better if this chunking were done on +@emph{prosodic phrases} rather than chunks more similar to linguistic +sentences. Prosodic phrases are bounded in size, while sentences are +not. + +@node Text modes, Example text mode, Utterance chunking, TTS +@section Text modes + +@cindex text modes +We do not believe that all texts are of the same type. Often information +about the general contents of file will aid synthesis greatly. For +example in Latex files we do not want to here "left brace, backslash e +m" before each emphasized word, nor do we want to necessarily hear +formating commands. Festival offers a basic method for specifying +customization rules depending on the @emph{mode} of the text. By type +we are following the notion of modes in Emacs and eventually will allow +customization at a similar level. + +Modes are specified as the third argument to the function @code{tts}. +When using the Emacs interface to Festival the buffer mode is +automatically passed as the text mode. If the mode is not supported a +warning message is printed and the raw text mode is used. + +Our initial text mode implementation allows configuration both in C++ +and in Scheme. Obviously in C++ almost anything can be done but it is +not as easy to reconfigure without recompilation. Here +we will discuss those modes which can be fully configured at +run time. + +A text mode may contain the following +@table @emph +@item filter +A Unix shell program filter that processes the text file in some +appropriate way. For example for email it might remove uninteresting +headers and just output the subject, from line and the message body. +If not specified, an identity filter is used. +@item init_function +This (Scheme) function will be called before any processing +will be done. It allows further set up of tokenization rules +and voices etc. +@item exit_function +This (Scheme) function will be called at the end of any processing +allowing reseting of tokenization rules etc. +@item analysis_mode +If analysis mode is @code{xml} the file is read through the built in XML +parser @code{rxp}. Alternatively if analysis mode is @code{xxml} the +filter should an SGML normalising parser and the output is processed in +a way suitable for it. Any other value is ignored. +@end table +These mode specific parameters are specified in the a-list +held in @code{tts_text_modes}. + +When using Festival in Emacs the emacs buffer mode is passed to +Festival as the text mode. + +Note that above mechanism is not really designed to be re-entrant, +this should be addressed in later versions. + +@cindex @code{auto-text-mode-alist} +@cindex automatic selection of text mode +Following the use of auto-selection of mode in Emacs, Festival can +auto-select the text mode based on the filename given when no explicit +mode is given. The Lisp variable @code{auto-text-mode-alist} is a list +of dotted pairs of regular expression and mode name. For example +to specify that the @code{email} mode is to be used for files ending +in @file{.email} we would add to the current @code{auto-text-mode-alist} +as follows +@lisp +(set! auto-text-mode-alist + (cons (cons "\\.email$" 'email) + auto-text-mode-alist)) +@end lisp +If the function @code{tts} is called with a mode other than @code{nil} +that mode overrides any specified by the @code{auto-text-mode-alist}. +The mode @code{fundamental} is the explicit "null" mode, it is used +when no mode is specified in the function @code{tts}, and match +is found in @code{auto-text-mode-alist} or the specified mode +is not found. + +By convention if a requested text model is not found in +@code{tts_text_modes} the file @file{MODENAME-mode} will be +@code{required}. Therefore if you have the file +@file{MODENAME-mode.scm} in your library then it will be automatically +loaded on reference. Modes may be quite large and it is not necessary +have Festival load them all at start up time. + +Because of the @code{auto-text-mode-alist} and the auto loading +of currently undefined text modes you can use Festival like +@example +festival --tts example.email +@end example +Festival with automatically synthesize @file{example.email} in text +mode @code{email}. + +@cindex personal text modes +If you add your own personal text modes you should do the following. +Suppose you've written an HTML mode. You have named it +@file{html-mode.scm} and put it in @file{/home/awb/lib/festival/}. In +your @file{.festivalrc} first identify you're personal Festival library +directory by adding it to @code{lib-path}. +@example +(set! lib-path (cons "/home/awb/lib/festival/" lib-path)) +@end example +Then add the definition to the @code{auto-text-mode-alist} +that file names ending @file{.html} or @file{.htm} should +be read in HTML mode. +@example +(set! auto-text-mode-alist + (cons (cons "\\.html?$" 'html) + auto-text-mode-alist)) +@end example +Then you may synthesize an HTML file either from Scheme +@example +(tts "example.html" nil) +@end example +@exdent Or from the shell command line +@example +festival --tts example.html +@end example +Anyone familiar with modes in Emacs should recognise that the process of +adding a new text mode to Festival is very similar to adding a new +buffer mode to Emacs. + +@node Example text mode, , Text modes, TTS +@section Example text mode + +@cindex email mode +Here is a short example of a tts mode for reading email messages. It +is by no means complete but is a start at showing how you can customize +tts modes without writing new C++ code. + +The first task is to define a filter that will take a saved mail +message and remove extraneous headers and just leave the from +line, subject and body of the message. The filter program +is given a file name as its first argument and should output the +result on standard out. For our purposes we will do this as +a shell script. +@example +#!/bin/sh +# Email filter for Festival tts mode +# usage: email_filter mail_message >tidied_mail_message +grep "^From: " $1 +echo +grep "^Subject: " $1 +echo +# delete up to first blank line (i.e. the header) +sed '1,/^$/ d' $1 +@end example +Next we define the email init function, which will be called +when we start this mode. What we will do is save the current +token to words function and slot in our own new one. We can +then restore the previous one when we exit. +@lisp +(define (email_init_func) + "Called on starting email text mode." + (set! email_previous_t2w_func token_to_words) + (set! english_token_to_words email_token_to_words) + (set! token_to_words email_token_to_words)) +@end lisp +Note that @emph{both} @code{english_token_to_words} and +@code{token_to_words} should be set to ensure that our new +token to word function is still used when we change voices. + +The corresponding end function puts the token to words function +back. +@lisp +(define (email_exit_func) + "Called on exit email text mode." + (set! english_token_to_words email_previous_t2w_func) + (set! token_to_words email_previous_t2w_func)) +@end lisp +Now we can define the email specific token to words function. In this +example we deal with two specific cases. First we deal with the common +form of email addresses so that the angle brackets are not pronounced. +The second points are to recognise quoted text and immediately change the +the speaker to the alternative speaker. +@lisp +(define (email_token_to_words token name) + "Email specific token to word rules." + (cond +@end lisp +This first condition identifies the token as a bracketed email address +and removes the brackets and splits the token into name +and IP address. Note that we recursively call the function +@code{email_previous_t2w_func} on the email name and IP address +so that they will be pronounced properly. Note that because that +function returns a @emph{list} of words we need to append them together. +@lisp + ((string-matches name "<.*@.*>") + (append + (email_previous_t2w_func token + (string-after (string-before name "@@") "<")) + (cons + "at" + (email_previous_t2w_func token + (string-before (string-after name "@@") ">"))))) +@end lisp +Our next condition deals with identifying a greater than sign being used +as a quote marker. When we detect this we select the alternative +speaker, even though it may already be selected. We then return no +words so the quote marker is not spoken. The following condition finds +greater than signs which are the first token on a line. +@lisp + ((and (string-matches name ">") + (string-matches (item.feat token "whitespace") + "[ \t\n]*\n *")) + (voice_don_diphone) + nil ;; return nothing to say + ) +@end lisp +If it doesn't match any of these we can go ahead and use the builtin +token to words function Actually, we call the function that was set +before we entered this mode to ensure any other specific rules +still remain. But before that we need to check if we've had a newline +with doesn't start with a greater than sign. In that case we +switch back to the primary speaker. +@lisp + (t ;; for all other cases + (if (string-matches (item.feat token "whitespace") + ".*\n[ \t\n]*") + (voice_rab_diphone)) + (email_previous_t2w_func token name)))) +@end lisp +@cindex declaring text modes +In addition to these we have to actually declare the text mode. +This we do by adding to any existing modes as follows. +@lisp +(set! tts_text_modes + (cons + (list + 'email ;; mode name + (list ;; email mode params + (list 'init_func email_init_func) + (list 'exit_func email_exit_func) + '(filter "email_filter"))) + tts_text_modes)) +@end lisp +This will now allow simple email messages to be dealt with in a mode +specific way. + +An example mail message is included in @file{examples/ex1.email}. To +hear the result of the above text mode start Festival, load +in the email mode descriptions, and call TTS on the example file. +@example +(tts ".../examples/ex1.email" 'email) +@end example + +The above is very short of a real email mode but does illustrate +how one might go about building one. It should be reiterated +that text modes are new in Festival and their most effective form +has not been discovered yet. This will improve with time +and experience. + +@node XML/SGML mark-up, Emacs interface, TTS, Top +@chapter XML/SGML mark-up + +@cindex STML +@cindex SGML +@cindex SSML +@cindex Sable +@cindex XML +@cindex Spoken Text Mark-up Language +The ideas of a general, synthesizer system nonspecific, mark-up language +for labelling text has been under discussion for some time. Festival +has supported an SGML based markup language through multiple versions +most recently STML (@cite{sproat97}). This is based on the earlier SSML +(Speech Synthesis Markup Language) which was supported by previous +versions of Festival (@cite{taylor96}). With this version of Festival +we support @emph{Sable} a similar mark-up language devised by a +consortium from Bell Labls, Sub Microsystems, AT&T and Edinburgh, +@cite{sable98}. Unlike the previous versions which were SGML based, the +implementation of Sable in Festival is now XML based. To the user they +different is negligable but using XML makes processing of files easier +and more standardized. Also Festival now includes an XML parser thus +reducing the dependencies in processing Sable text. + +Raw text has the problem that it cannot always easily be rendered as +speech in the way the author wishes. Sable offers a well-defined way of +marking up text so that the synthesizer may render it appropriately. + +@cindex CSS +@cindex Cascading style sheets +@cindex DSSSL +The definition of Sable is by no means settled and is still in +development. In this release Festival offers people working on Sable +and other XML (and SGML) based markup languages a chance to quickly +experiment with prototypes by providing a DTD (document type +descriptions) and the mapping of the elements in the DTD to Festival +functions. Although we have not yet (personally) investigated facilities +like cascading style sheets and generalized SGML specification languages +like DSSSL we believe the facilities offer by Festival allow rapid +prototyping of speech output markup languages. + +Primarily we see Sable markup text as a language that will be generated by +other programs, e.g. text generation systems, dialog managers etc. +therefore a standard, easy to parse, format is required, even if +it seems overly verbose for human writers. + +For more information of Sable and access to the mailing list see +@example +@url{http://www.cstr.ed.ac.uk/projects/sable.html} +@end example + +@menu +* Sable example:: an example of Sable with descriptions +* Supported Sable tags:: Currently supported Sable tags +* Adding Sable tags:: Adding new Sable tags +* XML/SGML requirements:: Software environment requirements for use +* Using Sable:: Rendering Sable files as speech +@end menu + +@node Sable example, Supported Sable tags, , XML/SGML mark-up +@section Sable example + +Here is a simple example of Sable marked up text + +@example + + + + + +The boy saw the girl in the park with the telescope. +The boy saw the girl in the park with the telescope. + +Good morning My name is Stuart, which is spelled + +stuart +though some people pronounce it +stuart. My telephone number +is 2787. + +I used to work in Buccleuch Place, +but no one can pronounce that. + +By the way, my telephone number is actually + + +@end example +@cindex SABLE DTD +@cindex @file{Sable.v0_2.dtd} +After the initial definition of the SABLE tags, through the file +@file{Sable.v0_2.dtd}, which is distributed as part of Festival, the +body is given. There are tags for identifying the language and the +voice. Explicit boundary markers may be given in text. Also duration +and intonation control can be explicit specified as can new +pronunciations of words. The last sentence specifies some external +filenames to play at that point. + +@node Supported Sable tags, Adding Sable tags, Sable example, XML/SGML mark-up +@section Supported Sable tags + +@cindex Sable tags +There is not yet a definitive set of tags but hopefully such a list +will form over the next few months. As adding support for new tags is +often trivial the problem lies much more in defining what tags there +should be than in actually implementing them. The following +are based on version 0.2 of Sable as described in +@url{http://www.cstr.ed.ac.uk/projects/sable_spec2.html}, though +some aspects are not currently supported in this implementation. +Further updates will be announces through the Sable mailing list. + +@table @code +@item LANGUAGE +Allows the specification of the language through the @code{ID} +attribute. Valid values in Festival are, @code{english}, +@code{en1}, @code{spanish}, @code{en}, and others depending +on your particular installation. +For example +@example + ... +@end example +If the language isn't supported by the particualr installation of +Festival "Some text in .." is said instead and the section is +ommitted. +@item SPEAKER +Select a voice. Accepts a parameter @code{NAME} which takes values +@code{male1}, @code{male2}, @code{female1}, etc. There +is currently no definition about what happens when a voice is selected +which the synthesizer doesn't support. An example is +@example + ... +@end example +@item AUDIO +This allows the specification of an external waveform that is to +be included. There are attributes for specifying volume and whether +the waveform is to be played in the background of the following +text or not. Festival as yet only supports insertion. +@example +My telephone number is +

+ Festival Documentation
+ V1.2.5 December 1997 +

+
diff --git a/doc/indexHeader.inc b/doc/indexHeader.inc new file mode 100644 index 0000000..88b599c --- /dev/null +++ b/doc/indexHeader.inc @@ -0,0 +1,20 @@ + + Festival Documentation Index + + + + + + + + +
+ +

+ Festival Documentation
+ V1.2.5 December 1997 +

+
+ diff --git a/doc/refcard.tex b/doc/refcard.tex new file mode 100644 index 0000000..f3393c1 --- /dev/null +++ b/doc/refcard.tex @@ -0,0 +1,321 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% %% +%% Centre for Speech Technology Research %% +%% University of Edinburgh, UK %% +%% Copyright (c) 1996,1997 %% +%% All Rights Reserved. %% +%% %% +%% Permission is hereby granted, free of charge, to use and distribute %% +%% this software and its documentation without restriction, including %% +%% without limitation the rights to use, copy, modify, merge, publish, %% +%% distribute, sublicense, and/or sell copies of this work, and to %% +%% permit persons to whom this work is furnished to do so, subject to %% +%% the following conditions: %% +%% 1. The code must retain the above copyright notice, this list of %% +%% conditions and the following disclaimer. %% +%% 2. Any modifications must be clearly marked as such. %% +%% 3. Original authors' names are not deleted. %% +%% 4. The authors' names are not used to endorse or promote products %% +%% derived from this software without specific prior written %% +%% permission. %% +%% %% +%% THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK %% +%% DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING %% +%% ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT %% +%% SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE %% +%% FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES %% +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN %% +%% AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, %% +%% ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF %% +%% THIS SOFTWARE. %% +%% %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% A reference card for Festival with the standard commands +%% +\documentstyle{article} + +%\setlength{\textwidth}{9in} +\setlength{\textwidth}{380pt} +\setlength{\textheight}{7.0in} +\setlength{\topmargin}{-1.0in} +\setlength{\oddsidemargin}{-0.9in} + +%% Thanks to lso8219@cs.rit.edu (Loren S Osborn) for the sizes +% For A4 +% 3.6in +% For letter sized 242pt + +\def\excode#1{\mbox{\hspace{0.25in}{\small #1}}\\ } +\def\excodett#1{\mbox{\hspace{0.25in}{\small \tt #1}}\\ } +\def\explain#1{\mbox{\hspace{0.1in}{\it #1 }}\\} +\def\maintitle#1{{\bf #1} \\} +\def\weebreak{\hspace{1in}\\} + +\pagestyle{empty} + +\begin{document} + +\begin{tabular}{ccc} +\begin{minipage}{3.6in} +% page 1 col 1 +\begin{center} +{\bf The Festival Speech Synthesis System 1.4} +{\bf Reference Card} +\end{center} + +\maintitle{Festival on-line manual:} +{\small \tt http://www.cstr.ed.ac.uk/projects/festival/manual/} +\explain{If Netscape is running, in command interpreter} +\excodett{(manual nil)} +\hspace{1in}\\ +\maintitle{Making it talk:} +\excodett{festival --tts file.text} +\excodett{echo "hello" | festival --tts} +\hspace{1in}\\ +\maintitle{Command line interpreter} +\explain{If editline interface is supported, {\tt C-} denotes} +\explain{control key, {\tt M-} denotes meta key (diamond} +\mbox{\hspace{0.1in}{\it or maybe alt)}} +\begin{tabbing} +abc \= C-xxxx \= explain \kill + \> {\tt \small C-c} \> {\small \it stop and return to top-level}\\ + \> {\tt \small C-d} {\small \it or \tt (quit)} \\ + \> \> {\small \it Exit Festival}\\ + \> {\tt \small TAB} \> {\small \it symbol, function or file completion}\\ + \> {\tt \small C-p} {\small \it or up-arrow} \\ + \> \> {\small \it previous command}\\ + \> {\tt \small C-r} \> {\small \it backwards search command}\\ + \> {\tt \small M-h} \> {\small \it print help on current symbol}\\ + \> {\tt \small M-s} \> {\small \it say help on current symbol}\\ + \> {\tt \small M-m} \> {\small goto appropriate manual page}\\ + \> \> {\small \it (requires Netscape to be running)} +\end{tabbing} +\explain{Emacs keys may be used for editing command line} +\weebreak +\maintitle{Scheme commands: speech} +\explain{Say some string of text} +\excode{{\tt (SayText "}{\it text ...}{\tt ")}} +\explain{Say the contents of {\tt file.text}} +\excodett{(tts "file.text" nil)} +\maintitle{Voices} +\explain{Select voice through {\tt voice\_*} functions e.g.} +\excodett{(voice\_rab\_diphone)} +\excodett{(voice\_don\_diphone)} +\excodett{(voice\_ked\_diphone)} + +\end{minipage} & +\begin{minipage}{3.6in} +% page 1 col 2 +\maintitle{Scheme commands: general} +\explain{Setting a variable} +\excodett{(set! a 'fred) ; comment} +\excodett{(set! b '(b c d)} +\excodett{(set! sum (+ 2 3 4)} +\explain{Lists} +\excodett{festival> (set! x '(a b c))} +\excodett{(a b c)} +\excodett{festival> (set! y '(d e f))} +\excodett{(d e f)} +\excodett{festival> (append x y)} +\excodett{(a b c d e f)} +\excodett{festival> (car x)} +\excodett{a} +\excodett{festival> (cdr x)} +\excodett{(b c)} +\excodett{festival> (cons 'm x)} +\excodett{(m a b c)} +\explain{Functions} +\excodett{(define plus (a b) (+ a b))} +\excodett{festival> (plus 3 4)} +\excodett{7} +\excodett{festival> (plus 3 (plus 2 4))} +\excodett{9} +\explain{Printing} +\excodett{(pprint '(a b c))} +\excode{$\rightarrow$ {\tt (a b c)}} +\excode{{\tt (format t "Total \%2.3f} \% {\tt n" 3.12345)}} +\excode{$\rightarrow$ 3.123} +\explain{Others} +\excodett{(load "fred.scm")} +\excodett{(if (string-equal name "fred")} +\excode{\mbox{\hspace{0.1in}{\tt (pprint "is fred")}}} +\excode{\mbox{\hspace{0.1in}{\tt (pprint "is not fred"))}}} + +\end{minipage} & +\begin{minipage}{3.6in} +% page 1 col 3 +\maintitle{Text modes} +\explain{Second argument to {\tt tts} is {\it MODE}} +\explain{{\it MODE} may be {\tt nil}, {\tt email}, {\tt sable} e.g.} +\excodett{ (tts "file.sable" stml)} +\explain{If {\it MODE} is {\tt nil} use auto-mode} +\explain{To set all files ending in {\tt .ogi} to be} +\explain{synthesized in {\tt ogi} mode} +\excodett{(set! auto-text-mode-alist} +\excode{\mbox{\hspace{0.1in}{\tt (cons (cons "\\.ogi\$" 'ogi)}}} +\excode{\mbox{\hspace{0.2in}{\tt auto-text-mode-alist))}}} +\maintitle{Lexicon} +\explain{Adding new lexical entry} +\excodett{(lex.add\_entry "email"} +\excode{\mbox{\hspace{0.1in}{\tt ("email" n (((ii) 1) ((m ei l) 0))))}}} +\explain{Check similar words for pronunciation} +\excodett{(lex.lookup "mail")} +\explain{Add new personal entries in {\tt .festivalrc}} +\explain{first select the voice then call {\tt lex.add\_entry}} +\maintitle{Audio} +\explain{Audio should be setup at installation} +\explain{NAS (network audio server) multi-platform} +\excodett{(Parameter.set 'Audio\_Method 'netaudio)} +\explain{8bit ulaw {\tt /dev/audio} (Sun, FreeBSD, Linux)} +\excodett{(Parameter.set 'Audio\_Method 'sunaudio)} +\explain{Sun/FreeBSD/Linux 16 linear (compile-time options)} +\excodett{(Parameter.set 'Audio\_Method 'sun16audio)} +\excodett{(Parameter.set 'Audio\_Method 'freebsd16audio)} +\excodett{(Parameter.set 'Audio\_Method 'linux16audio)} +\explain{Arbitrary command, will execute given command} +\explain{on waveform. {\tt \$FILE} and {\tt \$SR} will be set} +\excodett{(Parameter.set 'Audio\_Method 'Audio\_Command)} +\excodett{(Parameter.set 'Audio\_Command} +\excode{\mbox{\hspace{0.3in}{\tt "adplay -raw -rate \$SR \$FILE")}}} +\explain{Default for command is unheadered, shorts (native)} +\explain{You can change format and sample rate with} +\excodett{(Parameter.set 'Audio\_Required\_Rate 8000)} +\excodett{(Parameter.set 'Audio\_Required\_Fromat 'riff)} +\explain{formats include: {\tt riff, aiff, nist, snd, esps}} + +\end{minipage} +\end{tabular} + +\begin{tabular}{ccc} +\begin{minipage}{3.6in} +% page 2 col 1 +\maintitle{Utterances} +\explain{Making utterances} +\excode{{\tt (Utterance }{\it TYPE} {\it DATA}{\tt)}} +\explain{{\it TYPE}s include: {\tt Text} {\tt Phones} {\tt Wave} e.g.} +\excodett{(Utterance Text "Hello world.")} +\excodett{(Utterance Phones (h @ l ou))} +\excodett{(Utterance Wave "sc001.wav")} +\explain{Synthesize (modules based on TYPE)} +\excode{{\tt (utt.synth }{\it UTT}{\tt)}} +\explain{Send waveform to audio device} +\excode{{\tt (utt.play }{\it UTT}{\tt)}} +\explain{An example} +\excodett{(set! utt1 (Utterance "Hello world."))} +\excodett{(utt.play (utt.synth utt1))} +\maintitle{Accessing items and features} +\explain{returns list of ITEMs} +\excode{{\tt (utt.relation.items }{\it UTT RELATIONNAME}{\tt )}} +\explain{Item feature access functions} +\excode{{\tt (item.feat }{\it ITEM FEATNAME}{\tt )}} +\excode{{\tt (item.name }{\it ITEM}{\tt )}} +\excode{{\tt (item.next }{\it ITEM}{\tt )}} +\excode{{\tt (item.prev }{\it ITEM}{\tt )}} +\excode{{\tt (item.set\_feat }{\it ITEM FEATNAME VAL}{\tt )}} +\excode{{\tt (item.relation }{\it ITEM RELATIONNAME}{\tt )}} +\maintitle{Item features} +\explain{Assume {\tt utt} is utterance, {\tt item} is item} +\explain{returns item's name} +\excodett{(item.feat item "name")} +\explain{returns item's next's name} +\excodett{(item.feat item "n.name")} +\explain{returns item's previous's name} +\excodett{(item.feat item "p.name")} +\explain{name of word related to Syllable item} +\excodett{(item.feat item "R:SylStructure.parent.name")} +\explain{name of next word of word related to syllable} +\excodett{(item.feat item "R:SylStructure.parent.R:Word.n.name")} +\explain{name of word related to next syllable} +\excodett{(item.feat item "n.R:SylStructure.parent.name")} +\maintitle{Multi-features} +\explain{Return all features of items in relation} +\excodett{(utt.features utt 'Syllable } +\excode{\mbox{\hspace{0.1in}{\tt '(duration stress n.name))}}} +\explain{See manual for builtin feature names} + +\end{minipage} & +\begin{minipage}{3.6in} +% page 2 col 2 + +\maintitle{Regex matching} +\begin{tabbing} +C-xxxx \= explain \kill +{\tt \small .} \> {\small \it matches any character}\\ +{\tt \small {\it X}*} \> {\small \it zero or more Xs}\\ +{\tt \small {\it X}+} \> {\small \it one or more Xs}\\ +{\tt \small {\it X}?} \> {\small \it zero or one Xs}\\ +{\tt \small [abc]} \> {\small \it range, matching a,b or c}\\ +{\tt \small [A-Z]} \> {\small \it range, matching all caps}\\ +{\tt \small \verb+[^A-Z]+} \> {\small \it range, matching all but caps}\\ +{\tt \small \verb+\\(XY\\)+} \\ + \> {\small \it group X and Y}\\ +{\tt \small \verb+X\\|Y+} \> {\small \it match X or Y} +\end{tabbing} +\explain{For example} +\begin{tabbing} +C-xxxx \= explain \kill +{\tt \small ".*a.*"} \> {\small \it matches all strings containing a}\\ +{\tt \small "a.*"} \> {\small \it all strings starting with a}\\ +{\tt \small "[A-Z].*"} \> {\small \it all strings starting with a capital}\\ +{\tt \small "[0-9]+"} \> {\small \it all strings of digits}\\ +{\tt \small "\verb.-?[0-9]+\\(\\..\verb.[0-9]+\\)?."} \\ + \> {\small \it any real number}\\ +{\tt \small "\verb.[^aeiouAEIOU]+."} \> \\ + \> {\small \it any string with no vowels}\\ +{\tt \small "\verb.\\(Saturday\\)\\|\\(Sunday\\)."} \\ + \> {\small \it Saturday or Sunday} +\end{tabbing} +\maintitle{String functions} +\explain{returns suffix of STR1 after STR2} +\excode{{\tt (string-after }{\it STR1 STR2}{\tt )}} +\explain{returns prefix of STR1 before STR2} +\excode{{\tt (string-before }{\it STR1 STR2}{\tt )}} +\explain{returns t if STR matches REGEX or nil} +\excode{{\tt (string-matches }{\it STR REGEX}{\tt )}} +\explain{returns t if STR1 equals STR2} +\excode{{\tt (string-equal }{\it STR1 STR2}{\tt )}} +\explain{returns non-nil if STR is in LIST} +\excode{{\tt (member\_string }{\it STR LIST}{\tt )}} + +\end{minipage} & +\begin{minipage}{3.6in} +% page 2 col 3 +\maintitle{Miscellaneous} +\explain{List all (potentional) voices} +\excodett{(voice.list)} +\explain{Return description of voice NAME} +\excode{{\tt (voice.description }{\it NAME}{\tt )}} +\explain{Speak description of voice NAME} +\excode{{\tt (voice.describe }{\it NAME}{\tt )}} +\explain{List all defined lexicons} +\excode{{\tt (lex.list)}} +\explain{List all defined phonesets} +\excode{{\tt (PhoneSet.list)}} +\explain{Describe current PhoneSet} +\excode{{\tt (PhoneSet.description)}} +\maintitle{More information} +\explain{More information of Festival is available from} +\excodett{http://www.cstr.ed.ac.uk/projects/festival.html} +\explain{Or by mailing} +\excodett{festival-help@cstr.ed.ac.uk} +\hspace{1in}\\ +\hspace{1in}\\ +\hspace{1in}\\ +\hspace{1in}\\ +\hspace{1in}\\ +\hspace{1in}\\ +\hspace{1in}\\ +\hspace{1in}\\ +\maintitle{Copyright} +\explain{(C) University of Edinburgh 1996-1999.} +\explain{All rights reserved} +\hspace{1in}\\ +\explain{{\small Festival is free software and may be}} +\explain{{\small used commercially or otherwise without}} +\explain{{\small further permission.}} +\end{minipage} +\end{tabular} + +\end{document} + diff --git a/examples/Makefile b/examples/Makefile new file mode 100644 index 0000000..e4dd1a0 --- /dev/null +++ b/examples/Makefile @@ -0,0 +1,72 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +TOP=.. +DIRNAME=examples +BUILD_DIRS= +ALL_DIRS=$(BUILD_DIRS) songs + +EXTEXTS = intro.text spintro.text benchmark.text +EXAMPLES = webdemo.scm ex1.email ex1.ogi example.sable example2.sable \ + tobi.stml example.th example.apml +SCRIPTS = saytime.sh text2pos.sh latest.sh \ + scfg_parse_text.sh text2wave.sh make_utts.sh dumpfeats.sh \ + durmeanstd.sh powmeanstd.sh run-festival-script.sh +SHELL_SCRIPTS = benchmark festival_client.pl +SCMS = toksearch.scm th-mode.scm addr-mode.scm +SAMPLEC = festival_client.c festival_client.h +OTHERS = apml.dtd +FILES=Makefile $(EXAMPLES) $(EXTEXTS) $(SCRIPTS) $(SHELL_SCRIPTS) $(SCMS) $(SAMPLEC) $(OTHERS) speech_pm_1.0.tar + +ALL = $(SCRIPTS:.sh=) +LOCAL_CLEAN = $(SCRIPTS:.sh=) + +include $(TOP)/config/common_make_rules + +$(ALL) : % : %.sh + rm -f $@ + @echo "#!/bin/sh" >$@ + @echo "\"true\" ; exec "$(FESTIVAL_HOME)/bin/festival --script '$$0 $$*' >>$@ + cat $< >>$@ + chmod +x $@ + +festival_client: festival_client.o festival_client.h + $(LINK_COMMAND) -o festival_client festival_client.o $(LIBS) + +festival_client.o: festival_client.c festival_client.h + $(CC_COMMAND) -DSTANDALONE festival_client.c -o festival_client.o + +# Do this manually to make sure Festival.tar (perl module) is up to date. + +speech_pm_1.0.tar: $(wildcard speech_pm_1.0/*) $(wildcard speech_pm_1.0/*/*) $(wildcard speech_pm_1.0/*/*/*) + -chmod +w speech_pm_1.0.tar + tar cvf speech_pm_1.0.tar `cat speech_pm_1.0/MANIFEST|sed -e 's/^/speech_pm_1.0\//'` diff --git a/examples/addr-mode.scm b/examples/addr-mode.scm new file mode 100644 index 0000000..a8cefdd --- /dev/null +++ b/examples/addr-mode.scm @@ -0,0 +1,361 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; An address mode for reading lists of names, addresses and +;;; telephone numbers. Takes quite an aggressive view of the data. +;;; +;;; This was used for the CSTR's entry in the evaluations at the +;;; ESCA workshop on Speech Synthesis in Janolen Caves, Blue Mountains, +;;; NSW, Australia. +;;; +;;; This can read things like +;;; Brown, Bill, 6023 Wiser Rd, Austin, TX 76313-2837, 817-229-7849 +;;; Green, Bob, 3076 Wabash Ct, Fort Worth, TX 76709-1368, (817)292-9015 +;;; Smith, Bobbie Q, 3337 St Laurence St, Fort Worth, TX 71611-5484, (817)839-3689 +;;; Jones, Billy, 5306 Dr Dana Lynn Dr, Fort Worth, TX 71637-2547, 817 845 6154 +;;; Henderson, Bryan J, 5808 Sycamore Creek Rd Apt R, Fort Worth, TX 76134-1906, (817)239-4634 +;;; Black, Alan W, 130 S 18th St #3, Pittsburgh, PA 15205, (412)268-8189 +;;; Bowman, K, 2610 W Bowie St, El Paso, TX 76019-1712, (817)268-7257 +;;; Sydney, Aaron A, 1521 NW Ballard Way, Seattle, WA 91807-4712, (206)783-8645 +;;; Anderson, A, 12012 Pinehurst Way NE, Seattle, NE 98125-5108, (212)404-9988 + +;; New lines without trailing continuation punctuation signal EOU +(defvar addr_eou_tree +'((n.whitespace matches ".*\n.*") ;; any new line + ((punc in ("," ":")) + ((0)) + ((1))))) + +(set! addr_phrase_cart_tree +' +((pbreak is "B") + ((B)) + ((pbreak is "BB") + ((BB)) + ((lisp_token_end_punc in ("?" "." ":" "'" "\"" "," ";")) + ((B)) + ((n.name is 0) ;; end of utterance + ((BB)) + ((NB))))))) + +(define (addr_init_func) + "Called on starting addr text mode." + (Parameter.set 'Phrase_Method 'cart_tree) + (set! phrase_cart_tree addr_phrase_cart_tree) + (set! int_lr_params + '((target_f0_mean 105) (target_f0_std 12) + (model_f0_mean 170) (model_f0_std 34))) + (Parameter.set 'Duration_Stretch 1.1) + (set! addr_previous_t2w_func english_token_to_words) + (set! english_token_to_words addr_token_to_words) + (set! token_to_words addr_token_to_words) + (set! addr_previous_eou_tree eou_tree) + (set! eou_tree addr_eou_tree)) + +(define (addr_exit_func) + "Called on exit addr text mode." + (Parameter.set 'Duration_Stretch 1.0) + (set! token_to_words addr_previous_t2w_func) + (set! english_token_to_words addr_previous_t2w_func) + (set! eou_tree addr_previous_eou_tree)) + +(set! addr_regex_ZIPCODE2 "[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]") + +(set! addr_regex_USPHONE3 "[0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]") +(set! addr_regex_USPHONE1 "[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]") + +(set! addr_tiny_break (list '(name "") '(pbreak mB))) +(set! addr_small_break (list '(name "") '(pbreak B))) +(set! addr_large_break (list '(name "") '(pbreak BB))) + +(define (addr_within_name_part token) + "(addr_within_name_part token) +Heuristic guess if we are still in the name (i.e. pre-address) +this is desgined to stop Mr W Smith becoming West." + (cond + ((addr_preceding_number token) + ;; any preceding token with a digit + nil) + (t + t))) + +(define (addr_preceding_number tok) + (cond + ((null tok) nil) + ((string-matches (item.name tok) ".*[0-9].*") + t) + (t (addr_preceeding_number (item.prev tok))))) + +(define (addr_succeeding_non_number tok) + (cond + ((null tok) nil) + ((string-matches (item.name tok) ".*[A-Za-z].*") + t) + (t (addr_succeeding_non_number (item.next tok))))) + +(define (addr_token_to_words token name) + "(addr_token_to_words token name) +Address specific text reading mode. Lots of address specific abbreviations +and phrasing etc." + (set! utt_addr (item.get_utt token)) + (let ((type (item.feat token "token_type"))) + (cond + ((string-matches name "A") + (list (list '(name "a") '(pos nn)))) + ((addr_within_name_part token) + (builtin_english_token_to_words token name) + ) + ((string-matches name "\\([dD][Rr]\\|[Ss][tT]\\)") + (if (string-equal (item.feat token "token_pos") "street") + (if (string-matches name "[dD][rR]") + (list "drive") + (list "street")) + (if (string-matches name "[dD][rR]") ;; default on title side + (list "doctor") + (list "saint")))) + ((string-matches name addr_regex_ZIPCODE2) + ;; Zip code + (item.set_feat token "token_pos" "digits") + (append + (builtin_english_token_to_words token (string-before name "-")) + (list addr_small_break) + (builtin_english_token_to_words token (string-after name "-")) + (list addr_large_break))) + ((string-matches name addr_regex_USPHONE3) + (item.set_feat token "token_pos" "digits") + (append + (builtin_english_token_to_words token (string-before name ")")) + (list addr_small_break) + (builtin_english_token_to_words token + (string-after (string-before name "-") ")")) + (list addr_small_break) + (builtin_english_token_to_words token (string-after name "-")))) + ((string-matches name addr_regex_USPHONE1) + (item.set_feat token "token_pos" "digits") + (append + (builtin_english_token_to_words token (string-before name "-")) + (list addr_small_break) + (builtin_english_token_to_words token + (string-before (string-after name "-") "-")) + (list addr_small_break) + (builtin_english_token_to_words token + (string-after (string-after name "-") "-")))) + ((string-equal name "NE") + (cond + ((string-matches (item.feat token "n.name") addr_regex_ZIPCODE2) + (list "Nebraska")) + ;; could check if there is a state following it + (t + (list "North" "East")))) + ((set! full (addr_undo_abbrev name addr_addr_abbrevs)) + (cdr full)) + ((string-matches name "#.*") + (cons + "number" + (builtin_english_token_to_words token (string-after name "#")))) + ((string-matches name "[0-9][0-9][0-9][0-9][0-9]+") + ;; long number + (item.set_feat token "token_pos" "digits") + (builtin_english_token_to_words token name)) + ((or (string-matches name "[0-9]0[0-9][0-9]") + (string-matches name "[0-9][0-9]0[0-9]")) + (item.set_feat token "token_pos" "digits") + (mapcar + (lambda (a) + (if (string-equal a "zero") + "oh" + a)) + (builtin_english_token_to_words token name))) + ((and + (addr_succeeding_non_number token) + (string-matches name "[0-9][0-9][0-9][0-9]")) + ;; four digit number + (let (block number) + (item.set_feat token "token_pos" "number") + (set! block + (builtin_english_token_to_words + token (substring name 0 2))) + (if (string-equal (nth 2 (symbolexplode name)) "0") + (item.set_feat token "token_pos" "digits") + (item.set_feat token "token_pos" "number")) + (set! number + (builtin_english_token_to_words + token (substring name 2 2))) + (append + block + (list addr_tiny_break) + number))) + ((and + (addr_succeeding_non_number token) + (string-matches name "[0-9][0-9][0-9]")) + ;; four digit number + (let (block number) + (item.set_feat token "token_pos" "number") + (set! block + (builtin_english_token_to_words + token (substring name 0 1))) + (if (string-equal (nth 1 (symbolexplode name)) "0") + (item.set_feat token "token_pos" "digits") + (item.set_feat token "token_pos" "number")) + (set! number + (builtin_english_token_to_words + token (substring name 1 2))) + (append + block number))) + ((string-matches name "[0-9]+") + (item.set_feat token "token_pos" "digits") + (builtin_english_token_to_words token name)) + (t ;; for all other cases + (addr_previous_t2w_func token name))))) + +(define (addr_undo_abbrev name abbrevs) +"(addr_undo_abbrev name abbrevs) +General abbreviation undoer. Looks for name in reverse assoc +list and returns the value." + (cond + ((null abbrevs) nil) + ((member_string name (car (car abbrevs))) + (car abbrevs)) + (t + (addr_undo_abbrev name (cdr abbrevs))))) + +(set! tts_text_modes + (cons + (list + 'addr ;; mode name + (list ;; addr mode params + (list 'init_func addr_init_func) + (list 'exit_func addr_exit_func))) + tts_text_modes)) + +(set! addr_us_states + '((( AL Ala ) Alabama ) + (( AK ) Alaska ) + (( AR ) Arkansas ) + (( AZ Ariz ) Arizona ) + (( CA Cal Calif ) California ) + (( CO Colo ) Colorado ) + (( CT Conn ) Connecticutt ) + (( DC ) DC ) + (( DE Dela ) Delaware ) + (( FL Fla ) Florida ) + (( GA ) Georgia ) + (( HI ) Hawaii ) + (( IA Ind ) Indiana ) + (( ID ) Idaho ) + (( IL Ill ) Illinois ) + (( KS Kans ) Kansas ) + (( KY ) Kentucky ) + (( LA Lou Lous) Louisiana ) + (( MA Mass ) Massachusetts ) + (( MD ) Maryland ) + (( ME ) Maine ) + (( MI Mich ) Michigan ) + (( MN Minn ) Minnesota ) + (( MS Miss ) Mississippi ) + (( MT ) Montana ) + (( MO ) Missouri ) + (( NC ) North Carolina ) + (( ND ) North Dakota ) + (( NE Neb ) Nebraska ) + (( NH ) New Hampshire) + (( NV Nev ) Nevada ) + (( NY ) New York ) + (( OH ) Ohio ) + (( OK Okla ) Oklahoma ) + (( Or Ore ) Oregon ) + (( PA Penn ) Pennsylvania ) + (( RI ) Rhode Island ) + (( SC ) Sourth Carolina ) + (( SD ) Sourth Dakota ) + (( TN Tenn ) Tennessee ) + (( TX Tex ) Texas ) + (( UT ) Utah ) + (( VA Vir ) Virginia ) + (( VT ) Vermont ) + (( WA Wash ) Washington ) + (( WI Wisc ) Wisconsin ) + (( WV ) West Virginia ) + (( WY Wyom ) Wyoming ) + (( PR ) Puerto Rico ) + )) + +(set! addr_compass_points + '(((S So Sth) South) + ((N No Nor) North) + ((E) East) + ((W) West) + ((NE) North East) + ((NW) North West) + ((SE) South East) + ((SW) South West))) + +(set! addr_streets + '(((Hwy) Highway) + ((Rt Rte) Root) + ((Ct) Court) + ((Pl) Place) + ((Blvd Bld) Boulevard) + ((Ave) Avenue) + ((Rd) Road) + ((Apt App Appt) Apartment) + ((Cntr Ctr) Center) + ((Ter Terr Tr) Terrace) + ((Ln) Lane) + ((PO) pea oh) + )) + +(set! addr_uk_counties + '((( Hants ) Hampshire) + (( Soton ) Southampton ) + (( Berks ) Berkshire ) + (( Yorks ) Yorkshire ) + (( Leics ) Leicestershire ) + (( Shrops ) Shropshire ) + (( Cambs ) Cambridgeshire ) + (( Oxon ) Oxfordshire ) + (( Notts ) Nottinghamshire ) + (( Humbers ) Humberside ) + (( Glams ) Glamorganshire ) + (( Pembs ) Pembrookeshire ) + (( Lancs ) Lancashire ) + (( Berwicks ) Berwickshire ) + )) + +(set! addr_addr_abbrevs + (append + addr_us_states + addr_compass_points + addr_streets)) + +(provide 'addr-mode) diff --git a/examples/apml.dtd b/examples/apml.dtd new file mode 100644 index 0000000..7f6dd31 --- /dev/null +++ b/examples/apml.dtd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/benchmark b/examples/benchmark new file mode 100755 index 0000000..7c5a465 --- /dev/null +++ b/examples/benchmark @@ -0,0 +1,86 @@ +#!/bin/sh + +default_libdir="/projects/festival/lib" + +while true + do + case "$1" in + -f ) festival="${2}" + shift 2 + ;; + -l ) libdir="$2" + shift 2 + ;; + * ) break;; + esac +done + +text=${1-"$HOME/projects/festival/examples/benchmark.text"} + +for i in . src/main ../src/main $HOME/projects/festival/src/main /cstr/bin + do + if [ -n "$festival" ] + then + break; + fi + if [ -x "$i/festival" ] + then + festival="$i/festival" + fi +done + +[ -n "$festival" ] || + { + echo "Can't find festival" + exit 1 + } + +if [ -z "$libdir" ] + then + case $festival in + *main/festival ) libdir=`dirname $festival`/../../lib;; + * ) libdir=$default_libdir;; + esac +fi + +echo Using $festival + +start_flag_file="/tmp/fest_start_$$" +end_flag_file="/tmp/fest_end_$$" +script="/tmp/fest_script_$$" + +echo -n > $flag_file; + +cat > $script <<__END__ + +(set! libdir "$libdir/") +(set! lexdir "$default_libdir/dicts/") +(set! voiced_dir "$default_libdir/voices/") + +(load (string-append libdir "init.scm")) +(if (probe_file (format nil "%s/.festivalrc" (getenv "HOME"))) + (load (format nil "%s/.festivalrc" (getenv "HOME")))) + + +(audio_mode 'async) +(set! tts_hooks (list utt.synth)) + +(puts "start...\n" nil) +(fclose (fopen "$start_flag_file" "w")) + +(tts_file "$text" (quote text)) + +(fclose (fopen "$end_flag_file" "w")) +(puts "...end\n" nil) +(audio_mode 'close) + +(quit) + +__END__ + +eval $festival --script $script + +perl -e 'print "running time = ", (stat($ARGV[1]))[8]-(stat($ARGV[0]))[8], " seconds\n";' $start_flag_file $end_flag_file + +/bin/rm -f $start_flag_file $end_flag_file $script + diff --git a/examples/benchmark.text b/examples/benchmark.text new file mode 100644 index 0000000..c6ee6c7 --- /dev/null +++ b/examples/benchmark.text @@ -0,0 +1,132 @@ + + + +FESTIVAL(1) User Commands FESTIVAL(1) + + + +NAME + festival - a text-to-speech system. + +SYNOPSIS + festival [options] [file0] [file1] ... + + + +DESCRIPTION + Festival is a general purpose text-to-speech system. As + well as simply rendering text as speech it can be used in an + interactive command mode for testing and developing various + aspects of speech synthesis technology. + + Festival has two major modes, command and tts (text-to- + speech). When in command mode input (from file or interac- + tively) is interpreted by the command interpreter. When in + tts mode input is rendered as speech. + + +OPTIONS + -h print help information + + -q Start without loading any initialization files. + + --libdir PATH + Specify alternate to default library directory (used + in initializing the variable load-path, and for + loading most intinialisation files) + + -b or --batch + Run in batch mode. In batch mode no input is read + from standard input + + -i or --interactive + Run in interactive mode. In intteractive mode input + (commands or text) is read from standard input. + When in command mode (the default) a readline based + Lisp read-eval-print command interpreter is + presented. + + --server + Run in server mode. Any file arguments are loaded + 9and interpreted, before going into server mode. In + server mode Festival waits for clients on port 1314 + (by default). Note server mode can give unauthor- + ised access to your machine, please read the section + in the manual entitled Server/client API before + using this mode. + + --tts Run in tts mode. All files argument are treated + as text files to be said. Unless interactive mode + + + +SunOS 5.5.1 Last change: 4th Feb 1996 1 + + + + + + +FESTIVAL(1) User Commands FESTIVAL(1) + + + + is explicitly specified no input is read from stan- + dard input, unless no files are specified. + + --language LANG + Where LANG is one of english (default) spanish or + welsh. Select that language for basic operation, + command or tts. This may be change during a session + with the command select_language. + + -v Display version number and exit. + + +BUGS + More than you can imagine. + + A manual with much detail (though not complete) is available + in info (or html) format. + + +AUTHOR + Alan W Black and Paul Taylor + (C) Centre for Speech Technology Research + University of Edinburgh + 80 South Bridge + Edinburgh EH1 1HN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SunOS 5.5.1 Last change: 4th Feb 1996 2 + + + diff --git a/examples/dumpfeats.sh b/examples/dumpfeats.sh new file mode 100644 index 0000000..82398cd --- /dev/null +++ b/examples/dumpfeats.sh @@ -0,0 +1,198 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: December 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Dump features from a list of utterances +;;; + +;;; Because this is a --script type file it has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(load (path-append libdir "init.scm")) + +(define (dumpfeats_help) + (format t "%s\n" + "Usage: dumpfeats [options] ... + Dump features from a set of utterances + Options + -relation + Relation from which the features have to be dumped from + -output + If output parameter contains a %s its treated as a skeleton + e.g feats/%s.feats and multiple files will be created one + each utterance. If output doesn't contain %s the output + is treated as a single file and all features and dumped in it. + -feats + If argument starts with a \"(\" it is treated as a list of + features to dump, otherwise it is treated as a filename whose + contents contain a set of features (without parenetheses). + -eval + A scheme file to be loaded before dumping. This may contain + dump specific features etc. If filename starts with a left + parenthis it it evaluated as lisp. + -from_file + A file with a list of utterance files names (used when there + are a very large number of files. +") + (quit)) + +;;; Default options values +(defvar utt_files nil) ;; utterance files to dump from +(defvar desired_relation nil) +(defvar output "-") +(defvar desired_features nil) +(defvar extra-file nil) + +;;; Get options +(define (get_options) + (let ((files nil) + (o argv)) + (if (or (member_string "-h" argv) + (member_string "-help" argv) + (member_string "--help" argv) + (member_string "-?" argv)) + (dumpfeats_help)) + (while o + (begin + (cond + ((string-equal "-relation" (car o)) + (if (not (cdr o)) + (dumpfeats_error "no stream file specified")) + (set! desired_relation (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-output" (car o)) + (if (not (cdr o)) + (dumpfeats_error "no output file/skeleton specified")) + (set! output (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-feats" (car o)) + (if (not (cdr o)) + (dumpfeats_error "no feats list/file specified")) + (if (string-matches (car (cdr o)) "^(.*") + (set! desired_features (read-from-string (car (cdr o)))) + (set! desired_features (load (car (cdr o)) t))) + (set! o (cdr o))) + ((string-equal "-from_file" (car o)) + (if (not (cdr o)) + (durmeanstd_error "no file of utts names file specified")) + (set! files + (append + (reverse (load (car (cdr o)) t)) files)) + (set! o (cdr o))) + ((string-equal "-eval" (car o)) + (if (not (cdr o)) + (dumpfeats_error "no file specified to load")) + (if (string-matches (car (cdr o)) "^(.*") + (eval (read-from-string (car (cdr o)))) + (load (car (cdr o)))) + (set! o (cdr o))) + (t + (set! files (cons (car o) files)))) + (set! o (cdr o)))) + (if files + (set! utt_files (reverse files))))) + +(define (dumpfeats_error message) + (format stderr "%s: %s\n" "dumpfeats" message) + (dumpfeats_help)) + +;;; No gc messages +(gc-status nil) + +(define (dump_all_features relname feats names outskeleton) +"(dump_all_features relname feats names outskeleton) +Dump all names features in RELNAME from utterances in NAMES +to a files or files specified by outskeleton." + (let (fd) + (if (not (string-matches outskeleton ".*%s.*")) + (set! fd (fopen outskeleton "w"))) + (mapcar + (lambda (uttfile) + (if (cdr names) ;; only output the utt name if there is more than one + (format stderr "%s\n" uttfile)) + ;; change fd to new file if in skeleton mode + (if (string-matches outskeleton ".*%s.*") + (set! fd (fopen (format nil outskeleton + (string-before + (basename uttfile) ".")) + "w"))) + (unwind-protect + (extract_feats + relname + feats + (utt.load nil uttfile) + fd) + nil) + (if (string-matches outskeleton ".*%s.*") + (fclose fd)) + t) + names) + (if (not (string-matches outskeleton ".*%s.*")) + (fclose fd)))) + +(define (extract_feats relname feats utt outfd) + "(extract_feats relname feats utt outfd) +Extract the features and write them to the file descriptor." + (mapcar + (lambda (si) + (mapcar + (lambda (f) + (set! fval (unwind-protect (item.feat si f) "0")) + (if (or (string-equal "" fval) + (string-equal " " fval)) + (format outfd "%l " fval) + (format outfd "%s " fval))) + feats) + (format outfd "\n") + t) + (utt.relation.items utt relname)) + t) + +(define (get_utt fname) + (utt.load nil fname)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; The main work +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define (main) + (get_options) + + (dump_all_features + desired_relation + desired_features + utt_files + output) +) + +(main) diff --git a/examples/durmeanstd.sh b/examples/durmeanstd.sh new file mode 100644 index 0000000..76a8290 --- /dev/null +++ b/examples/durmeanstd.sh @@ -0,0 +1,212 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: December 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Find the means and standard deviations of the durations of all +;;; phones in the given utterances. +;;; + +;;; Because this is a --script type file it has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(load (path-append libdir "init.scm")) + +(define (durmeanstd_help) + (format t "%s\n" + "durmeanstd [options] festival/utts/*.utts + Find means and standard deviation of phone durations in utterances + Options + -output + File to save output in + -relation + Relation for phones (default Segment) + -log + Take log of durations first + -from_file + file with list of utt names +") + (quit)) + +;;; Default options values +(defvar utt_files nil) +(defvar outfile "durs.meanstd") +(defvar log_domain nil) +(defvar durrelation 'Segment) + +;;; Get options +(define (get_options) + (let ((files nil) + (o argv)) + (if (or (member_string "-h" argv) + (member_string "-help" argv) + (member_string "--help" argv) + (member_string "-?" argv)) + (durmeanstd_help)) + (while o + (begin + (cond + ((string-equal "-output" (car o)) + (if (not (cdr o)) + (durmeanstd_error "no output file specified")) + (set! outfile (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-relation" (car o)) + (if (not (cdr o)) + (durmeanstd_error "no relation file specified")) + (set! durrelation (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-from_file" (car o)) + (if (not (cdr o)) + (durmeanstd_error "no file of utts names file specified")) + (set! files + (append + (load (car (cdr o)) t) files)) + (set! o (cdr o))) + ((string-equal "-log" (car o)) + (set! log_domain t)) + (t + (set! files (cons (car o) files)))) + (set! o (cdr o)))) + (if files + (set! utt_files (reverse files))))) + +(define (durmeanstd_error message) + (format stderr "%s: %s\n" "durmeanstd" message) + (durmeanstd_help)) + +;;; No gc messages +(gc-status nil) + +;;; A simple sufficient statistics class +(define (suffstats.new) + (list + 0 ;; n + 0 ;; sum + 0 ;; sumx + )) + +(define (suffstats.set_n x n) + (set-car! x n)) +(define (suffstats.set_sum x sum) + (set-car! (cdr x) sum)) +(define (suffstats.set_sumx x sumx) + (set-car! (cdr (cdr x)) sumx)) +(define (suffstats.n x) + (car x)) +(define (suffstats.sum x) + (car (cdr x))) +(define (suffstats.sumx x) + (car (cdr (cdr x)))) +(define (suffstats.reset x) + (suffstats.set_n x 0) + (suffstats.set_sum x 0) + (suffstats.set_sumx x 0)) +(define (suffstats.add x d) + (suffstats.set_n x (+ (suffstats.n x) 1)) + (suffstats.set_sum x (+ (suffstats.sum x) d)) + (suffstats.set_sumx x (+ (suffstats.sumx x) (* d d))) +) + +(define (suffstats.mean x) + (/ (suffstats.sum x) (suffstats.n x))) +(define (suffstats.variance x) + (cond + ((or (< (suffstats.n x) 2 ) + (equal? (* (suffstats.n x) (suffstats.sumx x)) + (* (suffstats.sum x) (suffstats.sum x)))) + ;; avoid 0 variance + (/ (suffstats.mean x) 10.0)) + (t + (/ (- (* (suffstats.n x) (suffstats.sumx x)) + (* (suffstats.sum x) (suffstats.sum x))) + (* (suffstats.n x) (- (suffstats.n x) 1)))))) +(define (suffstats.stddev x) + (sqrt (suffstats.variance x))) + +;;; Index for each phone +(defvar phonelist nil) ;; index of phone to suffstats +(define (get_phone_data phone) + (let ((a (car (cdr (assoc phone phonelist))))) + (if a + a + (begin ;; first time for this phone + (set! phonelist + (cons + (list phone (suffstats.new)) + phonelist)) + (car (cdr (assoc phone phonelist))))))) + +(define (duration i) + (if (item.prev i) + (- (item.feat i "end") (item.feat i "p.end")) + (item.feat i "end"))) + +(define (cummulate_seg_durs utt_name) + (let ((utt (utt.load nil utt_name))) + (mapcar + (lambda (s) + (suffstats.add + (get_phone_data (item.name s)) + (if log_domain + (log (duration s)) + (duration s)))) + (utt.relation.items utt durrelation)))) + +(define (output_dur_data data outfile) + (let ((fd (fopen outfile "w"))) + (mapcar + (lambda (d) + (format fd "(%s %f %f)\n" + (car d) + (suffstats.mean (car (cdr d))) + (suffstats.stddev (car (cdr d))))) + data) + (fclose fd))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; The main work +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define (main) + (get_options) + + (mapcar + (lambda (u) + (unwind-protect + (cummulate_seg_durs u) + nil)) + utt_files) + (output_dur_data phonelist outfile) +) + +(main) diff --git a/examples/ex1.email b/examples/ex1.email new file mode 100644 index 0000000..fea3dac --- /dev/null +++ b/examples/ex1.email @@ -0,0 +1,34 @@ +From VM Wed Nov 27 15:33:27 1996 +Content-Length: 482 +Return-Path: awb@cstr.ed.ac.uk +Received: from margo (margo.cstr.ed.ac.uk [192.41.114.73]) by liddell.cstr.ed.ac.uk (8.6.13/8.6.10) with ESMTP id PAA08491 for ; Wed, 27 Nov 1996 15:32:57 GMT +Received: (awb@localhost) by margo (SMI-8.6/8.6.9) id PAA00818; Wed, 27 Nov 1996 15:32:54 GMT +Message-Id: <199611271532.PAA00818@margo> +In-Reply-To: <199611271531.PAA00812@margo> +References: <199611271531.PAA00812@margo> +From: Alan W Black +To: Alan W Black +Subject: Example mail message +Date: Wed, 27 Nov 1996 15:32:54 GMT + + + Alan W. Black writes on 27 November 1996: + > + > + > I'm looking for a demo mail message for Festival, but can't seem to + > find any suitable. It should at least have some quoted text, and + > have some interesting tokens like a URL or such like. + > + > Alan + +Well I'm not sure exactly what you mean but awb@cogsci.ed.ac.uk +has an interesting home page at http://www.cstr.ed.ac.uk/~awb/ which +might be what you're looking for. + +Alan + + > PS. Will you attend the course? + +I hope so + +bye for now diff --git a/examples/ex1.ogi b/examples/ex1.ogi new file mode 100644 index 0000000..e924bff --- /dev/null +++ b/examples/ex1.ogi @@ -0,0 +1,17 @@ + +This is an example. + + This is a slow example. + + This is a very slow example. + a normal one and a fast talking example. + Maybe this one is too fast. + + + My name is Mike, . +My telephone number is + + Mike here. Chris here. This is Gordon. +I'm most terribly sorry to interrupt at this time, but my name +is Roger. A good day to you. + diff --git a/examples/example.apml b/examples/example.apml new file mode 100644 index 0000000..14b156b --- /dev/null +++ b/examples/example.apml @@ -0,0 +1,114 @@ + + + + + + + +Good morning + Mr Smith + + + + + + + + I'm sorry to tell you + + +that you have been diagnosed + as suffering + from a mild + form + of what we call angina + pectoris. + + + + + + + This is + + + a spasm + of the chest + , + + + resulting from + + + overexertion when the heart + is diseased + + + + + + + To solve + this problem + , + + + there are two + drugs I would like you to take. + + + + + + The first + one + + +is Aspirin, + + + + which is + +an analgesic. + + + + + that is, + +it relieves + the pain. + + + + + + I have prescribed it + + + + to cure your angina + + + + + + The only + + problem + + + +is that this drug can be associated with + some sideeffects + . + + + \ No newline at end of file diff --git a/examples/example.sable b/examples/example.sable new file mode 100644 index 0000000..106a0f9 --- /dev/null +++ b/examples/example.sable @@ -0,0 +1,63 @@ + + + + + + +My telephone number is + + + diff --git a/examples/example.th b/examples/example.th new file mode 100644 index 0000000..3d0663a --- /dev/null +++ b/examples/example.th @@ -0,0 +1,4 @@ +*smile* Good morning. This is an example of Festival using a talking +head. This example uses a Festival text mode *frown* which can be +difficult to understand, *smile* but it does help me talk. + diff --git a/examples/example2.sable b/examples/example2.sable new file mode 100644 index 0000000..69185ca --- /dev/null +++ b/examples/example2.sable @@ -0,0 +1,38 @@ + + + + + + + +Homographs are words that are written the same but have different +pronunciations, such as lives and +lives. + + +You say either, while I +say either. + + + + + +We can say things fast. + + + +and slowly. + + + + + +And then at normal speed. + + + + + diff --git a/examples/festival_client.c b/examples/festival_client.c new file mode 100644 index 0000000..4004b94 --- /dev/null +++ b/examples/festival_client.c @@ -0,0 +1,451 @@ +/*************************************************************************/ +/* */ +/* Centre for Speech Technology Research */ +/* University of Edinburgh, UK */ +/* Copyright (c) 1999 */ +/* All Rights Reserved. */ +/* */ +/* Permission is hereby granted, free of charge, to use and distribute */ +/* this software and its documentation without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of this work, and to */ +/* permit persons to whom this work is furnished to do so, subject to */ +/* the following conditions: */ +/* 1. The code must retain the above copyright notice, this list of */ +/* conditions and the following disclaimer. */ +/* 2. Any modifications must be clearly marked as such. */ +/* 3. Original authors' names are not deleted. */ +/* 4. The authors' names are not used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */ +/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ +/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */ +/* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */ +/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ +/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */ +/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ +/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */ +/* THIS SOFTWARE. */ +/* */ +/*************************************************************************/ +/* Author : Alan W Black (awb@cstr.ed.ac.uk) */ +/* Date : March 1999 */ +/*-----------------------------------------------------------------------*/ +/* */ +/* Client end of Festival server API in C designed specifically for */ +/* Galaxy Communicator use though might be of use for other things */ +/* */ +/* This is a standalone C client, no other Festival or Speech Tools */ +/* libraries need be link with this. Thus is very small. */ +/* */ +/* Compile with (plus socket libraries if required) */ +/* cc -o festival_client -DSTANDALONE festival_client.c */ +/* */ +/* Run as */ +/* festival_client -text "hello there" -o hello.snd */ +/* */ +/* */ +/* This is provided as an example, it is quite limited in what it does */ +/* but is functional compiling without -DSTANDALONE gives you a simple */ +/* API */ +/* */ +/*=======================================================================*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "festival_client.h" + +/* For testing endianness */ +int fapi_endian_loc = 1; + +static char *socket_receive_file_to_buff(int fd,int *size); + +void delete_FT_Wave(FT_Wave *wave) +{ + if (wave != 0) + { + if (wave->samples != 0) + free(wave->samples); + free(wave); + } +} + +int save_FT_Wave_snd(FT_Wave *wave, const char *filename) +{ + FILE *fd; + struct { + unsigned int magic; /* magic number */ + unsigned int hdr_size; /* size of this header */ + int data_size; /* length of data (optional) */ + unsigned int encoding; /* data encoding format */ + unsigned int sample_rate; /* samples per second */ + unsigned int channels; /* number of interleaved channels */ + } header; + short sw_short; + int i; + + if ((filename == 0) || + (strcmp(filename,"stdout") == 0) || + (strcmp(filename,"-") == 0)) + fd = stdout; + else if ((fd = fopen(filename,"wb")) == NULL) + { + fprintf(stderr,"save_FT_Wave: can't open file \"%s\" for writing\n", + filename); + return -1; + } + + header.magic = (unsigned int)0x2e736e64; + header.hdr_size = sizeof(header); + header.data_size = 2 * wave->num_samples; + header.encoding = 3; /* short */ + header.sample_rate = wave->sample_rate; + header.channels = 1; + if (FAPI_LITTLE_ENDIAN) + { /* snd is always sparc/68000 byte order */ + header.magic = SWAPINT(header.magic); + header.hdr_size = SWAPINT(header.hdr_size); + header.data_size = SWAPINT(header.data_size); + header.encoding = SWAPINT(header.encoding); + header.sample_rate = SWAPINT(header.sample_rate); + header.channels = SWAPINT(header.channels); + } + /* write header */ + if (fwrite(&header, sizeof(header), 1, fd) != 1) + return -1; + if (FAPI_BIG_ENDIAN) + fwrite(wave->samples,sizeof(short),wave->num_samples,fd); + else + { /* have to swap */ + for (i=0; i < wave->num_samples; i++) + { + sw_short = SWAPSHORT(wave->samples[i]); + fwrite(&sw_short,sizeof(short),1,fd); + } + } + + if (fd != stdout) + fclose(fd); + return 0; +} + +void delete_FT_Info(FT_Info *info) +{ + if (info != 0) + free(info); +} + +static FT_Info *festival_default_info() +{ + FT_Info *info; + info = (FT_Info *)malloc(1 * sizeof(FT_Info)); + + info->server_host = FESTIVAL_DEFAULT_SERVER_HOST; + info->server_port = FESTIVAL_DEFAULT_SERVER_PORT; + info->text_mode = FESTIVAL_DEFAULT_TEXT_MODE; + + info->server_fd = -1; + + return info; +} + +static int festival_socket_open(const char *host, int port) +{ + /* Return an FD to a remote server */ + struct sockaddr_in serv_addr; + struct hostent *serverhost; + int fd; + + fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + if (fd < 0) + { + fprintf(stderr,"festival_client: can't get socket\n"); + return -1; + } + memset(&serv_addr, 0, sizeof(serv_addr)); + if ((serv_addr.sin_addr.s_addr = inet_addr(host)) == -1) + { + /* its a name rather than an ipnum */ + serverhost = gethostbyname(host); + if (serverhost == (struct hostent *)0) + { + fprintf(stderr,"festival_client: gethostbyname failed\n"); + return -1; + } + memmove(&serv_addr.sin_addr,serverhost->h_addr, serverhost->h_length); + } + serv_addr.sin_family = AF_INET; + serv_addr.sin_port = htons(port); + + if (connect(fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) != 0) + { + fprintf(stderr,"festival_client: connect to server failed\n"); + return -1; + } + + return fd; +} + +static int nist_get_param_int(char *hdr, char *field, int def_val) +{ + char *p; + int val; + + if (((p=strstr(hdr,field)) != NULL) && + (strncmp(" -i ",p+strlen(field),4) == 0)) + { + sscanf(p+strlen(field)+4,"%d",&val); + return val; + } + else + return def_val; +} + +static int nist_require_swap(char *hdr) +{ + char *p; + char *field = "sample_byte_format"; + + if ((p=strstr(hdr,field)) != NULL) + { + if (((strncmp(" -s2 01",p+strlen(field),7) == 0) && FAPI_BIG_ENDIAN) || + ((strncmp(" -s2 10",p+strlen(field),7) == 0) + && FAPI_LITTLE_ENDIAN)) + return 1; + } + return 0; /* if unknown assume native byte order */ +} + +static char *client_accept_s_expr(int fd) +{ + /* Read s-expression from server, as a char * */ + char *expr; + int filesize; + + expr = socket_receive_file_to_buff(fd,&filesize); + expr[filesize] = '\0'; + return expr; +} + +static FT_Wave *client_accept_waveform(int fd) +{ + /* Read waveform from server */ + char *wavefile; + int filesize; + int num_samples, sample_rate, i; + FT_Wave *wave; + + wavefile = socket_receive_file_to_buff(fd,&filesize); + wave = 0; + + /* I know this is NIST file and its an error if it isn't */ + if (filesize >= 1024) + { + num_samples = nist_get_param_int(wavefile,"sample_count",0); + sample_rate = nist_get_param_int(wavefile,"sample_rate",16000); + if ((num_samples*sizeof(short))+1024 == filesize) + { + wave = (FT_Wave *)malloc(sizeof(FT_Wave)); + wave->num_samples = num_samples; + wave->sample_rate = sample_rate; + wave->samples = (short *)malloc(num_samples*sizeof(short)); + memmove(wave->samples,wavefile+1024,num_samples*sizeof(short)); + if (nist_require_swap(wavefile)) + for (i=0; i < num_samples; i++) + wave->samples[i] = SWAPSHORT(wave->samples[i]); + } + } + + if (wavefile != 0) /* just in case we've got an ancient free() */ + free(wavefile); + return wave; +} + +static char *socket_receive_file_to_buff(int fd,int *size) +{ + /* Receive file (probably a waveform file) from socket using */ + /* Festival key stuff technique, but long winded I know, sorry */ + /* but will receive any file without closeing the stream or */ + /* using OOB data */ + static char *file_stuff_key = "ft_StUfF_key"; /* must == Festival's key */ + char *buff; + int bufflen; + int n,k,i; + char c; + + bufflen = 1024; + buff = (char *)malloc(bufflen); + *size=0; + + for (k=0; file_stuff_key[k] != '\0';) + { + n = read(fd,&c,1); + if (n==0) break; /* hit stream eof before end of file */ + if ((*size)+k+1 >= bufflen) + { /* +1 so you can add a NULL if you want */ + bufflen += bufflen/4; + buff = (char *)realloc(buff,bufflen); + } + if (file_stuff_key[k] == c) + k++; + else if ((c == 'X') && (file_stuff_key[k+1] == '\0')) + { /* It looked like the key but wasn't */ + for (i=0; i < k; i++,(*size)++) + buff[*size] = file_stuff_key[i]; + k=0; + /* omit the stuffed 'X' */ + } + else + { + for (i=0; i < k; i++,(*size)++) + buff[*size] = file_stuff_key[i]; + k=0; + buff[*size] = c; + (*size)++; + } + + } + + return buff; +} + +/***********************************************************************/ +/* Public Functions to this API */ +/***********************************************************************/ + +FT_Info *festivalOpen(FT_Info *info) +{ + /* Open socket to server */ + + if (info == 0) + info = festival_default_info(); + + info->server_fd = + festival_socket_open(info->server_host, info->server_port); + if (info->server_fd == -1) + return NULL; + + return info; +} + +FT_Wave *festivalStringToWave(FT_Info *info,char *text) +{ + FT_Wave *wave; + FILE *fd; + char *p; + char ack[4]; + int n; + + if (info == 0) + return 0; + + if (info->server_fd == -1) + { + fprintf(stderr,"festival_client: server connection unopened\n"); + return 0; + } + fd = fdopen(dup(info->server_fd),"wb"); + + /* Copy text over to server, escaping any quotes */ + fprintf(fd,"(tts_textall \"\n"); + for (p=text; p && (*p != '\0'); p++) + { + if ((*p == '"') || (*p == '\\')) + putc('\\',fd); + putc(*p,fd); + } + fprintf(fd,"\" \"%s\")\n",info->text_mode); + fclose(fd); + + /* Read back info from server */ + /* This assumes only one waveform will come back, also LP is unlikely */ + wave = 0; + do { + for (n=0; n < 3; ) + n += read(info->server_fd,ack+n,3-n); + ack[3] = '\0'; + if (strcmp(ack,"WV\n") == 0) /* receive a waveform */ + wave = client_accept_waveform(info->server_fd); + else if (strcmp(ack,"LP\n") == 0) /* receive an s-expr */ + client_accept_s_expr(info->server_fd); + else if (strcmp(ack,"ER\n") == 0) /* server got an error */ + { + fprintf(stderr,"festival_client: server returned error\n"); + break; + } + } while (strcmp(ack,"OK\n") != 0); + + return wave; +} + + +int festivalClose(FT_Info *info) +{ + if (info == 0) + return 0; + + if (info->server_fd != -1) + close(info->server_fd); + + return 0; +} + +#ifdef STANDALONE +int main(int argc, char **argv) +{ + char *server=0; + int port=-1; + char *text=0; + char *output=0; + char *mode=0; + int i; + FT_Info *info; + FT_Wave *wave; + + for (i=1; i < argc; i++) + { + if (strcmp(argv[i],"-server") == 0) + server = argv[++i]; + else if (strcmp(argv[i],"-port") == 0) + port = atoi(argv[++i]); + else if (strcmp(argv[i],"-text") == 0) + text = argv[++i]; + else if (strcmp(argv[i],"-mode") == 0) + mode = argv[++i]; + else if (strcmp(argv[i],"-o") == 0) + output = argv[++i]; + } + if (i > argc) + { + fprintf(stderr,"missing argument\n"); + exit(1); + } + + info = festival_default_info(); + if (server != 0) + info->server_host = server; + if (port != -1) + info->server_port = port; + if (mode != 0) + info->text_mode = mode; + + info = festivalOpen(info); + wave = festivalStringToWave(info,text); + + if (wave != 0) + save_FT_Wave_snd(wave,output); + + festivalClose(info); + + return 0; +} +#endif diff --git a/examples/festival_client.h b/examples/festival_client.h new file mode 100644 index 0000000..6f94c3b --- /dev/null +++ b/examples/festival_client.h @@ -0,0 +1,90 @@ +/*************************************************************************/ +/* */ +/* Centre for Speech Technology Research */ +/* University of Edinburgh, UK */ +/* Copyright (c) 1999 */ +/* All Rights Reserved. */ +/* */ +/* Permission is hereby granted, free of charge, to use and distribute */ +/* this software and its documentation without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of this work, and to */ +/* permit persons to whom this work is furnished to do so, subject to */ +/* the following conditions: */ +/* 1. The code must retain the above copyright notice, this list of */ +/* conditions and the following disclaimer. */ +/* 2. Any modifications must be clearly marked as such. */ +/* 3. Original authors' names are not deleted. */ +/* 4. The authors' names are not used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */ +/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ +/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */ +/* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */ +/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ +/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */ +/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ +/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */ +/* THIS SOFTWARE. */ +/* */ +/*************************************************************************/ +/* Author : Alan W Black (awb@cstr.ed.ac.uk) */ +/* Date : March 1999 */ +/*-----------------------------------------------------------------------*/ +/* */ +/* Client end of Festival server API (in C) designed specifically for */ +/* Galaxy Communicator use, though might be of use for other things */ +/* */ +/*=======================================================================*/ +#ifndef _FESTIVAL_CLIENT_H_ +#define _FESTIVAL_CLIENT_H_ + +#define FESTIVAL_DEFAULT_SERVER_HOST "localhost" +#define FESTIVAL_DEFAULT_SERVER_PORT 1314 +#define FESTIVAL_DEFAULT_TEXT_MODE "fundamental" + +typedef struct FT_Info +{ + int encoding; + char *server_host; + int server_port; + char *text_mode; + + int server_fd; +} FT_Info; + +typedef struct FT_Wave +{ + int num_samples; + int sample_rate; + short *samples; +} FT_Wave; + +void delete_FT_Wave(FT_Wave *wave); +void delete_FT_Info(FT_Info *info); + +#define SWAPSHORT(x) ((((unsigned)x) & 0xff) << 8 | \ + (((unsigned)x) & 0xff00) >> 8) +#define SWAPINT(x) ((((unsigned)x) & 0xff) << 24 | \ + (((unsigned)x) & 0xff00) << 8 | \ + (((unsigned)x) & 0xff0000) >> 8 | \ + (((unsigned)x) & 0xff000000) >> 24) + +/* Sun, HP, SGI Mips, M68000 */ +#define FAPI_BIG_ENDIAN (((char *)&fapi_endian_loc)[0] == 0) +/* Intel, Alpha, DEC Mips, Vax */ +#define FAPI_LITTLE_ENDIAN (((char *)&fapi_endian_loc)[0] != 0) + + +/*****************************************************************/ +/* Public functions to interface */ +/*****************************************************************/ + +/* If called with NULL will attempt to access using defaults */ +FT_Info *festivalOpen(FT_Info *info); +FT_Wave *festivalStringToWave(FT_Info *info,char *text); +int festivalClose(FT_Info *info); + +#endif diff --git a/examples/festival_client.pl b/examples/festival_client.pl new file mode 100644 index 0000000..a39e4d4 --- /dev/null +++ b/examples/festival_client.pl @@ -0,0 +1,164 @@ +#!/usr/local/bin/perl + +# festival_client.pl - a perl socket client for festival +# +# Copyright (C) 1997 +# Kevin A. Lenzo (lenzo@cs.cmu.edu) 7/97 +# All rights reserved. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# +######################################################################### +# +# A good deal of this was taken from the example in the +# perlipc man page. The rest is simply the Festival-specific +# stuff. + +use IO::Socket; + +package Festival; + +my ($audio_command, $audio_file, $file_stuff_key); +my ($host, $port, $kidpid, $handle, $line); + +$wave_type = "nist"; # the type of the audio files +$audio_command = "na_play"; # your local audio play command + +# uncomment the next line if your audio command requires a file +# $audio_file = "/tmp/client_tmp$$.nist"; # temp file for waveforms + +$file_stuff_key = "ft_StUfF_key"; # defined in speech tools + +$host = shift || 'localhost'; +$port = shift || 1314; +if ($host eq "-h") { +print STDOUT " + Usage: + + $0 [ []] + + OR + + $0 -h + + perl client for the Festival text-to-speech server + + Lines that do not begin with a ( are treated as text + to be spoken. Those that do begin with a ( are assumed + to Scheme commands to festival and are sent without + alteration. Use `quit' or `exit' to quit. + + Note that a server must be started before the client + will work. + + Use the `-h' (help) option for this message. + +"; + + exit(1); +} + +# create a tcp connection to the specified host and port + +$handle = IO::Socket::INET->new(Proto => "tcp", + PeerAddr => $host, + PeerPort => $port) + or die " + Can't connect to port $port on $host: $! + (Are you sure the server is running and accepting connections?) + +"; + +$handle->autoflush(1); # so output gets there right away +print STDERR "[Connected to $host:$port]\n"; + +# tell the server to send us back a 'file' of the right type +print $handle "(Parameter.set 'Wavefiletype '$wave_type)\n"; + +# split the program into two processes, identical twins +die "can't fork: $!" unless defined($kidpid = fork()); + +# the if{} block runs only in the parent process +if ($kidpid) { + # the parent handles the input so it can exit on quit + + while (defined ($line = )) { + last if ($line =~ /^(quit|exit)$/); + + if ($line =~ /^\(/) { + # just send it wholesale if it's a ( ) + print $handle $line; + } else { + # otherwise assume it's text to be spoken + chomp $line; + print $handle "(tts_textall \"$line\" 'file)\n"; + } + } + kill("TERM", $kidpid);# send SIGTERM to child +} +# the else{} block runs only in the child process +else { + # the child is forked off to get the results from the server + undef $line; + while (($line = $remains) || defined ($line = <$handle>)) { + undef $remains; + if ($line eq "WV\n") { # we have a waveform coming + undef $result; + if ($audio_file) { + open(AUDIO, ">$audio_file"); + } else { + open(AUDIO, "| $audio_command"); + } + while ($line = <$handle>) { + if ($line =~ s/$file_stuff_key(.*)$//s) { + $remains = $1; + print AUDIO $line; + last; + } + print AUDIO $line; + } + close AUDIO; + + if ($audio_file) { + # call the command if we weren't piping + system("$audio_command $audio_file"); + + # remove the evidence + unlink($audio_file); + } + } elsif ($line eq "LP\n") { + while ($line = <$handle>) { + if ($line =~ s/$file_stuff_key(.*)$//s) { + $remains = $1; + print STDOUT $line; + last; + } + print STDOUT $line; + } + } else { + # if we don't recognize it, echo it + print STDOUT $line; + } + } +} diff --git a/examples/intro.text b/examples/intro.text new file mode 100644 index 0000000..87c8dee --- /dev/null +++ b/examples/intro.text @@ -0,0 +1,4 @@ + +This is a short introduction to the Festival Speech Synthesis System. +Festival was developed by Alan Black and Paul Taylor, at the Centre +for Speech Technology Research, University of Edinburgh. diff --git a/examples/latest.sh b/examples/latest.sh new file mode 100644 index 0000000..d52259d --- /dev/null +++ b/examples/latest.sh @@ -0,0 +1,115 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: September 1996 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Gets the a summary of the latest news from Pathfinder.com (Time +;;; magazine and synthesizes it). My first web based speech application. +;;; +;;; This is far too dependent on Time's latest news pages format and +;;; not really very general, but its a start. Also they seem to change +;;; both the format and the name of the pages regularly so this probably +;;; no longer works. +;;; +;;; Note the news in Copyright Reuters, and should not be used except +;;; for personal use. This program can be viewed simply as a web +;;; browser (for one particular page) and does not itself contain any +;;; information under Time or Reuter copyright. +;;; + +;;; Because this is a --script type file I has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(load (path-append libdir "init.scm")) + +(audio_mode 'async) ;; play waves while continuing synthesis + +;;; Give short introduction, so something can happen while we're +;;; getting the news +(SayText "And here is the news.") +(SayText "News stories are courtesy of Time Warners' Path finder Magazine + and Reuters News Media.") + +(format t "Getting news from Pathfinder Magazine ... \n") +(fflush nil) +;;; First get the page + +(set! tmpfile (make_tmp_filename)) +(set! tmpfile2 (string-append tmpfile "_2")) + +(get_url "http://www.pathfinder.com/news/latest" tmpfile) + +(format t "done\n") + +;; This has to be powerful awk, not the original awk. GNU awk or nawk +;; are what I'm looking for, but they have such random names, and may or +;; may not be on your system. +(if (string-matches *ostype* ".*Linux.*") + (defvar GOOD_AWK "awk") + (defvar GOOD_AWK "nawk")) + +;; Should now use some HTML to SSML conversion but hack it just now +(system + (string-append + GOOD_AWK " '{ if ($1 == \"
\") + inlist = 1; + if (inlist == 1) + { + if ($1 == \"
\") # title + { + getline # skip href + getline + line = $0 + sub(/^.*/,\"\",line); + sub(/ *<.b>.*$/,\"\",line); + printf(\"%s, \",line); + } + else if ($1 == \"
\") # summary + { + getline + line = $0 + sub(/\(.. ... .... ..:.. ...\)/,\"\",line) # remove time stamp + printf(\"%s\\n\\n\",line); + } + else if ($1 == \"
\") + inlist = 0; + } + }' < " tmpfile " > " tmpfile2)) + +;; Say the news +(tts_file tmpfile2 nil) + +(system (string-append "rm -f " tmpfile " " tmpfile2)) +(audio_mode 'close) ;; close gracefully + + diff --git a/examples/make_utts.sh b/examples/make_utts.sh new file mode 100644 index 0000000..014576d --- /dev/null +++ b/examples/make_utts.sh @@ -0,0 +1,558 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: November 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Build a utterance from a number of stream label files including +;;; building the links between the stream items +;;; +;;; This used to be a shell script but that was just soooo slow +;;; and inflexible it was better to do it in Festival +;;; + +;;; Because this is a --script type file it has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(if (not (symbol-bound? 'caar)) + (load (path-append libdir "init.scm"))) + +;;; Some parts are potentially editable +(defvar basic_relations '((Phrase segmental ()) + (Word segmental (Phrase)) + (Syllable segmental (Word) ) + (Segment segmental (Syllable)) + (IntEvent point (Syllable) ) + (Target point (Segment)) ;; virtually unused + ) + "The basic relations that exist and need to be combined into a single +utterance. Also their type, that is if they describe segments of +the utterance or points in the utterance.") + +(require 'tilt) + +(define (make_utts_help) + (format t "%s\n" + "make_utts [options] festival/relations/Segment/*.Segment + Build utterance forms for sets of stream_item labels + Options + -utt_dir + Directory where utterances will be saved (default + is festival/utts/) + -label_dir + The directory which contains subdirectories containing + label files for each relation, default is festival/relations/ + -style + What style of utterances, classic or unisyn + -tilt_events + IntEvent files are tilt event so uses special information + in the syllink feature to link to syllables. + -eval + Load in scheme file with run specific code, if file name + starts with a left parent the string itsefl is interpreted + -tokens + Overly non-general method to load in Tokens and markup + -pos + Do part of speech assignment + -phoneset + Specify the phoneset name, this is required for -tilt_events. +") + (quit)) + +;;; Default options values +(defvar seg_files nil) ;; files to build from +(defvar label_dir "festival/relations/") +(defvar style 'classic) +(defvar tilt_events nil) +(defvar with_tokens nil) +(defvar unisyn_build_with_silences t) +(defvar do_pos nil) +(defvar do_syn nil) +(defvar utt_dir "festival/utts/") + +;; may be redefined by user +(define (make_utts_user_function utt) utt) + +;;; Get options +(define (get_options) + (let ((files nil) + (o argv)) + (if (or (member_string "-h" argv) + (member_string "-help" argv) + (member_string "--help" argv) + (member_string "-?" argv)) + (make_utts_help)) + (while o + (begin + (cond + ((string-equal "-label_dir" (car o)) + (if (not (cdr o)) + (make_utts_error "no label_dir file specified")) + (set! label_dir (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-utt_dir" (car o)) + (if (not (cdr o)) + (make_utts_error "no utt_dir file specified")) + (set! utt_dir (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-phoneset" (car o)) + (if (not (cdr o)) + (make_utts_error "no phoneset specified")) + (load_library (string-append (car (cdr o)) "_phones.scm")) + (set! o (cdr o))) + ((string-equal "-eval" (car o)) + (if (not (cdr o)) + (make_utts_error "no file specified to load")) + (if (string-matches (car (cdr o)) "^(.*") + (eval (read-from-string (car (cdr o)))) + (load (car (cdr o)))) + (set! o (cdr o))) + ((string-equal "-tilt_events" (car o)) + (set! tilt_events t)) + ((string-equal "-style" (car o)) + (if (not (cdr o)) + (make_utts_error "no style specified")) + (set! style (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-tokens" (car o)) + (set! with_tokens t)) + ((string-equal "-pos" (car o)) + (set! do_pos t)) + (t + (set! files (cons (car o) files)))) + (set! o (cdr o)))) + (if files + (set! seg_files (reverse files))))) + +(define (make_utts_error message) + (format stderr "%s: %s\n" "make_utts" message) + (make_utts_help)) + +;;; No gc messages +(gc-status nil) + +(define (make_utt name relations) + "(make_utt dir name relations) +Build an utterance from the stream_item label files in +dir/RELATION/name.RELATION and return it. This also creates +relations between each base relation." + (let (utt) + (cond + ((equal? 'classic style) + (set! utt (make_utt_classic name relations))) + ((equal? 'unisyn style) + (set! utt (make_utt_unisyn name relations))) + (t + (err "make_utts: unknown style" style))) + + (utt.set_feat utt "fileid" name) + (if do_pos + (find_pos utt)) + (if do_syn + (find_syn utt)) + + utt) +) + +;; These should probably be somewhere else +(defvar met_insertion 7) +(defvar met_deletion 7) +(defvar met_substitution 7) + +(define (make_utt_unisyn name relation) + "(make_utt_classic name relations) +Build utterance, with xml, metrical tree and tilt relations." + (let ((utt (Utterance nil nil))) + + (set! utt (wsi_build utt name label_dir tilt_events)) + + (add_xml_relation + utt (string-append label_dir "xml/rhet/" name ".xrhet")) + (add_xml_relation + utt (string-append label_dir "xml/syn/" name ".xsyn")) + (add_xml_relation + utt (string-append label_dir "xml/anaph/" name ".xana")) + (add_xml_relation + utt (string-append label_dir "xml/info/" name ".xinf")) + + (syntax_to_metrical_words utt) + (extend_tree + utt (list 'MetricalTree 'MetricalWord 'WordStructure 'Syllable)) + (extend_tree + utt (list 'ProsodicTree 'MetricalTree 'SylStructure 'Segment)) + + (add_match_features utt) + utt) +) + +(define (wsi_build utt file pathname do_il) + + (add_trans_word utt (string-append pathname "wrd/" file ".wrd")) + (add_trans_segment utt (string-append pathname "lab/" file ".lab")) + (if do_il + (add_trans_intonation utt (string-append pathname "tilt/" file ".tilt")) + nil + ) + utt +) + +(define (make_utt_classic name relations) + "(make_utt_classic name relations) +Build utterance in classic style for name and named relations." + (let (utt) + (if with_tokens + (set! utt (utt.load + nil + (string-append label_dir "/" "Token" "/" name ".Token"))) + (set! utt (Utterance Text nil))) + (set! current_utt utt) + (mapcar + (lambda (s) + (utt.relation.load + utt (car s) (string-append label_dir "/" + (car s) "/" name "." (car s)))) + relations) + ;; Now link them + (make_syl_structure utt) + (make_target_links utt) + (make_phrase_structure utt) + (if tilt_events + (tilt_link_syls utt) + (intevent_link_syls utt)) + + (if with_tokens + (relate_tokens_to_words utt)) + (make_utts_user_function utt) + utt) +) + +(define (find_pos utt) + "(find pos utt) +Assign part of speech using standard POS tagger. Also produce +standard reduced tagset in phr_pos. Irrelevant extra POS features +are removed. This assumes a POS tagger is set up at this point, +this can most easily be done be setting up a relevant voice." + (POS utt) + (mapcar + (lambda (w) + (item.set_feat + w "phr_pos" + (map_pos (item.feat w "pos") english_pos_map_wp39_to_wp20)) + (item.remove_feature w "pos_index") + (item.remove_feature w "pos_index_score") + ) + (utt.relation.items utt 'Word)) + utt) + +(define (map_pos pos map) + (cond + ((null map) pos) + ((member_string pos (car (car map))) + (car (cdr (car map)))) + (t + (map_pos pos (cdr map))))) + +(define (make_target_links utt) + "(make_target_links utt) +Make targets that fall within a segment. Targets contains all segments +and have that actual Targets as daughters." + (let ((targets (utt.relation.items utt 'Target)) + (segs (utt.relation.items utt 'Segment)) + tt1) + (utt.relation.create utt 'TTarget) + (mapcar + (lambda (tt) + (set! tt1 (utt.relation.append utt 'TTarget)) + ;; covert the target values to the newer naming convention + (item.set_feat tt1 "pos" (item.feat tt "end")) + (item.set_feat tt1 "f0" (parse-number (item.feat tt "name"))) + (item.relation.remove tt 'Target)) + targets) + (set! targets (utt.relation.items utt 'TTarget)) + (set! TARGSEGFACTOR 0.010) + (while segs + (utt.relation.append utt 'Target (car segs)) + (while (and targets (< (item.feat (car targets) "pos") + (+ (item.feat (car segs) "end") + TARGSEGFACTOR))) + (item.relation.append_daughter (car segs) 'Target (car targets)) + (set! targets (cdr targets))) + (set! segs (cdr segs))) + (utt.relation.delete utt 'TTarget) +)) + + +(define (make_phrase_structure utt) + "(make_phrase_structure utt) +Add words into phrases." + (let ((phrases (utt.relation.items utt 'Phrase)) + (words (utt.relation.items utt 'Word))) + (set! WORDPHRASEFACTOR 0.200) + (while phrases + (while (and words (< (item.feat (car words) 'end) + (+ (item.feat (car phrases) 'end) + WORDPHRASEFACTOR))) + (item.relation.append_daughter (car phrases) 'Phrase (car words)) + (set! words (cdr words))) + (set! phrases (cdr phrases))))) + +(define (relate_tokens_to_words utt) +"(relate_tokens_to_words utt) +A specific function for aligning the token stream to word stream." + (convert_token_stream utt) + (let ((tokens (utt.relation.items utt 'Token)) + (words (utt.relation.items utt 'Word))) + (link_tokens_words tokens words) + utt) +) + +(define (convert_token_stream utt) + "(convert_token_stream utt) +Replace Token Stream with Token relation. -- won't be needed when things +are properly converted." + (utt.relation.create utt 'Token) + (mapcar + (lambda (tok) + (utt.relation.append utt 'Token tok)) + (utt.stream utt 'Token)) + (utt.stream.delete utt 'Token) + ) + +(define (link_tokens_words tokens words) + "(link_tokens_words tokens words) +Advance through the tokens and words aligning them as required." + (cond + ((null words) + t) + ((null tokens) + (error (format nil "Extra words: %l\n" (mapcar item.name words)))) + ((or (string-equal "1" + (item.feat (car tokens) "punct-elem")) + (member_string (item.name (car tokens)) + '("(" ")"))) + (link_tokens_words (cdr tokens) words)) + ((string-equal "SPEECH-OMITTED" + (item.feat (car tokens) "R:SOLEML.parent.TYPE")) + (link_tokens_words (cdr tokens) words)) + ((and (string-matches (item.name (car words)) ".*'.*") + (string-equal "APOSTROPHE" + (item.feat (car tokens) "R:Token.n.TYPE"))) + (item.relation.append_daughter (car tokens) 'Token (car words)) + (item.relation.append_daughter (car (cdr tokens)) 'Token (car words)) + (if (string-matches (item.name (car words)) ".*'") + (link_tokens_words (cdr (cdr tokens)) (cdr words)) + (begin + (item.relation.append_daughter + (car (cdr (cdr tokens))) 'Token (car words)) + (link_tokens_words (cdr (cdr (cdr tokens))) (cdr words))))) + ((string-equal (downcase (item.name (car tokens))) + (downcase (item.name (car words)))) + (item.relation.append_daughter (car tokens) 'Token (car words)) + (link_tokens_words (cdr tokens) (cdr words))) + ;; there going to be more here !!! + (t + (error (format nil "Mismatch of tokens and words \n %l\n %l\n" + (mapcar item.name tokens) + (mapcar item.name words)))))) + +(define (do_utt name) + (let ((utt (make_utt name basic_relations))) + (utt.save utt (string-append utt_dir "/" name ".utt") 'est_ascii) + t)) + +(define (make_syl_structure utt) + "(make_syl_structure utt) +Make SylStructure relation linking Words, Syllables and Segments." + (let ((words (utt.relation.items utt 'Word)) + (syls (utt.relation.items utt 'Syllable)) + (segs (utt.relation.items utt 'Segment))) + (set! SYLWORDFACTOR 0.025) + (set! SEGSYLFACTOR 0.02) + (utt.relation.create utt 'SylStructure) + (while words + (utt.relation.append utt 'SylStructure (car words)) + (while (and syls (< (item.feat (car syls) 'end) + (+ (item.feat (car words) 'end) + SYLWORDFACTOR))) + (item.relation.append_daughter (car words) 'SylStructure (car syls)) + (while (and segs (< (item.feat (car segs) 'end) + (+ (item.feat (car syls) 'end) + SEGSYLFACTOR))) + (if (not (phone_is_silence (item.name (car segs)))) + (item.relation.append_daughter + (car syls) 'SylStructure (car segs))) + (set! segs (cdr segs))) + (set! syls (cdr syls))) + (set! words (cdr words))))) + +(define (tilt_link_syls utt) +"(tilt_link_syls utt) +Link syls to IntEvents, for Tilt. In this case the feature syllink +specifies the word.sylnum that the event should be linked to." + (let ((syls (utt.relation.items utt 'Syllable))) + (utt.relation.create utt 'Intonation) + (mapcar + (lambda (ie) + (let ((name (item.name ie)) + (syllink (item.feat ie "syllink")) + syl) + (cond + ((member_string name '("phrase_start" "phrase_end")) + ;; relate this IntEvent to silence segment +; (if (string-equal name "phrase_start") +; (set! syl (find_ie_phrase_syl utt ie 'syllable_start)) +; (set! syl (find_ie_phrase_syl utt ie 'syllable_end))) +; (utt.relation.append utt 'Intonation syl) +; (item.relation.append_daughter syl 'Intonation ie) + ) + ((and (string-equal (item.feat ie "int_event") "1") + (set! syl (find_related_syl utt syls syllink))) + (if (not (member 'Intonation (item.relations syl))) + (utt.relation.append utt 'Intonation syl)) + (item.relation.append_daughter syl 'Intonation ie) + (set_rel_peak_pos utt ie syl))))) + (utt.relation.items utt 'IntEvent)) ;; the IntEvents + )) + +(define (intevent_link_syls utt) +"(intevent_link_syls utt) +Non-tilt link of syllables to intevents through the Intonation relation." + (let ((syls (utt.relation.items utt 'Syllable))) + (utt.relation.create utt 'Intonation) + (mapcar + (lambda (ie) + (let ((syl (find_container_syl ie syls))) + (if (not (member 'Intonation (item.relations syl))) + (utt.relation.append utt 'Intonation syl)) + (item.relation.append_daughter syl 'Intonation ie))) + (utt.relation.items utt 'IntEvent)) ;; the IntEvents + )) + +(define (find_container_syl ie syls) + "(find_container_syl ie syls) +Find the syl thats cloests to the time on this ie." + (let ((pos (item.feat ie 'end)) + (ss syls) + syl) + (while (and ss (not syl)) + (let ((ss_start (item.feat (car ss) 'syllable_start)) + (ss_end (item.feat (car ss) 'syllable_end))) + (if (and (> pos ss_start) + (< pos (+ ss_end 0.030))) + (set! syl (car ss))) + (set! ss (cdr ss)))) + (if (not syl) + (error "Failed to find related syllable for IntEvent at" pos)) + syl)) + +(define (find_ie_phrase_syl utt ie direction) +"(find_ie_phrase_syl utt ie pos direction) +Find the syllable that should be related to this IntEvent. +As at this stage no real relations can be relied on this blindly +searches the Syllable stream for a segment at the right time +point." + (let ((syls (utt.relation.items utt 'Syllable)) + (pos (item.feat ie 'position)) + syl) + (while (and syls (not syl)) + (if (or (approx-equal? pos (item.feat (car syls) direction) 0.04) + (and (not (item.relation.next ie 'IntEvent)) + (not (cdr syls)))) + (set! syl (car syls))) + (set! syls (cdr syls))) + (if (not syl) + (error "Failed to find related syllable for phrase IntEvent at" pos)) + syl)) + +(define (set_rel_peak_pos utt ie syl) +"(set_rel_peak_pos ie syl) +Set the feature tilt:rel_pos to the distance from the start of +of the vowel in syl" + (item.set_feat + ie + "tilt:rel_pos" + (- (- (item.feat ie 'end) + (* (- 1.0 (item.feat ie 'tilt:tilt)) + (item.feat ie 'tilt:dur) + 0.5)) + (syl_vowel_start syl)))) + +(define (find_related_syl utt syls syllink) +"(find_related_syl utt syls syllink) +Find the syllable name by sylllink, which is of the form x[.y]. +x the word number and y is the syllable number." + (unwind-protect + (let (wordlab sylnum word syls syl) + (if (string-matches syllink ".*\\..*") + (begin + (set! wordlab (string-before syllink ".")) + (set! sylnum (- (parse-number (string-after syllink ".")) 1))) + (begin + (set! wordlab syllink) + (set! sylnum 0))) + (set! word (find_word_labelled + utt (utt.relation.items utt 'Word) wordlab)) + (if (not word) + (error "Failed to find word labelled:" wordlab)) + (set! syls (item.relation.daughters word 'SylStructure)) + (set! syl (nth sylnum syls)) + (if syl + syl + (car (last syls)))) + (begin + (error "Failed to find syllable labelled:" syllink)))) + +(define (find_word_labelled utt words lab) +"(find_word_labelled words lab) +Find the word whose label is lab." + (cond + ((null words) nil) + ((string-equal lab (item.feat (car words) "wordlab")) + (car words)) + (t + (find_word_labelled utt (cdr words) lab)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; The main work +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define (main) + (get_options) + + (mapcar + (lambda (f) + (format t "%s\n" f) + (unwind-protect + (do_utt (path-basename f)) + (format stderr "utterance build or save failed\n"))) + seg_files)) + +(main) diff --git a/examples/powmeanstd.sh b/examples/powmeanstd.sh new file mode 100644 index 0000000..12ba13a --- /dev/null +++ b/examples/powmeanstd.sh @@ -0,0 +1,178 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: December 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Find the means and standard deviations of the power of all +;;; phones in the given utterances. +;;; + +;;; Because this is a --script type file it has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(load (path-append libdir "init.scm")) + +(define (powmeanstd_help) + (format t "%s\n" + "powmeanstd [options] festival/utts/*.utts + Find means and standard deviation of phone power in utterances + Options + -output + File to save output in + -log + Take log of power first +") + (quit)) + +;;; Default options values +(defvar utt_files nil) +(defvar outfile "pow.meanstd") +(defvar log_domain nil) + +;;; Get options +(define (get_options) + (let ((files nil) + (o argv)) + (if (or (member_string "-h" argv) + (member_string "-help" argv) + (member_string "--help" argv) + (member_string "-?" argv)) + (powmeanstd_help)) + (while o + (begin + (cond + ((string-equal "-output" (car o)) + (if (not (cdr o)) + (powmeanstd_error "no output file specified")) + (set! outfile (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-log" (car o)) + (set! log_domain t)) + (t + (set! files (cons (car o) files)))) + (set! o (cdr o)))) + (if files + (set! utt_files (reverse files))))) + +(define (powmeanstd_error message) + (format stderr "%s: %s\n" "powmeanstd" message) + (powmeanstd_help)) + +;;; No gc messages +(gc-status nil) + +;;; A simple sufficient statistics class +(define (suffstats.new) + (list + 0 ;; n + 0 ;; sum + 0 ;; sumx + )) + +(define (suffstats.set_n x n) + (set-car! x n)) +(define (suffstats.set_sum x sum) + (set-car! (cdr x) sum)) +(define (suffstats.set_sumx x sumx) + (set-car! (cdr (cdr x)) sumx)) +(define (suffstats.n x) + (car x)) +(define (suffstats.sum x) + (car (cdr x))) +(define (suffstats.sumx x) + (car (cdr (cdr x)))) +(define (suffstats.reset x) + (suffstats.set_n x 0) + (suffstats.set_sum x 0) + (suffstats.set_sumx x 0)) +(define (suffstats.add x d) + (suffstats.set_n x (+ (suffstats.n x) 1)) + (suffstats.set_sum x (+ (suffstats.sum x) d)) + (suffstats.set_sumx x (+ (suffstats.sumx x) (* d d))) +) + +(define (suffstats.mean x) + (/ (suffstats.sum x) (suffstats.n x))) +(define (suffstats.variance x) + (/ (- (* (suffstats.n x) (suffstats.sumx x)) + (* (suffstats.sum x) (suffstats.sum x))) + (* (suffstats.n x) (- (suffstats.n x) 1)))) +(define (suffstats.stddev x) + (sqrt (suffstats.variance x))) + +;;; Index for each phone +(defvar phonelist nil) ;; index of phone to suffstats +(define (get_phone_data phone) + (let ((a (car (cdr (assoc phone phonelist))))) + (if a + a + (begin ;; first time for this phone + (set! phonelist + (cons + (list phone (suffstats.new)) + phonelist)) + (car (cdr (assoc phone phonelist))))))) + +(define (cummulate_seg_pow utt_name) + (let ((utt (utt.load nil utt_name))) + (mapcar + (lambda (s) + (suffstats.add + (get_phone_data (item.name s)) + (if log_domain + (log (item.feat s "power")) + (item.feat s "power")))) + (utt.relation.items utt 'Segment)))) + +(define (output_pow_data data outfile) + (let ((fd (fopen outfile "w"))) + (mapcar + (lambda (d) + (format fd "(%s %f %f)\n" + (car d) + (suffstats.mean (car (cdr d))) + (suffstats.stddev (car (cdr d))))) + data) + (fclose fd))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; The main work +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define (main) + (get_options) + + (mapcar cummulate_seg_pow utt_files) + (output_pow_data phonelist outfile) +) + +(main) diff --git a/examples/run-festival-script.sh b/examples/run-festival-script.sh new file mode 100755 index 0000000..b384c6e --- /dev/null +++ b/examples/run-festival-script.sh @@ -0,0 +1,47 @@ +#!/bin/sh +#####################################################-*-mode:shell-script-*- +## ## +## Carnegie Mellon University +## Copyright (c) 2005 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## Author: Alan W Black ## +## Date: Nov 2008 ## +########################################################################### +## Run a festival script with an explicit libpath so an implementation ## +## can be moved from where it was compiled and the scripts can still be ## +## be used ## +########################################################################### + +FESTIVAL=$1 +FESTLIBDIR=$2 +SCRIPT=$3 +shift +shift +shift +exec $FESTIVAL --libdir $FESTLIBDIR --script $3 $* diff --git a/examples/saytime.sh b/examples/saytime.sh new file mode 100644 index 0000000..3efc2cf --- /dev/null +++ b/examples/saytime.sh @@ -0,0 +1,158 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: wasting time one August morning in 1996 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Here is a short example of a Festival program that speaks the +;;; current time. It uses UNIX date to get the time then builds +;;; a string with an expression of the current time. +;;; +;;; The string generated for synthesis is of the form +;;; The time is now +;;; + +;;; Because this is a --script type file I has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(load (path-append libdir "init.scm")) + +(define (get-the-time) +"Returns a list of hour and minute and second, for later processing" + (let (date) + (system "date | awk '{print $4}' | tr : ' ' >/tmp/saytime.tmp") + (set! date (load "/tmp/saytime.tmp" t)) ;; loads the file unevaluated + (system "rm /tmp/saytime.tmp") + date) +) + +(define (round-up-time time) +"Rounds time up/down to nearest five minute interval" + (let ((hour (car time)) + (min (car (cdr time))) + (sec (car (cdr (cdr time))))) + (set! min (round-min (+ 2 min))) + (list hour min sec))) + +(define (round-min min) +"Returns minutes rounded down to nearest 5 minute interval" + (cond + ((< min 5) + 0) + (t + (+ 5 (round-min (- min 5)))))) + +(define (approx time) +"Returns a string stating the approximation of the time. + exactly -- within a minute either side + almost -- 1-2 minutes before + just after - 1-2 minutes after + a little after 2-3 minutes after +" + (let ((rm (round-min (car (cdr time)))) + (min (car (cdr time)))) + (cond + ((or (< (- min rm) 1) + (> (- min rm) 3)) + "exactly ") + ((< (- min rm) 2) + "just after ") + ((< (- min rm) 3) + "a little after ") + (t + "almost ")))) + +(define (hour-string time) +"Return description of hour" + (let ((hour (car time))) + (if (> (car (cdr time)) 30) + (set! hour (+ 1 hour))) + (cond + ((or (eq hour 0) (eq hour 24)) + "midnight ") + ((> hour 12) + (string-append (- hour 12) ", ")) + (t + (string-append hour ", "))))) + +(define (minute-string time) +"Return description of minute" + (let ((min (car (cdr time)))) + (cond + ((or (eq min 0) (eq min 60)) " ") + ((eq min 5) "five past ") + ((eq min 10) "ten past ") + ((eq min 15) "quarter past ") + ((eq min 20) "twenty past ") + ((eq min 25) "twenty-five past ") + ((eq min 30) "half past ") + ((eq min 35) "twenty-five to ") + ((eq min 40) "twenty to ") + ((eq min 45) "quarter to ") + ((eq min 50) "ten to ") + ((eq min 55) "five to ") + (t + "something else ")))) + +(define (ampm-string time) +"Return morning/afternoon or evening string" + (let ((hour (car time))) + (cond + ((or (eq hour 0) (eq hour 12) (eq hour 24)) + " ") + ((< hour 12) + "in the morning. ") + ((< hour 18) + "in the afternoon. ") + (t + "in the evening. ")))) + +;;; +;;; Now with all the functions defined we can get the time +;;; +(set! actual-time (get-the-time)) +(set! round-time (round-up-time actual-time)) + +;;; Construct the time expression +(set! time-string + (string-append + "The time is now, " + (approx actual-time) + (minute-string round-time) + (hour-string round-time) + (ampm-string round-time))) + +(format t "%s\n" time-string) + +;;; Synthesize it +(SayText time-string) + diff --git a/examples/scfg_parse_text.sh b/examples/scfg_parse_text.sh new file mode 100644 index 0000000..028fa7f --- /dev/null +++ b/examples/scfg_parse_text.sh @@ -0,0 +1,147 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: October 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Parse arbitrary text using the given SCFG. +;;; +;;; Tokenizes given text file and runs the part of speech tagger on it +;;; Parses it with respect to a grammar trained from the UPenn WSJ +;;; tree bank (you may optionall specify a different grammar). +;;; +;;; This may be slow for long sentences as there is |w|^3 factor +;;; involved in parsing algorithm. + +;;; Because this is a --script type file I has to explicitly +;;; load the initfiles: init.scm and user's .festivalrc +(load (path-append libdir "init.scm")) + +(require 'scfg) + +;;; Process command line arguments +(define (scfg_parse_text_help) + (format t "%s\n" + "scfg_parse_text [options] textfile + Parse arbitrary text + Options + -o ofile File to save parses (default is stdout). + -grammar ifile Alternative grammar, default uses standard grammar + from Festival distribution. + -full_parse Output full parse with probabilities rather than + simplified form (which is the default).") + (quit)) + +;;; No gc messages +(gc-status nil) + +;;; Default argument values +(defvar grammarfile (path-append libdir "scfg_wsj_wp20.gram")) +(defvar outfile "-") +(defvar outfd t) +(defvar parse_type 'brackets_only) +(defvar text_files '("-")) + +;;; Get options +(define (get_options) + + (let ((files nil) + (o argv)) + (if (or (member_string "-h" argv) + (member_string "-help" argv) + (member_string "--help" argv) + (member_string "-?" argv)) + (scfg_parse_text_help)) + (while o + (begin + (cond + ((string-equal "-o" (car o)) + (if (not (cdr o)) + (scfg_error "no output file specified")) + (set! outfile (car (cdr o))) + (set! outfd (fopen outfile "w")) + (set! o (cdr o))) + ((string-equal "-grammar" (car o)) + (if (not (cdr o)) + (scfg_error "no grammar file specified")) + (set! grammarfile (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-full_parse" (car o)) + (set! parse_type 'full_parse)) + (t + (set! files (cons (car o) files)))) + (set! o (cdr o)))) + (if files + (set! text_files (reverse files))))) + +(define (scfg_error message) + (format stderr "%s: %s\n" "scfg_parse_text" message) + (scfg_parse_text_help)) + +;;; Functions that do the work +(define (find-parse utt) +"Main function for processing TTS utterances. Tokenizes, predicts POS and +then parses." + (Token utt) + (POS utt) + (Phrasify utt) ;; cause it maps the POS tags + (ProbParse utt) +) + +(define (output-parse utt) +"Output the parse tree for each utt" + (if (equal? parse_type 'brackets_only) + (pprintf (scfg_simplify_relation_tree + (utt.relation_tree utt 'Syntax)) outfd) + (pprintf (utt.relation_tree utt 'Syntax) outfd)) + (format outfd "\n") + utt) + +;;; +;;; Redefine what happens to utterances during text to speech +;;; +(set! tts_hooks (list find-parse output-parse)) + +(define (main) + (get_options) + + ;; Load the grammar + (set! scfg_grammar (load grammarfile t)) + + ;; Parse the files + (mapcar + (lambda (f) (tts_file f)) + text_files)) + +;;; Do the work +(main) diff --git a/examples/songs/Makefile b/examples/songs/Makefile new file mode 100644 index 0000000..c3623c8 --- /dev/null +++ b/examples/songs/Makefile @@ -0,0 +1,44 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +TOP=../.. +DIRNAME=examples/songs +BUILD_DIRS= +ALL_DIRS=$(BUILD_DIRS) + +SONGS = america1.xml america2.xml america3.xml america4.xml \ + daisy.xml doremi.xml lochlomond.xml \ + spice1.xml spice2.xml spice3.xml spice4.xml +FILES=Makefile $(SONGS) + +include $(TOP)/config/common_make_rules + diff --git a/examples/songs/america1.xml b/examples/songs/america1.xml new file mode 100644 index 0000000..e52e987 --- /dev/null +++ b/examples/songs/america1.xml @@ -0,0 +1,16 @@ + + + +oh +beautiful +for +spacious +skies +for +amber +waves +of +grain + diff --git a/examples/songs/america2.xml b/examples/songs/america2.xml new file mode 100644 index 0000000..5642df1 --- /dev/null +++ b/examples/songs/america2.xml @@ -0,0 +1,16 @@ + + + +oh +beautiful +for +spacious +skies +for +amber +waves +of +grain + diff --git a/examples/songs/america3.xml b/examples/songs/america3.xml new file mode 100644 index 0000000..67e036c --- /dev/null +++ b/examples/songs/america3.xml @@ -0,0 +1,16 @@ + + + +oh +beautiful +for +spacious +skies +for +amber +waves +of +grain + diff --git a/examples/songs/america4.xml b/examples/songs/america4.xml new file mode 100644 index 0000000..8f9e021 --- /dev/null +++ b/examples/songs/america4.xml @@ -0,0 +1,16 @@ + + + +oh +beautiful +for +spacious +skies +for +amber +waves +of +grain + diff --git a/examples/songs/daisy.xml b/examples/songs/daisy.xml new file mode 100644 index 0000000..48682e1 --- /dev/null +++ b/examples/songs/daisy.xml @@ -0,0 +1,49 @@ + + + +Daisy +Daisy +Give +me +your +answer +do + +I'm +half +crazy +all +for +the +love +of +you + +we +don't +need +a +stylish +marriage +I +can't +afford +a +carriage + +but +you'll +look +sweet +upon +the +seat +of +a +bicycle +built +for +two + diff --git a/examples/songs/doremi.xml b/examples/songs/doremi.xml new file mode 100644 index 0000000..7968a72 --- /dev/null +++ b/examples/songs/doremi.xml @@ -0,0 +1,14 @@ + + + +doe +ray +me +fah +sew +lah +tee +doe + diff --git a/examples/songs/lochlomond.xml b/examples/songs/lochlomond.xml new file mode 100644 index 0000000..b4068e6 --- /dev/null +++ b/examples/songs/lochlomond.xml @@ -0,0 +1,47 @@ + + + +Oh +you'll +take +the +high +road +and +I'll +take +the +low +road + +and +I'll +be +in +Scotland +before +ye + +but +me +and +my +true +love + +will +never +meet +again +on +the +bonnie +bonnie +banks +of +lock +lahman + + diff --git a/examples/songs/spice1.xml b/examples/songs/spice1.xml new file mode 100644 index 0000000..3f319af --- /dev/null +++ b/examples/songs/spice1.xml @@ -0,0 +1,29 @@ + + + +if +you +wanna +be +my +lover + +you +gotta +get +with +my +friends + +make +it +last +forever + +friendship +never +in +n + diff --git a/examples/songs/spice2.xml b/examples/songs/spice2.xml new file mode 100644 index 0000000..0faf9e2 --- /dev/null +++ b/examples/songs/spice2.xml @@ -0,0 +1,31 @@ + + + +if +you +wanna +be +my +lover + +you +gotta +get +with +my + +gotta +get +with +my +friends + +forever + +friendship +never +in +n + diff --git a/examples/songs/spice3.xml b/examples/songs/spice3.xml new file mode 100644 index 0000000..6ad3865 --- /dev/null +++ b/examples/songs/spice3.xml @@ -0,0 +1,29 @@ + + + +if +you +wanna +be +my +lover + +you +gotta +get +with +my +friends + +make +it +last +forever + +friendship +never +in +n + diff --git a/examples/songs/spice4.xml b/examples/songs/spice4.xml new file mode 100644 index 0000000..096e70e --- /dev/null +++ b/examples/songs/spice4.xml @@ -0,0 +1,29 @@ + + + +if +you +wanna +be +my +lover + +you +gotta +get +with +my +friends + +make +it +last +forever + +friendship +never +in +n + diff --git a/examples/speech_pm_1.0.tar b/examples/speech_pm_1.0.tar new file mode 100644 index 0000000000000000000000000000000000000000..e07336195be78a4af592ef07d4fab023b5c2aa8d GIT binary patch literal 51202 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 Explicit tts mode. + -o ofile File to save waveform (default is stdout). + -otype Output waveform type: ulaw, snd, aiff, riff, nist etc. + (default is riff) + -F Output frequency. + -scale Volume factor + -eval File or lisp s-expression to be evaluated before + synthesis. +") + (quit)) + +;;; No gc messages +(gc-status nil) + +;;; Default argument values +(defvar outfile "-") +(defvar output_type 'riff) +(defvar frequency nil) ;; default is no frequency modification +(defvar text_files '("-")) +(defvar mode nil) +(defvar volume "1.0") +(defvar wavefiles nil) + +;;; Get options +(define (get_options) + + (let ((files nil) + (o argv)) + (if (or (member_string "-h" argv) + (member_string "-help" argv) + (member_string "--help" argv) + (member_string "-?" argv)) + (text2wave_help)) + (while o + (begin + (cond + ((string-equal "-o" (car o)) + (if (not (cdr o)) + (text2wave_error "no output file specified")) + (set! outfile (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-otype" (car o)) + (if (not (cdr o)) + (text2wave_error "no output filetype specified")) + (set! output_type (car (cdr o))) + (set! o (cdr o))) + ((or (string-equal "-f" (car o)) ;; for compatibility and memory loss + (string-equal "-F" (car o))) + (if (not (cdr o)) + (text2wave_error "no frequency specified")) + (set! frequency (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-scale" (car o)) + (if (not (cdr o)) + (text2wave_error "no scale specified")) + (set! volume (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-mode" (car o)) + (if (not (cdr o)) + (text2wave_error "no mode specified")) + (set! mode (car (cdr o))) + (set! o (cdr o))) + ((string-equal "-eval" (car o)) + (if (not (cdr o)) + (text2wave_error "no file specified to load")) + (if (string-matches (car (cdr o)) "^(.*") + (eval (read-from-string (car (cdr o)))) + (load (car (cdr o)))) + (set! o (cdr o))) + (t + (set! files (cons (car o) files)))) + (set! o (cdr o)))) + (if files + (set! text_files (reverse files))))) + +(define (text2wave_error message) + (format stderr "%s: %s\n" "text2wave" message) + (text2wave_help)) + +(define (save_record_wave utt) +"Saves the waveform and records its so it can be joined into a +a single waveform at the end." + (let ((fn (make_tmp_filename))) + (utt.save.wave utt fn) + (set! wavefiles (cons fn wavefiles)) + utt)) + +(define (combine_waves) + "Join all the waves together into the desired output file +and delete the intermediate ones." + (let ((wholeutt (utt.synth (Utterance Text "")))) + (mapcar + (lambda (d) + (utt.import.wave wholeutt d t) + (delete-file d)) + (reverse wavefiles)) + (if frequency + (utt.wave.resample wholeutt (parse-number frequency))) + (if (not (equal? volume "1.0")) + (begin + (utt.wave.rescale wholeutt (parse-number volume)))) + (utt.save.wave wholeutt outfile output_type) + )) + +;;; +;;; Redefine what happens to utterances during text to speech +;;; +(set! tts_hooks (list utt.synth save_record_wave)) + +(define (main) + (get_options) + + ;; do the synthesis + (mapcar + (lambda (f) + (if mode + (tts_file f mode) + (tts_file f (tts_find_text_mode f auto-text-mode-alist)))) + text_files) + + ;; Now put the waveforms together at again + (combine_waves) +) + +;;; Do the work +(main) diff --git a/examples/th-mode.scm b/examples/th-mode.scm new file mode 100644 index 0000000..a83127f --- /dev/null +++ b/examples/th-mode.scm @@ -0,0 +1,180 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; This contains an example of how to use Festival with a +;;; a talking head. This is a combination of various answers given +;;; to different groups who have been using Festival with talking +;;; heads +;;; +;;; This version has not actually been used by any talking head +;;; but just serves as an example. +;;; +;;; The basic mode produces /tmp/th.ph (phone info) and /tmp/th.com +;;; (commands: smile frown) for each utterance in the file. These +;;; files are produced and the program makefaces called before +;;; waveform synthesis for each utterance. The play command then +;;; calls xanim with the generate animation and waveform. +;;; +;;; There are probabaly better way to do this. Using Festival as a +;;; server to generate the phone and command files might +;;; be more reasonable. Note festival not supports the returning +;;; of Lisp data to the client as well as waveform data. +;;; In that case you'd want to change th_output_info to use +;;; the send_cleint command and package the phone info into an +;;; s-expression. + +(defvar th-prepare-prog "makefaces" + " A program that takes phones and other data and produces the +animated face.") + +(define (utt.save.phonedata utt filename) +"(utt.save.mydata UTT FILE) + Saves phone, duration, stress, F0 word pos." + (let ((fd (fopen filename "w"))) + (mapcar + (lambda (seg) + (format fd "%s %2.4f %s %s" + (item.feat seg "name") + (item.feat seg "segment_duration") + (item.feat seg "R:SylStructure.parent.stress") + (item.feat seg "R:Target.daughter1.name")) + ;; output word name and part of speech if start of word + (if (and (not (item.relation.next seg "SylStructure")) + (not (item.next + (item.relation.parent seg "SylStructure")))) + (format fd " %s %s" + (item.feat seg "R:SylStructure.parent.parent.name") + (item.feat seg "R:SylStructure.parent.parent.pos"))) + (format fd "\n")) + (utt.relation.items utt 'Segment)) + (fclose fd) + utt)) + +(define (utt.save.commands utt filename) +"(utt.save.commands UTT FILE) + Save commands with time stamps. Commands are those tokens which +start and end with an asterisk." + (let ((fd (fopen filename "w"))) + (format fd "#\n") + (mapcar + (lambda (tok_item) + (if (string-matches (item.name tok_item) "\\*.+\\*") + (format fd "%2.4f 100 %s\n" + (find_com_time utt tok_item) + (item.name tok_item)))) + (utt.relation.items utt 'Token)) + (fclose fd) + utt)) + +(define (find_com_time utt tok_item) +"Returns time of tok_item. Looks backward for first token that +is related to a word and returns the end time of that word." + (cond + ((item.daughtern tok_item) + (item.feat (item.daughtern tok_item) "word_end")) + ((not (item.prev tok_item)) ;; start of stream + 0.0) + (t + (find_com_time utt (item.prev tok_item))))) + +(define (th_output_info utt) + "(th_output_info utt) +This is called after linguistic analysis but before waveform synthesis. +It collects the phone and duration data and also any th commands +found in the utterance. The file names are then passed to some +external program which will process them for the talking head." + (set! th-current-file "/tmp/th") ;; this should have a process id in it + (utt.save.phonedata utt (string-append th-current-file ".ph")) + (utt.save.commands utt (string-append th-current-file ".com")) + ;; It would be good to background this process as long as you + ;; resync at play time + (system (format nil "%s %s %s" + th-prepare-prog + (string-append th-current-file ".ph") + (string-append th-current-file ".ph"))) + utt) + +;;; +;;; Define a new text mode for talking heads +;;; + +(define (th_init_func) + "Called on starting talking head text mode." + (set! th_previous_t2w_func token_to_words) + (set! th_previous_after_analysis_hooks after_analysis_hooks) + (set! after_analysis_hooks (list th_output_info)) + (set! english_token_to_words th_token_to_words) + (set! token_to_words th_token_to_words) + + ;; We assume the prepare talking head program generates a movie + ;; that can be played by something, so we redefie the audio + ;; player to play the generated animation and waveform. + (set! th_previous_Parameter Parameter) + (audio_mode 'sync) ;; ensure new Audio command gets passed to new audiosp + (Parameter.set 'Audio_Required_Format 'riff) + (Parameter.set 'Audio_Command "xanim /tmp/th.anime $FILE") + (Parameter.set 'Audio_Method 'Audio_Command) + (audio_mode 'async) +) + +(define (th_exit_func) + "Called on exit talking head text mode." + (set! token_to_words th_previous_t2w_func) + (set! english_token_to_words th_previous_t2w_func) + (set! after_analysis_hooks th_previous_after_analysis_hooks) + + (audio_mode 'sync) ;; so we can reset the audio + (set! Parameter th_previous_Parameter) +) + +(define (th_token_to_words token name) +"(th_token_to_words TOKEN NAME) +Talking head specific token to word rules." + (cond + ((string-matches name "\\*.*\\*") + ;; Symbols started and ended with an asterisk as treated as commands + ;; and not rendered as speech + nil) + (t + (th_previous_t2w_func token name)))) + +(set! tts_text_modes + (cons + (list + 'th ;; mode name + (list ;; ogimarkup mode params + (list 'init_func th_init_func) + (list 'exit_func th_exit_func))) + tts_text_modes)) + +(provide 'th-mode) diff --git a/examples/tobi.stml b/examples/tobi.stml new file mode 100644 index 0000000..17e2169 --- /dev/null +++ b/examples/tobi.stml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + +I to go on a + . + + wanted to go on a + , +but wanted to go + + + + + + + diff --git a/examples/toksearch.scm b/examples/toksearch.scm new file mode 100644 index 0000000..9e17ec3 --- /dev/null +++ b/examples/toksearch.scm @@ -0,0 +1,109 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A search for token occurrences in buckets of text +;;; +;;; This is only an example to aid you, this actually depends on +;;; the availability of databases we don't have permission to +;;; distribute. + +(set! text_dir "/home/awb/data/text/") + +;;; The databases themselves are identified by a file which names all +;;; the files in that databases. e.g. This expects bin/gutenberg.files +;;; to exists which should contain something like +;;; gutenberg/etext90/bill11.txt +;;; gutenberg/etext90/const11.txt +;;; gutenberg/etext90/getty11.txt + +(set! db_names + '("gutenberg" ;; books from gutenberg 21906570 + "desktopshop" ;; books, documents etc 23090463 + "time" ;; Time Magazine 1990-1994 6770175 + "hutch" ;; Hutchinson Encyclopedia 1715268 + "dicts" ;; Dictionaries and Encyclopedias 4248109 + "stw-ref" ;; Standard Reference libraries 3330448 + "treebank" ;; WSJ articles from PENN treebank 1109895 + "email" ;; awb's email + )) + +;;; Identify the tokens you want extracted +;;; Tokens may be regular expressions +(set! desired_tokens + '(lead wound tear axes Jan bass Nice Begin Chi Colon + St Dr III IV V X VII II "[0-9]+")) + +;;; First pass: to get examples and context for labelling +(set! desired_feats + '(filepos + p.p.p.p.name p.p.p.name p.p.name p.name + name + n.name nn.name n.n.n.name n.n.n.n.name)) +;;; Second: pass to get desried features for tree building +;;; Typically this has to be specific for a particular homograph +;;; so you'll probably want to do multiple second passes one for each +;;; homograph type +;(set! desired_feats +; '(filepos +; lisp_tok_rex +; p.punc +; punc +; n.punc +; pp.cap p.cap n.cap nn.cap +; )) + +(define (tok_search_db dbname) +"Search through DB for named tokens and save found occurrences." + (let ((outfile (string-append text_dir "fullhgs/" dbname ".out"))) + (delete-file outfile) + (mapcar + (lambda (fname) ;; for each file in the database + (extract_tokens ;; call internal function to extract tokens + (string-append text_dir fname) ;; full pathname to extract from + (mapcar ;; list of tokens and features + (lambda (t) ;; to extract + (cons t desired_feats)) + desired_tokens) + outfile)) + (load (string-append text_dir "bin/" dbname ".files") t)) + t)) + +(define (tok_do_all) +"Search all dbs for desired tokens." + (mapcar + (lambda (db) + (print db) + (tok_search_db db)) + db_names) + t) + diff --git a/examples/webdemo.scm b/examples/webdemo.scm new file mode 100644 index 0000000..11bb58c --- /dev/null +++ b/examples/webdemo.scm @@ -0,0 +1,103 @@ +;;; +;;; Sentences presynthesized on demo web page +;;; + +(set! utt1 +(Utterance Text +" +This is a short introduction to the Festival Speech Synthesis System. +Festival was developed by Alan Black and Paul Taylor, at the Centre +for Speech Technology Research, University of Edinburgh. +")) + +(set! utt2 +(Utterance Text +" +Festival currently uses a diphone synthesizer, both +residual excited LPC and PSOLA methods are supported. +The upper levels, duration and intonation, are generated from +statistically trained models, built from databases of natural speech. +The architecture of the system is designed to be flexible, including +various tools, which allow new modules to be added easily. +")) + +(define (make_waves) +"Synthesize the two examples and save them in the desired formats" + (Synth utt1) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave utt1 "intro.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave utt1 "intro.au") + + (Synth utt2) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave utt2 "intro2.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave utt2 "intro2.au") +) + +(set! welsh1 +(Utterance Text +"Dwi'n gallu llefaru pob llinell heb atal, oherwydd does dim tafod gyda fi.")) + +(define (make_welsh) + (voice_welsh_hl) + (Synth welsh1) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave welsh1 "welsh1.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave welsh1 "welsh1.au")) + +(set! spanish1 +(Utterance Text +"m'uchos 'a~nos despu'es, fr'ente al pelot'on de fusilami'ento, el +coron'el aureli'ano buend'ia hab'ia de record'ar de aqu'el d'ia +lej'ano, en que su p'adre lo llev'o a conoc'er el hi'elo.")) + +(define (make_spanish) + (voice_spanish_el) + (Synth spanish1) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave spanish1 "spanish1.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave spanish1 "spanish1.au")) + + +(set! utt_pos (Utterance Text +"My cat who lives dangerously had nine lives. ")) + +(set! utt_Bdi (Utterance Text +"He wanted to go for a drive in.")) +(set! utt_Bditc (Utterance Text +"He wanted to go for a drive in the country.")) + +(define (make_others) + (Synth utt_pos) + (Synth utt_Bdi) + (Synth utt_Bditc) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave utt_pos "cat.wav") + (utt.save.wave utt_Bdi "Bdi.wav") + (utt.save.wave utt_Bditc "Bditc.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave utt_pos "cat.au") + (utt.save.wave utt_Bdi "Bdi.au") + (utt.save.wave utt_Bditc "Bditc.au")) + +(set! utt_diph (Utterance Text +"This is a short introduction to the Festival Speech Synthesis System.")) +(set! utt_sucs (Utterance Text +"This is a short introduction to the Festival Speech Synthesis System.")) + +(define (make_diphsbs) + (Synth utt_diph) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave utt_diph "diph1.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave utt_diph "diph1.au") + (voice_gsw_450) + (Synth utt_sucs) + (Parameter.set 'Wavefiletype 'riff) + (utt.save.wave utt_sucs "sbs1.wav") + (Parameter.set 'Wavefiletype 'ulaw) + (utt.save.wave utt_sucs "sbs1.au")) diff --git a/festival-2.1-release.tar.gz b/festival-2.1-release.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ddd0708aba9837442b905ad44d0ac940d8bc206c GIT binary patch literal 787313 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�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 rq?-9ahMv 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
  • .*$//' > \"" + tmpfile ".out\"")) + (set! manual-section (load (string-append tmpfile ".out") t)) + (cond + ((not manual-section) + (string-append "No section called: " section)) + (t + (send-url-to-netscape (string-append manual-url (car manual-section))) + (delete-file tmpfile) + (delete-file (string-append tmpfile ".out")) + "Sent manual reference url to netscape.")))))) + +(provide 'festdoc) + + + + diff --git a/lib/festival.el b/lib/festival.el new file mode 100644 index 0000000..c1899f6 --- /dev/null +++ b/lib/festival.el @@ -0,0 +1,282 @@ +;;; +;;; File: festival.el +;;; Emacs Lisp +;;; +;;; Alan W Black CSTR (awb@cstr.ed.ac.uk) June 1996 +;;; +;;; Provide an emacs mode for interfacing to the festival speech +;;; synthesizer system +;;; +;;; I've looked at many examples from the emacs Lisp directory +;;; copying relevant bits from here and there, so this can only +;;; reasonably inherit the GNU licence (GPL) +;;; +;;; Setup: +;;; In your .emacs add the following 2 lines to get a Say menu: +;;; +;;; (autoload 'say-minor-mode "festival" "Menu for using Festival." t) +;;; (say-minor-mode t) +;;; (setq auto-mode-alist +;;; (append '(("\\.festivalrc$" . scheme-mode)) auto-mode-alist)) +;;; +;;; The following gives you pretty colors in emacs-19 if you are into +;;; such things +;;; ;;; Some colors for scheme mode +;;; (hilit-set-mode-patterns +;;; '(scheme-mode) +;;; '( +;;; (";.*" nil comment) +;;; (hilit-string-find ?\\ string) +;;; ("^\\s *(def\\s +" "\\()\\|nil\\)" defun) +;;; ("^\\s *(defvar\\s +\\S +" nil decl) +;;; ("^\\s *(set\\s +\\S +" nil decl) +;;; ("^\\s *(defconst\\s +\\S +" nil define) +;;; ("^\\s *(\\(provide\\|require\\).*$" nil include) +;;; ("(\\(let\\*?\\|cond\\|if\\|or\\|and\\|map\\(car\\|concat\\)\\|prog[n1*]?\\|while\\|lambda\\|function\\|Parameter\\|set\\([qf]\\|car\\|cdr\\)?\\|nconc\\|eval-when-compile\\|condition-case\\|unwind-protect\\|catch\\|throw\\|error\\)[ \t\n]" 1 keyword))) +;;; +;;; +;;;-------------------------------------------------------------------- +;;; Copyright (C) Alan W Black 1996 +;;; This code is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY. No author or distributor accepts +;;; responsibility to anyone for the consequences of using this code +;;; or for whether it serves any particular purpose or works at all, +;;; unless explicitly stated in a written agreement. +;;; +;;; Everyone is granted permission to copy, modify and redistribute +;;; this code, but only under the conditions described in the GNU +;;; Emacs General Public License. A copy of this license is +;;; distrubuted with GNU Emacs so you can know your rights and +;;; responsibilities. It should be in a file named COPYING. Among +;;; other things, the copyright notice and this notice must be +;;; preserved on all copies. +;;;-------------------------------------------------------------------- +;;; + +(defvar festival-program-name "festival") + +(defvar festival-process nil) + +(defvar festival-tmp-file + (format "/tmp/festival-emacs-tmp-%s" (user-real-login-name)) + "Filename to save input for Festivial.") + +(defun festival-fast () + (interactive) + (festival-send-command '(Parameter.set 'Duration.Stretch 0.8))) +(defun festival-slow () + (interactive) + (festival-send-command '(Parameter.set 'Duration.Stretch 1.2))) +(defun festival-ndur () + (interactive) + (festival-send-command '(Parameter.set 'Duration.Stretch 1.0))) +(defun festival-intro () + (interactive) + (festival-send-command '(intro))) + +(defun festival-gsw () + (interactive) + (festival-send-command '(voice_gsw_diphone))) +(defun festival-rab () + (interactive) + (festival-send-command '(voice_rab_diphone))) +(defun festival-ked () + (interactive) + (festival-send-command '(voice_ked_diphone))) +(defun festival-kal () + (interactive) + (festival-send-command '(voice_kal_diphone))) +(defun festival-don () + (interactive) + (festival-send-command '(voice_don_diphone))) +(defun festival-welsh () + (interactive) + (festival-send-command '(voice_welsh_hl))) +(defun festival-spanish () + (interactive) + (festival-send-command '(voice_spanish_el))) + +(defun festival-say-string (string) + "Send string to festival and have it said" + (interactive "sSay: ") + (festival-start-process) + (process-send-string festival-process + (concat "(SayText " (format "%S" string) ") +"))) + +(defun festival-send-command (cmd) + "Send command to festival" + (interactive "px") + (festival-start-process) + (process-send-string festival-process (format "%S +" cmd))) + +(defun festival-process-status () + (interactive) + (if festival-process + (message (format "Festival process status: %s" + (process-status festival-process))) + (message (format "Festival process status: NONE")))) + +(defun festival-start-process () + "Check status of process and start it if necessary" + (interactive ) + (let ((process-connection-type t)) + (if (and festival-process + (eq (process-status festival-process) 'run)) + 't + ;;(festival-kill-festival t) + (message "Starting new synthesizer process...") + (sit-for 0) + (setq festival-process + (start-process "festival" (get-buffer-create "*festival*") + festival-program-name))) + )) + +(defun festival-kill-process () + "Kill festival sub-process" + (interactive) + (if festival-process + (kill-process festival-process)) + (setq festival-process nil) + (message "Festival process killed")) + +(defun festival-send-string (string) + "Send given string to fesitval process." + (interactive) + (festival-start-process) + (process-send-string festival-process string)) + +(defun festival-say-region (reg-start reg-end) + "Send given region to festival for saying. This saves the region +as a file in /tmp and then tells festival to say that file. The +major mode is *not* passed as text mode name to Festival." + (interactive "r") + (write-region reg-start reg-end festival-tmp-file) + (festival-send-command (list 'tts festival-tmp-file nil))) + +(defun festival-say-buffer () + "Send given region to festival for saying. This saves the region +as a file in /tmp and then tells festival to say that file. The +major-mode is passed as a text mode to Festival." + (interactive) + (write-region (point-min) (point-max) festival-tmp-file) + ;; Because there may by sgml-like sub-files mentioned + ;; ensure festival tracks the buffer's default-directory + (festival-send-command (list 'cd (expand-file-name default-directory))) + (if (equal "-mode" (substring (format "%S" major-mode) -5 nil)) + (if (equal "sgml" (substring (format "%S" major-mode) 0 -5)) + (festival-send-command + (list 'tts festival-tmp-file "sable")) + (festival-send-command + (list 'tts festival-tmp-file + (substring (format "%S" major-mode) 0 -5)))) + (festival-send-command (list 'tts festival-tmp-file nil)))) + +;; +;; say-minor-mode provides a menu offering various speech synthesis commands +;; +(defvar say-minor-mode nil) + +(defun say-minor-mode (arg) + "Toggle say minor mode. +With arg, turn say-minor-mode on iff arg is positive." + (interactive "P") + (setq say-minor-mode + (if (if (null arg) (not say-minor-mode) + (> (prefix-numeric-value arg) 0)) + t)) + (force-mode-line-update)) + +(setq say-params-menu (make-sparse-keymap "Pitch/Duration")) +(fset 'say-params-menu (symbol-value 'say-params-menu)) +(define-key say-params-menu [say-fast] '("Fast" . festival-fast)) +(define-key say-params-menu [say-slow] '("Slow" . festival-slow)) +(define-key say-params-menu [say-ndur] '("Normal Dur" . festival-ndur)) + +(setq say-lang-menu (make-sparse-keymap "Select language")) +(fset 'say-lang-menu (symbol-value 'say-lang-menu)) +(define-key say-lang-menu [say-lang-spain1] '("Spanish el" . festival-spanish)) +(define-key say-lang-menu [say-lang-welsh1] '("Welsh hl" . festival-welsh)) +(define-key say-lang-menu [say-lang-eng5] '("English gsw" . festival-gsw)) +(define-key say-lang-menu [say-lang-eng4] '("English don" . festival-don)) +(define-key say-lang-menu [say-lang-eng3] '("English rab" . festival-rab)) +(define-key say-lang-menu [say-lang-eng2] '("English ked" . festival-ked)) +(define-key say-lang-menu [say-lang-eng1] '("English kal" . festival-kal)) +;(define-key say-params-menu [say-set-dur-stretch] +; '("Set Duration Stretch" . festival-set-dur-stretch)) +;(define-key say-params-menu [say-high] '("High" . festival-high)) +;(define-key say-params-menu [say-low] '("Low" . festival-low)) +;(define-key say-params-menu [say-npit] '("Normal Pitch" . festival-npit)) +;(define-key say-params-menu [say-set-pitch-stretch] +; '("Set Pitch Stretch" . festival-set-pitch-stretch)) + +(setq say-minor-mode-map (make-sparse-keymap)) +(setq say-menu (make-sparse-keymap "SAY")) +(define-key say-minor-mode-map [menu-bar SAY] (cons "Say" say-menu)) +(define-key say-minor-mode-map [menu-bar SAY festival-intro] '("Festival Intro" . festival-intro)) +(define-key say-minor-mode-map [menu-bar SAY festival-process-status] '("Festival status" . festival-process-status)) +(define-key say-minor-mode-map [menu-bar SAY festival-kill-process] '("Kill Festival" . festival-kill-process)) +(define-key say-minor-mode-map [menu-bar SAY festival-start-process] '("(Re)start Festival" . festival-start-process)) +;;(define-key say-menu [separator-process] '("--")) +;;(define-key say-menu [params] '("Pitch/Durations" . say-params-menu)) +(define-key say-menu [separator-buffers] '("--")) +(define-key say-menu [festival-send-command] '("Festival eval command" . festival-send-command)) +(define-key say-menu [say-lang-menu] '("Select language" . say-lang-menu)) +(define-key say-menu [festival-say-buffer] '("Say buffer" . festival-say-buffer)) +(define-key say-menu [festival-say-region] '("Say region" . festival-say-region)) + + +(setq minor-mode-map-alist + (cons + (cons 'say-minor-mode say-minor-mode-map) + minor-mode-map-alist)) + +(or (assq 'say-minor-mode minor-mode-alist) + (setq minor-mode-alist + (cons '(say-minor-mode "") minor-mode-alist))) + +;;; +;;; A FESTIVAL inferior mode (copied from prolog.el) +;;; +(defvar inferior-festival-mode-map nil) + +(defun inferior-festival-mode () + "Major mode for interacting with an inferior FESTIVAL process. + +The following commands are available: +\\{inferior-festival-mode-map} + +Entry to this mode calls the value of `festival-mode-hook' with no arguments, +if that value is non-nil. Likewise with the value of `comint-mode-hook'. +`festival-mode-hook' is called after `comint-mode-hook'. + +You can send text to the inferior FESTIVAL from other buffers +using the commands `send-region', `send-string' + +Return at end of buffer sends line as input. +Return not at end copies rest of line to end and sends it. +\\[comint-kill-input] and \\[backward-kill-word] are kill commands, imitating normal Unix input editing. +\\[comint-interrupt-subjob] interrupts the shell or its current subjob if any. +\\[comint-stop-subjob] stops. \\[comint-quit-subjob] sends quit signal." + (interactive) + (require 'comint) + (comint-mode) + (setq major-mode 'inferior-festival-mode + mode-name "Inferior FESTIVAL" + comint-prompt-regexp "^festival> ") + (if inferior-festival-mode-map nil + (setq inferior-festival-mode-map (copy-keymap comint-mode-map)) + (festival-mode-commands inferior-festival-mode-map)) + (use-local-map inferior-festivalr-mode-map) + (run-hooks 'festival-mode-hook)) + +;;;###autoload +(defun run-festival () + "Run an inferior FESTIVAL process, input and output via buffer *festival*." + (interactive) + (require 'comint) + (switch-to-buffer (make-comint "festival" festival-program-name)) + (inferior-festival-mode)) + +(provide 'festival) diff --git a/lib/festival.scm b/lib/festival.scm new file mode 100644 index 0000000..ead1498 --- /dev/null +++ b/lib/festival.scm @@ -0,0 +1,633 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; General Festival Scheme specific functions +;;; Including definitions of various standard variables. + +;; will be set automatically on start-up +(defvar festival_version "unknown" + "festival_version + A string containing the current version number of the system.") + +;; will be set automatically on start-up +(defvar festival_version_number '(x x x) + "festival_version_number + A list of major, minor and subminor version numbers of the current + system. e.g. (1 0 12).") + +(define (apply_method method utt) +"(apply_method METHOD UTT) +Apply the appropriate function to utt defined in parameter." + (let ((method_val (Parameter.get method))) + (cond + ((null method_val) + nil) ;; should be an error, but I'll let you off at present + ((and (symbol? method_val) (symbol-bound? method_val)) + (apply (symbol-value method_val) (list utt))) + ((member (typeof method_val) '(subr closure)) + (apply method_val (list utt))) + (t ;; again is probably an error + nil)))) + +(define (require_module l) + "(require_module l) +Check that certain compile-time modules are included in this installation. +l may be a single atom or list of atoms. Each item in l must appear in +*modules* otherwise an error is throw." + (if (consp l) + (mapcar require_module l) + (if (not (member_string l *modules*)) + (error (format nil "module %s required, but not compiled in this installation\n" l)))) + t) + +;;; Feature Function Functions +(define (utt.features utt relname func_list) +"(utt.features UTT RELATIONNAME FUNCLIST) + Get vectors of feature values for each item in RELATIONNAME in UTT. + [see Features]" + (mapcar + (lambda (s) + (mapcar (lambda (f) (item.feat s f)) func_list)) + (utt.relation.items utt relname))) + +(define (utt.type utt) +"(utt.type UTT) + Returns the type of UTT." + (intern (utt.feat utt 'type))) + +(define (utt.save.segs utt filename) +"(utt.save.segs UTT FILE) + Save segments of UTT in a FILE in xlabel format." + (let ((fd (fopen filename "w"))) + (format fd "#\n") + (mapcar + (lambda (info) + (format fd "%2.4f 100 %s\n" (car info) (car (cdr info)))) + (utt.features utt 'Segment '(segment_end name))) + (fclose fd) + utt)) + +(define (utt.save.words utt filename) +"(utt.save.words UTT FILE) + Save words of UTT in a FILE in xlabel format." + (let ((fd (fopen filename "w"))) + (format fd "#\n") + (mapcar + (lambda (info) + (format fd "%2.4f 100 %s\n" (car info) (car (cdr info)))) + (utt.features utt 'Word '(word_end name))) + (fclose fd) + utt)) + +(define (utt.resynth labfile f0file) +"(utt.resynth LABFILE F0FILE) +Resynthesize an utterance from a label file and F0 file (in any format +supported by the Speech Tool Library). This loads, synthesizes and +plays the utterance." + (let (u f0 f0_item) + (set! u (Utterance SegF0)) ; need some u to start with + (utt.relation.load u 'Segment labfile) + (utt.relation.create u 'f0) + (set! f0 (track.load f0file)) + (set! f0_item (utt.relation.append u 'f0)) + (item.set_feat f0_item "name" "f0") + (item.set_feat f0_item "f0" f0) + + ;; emulabel may have flipped pau to H# + (mapcar + (lambda (s) + (cond + ((string-matches (item.name s) "[hH]#") + (item.set_feat s "name" "pau")) + ((string-matches (item.name s) "#.*") + (item.set_feat s "name" (string-after (item.name s) "#"))))) + (utt.relation.items u 'Segment)) + + (Wave_Synth u) + (utt.play u) + u)) + +(define (utt.relation.present utt relation) +"(utt.relation.present UTT RELATIONNAME) +Returns t if UTT caontains a relation called RELATIONNAME, nil otherwise." + (if (member_string relation (utt.relationnames utt)) + t + nil)) + +(define (utt.relation.leafs utt relation) +"(utt.relation.leafs UTT RELATIONNAME) +Returns a list of all the leafs in this relation." + (let ((leafs nil)) + (mapcar + (lambda (i) + (if (not (item.down (item.relation i relation))) + (set! leafs (cons i leafs)))) + (utt.relation.items utt relation)) + (reverse leafs))) + +(define (utt.relation.first utt relation) +"(utt.relation.first UTT RELATIONNAME) +Returns a the first item in this relation." + (utt.relation utt relation)) + +(define (utt.relation.last utt relation) +"(utt.relation.last UTT RELATIONNAME) +Returns a the last item in this relation." + (let ((i (utt.relation.first utt relation))) + (while (item.next i) + (set! i (item.next i))) + i)) + +(define (item.feat.present item feat) + "(item.feat.present item feat) +nil if feat doesn't existing in this item, non-nil otherwise." + (and item (assoc_string feat (item.features item)))) + +(define (item.relation.append_daughter parent relname daughter) +"(item.relation.append_daughter parent relname daughter) +Make add daughter to parent as a new daughter in relname." + (item.append_daughter (item.relation parent relname) daughter)) + +(define (item.relation.insert si relname newsi direction) +"(item.relation.insert si relname newsi direction) +Insert newsi in relation relname with respect to direction. If +direction is ommited after is assumed, valid directions are after +before, above and below. Note you should use +item.relation.append_daughter for tree adjoining. newsi maybe +a item itself of a LISP description of one." + (item.insert + (item.relation si relname) + newsi + direction)) + +(define (item.relation.daughters parent relname) + "(item.relation.daughters parent relname) +Return a list of all daughters of parent by relname." + (let ((d1 (item.daughter1 (item.relation parent relname))) + (daughters)) + (while d1 + (set! daughters (cons d1 daughters)) + (set! d1 (item.next d1))) + (reverse daughters))) + +(define (item.daughters p) + "(item.daughters parent) +Return a list of all daughters of parent." + (item.relation.daughters p (item.relation.name p))) + +(define (item.relation.parent si relname) + "(item.relation.parent item relname) +Return the parent of this item in this relation." + (item.parent (item.relation si relname))) + +(define (item.relation.daughter1 si relname) + "(item.relation.daughter1 item relname) +Return the first daughter of this item in this relation." + (item.daughter1 (item.relation si relname))) + +(define (item.relation.daughter2 si relname) + "(item.relation.daughter2 item relname) +Return the second daughter of this item in this relation." + (item.daughter2 (item.relation si relname))) + +(define (item.relation.daughtern si relname) + "(item.relation.daughtern item relname) +Return the final daughter of this item in this relation." + (item.daughtern (item.relation si relname))) + +(define (item.relation.next si relname) + "(item.relation.next item relname) +Return the next item in this relation." + (item.next (item.relation si relname))) + +(define (item.relation.prev si relname) + "(item.relation.prev item relname) +Return the previous item in this relation." + (item.prev (item.relation si relname))) + +(define (item.relation.first si relname) + "(item.relation.first item relname) +Return the most previous item from this item in this relation." + (let ((n (item.relation si relname))) + (while (item.prev n) + (set! n (item.prev n))) + n)) + +(define (item.leafs si) + "(item.relation.leafs item relname) +Return a list of the leafs of this item in this relation." + (let ((ls nil) + (pl (item.first_leaf si)) + (ll (item.next_leaf (item.last_leaf si)))) + (while (and pl (not (equal? pl ll))) + (set! ls (cons pl ls)) + (set! pl (item.next_leaf pl))) + (reverse ls))) + +(define (item.relation.leafs si relname) + "(item.relation.leafs item relname) +Return a list of the leafs of this item in this relation." + (item.leafs (item.relation si relname))) + +(define (item.root s) + "(item.root s) +Follow parent link until s has no parent." + (cond + ((item.parent s) + (item.root (item.parent s))) + (t s))) + +(define (item.parent_to s relname) + "(item.parent_to s relname) +Find the first ancestor of s in its current relation that is also in +relname. s is treated as an ancestor of itself so if s is in relname +it is returned. The returned value is in will be in relation relname +or nil if there isn't one." + (cond + ((null s) s) + ((member_string relname (item.relations s)) + (item.relation s relname)) + (t (item.parent_to (item.parent s) relname)))) + +(define (item.daughter1_to s relname) + "(item.daughter1_to s relname) +Follow daughter1 links of s in its current relation until an item +is found that is also in relname, is s is in relname it is returned. +The return item is returned in relation relname, or nil if there is +nothing in relname." + (cond + ((null s) s) + ((member_string relname (item.relations s)) (item.relation s relname)) + (t (item.daughter1_to (item.daughter1 s) relname)))) + +(define (item.daughtern_to s relname) + "(item.daughter1_to s relname) +Follow daughtern links of s in its current relation until an item +is found that is also in relname, is s is in relname it is returned. +The return item is returned in relation relname, or nil if there is +nothing in relname." + (cond + ((null s) s) + ((member_string relname (item.relations s)) (item.relation s relname)) + (t (item.daughtern_to (item.daughtern s) relname)))) + +(define (item.name s) +"(item.name ITEM) + Returns the name of ITEM. [see Accessing an utterance]" + (item.feat s "name")) + +(define (utt.wave utt) + "(utt.wave UTT) +Get waveform from wave (R:Wave.first.wave)." + (item.feat (utt.relation.first utt "Wave") "wave")) + +(define (utt.wave.rescale . args) + "(utt.wave.rescale UTT FACTOR NORMALIZE) +Modify the gain of the waveform in UTT by GAIN. If NORMALIZE is +specified and non-nil the waveform is maximized first." + (wave.rescale (utt.wave (nth 0 args)) (nth 1 args) (nth 2 args)) + (nth 0 args)) + +(define (utt.wave.resample utt rate) + "(utt.wave.resample UTT RATE)\ +Resample waveform in UTT to RATE (if it is already at that rate it remains +unchanged)." + (wave.resample (utt.wave utt) rate) + utt) + +(define (utt.import.wave . args) + "(utt.import.wave UTT FILENAME APPEND) +Load waveform in FILENAME into UTT in R:Wave.first.wave. If APPEND +is specified and non-nil append this to the current waveform." + (let ((utt (nth 0 args)) + (filename (nth 1 args)) + (append (nth 2 args))) + (if (and append (member 'Wave (utt.relationnames utt))) + (wave.append (utt.wave utt) (wave.load filename)) + (begin + (utt.relation.create utt 'Wave) + (item.set_feat + (utt.relation.append utt 'Wave) + "wave" + (wave.load filename)))) + utt)) + +(define (utt.save.wave . args) + "(utt.save.wave UTT FILENAME FILETYPE) +Save waveform in UTT in FILENAME with FILETYPE (if specified) or +using global parameter Wavefiletype." + (wave.save + (utt.wave (nth 0 args)) + (nth 1 args) + (nth 2 args)) + (nth 0 args)) + +(define (utt.play utt) + "(utt.play UTT) +Play waveform in utt by current audio method." + (wave.play (utt.wave utt)) + utt) + +(define (utt.save.track utt filename relation feature) + "(utt.save.track utt filename relation feature) +DEPRICATED use trace.save instead." + (format stderr "utt.save.track: DEPRICATED use track.save instead\n") + (track.save + (item.feat + (utt.relation.first utt relation) + feature) + filename) + utt) + +(define (utt.import.track utt filename relation fname) + "(utt.import.track UTT FILENAME RELATION FEATURE_NAME) +Load track in FILENAME into UTT in R:RELATION.first.FEATURE_NAME. +Deletes RELATION if it already exists. (you maybe want to use track.load +directly rather than this legacy function." + (utt.relation.create utt relation) + (item.set_feat + (utt.relation.append utt relation) + fname + (track.load filename)) + utt) + +(define (wagon_predict item tree) +"(wagon_predict ITEM TREE) +Predict with given ITEM and CART tree and return the prediction +(the last item) rather than whole probability distribution." + (car (last (wagon item tree)))) + +(define (phone_is_silence phone) + (member_string + phone + (car (cdr (car (PhoneSet.description '(silences))))))) + +(define (phone_feature phone feat) +"(phone_feature phone feat) +Return the feature for given phone in current phone set, or 0 +if it doesn't exist." + (let ((ph (intern phone))) + (let ((fnames (cadr (assoc 'features (PhoneSet.description)))) + (fvals (cdr (assoc ph (cadr (assoc 'phones (PhoneSet.description))))))) + (while (and fnames (not (string-equal feat (car (car fnames))))) + (set! fvals (cdr fvals)) + (set! fnames (cdr fnames))) + (if fnames + (car fvals) + 0)))) + +(defvar server_max_clients 10 + "server_max_clients +In server mode, the maximum number of clients supported at any one +time. When more that this number of clients attach simulaneous +the last ones are denied access. Default value is 10. +[see Server/client API]") + +(defvar server_port 1314 + "server_port +In server mode the inet port number the server will wait for connects +on. The default value is 1314. [see Server/client API]") + +(defvar server_log_file t + "server_log_file +If set to t server log information is printed to standard output +of the server process. If set to nil no output is given. If set +to anything else the value is used as the name of file to which +server log information is appended. Note this value is checked at +server start time, there is no way a client may change this. +[see Server/client API]") + +(defvar server_passwd nil + "server_passwd +If non-nil clients must send this passwd to the server followed by +a newline before they can get a connection. It would be normal +to set this for the particular server task. +[see Server/client API]") + +(defvar server_access_list '(localhost) + "server_access_list +If non-nil this is the exhaustive list of machines and domains +from which clients may access the server. This is a list of REGEXs +that client host must match. Remember to add the backslashes before +the dots. [see Server/client API]") + +(defvar server_deny_list nil + "server_deny_list +If non-nil this is a list of machines which are to be denied access +to the server absolutely, irrespective of any other control features. +The list is a list of REGEXs that are used to matched the client hostname. +This list is checked first, then server_access_list, then passwd. +[see Server/client API]") + +(define (def_feature_docstring fname fdoc) +"(def_feature_docstring FEATURENAME FEATUREDOC) +As some feature are used directly of stream items with no +accompanying feature function, the features are just values on the feature +list. This function also those features to have an accompanying +documentation string." + (let ((fff (assoc fname ff_docstrings))) + (cond + (fff ;; replace what's already there + (set-cdr! fff fdoc)) + (t + (set! ff_docstrings (cons (cons fname fdoc) ff_docstrings)))) + t)) + +(define (linear_regression item model) + "(linear_regression ITEM MODEL) +Use linear regression MODEL on ITEM. MODEL consists of a list +of features, weights and optional map list. E.g. ((Intercept 100) +(tobi_accent 10 (H* !H*)))." + (let ((intercept (if (equal? 'Intercept (car (car model))) + (car (cdr (car model))) 0)) + (mm (if (equal? 'Intercept (car (car model))) + (cdr model) model))) + (apply + + (cons intercept + (mapcar + (lambda (f) + (let ((ff (item.feat item (car f)))) + (if (car (cdr (cdr f))) + (if (member_string ff (car (cdr (cdr f)))) + (car (cdr f)) + 0) + (* (parse-number ff) (car (cdr f)))))) + mm))))) + +(defvar help + "The Festival Speech Synthesizer System: Help + +Getting Help + (doc ') displays help on + (manual nil) displays manual in local netscape + C-c return to top level + C-d or (quit) Exit Festival +(If compiled with editline) + M-h displays help on current symbol + M-s speaks help on current symbol + M-m displays relevant manula page in local netscape + TAB Command, symbol and filename completion + C-p or up-arrow Previous command + C-b or left-arrow Move back one character + C-f or right-arrow + Move forward one character + Normal Emacs commands work for editing command line + +Doing stuff + (SayText TEXT) Synthesize text, text should be surrounded by + double quotes + (tts FILENAME nil) Say contexts of file, FILENAME should be + surrounded by double quotes + (voice_rab_diphone) Select voice (Britsh Male) + (voice_ked_diphone) Select voice (American Male) +") + +(define (festival_warranty) +"(festival_warranty) + Display Festival's copyright and warranty. [see Copying]" + (format t + (string-append + " The Festival Speech Synthesis System: " + festival_version +" + Centre for Speech Technology Research + University of Edinburgh, UK + Copyright (c) 1996-2010 + All Rights Reserved. + + Permission is hereby granted, free of charge, to use and distribute + this software and its documentation without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of this work, and to + permit persons to whom this work is furnished to do so, subject to + the following conditions: + 1. The code must retain the above copyright notice, this list of + conditions and the following disclaimer. + 2. Any modifications must be clearly marked as such. + 3. Original authors' names are not deleted. + 4. The authors' names are not used to endorse or promote products + derived from this software without specific prior written + permission. + + THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK + DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT + SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE + FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + THIS SOFTWARE. +"))) + +(define (intro) +"(intro) + Synthesize an introduction to the Festival Speech Synthesis System." + (tts (path-append libdir "../examples/intro.text") nil)) + +(define (intro-spanish) +"(intro-spanish) + Synthesize an introduction to the Festival Speech Synthesis System + in spanish. Spanish voice must already be selected for this." + (tts (path-append libdir "../examples/spintro.text") nil)) + +(define (na_play FILENAME) +"(play_wave FILENAME) +Play given wavefile" + (utt.play (utt.synth (eval (list 'Utterance 'Wave FILENAME))))) + +;;; Some autoload commands +(autoload manual-sym "festdoc" "Show appropriate manual section for symbol.") +(autoload manual "festdoc" "Show manual section.") + +(autoload display "display" "Graphically display utterance.") + +(autoload festtest "festtest" "Run tests of Festival.") + +(defvar diphone_module_hooks nil + "diphone_module_hooks + A function or list of functions that will be applied to the utterance + at the start of the diphone module. It can be used to map segment + names to those that will be used by the diphone database itself. + Typical use specifies _ and $ for consonant clusters and syllable + boundaries, mapping to dark ll's etc. Reduction and tap type + phenomena should probabaly be done by post lexical rules though the + distinction is not a clear one.") + +(def_feature_docstring + 'Segment.diphone_phone_name + "Segment.diphone_phone_name + This is produced by the diphone module to contain the desired phone + name for the desired diphone. This adds things like _ if part of + a consonant or $ to denote syllable boundaries. These are generated + on a per voice basis by function(s) specified by diphone_module_hooks. + Identification of dark ll's etc. may also be included. Note this is not + necessarily the name of the diphone selected as if it is not found + some of these characters will be removed and fall back values will be + used.") + +(def_feature_docstring + 'Syllable.stress + "Syllable.stress + The lexical stress of the syllable as specified from the lexicon entry + corresponding to the word related to this syllable.") + +;;; +;;; I tried some tests on the resulting speed both runtime and loadtime +;;; but compiled files don't seem to make any significant difference +;;; +(define (compile_library) + "(compile_library) +Compile all the scheme files in the library directory." + (mapcar + (lambda (file) + (format t "compile ... %s\n" file) + (compile-file (string-before file ".scm"))) + (list + "synthesis.scm" "siod.scm" "init.scm" "lexicons.scm" + "festival.scm" "gsw_diphone.scm" "intonation.scm" "duration.scm" + "pos.scm" "phrase.scm" "don_diphone.scm" "rab_diphone.scm" + "voices.scm" "tts.scm" "festdoc.scm" "languages.scm" "token.scm" + "mbrola.scm" "display.scm" "postlex.scm" "tokenpos.scm" + "festtest.scm" "cslush.scm" "ducs_cluster.scm" "sucs.scm" + "web.scm" "cart_aux.scm" + "lts_nrl.scm" "lts_nrl_us.scm" "email-mode.scm" + "mrpa_phones.scm" "radio_phones.scm" "holmes_phones.scm" + "mrpa_durs.scm" "klatt_durs.scm" "gswdurtreeZ.scm" + "tobi.scm" "f2bf0lr.scm")) + t) + +;;; For mlsa resynthesizer +(defvar mlsa_alpha_param 0.42) +(defvar mlsa_beta_param 0.0) + +(provide 'festival) diff --git a/lib/festtest.scm b/lib/festtest.scm new file mode 100644 index 0000000..345c3cc --- /dev/null +++ b/lib/festtest.scm @@ -0,0 +1,72 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Some basic functions used in tests for Festival +;;; + +(define (test_words text) +"(test_words TEXT) +prints TEXT, Synthesizes TEXT and outputs the words in it." + (format t "Word test: %s\n " text) + (set! utt1 (utt.synth (eval (list 'Utterance 'Text text)))) + (mapcar + (lambda (word) (format t "%s " (car word))) + (utt.features utt1 'Word '(name))) + (format t "\n") + t) + +(define (test_segments text) +"(test_segments TEXT) +prints TEXT, Synthesizes TEXT and outputs the segments in it." + (format t "Segment test: %s\n " text) + (set! utt1 (utt.synth (eval (list 'Utterance 'Text text)))) + (mapcar + (lambda (word) (format t "%s " (car word))) + (utt.features utt1 'Segment '(name))) + (format t "\n") +) + +(define (test_phrases text) +"(test_phrases TEXT) +prints TEXT, Synthesizes TEXT and outputs the words and phrase breaks." + (format t "Phrase test: %s \n " text) + (set! utt1 (utt.synth (eval (list 'Utterance 'Text text)))) + (mapcar + (lambda (phrase) + (mapcar (lambda (w) (format t "%s " (car (car w)))) (cdr phrase)) + (format t "%s\n " (car (car phrase)))) + (utt.relation_tree utt1 'Phrase)) + (format t "\n") + t) + +(provide 'festtest) diff --git a/lib/gswdurtreeZ.scm b/lib/gswdurtreeZ.scm new file mode 100644 index 0000000..4968192 --- /dev/null +++ b/lib/gswdurtreeZ.scm @@ -0,0 +1,947 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A tree to predict zcore durations build from gsw 450 (timit) +;;; doesn't use actual phonemes so it can have better generalizations +;;; + +;; pre Sue's changes to mrpa_phones (on traing data) +;; RMSE 0.79102 Correlation is 0.610184 Mean (abs) Error 0.605081 (0.509517) +;; Post with balance +;; train test spit --stop 19 --balance 16 +;; RMSE 0.841861 Correlation is 0.526064 Mean (abs) Error 0.646614 (0.539288) +;; on training data +;; RMSE 0.784032 Correlation is 0.619165 Mean (abs) Error 0.602819 (0.501332) +;; +;; Oct 29th 1997 +;; stepwise (but its over trained) +;; RMSE 0.8322 Correlation is 0.5286 Mean (abs) Error 0.6375 (0.5350) +;; +;; May 11th 1998 +;; new architecture, full new train on f2b on test data +;; in zscore domain +;; RMSE 0.8076 Correlation is 0.5307 Mean (abs) Error 0.6113 (0.5278) +;; in absolute domain +;; RMSE 0.0276 Correlation 0.7468 Mean (abs) error 0.0203 (0.0187) +;; +;; May 18th 1998 +;; various corrections f2bdur.bbz.H0.S50.tree no names zscore +;; in zscore domain +;; RMSE 0.8049 Correlation is 0.6003 Mean (abs) Error 0.6008 (0.5357) +;; in absolute domain +;; RMSE 0.0268 Correlation 0.7766 Mean (abs) error 0.0196 (0.0183) + +(set! gsw_duration_cart_tree +' +((name is #) + ((emph_sil is +) + ((0.0 -0.5)) + ((p.R:SylStructure.parent.parent.pbreak is BB) + ((0.0 2.0)) + ((0.0 0.0)))) + +((R:SylStructure.parent.accented is 0) + ((n.ph_ctype is 0) + ((p.ph_vlng is 0) + ((R:SylStructure.parent.syl_codasize < 1.5) + ((p.ph_ctype is n) + ((ph_ctype is f) + ((0.559208 -0.783163)) + ((1.05215 -0.222704))) + ((ph_ctype is s) + ((R:SylStructure.parent.syl_break is 2) + ((0.589948 0.764459)) + ((R:SylStructure.parent.asyl_in < 0.7) + ((1.06385 0.567944)) + ((0.691943 0.0530272)))) + ((ph_vlng is l) + ((pp.ph_vfront is 1) + ((1.06991 0.766486)) + ((R:SylStructure.parent.syl_break is 1) + ((0.69665 0.279248)) + ((0.670353 0.0567774)))) + ((p.ph_ctype is s) + ((seg_onsetcoda is coda) + ((0.828638 -0.038356)) + ((ph_ctype is f) + ((0.7631 -0.545853)) + ((0.49329 -0.765994)))) + ((R:SylStructure.parent.parent.gpos is det) + ((R:SylStructure.parent.last_accent < 0.3) + ((R:SylStructure.parent.sub_phrases < 1) + ((0.811686 0.160195)) + ((0.799015 0.713958))) + ((0.731599 -0.215472))) + ((ph_ctype is r) + ((0.673487 0.092772)) + ((R:SylStructure.parent.asyl_in < 1) + ((0.745273 0.00132813)) + ((0.75457 -0.334898))))))))) + ((pos_in_syl < 0.5) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.902446 -0.041618)) + ((R:SylStructure.parent.sub_phrases < 2.3) + ((0.900629 0.262952)) + ((1.18474 0.594794)))) + ((seg_onset_stop is 0) + ((R:SylStructure.parent.position_type is mid) + ((0.512323 -0.760444)) + ((R:SylStructure.parent.syl_out < 6.8) + ((pp.ph_vlng is a) + ((0.640575 -0.450449)) + ((ph_ctype is f) + ((R:SylStructure.parent.sub_phrases < 1.3) + ((0.862876 -0.296956)) + ((R:SylStructure.parent.syl_out < 2.4) + ((0.803215 0.0422868)) + ((0.877856 -0.154465)))) + ((R:SylStructure.parent.syl_out < 3.6) + ((R:SylStructure.parent.syl_out < 1.2) + ((0.567081 -0.264199)) + ((0.598043 -0.541738))) + ((0.676843 -0.166623))))) + ((0.691678 -0.57173)))) + ((R:SylStructure.parent.parent.gpos is cc) + ((1.15995 0.313289)) + ((pp.ph_vfront is 1) + ((0.555993 0.0695819)) + ((R:SylStructure.parent.asyl_in < 1.2) + ((R:SylStructure.parent.sub_phrases < 2.7) + ((0.721635 -0.367088)) + ((0.71919 -0.194887))) + ((0.547052 -0.0637491))))))) + ((ph_ctype is s) + ((R:SylStructure.parent.syl_break is 0) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((0.650007 -0.333421)) + ((0.846301 -0.165383))) + ((0.527756 -0.516332))) + ((R:SylStructure.parent.syl_break is 0) + ((p.ph_ctype is s) + ((0.504414 -0.779112)) + ((0.812498 -0.337611))) + ((pos_in_syl < 1.4) + ((0.513041 -0.745807)) + ((p.ph_ctype is s) + ((0.350582 -1.04907)) + ((0.362 -0.914974)))))))) + ((R:SylStructure.parent.syl_break is 0) + ((ph_ctype is n) + ((R:SylStructure.parent.position_type is initial) + ((pos_in_syl < 1.2) + ((0.580485 0.172658)) + ((0.630973 -0.101423))) + ((0.577937 -0.360092))) + ((R:SylStructure.parent.syl_out < 2.9) + ((R:SylStructure.parent.syl_out < 1.1) + ((R:SylStructure.parent.position_type is initial) + ((0.896092 0.764189)) + ((R:SylStructure.parent.sub_phrases < 3.6) + ((ph_ctype is s) + ((0.877362 0.555132)) + ((0.604511 0.369882))) + ((0.799982 0.666966)))) + ((seg_onsetcoda is coda) + ((p.ph_vlng is a) + ((R:SylStructure.parent.last_accent < 0.4) + ((0.800736 0.240634)) + ((0.720606 0.486176))) + ((1.18173 0.573811))) + ((0.607147 0.194468)))) + ((ph_ctype is r) + ((0.88377 0.499383)) + ((R:SylStructure.parent.last_accent < 0.5) + ((R:SylStructure.parent.position_type is initial) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((0.62798 0.0737318)) + ((0.787334 0.331014))) + ((ph_ctype is s) + ((0.808368 0.0929299)) + ((0.527948 -0.0443271)))) + ((seg_coda_fric is 0) + ((p.ph_vlng is a) + ((0.679745 0.517681)) + ((R:SylStructure.parent.sub_phrases < 1.1) + ((0.759979 0.128316)) + ((0.775233 0.361383)))) + ((R:SylStructure.parent.last_accent < 1.3) + ((0.696255 0.054136)) + ((0.632425 0.246742)))))))) + ((pos_in_syl < 0.3) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.847602 0.621547)) + ((ph_ctype is s) + ((0.880645 0.501679)) + ((R:SylStructure.parent.sub_phrases < 3.3) + ((R:SylStructure.parent.sub_phrases < 0.3) + ((0.901014 -0.042049)) + ((0.657493 0.183226))) + ((0.680126 0.284799))))) + ((ph_ctype is s) + ((p.ph_vlng is s) + ((0.670033 -0.820934)) + ((0.863306 -0.348735))) + ((ph_ctype is n) + ((R:SylStructure.parent.asyl_in < 1.2) + ((0.656966 -0.40092)) + ((0.530966 -0.639366))) + ((seg_coda_fric is 0) + ((1.04153 0.364857)) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.syl_out < 3.4) + ((0.81503 -0.00768613)) + ((0.602665 -0.197753))) + ((0.601844 -0.394632))))))))) + ((n.ph_ctype is f) + ((pos_in_syl < 1.5) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((pos_in_syl < 0.1) + ((1.63863 0.938841)) + ((R:SylStructure.parent.position_type is initial) + ((0.897722 -0.0796637)) + ((nn.ph_vheight is 0) + ((0.781081 0.480026)) + ((0.779711 0.127175))))) + ((ph_ctype is r) + ((p.ph_ctype is s) + ((0.581329 -0.708767)) + ((0.564366 -0.236212))) + ((ph_vlng is a) + ((p.ph_ctype is r) + ((0.70992 -0.273389)) + ((R:SylStructure.parent.parent.gpos is in) + ((0.764696 0.0581338)) + ((nn.ph_vheight is 0) + ((0.977737 0.721904)) + ((R:SylStructure.parent.sub_phrases < 2.2) + ((pp.ph_vfront is 0) + ((0.586708 0.0161206)) + ((0.619949 0.227372))) + ((0.707285 0.445569)))))) + ((ph_ctype is n) + ((R:SylStructure.parent.syl_break is 1) + ((nn.ph_vfront is 2) + ((0.430295 -0.120097)) + ((0.741371 0.219042))) + ((0.587492 0.321245))) + ((p.ph_ctype is n) + ((0.871586 0.134075)) + ((p.ph_ctype is r) + ((0.490751 -0.466418)) + ((R:SylStructure.parent.syl_codasize < 1.3) + ((R:SylStructure.parent.sub_phrases < 2.2) + ((p.ph_ctype is s) + ((0.407452 -0.425925)) + ((0.644771 -0.542809))) + ((0.688772 -0.201899))) + ((ph_vheight is 1) + ((nn.ph_vheight is 0) + ((0.692018 0.209018)) + ((0.751345 -0.178136))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((R:SylStructure.parent.asyl_in < 1.5) + ((0.599633 -0.235593)) + ((0.60042 0.126118))) + ((p.ph_vlng is a) + ((0.7148 -0.174812)) + ((R:SylStructure.parent.parent.gpos is content) + ((0.761296 -0.231509)) + ((0.813081 -0.536405))))))))))))) + ((ph_ctype is n) + ((0.898844 0.163343)) + ((p.ph_vlng is s) + ((seg_coda_fric is 0) + ((0.752921 -0.45528)) + ((0.890079 -0.0998025))) + ((ph_ctype is f) + ((0.729376 -0.930547)) + ((ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((0.745052 -0.634119)) + ((0.521502 -0.760176))) + ((R:SylStructure.parent.syl_break is 1) + ((0.766575 -0.121355)) + ((0.795616 -0.557509)))))))) + ((p.ph_vlng is 0) + ((p.ph_ctype is r) + ((ph_vlng is 0) + ((0.733659 -0.402734)) + ((R:SylStructure.parent.sub_phrases < 1.5) + ((ph_vlng is s) + ((0.326176 -0.988478)) + ((n.ph_ctype is s) + ((0.276471 -0.802536)) + ((0.438283 -0.900628)))) + ((nn.ph_vheight is 0) + ((ph_vheight is 2) + ((0.521 -0.768992)) + ((0.615436 -0.574918))) + ((ph_vheight is 1) + ((0.387376 -0.756359)) + ((pos_in_syl < 0.3) + ((0.417235 -0.808937)) + ((0.384043 -0.93315))))))) + ((ph_vlng is a) + ((ph_ctype is 0) + ((n.ph_ctype is s) + ((p.ph_ctype is f) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.415908 -0.428493)) + ((pos_in_syl < 0.1) + ((0.790441 0.0211071)) + ((0.452465 -0.254485)))) + ((p.ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.582447 -0.389966)) + ((0.757648 0.185781))) + ((R:SylStructure.parent.sub_phrases < 1.4) + ((0.628965 0.422551)) + ((0.713613 0.145576))))) + ((seg_onset_stop is 0) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((pp.ph_vfront is 1) + ((0.412363 -0.62319)) + ((R:SylStructure.parent.syl_out < 3.6) + ((0.729259 -0.317324)) + ((0.441633 -0.591051)))) + ((R:SylStructure.parent.syl_break is 1) + ((R:SylStructure.parent.sub_phrases < 2.7) + ((0.457728 -0.405607)) + ((0.532411 -0.313148))) + ((R:SylStructure.parent.last_accent < 0.3) + ((1.14175 0.159416)) + ((0.616396 -0.254651))))) + ((R:SylStructure.parent.position_type is initial) + ((0.264181 -0.799896)) + ((0.439801 -0.551309))))) + ((R:SylStructure.parent.position_type is final) + ((0.552027 -0.707084)) + ((0.585661 -0.901874)))) + ((ph_ctype is s) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((pp.ph_vfront is 1) + ((0.607449 0.196466)) + ((0.599662 0.00382414))) + ((0.64109 -0.12859))) + ((pp.ph_vfront is 1) + ((0.720484 -0.219339)) + ((0.688707 -0.516734)))) + ((ph_vlng is s) + ((n.ph_ctype is s) + ((R:SylStructure.parent.parent.gpos is content) + ((R:SylStructure.parent.position_type is single) + ((0.659206 0.159445)) + ((R:SylStructure.parent.parent.word_numsyls < 3.5) + ((R:SylStructure.parent.sub_phrases < 2) + ((0.447186 -0.419103)) + ((0.631822 -0.0928561))) + ((0.451623 -0.576116)))) + ((ph_vheight is 3) + ((0.578626 -0.64583)) + ((0.56636 -0.4665)))) + ((R:SylStructure.parent.parent.gpos is in) + ((0.771516 -0.217292)) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.688571 -0.304382)) + ((R:SylStructure.parent.parent.gpos is content) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((n.ph_ctype is n) + ((0.556085 -0.572203)) + ((0.820173 -0.240338))) + ((R:SylStructure.parent.parent.word_numsyls < 2.2) + ((0.595398 -0.588171)) + ((0.524737 -0.95797)))) + ((R:SylStructure.parent.sub_phrases < 3.9) + ((0.371492 -0.959427)) + ((0.440479 -0.845747))))))) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((p.ph_ctype is f) + ((0.524088 -0.482247)) + ((nn.ph_vheight is 1) + ((0.587666 -0.632362)) + ((ph_vlng is l) + ((R:SylStructure.parent.position_type is final) + ((0.513286 -0.713117)) + ((0.604613 -0.924308))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((0.577997 -0.891342)) + ((0.659804 -1.15252)))))) + ((pp.ph_vlng is s) + ((ph_ctype is f) + ((0.813383 -0.599624)) + ((0.984027 -0.0771909))) + ((p.ph_ctype is f) + ((R:SylStructure.parent.parent.gpos is in) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((0.313572 -1.03242)) + ((0.525854 -0.542799))) + ((R:SylStructure.parent.syl_out < 2.8) + ((0.613007 -0.423979)) + ((0.570258 -0.766379)))) + ((R:SylStructure.parent.syl_break is 1) + ((R:SylStructure.parent.parent.gpos is to) + ((0.364585 -0.792895)) + ((ph_vlng is l) + ((0.69143 -0.276816)) + ((0.65673 -0.523721)))) + ((R:SylStructure.parent.syl_out < 3.6) + ((R:SylStructure.parent.position_type is initial) + ((0.682096 -0.488102)) + ((0.406364 -0.731758))) + ((0.584694 -0.822229))))))))))) + ((n.ph_ctype is r) + ((R:SylStructure.parent.position_type is initial) + ((p.ph_vlng is a) + ((0.797058 1.02334)) + ((ph_ctype is s) + ((1.0548 0.536277)) + ((0.817253 0.138201)))) + ((R:SylStructure.parent.sub_phrases < 1.1) + ((R:SylStructure.parent.syl_out < 3.3) + ((0.884574 -0.23471)) + ((0.772063 -0.525292))) + ((nn.ph_vfront is 1) + ((1.25254 0.417485)) + ((0.955557 -0.0781996))))) + ((pp.ph_vfront is 0) + ((ph_ctype is f) + ((n.ph_ctype is s) + ((R:SylStructure.parent.parent.gpos is content) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((0.583506 -0.56941)) + ((0.525949 -0.289362))) + ((0.749316 -0.0921038))) + ((p.ph_vlng is s) + ((0.734234 0.139463)) + ((0.680119 -0.0708717)))) + ((ph_vlng is s) + ((ph_vheight is 1) + ((0.908712 -0.618971)) + ((0.55344 -0.840495))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 1.2) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.838715 0.00913392)) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((ph_vheight is 2) + ((0.555513 -0.512523)) + ((R:SylStructure.parent.position_type is initial) + ((0.758711 0.121704)) + ((0.737555 -0.25637)))) + ((R:SylStructure.parent.syl_out < 3.1) + ((n.ph_ctype is s) + ((0.611756 -0.474522)) + ((1.05437 -0.247206))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((R:SylStructure.parent.position_type is final) + ((0.567761 -0.597866)) + ((0.785599 -0.407765))) + ((0.575598 -0.741256)))))) + ((ph_ctype is s) + ((n.ph_ctype is s) + ((0.661069 -1.08426)) + ((0.783184 -0.39789))) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((R:SylStructure.parent.sub_phrases < 2.6) + ((0.511323 -0.666011)) + ((0.691878 -0.499492))) + ((ph_ctype is r) + ((0.482131 -0.253186)) + ((0.852955 -0.372832)))))) + ((0.854447 -0.0936489))))) + ((R:SylStructure.parent.position_type is final) + ((0.685939 -0.249982)) + ((R:SylStructure.parent.syl_out < 3.2) + ((0.989843 0.18086)) + ((0.686805 -0.0402908))))))))) + ((R:SylStructure.parent.syl_out < 2.4) + ((R:SylStructure.parent.syl_out < 0.2) + ((seg_onsetcoda is coda) + ((ph_ctype is s) + ((R:SylStructure.parent.syl_break is 4) + ((pp.ph_vlng is 0) + ((0.959737 1.63203)) + ((1.20714 0.994933))) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.syl_break is 2) + ((0.864809 0.214457)) + ((0.874278 0.730381))) + ((pp.ph_vfront is 0) + ((seg_coda_fric is 0) + ((1.20844 -0.336221)) + ((1.01357 0.468302))) + ((0.658106 -0.799121))))) + ((n.ph_ctype is f) + ((ph_ctype is f) + ((1.26332 0.0300613)) + ((ph_vlng is d) + ((1.02719 1.1649)) + ((ph_ctype is 0) + ((R:SylStructure.parent.asyl_in < 1.2) + ((1.14048 2.2668)) + ((ph_vheight is 1) + ((1.15528 1.50375)) + ((1.42406 2.07927)))) + ((R:SylStructure.parent.sub_phrases < 1.1) + ((0.955892 1.10243)) + ((R:SylStructure.parent.syl_break is 2) + ((1.32682 1.8432)) + ((1.27582 1.59853))))))) + ((n.ph_ctype is 0) + ((ph_ctype is n) + ((R:SylStructure.parent.syl_break is 2) + ((1.45399 1.12927)) + ((1.05543 0.442376))) + ((R:SylStructure.parent.syl_break is 4) + ((R:SylStructure.parent.position_type is final) + ((ph_ctype is f) + ((1.46434 1.76508)) + ((0.978055 0.7486))) + ((1.2395 2.30826))) + ((ph_ctype is 0) + ((0.935325 1.69917)) + ((nn.ph_vfront is 1) + ((1.20456 1.31128)) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((nn.ph_vheight is 0) + ((1.16907 0.212421)) + ((0.952091 0.653094))) + ((p.ph_ctype is 0) + ((1.05502 1.25802)) + ((0.818731 0.777568)))))))) + ((ph_ctype is f) + ((p.ph_ctype is 0) + ((1.03918 0.163941)) + ((0.737545 -0.167063))) + ((R:SylStructure.parent.position_type is final) + ((n.ph_ctype is n) + ((R:SylStructure.parent.last_accent < 0.5) + ((R:SylStructure.parent.sub_phrases < 2.8) + ((0.826207 -0.000859005)) + ((0.871119 0.273433))) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((1.17405 1.05694)) + ((0.858394 0.244916)))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((p.ph_ctype is 0) + ((1.14092 1.21187)) + ((R:SylStructure.parent.syl_break is 2) + ((1.02653 0.59865)) + ((0.94248 1.1634)))) + ((seg_coda_fric is 0) + ((1.07441 0.292935)) + ((1.15736 0.92574))))) + ((ph_vlng is s) + ((R:SylStructure.parent.syl_break is 2) + ((1.34638 1.23484)) + ((0.951514 2.02008))) + ((ph_ctype is 0) + ((p.ph_ctype is r) + ((0.806106 0.697089)) + ((R:SylStructure.parent.syl_break is 2) + ((1.10891 0.992197)) + ((1.04657 1.51093)))) + ((1.18165 0.520952))))))))) + ((p.ph_vlng is 0) + ((pos_in_syl < 0.7) + ((R:SylStructure.parent.position_type is final) + ((ph_ctype is r) + ((0.966357 0.185827)) + ((ph_ctype is s) + ((0.647163 0.0332298)) + ((0.692972 -0.534917)))) + ((ph_ctype is s) + ((0.881521 0.575107)) + ((p.ph_ctype is f) + ((0.8223 -0.111275)) + ((R:SylStructure.parent.last_accent < 0.3) + ((0.969188 0.09447)) + ((0.894438 0.381947)))))) + ((p.ph_ctype is f) + ((0.479748 -0.490108)) + ((0.813125 -0.201268)))) + ((ph_ctype is s) + ((0.908566 1.20397)) + ((R:SylStructure.parent.last_accent < 1.2) + ((0.88078 0.636568)) + ((0.978087 1.07763)))))) + ((pos_in_syl < 1.3) + ((R:SylStructure.parent.syl_break is 0) + ((pos_in_syl < 0.1) + ((R:SylStructure.parent.position_type is initial) + ((p.ph_ctype is n) + ((0.801651 -0.0163359)) + ((ph_ctype is s) + ((n.ph_ctype is r) + ((0.893307 1.07253)) + ((p.ph_vlng is 0) + ((0.92651 0.525806)) + ((0.652444 0.952792)))) + ((p.ph_vlng is 0) + ((seg_onsetcoda is coda) + ((0.820151 0.469117)) + ((p.ph_ctype is f) + ((0.747972 -0.0716448)) + ((ph_ctype is f) + ((0.770882 0.457137)) + ((0.840905 0.102492))))) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.667824 0.697337)) + ((0.737967 0.375114)))))) + ((ph_vheight is 1) + ((0.624353 0.410671)) + ((R:SylStructure.parent.asyl_in < 0.8) + ((0.647905 -0.331055)) + ((p.ph_ctype is s) + ((0.629039 -0.240616)) + ((0.749277 -0.0191273)))))) + ((ph_vheight is 3) + ((p.ph_ctype is s) + ((0.626922 0.556537)) + ((0.789357 0.153892))) + ((seg_onsetcoda is coda) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.parent.word_numsyls < 3.4) + ((0.744714 0.123242)) + ((0.742039 0.295753))) + ((seg_coda_fric is 0) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((ph_vheight is 1) + ((0.549715 -0.341018)) + ((0.573641 -0.00893114))) + ((nn.ph_vfront is 2) + ((0.67099 -0.744625)) + ((0.664438 -0.302803)))) + ((p.ph_vlng is 0) + ((0.630028 0.113815)) + ((0.632794 -0.128733))))) + ((ph_ctype is r) + ((0.367169 -0.854509)) + ((0.94334 -0.216179)))))) + ((n.ph_ctype is f) + ((ph_vlng is 0) + ((1.3089 0.46195)) + ((R:SylStructure.parent.syl_codasize < 1.3) + ((1.07673 0.657169)) + ((pp.ph_vlng is 0) + ((0.972319 1.08222)) + ((1.00038 1.46257))))) + ((p.ph_vlng is l) + ((1.03617 0.785204)) + ((p.ph_vlng is a) + ((R:SylStructure.parent.position_type is final) + ((1.00681 0.321168)) + ((0.928115 0.950834))) + ((ph_vlng is 0) + ((pos_in_syl < 0.1) + ((R:SylStructure.parent.position_type is final) + ((0.863682 -0.167374)) + ((nn.ph_vheight is 0) + ((p.ph_ctype is f) + ((0.773591 -0.00374425)) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.951802 0.228448)) + ((1.02282 0.504252)))) + ((1.09721 0.736476)))) + ((R:SylStructure.parent.position_type is final) + ((1.04302 0.0590974)) + ((0.589208 -0.431535)))) + ((n.ph_ctype is 0) + ((1.27879 1.00642)) + ((ph_vlng is s) + ((R:SylStructure.parent.asyl_in < 1.4) + ((0.935787 0.481652)) + ((0.9887 0.749861))) + ((R:SylStructure.parent.syl_out < 1.1) + ((R:SylStructure.parent.position_type is final) + ((0.921307 0.0696307)) + ((0.83675 0.552212))) + ((0.810076 -0.0479225)))))))))) + ((ph_ctype is s) + ((n.ph_ctype is s) + ((0.706959 -1.0609)) + ((p.ph_ctype is n) + ((0.850614 -0.59933)) + ((n.ph_ctype is r) + ((0.665947 0.00698725)) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.position_type is initial) + ((0.762889 -0.0649044)) + ((0.723956 -0.248899))) + ((R:SylStructure.parent.sub_phrases < 1.4) + ((0.632957 -0.601987)) + ((0.889114 -0.302401))))))) + ((ph_ctype is f) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.865267 0.164636)) + ((0.581827 -0.0989051))) + ((nn.ph_vfront is 2) + ((0.684459 -0.316836)) + ((0.778854 -0.0961191)))) + ((R:SylStructure.parent.syl_out < 1.1) + ((p.ph_ctype is s) + ((0.837964 -0.429437)) + ((0.875304 -0.0652743))) + ((0.611071 -0.635089)))) + ((p.ph_ctype is r) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.762012 0.0139361)) + ((0.567983 -0.454845))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((ph_ctype is l) + ((1.18845 0.809091)) + ((R:SylStructure.parent.position_type is initial) + ((ph_ctype is n) + ((0.773548 -0.277092)) + ((1.01586 0.281001))) + ((p.ph_ctype is 0) + ((1.06831 0.699145)) + ((0.924189 0.241873))))) + ((R:SylStructure.parent.syl_break is 0) + ((ph_ctype is n) + ((0.592321 -0.470784)) + ((0.778688 -0.072112))) + ((n.ph_ctype is s) + ((1.08848 0.0733489)) + ((1.25674 0.608371)))))))))) + ((pos_in_syl < 0.7) + ((p.ph_vlng is 0) + ((R:SylStructure.parent.position_type is mid) + ((ph_ctype is 0) + ((ph_vheight is 2) + ((0.456225 -0.293282)) + ((0.561529 -0.0816115))) + ((0.6537 -0.504024))) + ((ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((1.31586 0.98395)) + ((R:SylStructure.parent.position_type is single) + ((0.816869 0.634789)) + ((R:SylStructure.parent.syl_out < 4.4) + ((1.05578 0.479029)) + ((R:SylStructure.parent.asyl_in < 0.4) + ((1.11813 0.143214)) + ((0.87178 0.406834)))))) + ((n.ph_ctype is n) + ((R:SylStructure.parent.last_accent < 0.6) + ((0.838154 -0.415599)) + ((0.924024 0.110288))) + ((seg_onsetcoda is coda) + ((nn.ph_vfront is 2) + ((0.670096 0.0314187)) + ((n.ph_ctype is f) + ((1.00363 0.693893)) + ((R:SylStructure.parent.syl_out < 6) + ((0.772363 0.215675)) + ((0.920313 0.574068))))) + ((R:SylStructure.parent.position_type is final) + ((0.673837 -0.458142)) + ((R:SylStructure.parent.sub_phrases < 2.8) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.894817 0.304628)) + ((ph_ctype is n) + ((0.787302 -0.23094)) + ((R:SylStructure.parent.asyl_in < 1.2) + ((ph_ctype is f) + ((R:SylStructure.parent.last_accent < 0.5) + ((1.12278 0.326954)) + ((0.802236 -0.100616))) + ((0.791255 -0.0919132))) + ((0.95233 0.219053))))) + ((R:SylStructure.parent.position_type is initial) + ((ph_ctype is f) + ((1.0616 0.216118)) + ((0.703216 -0.00834086))) + ((ph_ctype is f) + ((1.22277 0.761763)) + ((0.904811 0.332721)))))))))) + ((ph_vheight is 0) + ((p.ph_vlng is s) + ((0.873379 0.217178)) + ((n.ph_ctype is r) + ((0.723915 1.29451)) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((R:SylStructure.parent.sub_phrases < 4) + ((seg_coda_fric is 0) + ((p.ph_vlng is l) + ((0.849154 0.945261)) + ((0.633261 0.687498))) + ((0.728546 0.403076))) + ((0.850962 1.00255))) + ((0.957999 1.09113))) + ((0.85771 0.209045))))) + ((ph_vheight is 2) + ((0.803401 -0.0544067)) + ((0.681353 0.256045))))) + ((n.ph_ctype is f) + ((ph_ctype is s) + ((p.ph_vlng is 0) + ((0.479307 -0.9673)) + ((0.700477 -0.351397))) + ((ph_ctype is f) + ((0.73467 -0.6233)) + ((R:SylStructure.parent.syl_break is 0) + ((p.ph_ctype is s) + ((0.56282 0.266234)) + ((p.ph_ctype is r) + ((0.446203 -0.302281)) + ((R:SylStructure.parent.sub_phrases < 2.7) + ((ph_ctype is 0) + ((0.572016 -0.0102436)) + ((0.497358 -0.274514))) + ((0.545477 0.0482177))))) + ((ph_vlng is s) + ((0.805269 0.888495)) + ((ph_ctype is n) + ((0.869854 0.653018)) + ((R:SylStructure.parent.sub_phrases < 2.2) + ((0.735031 0.0612886)) + ((0.771859 0.346637)))))))) + ((R:SylStructure.parent.syl_codasize < 1.4) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((R:SylStructure.parent.position_type is initial) + ((0.743458 0.0411808)) + ((1.13068 0.613305))) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((1.11481 0.175467)) + ((0.937893 -0.276407))) + ((0.74264 -0.550878)))) + ((pos_in_syl < 3.4) + ((seg_onsetcoda is coda) + ((ph_ctype is r) + ((n.ph_ctype is s) + ((0.714319 -0.240328)) + ((p.ph_ctype is 0) + ((0.976987 0.330352)) + ((1.1781 -0.0816682)))) + ((ph_ctype is l) + ((n.ph_ctype is 0) + ((1.39137 0.383533)) + ((0.725585 -0.324515))) + ((ph_vheight is 3) + ((ph_vlng is d) + ((0.802626 -0.62487)) + ((n.ph_ctype is r) + ((0.661091 -0.513869)) + ((R:SylStructure.parent.position_type is initial) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((0.482285 0.207874)) + ((0.401601 -0.0204711))) + ((0.733755 0.397372))))) + ((n.ph_ctype is r) + ((p.ph_ctype is 0) + ((pos_in_syl < 1.2) + ((0.666325 0.271734)) + ((nn.ph_vheight is 0) + ((0.642401 -0.261466)) + ((0.783684 -0.00956571)))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.692225 -0.381895)) + ((0.741921 -0.0898767)))) + ((nn.ph_vfront is 2) + ((ph_ctype is s) + ((0.697527 -1.12626)) + ((n.ph_ctype is s) + ((ph_vlng is 0) + ((R:SylStructure.parent.sub_phrases < 2.4) + ((0.498719 -0.906926)) + ((0.635342 -0.625651))) + ((0.45886 -0.385089))) + ((0.848596 -0.359702)))) + ((p.ph_vlng is a) + ((p.ph_ctype is 0) + ((0.947278 0.216904)) + ((0.637933 -0.394349))) + ((p.ph_ctype is r) + ((R:SylStructure.parent.syl_break is 0) + ((0.529903 -0.860573)) + ((0.581378 -0.510488))) + ((ph_vlng is 0) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((seg_onset_stop is 0) + ((R:SylStructure.parent.syl_break is 0) + ((p.ph_vlng is d) + ((0.768363 0.0108428)) + ((ph_ctype is s) + ((0.835756 -0.035054)) + ((ph_ctype is f) + ((p.ph_vlng is s) + ((0.602016 -0.179727)) + ((0.640126 -0.297341))) + ((0.674628 -0.542602))))) + ((ph_ctype is s) + ((0.662261 -0.60496)) + ((0.662088 -0.432058)))) + ((R:SylStructure.parent.syl_out < 4.4) + ((0.582448 -0.389079)) + ((ph_ctype is s) + ((0.60413 -0.73564)) + ((0.567153 -0.605444))))) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.761115 -0.827377)) + ((ph_ctype is n) + ((0.855183 -0.275338)) + ((R:SylStructure.parent.syl_break is 0) + ((0.788288 -0.802801)) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((0.686134 -0.371234)) + ((0.840184 -0.772883))))))) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.syl_break is 0) + ((n.ph_ctype is n) + ((0.423592 -0.655006)) + ((R:SylStructure.parent.syl_out < 4.4) + ((0.595269 -0.303751)) + ((0.478433 -0.456882)))) + ((0.688133 -0.133182))) + ((seg_onset_stop is 0) + ((1.27464 0.114442)) + ((0.406837 -0.167545)))))))))))) + ((ph_ctype is r) + ((0.462874 -0.87695)) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.645442 -0.640572)) + ((0.673717 -0.321322))))) + ((0.61008 -0.925472)))))))) +;; RMSE 0.8085 Correlation is 0.5899 Mean (abs) Error 0.6024 (0.5393) + + +)) + +(provide 'gswdurtreeZ) diff --git a/lib/holmes_phones.scm b/lib/holmes_phones.scm new file mode 100644 index 0000000..29e38ed --- /dev/null +++ b/lib/holmes_phones.scm @@ -0,0 +1,118 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; A definition of the Holmes phone set used by the Donovan LPC +;; diphone synthesizer, the rest of the synthesis process will +;; typically use mrpa phones and map to these. +;; +;; Hmm not sure I've got the right mapping (as usual) + +(defPhoneSet + holmes + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 - 0) + ;; vowel frontness: front mid back + (vfront 1 2 3 - 0) + ;; lip rounding + (vrnd + - 0) + ;; consonant type: stop fricative affricative nasal lateral approximant + (ctype s f a n l r 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar glottal + (cplace l a p b d v g 0) + ;; consonant voicing + (cvox + - 0) + ) + ;; Phone set members + ( + ;; Note these features were set by awb so they are wrong !!! + (ee + l 1 1 - 0 0 0) ;; beet + (i + s 1 1 - 0 0 0) ;; bit + (ai + d 2 1 - 0 0 0) ;; gate + (e + s 2 1 - 0 0 0) ;; get + (aa + s 3 1 - 0 0 0) ;; fat + (ar + l 3 3 - 0 0 0) ;; father + (aw + l 3 3 + 0 0 0) ;; lawn + (oa + d 2 2 - 0 0 0) ;; lone + (oo + s 1 3 + 0 0 0) ;; full + (uu + l 1 3 + 0 0 0) ;; fool + (o + s 2 3 + 0 0 0) + (er + l 2 2 - 0 0 0) ;; murder + (a + a 2 2 - 0 0 0) ;; about + (u + s 2 3 - 0 0 0) ;; but + (ie + d 3 2 - 0 0 0) ;; hide + (ou + d 3 2 + 0 0 0) ;; how + (oi + d 3 3 + 0 0 0) ;; toy + (eer + d 2 1 - 0 0 0) + (air + d 1 1 - 0 0 0) + (oor + d 3 1 + 0 0 0) +;; (yu + l 2 3 + 0 0 +) ;; you ??? + + (p - 0 0 0 0 s l -) + (b - 0 0 0 0 s l +) + (t - 0 0 0 0 s a -) + (d - 0 0 0 0 s a +) + (k - 0 0 0 0 s v -) + (g - 0 0 0 0 s v +) + (f - 0 0 0 0 f b -) + (v - 0 0 0 0 f b +) + (th - 0 0 0 0 f d -) + (dh - 0 0 0 0 f d +) + (s - 0 0 0 0 f a -) + (z - 0 0 0 0 f a +) + (sh - 0 0 0 0 f p -) + (zh - 0 0 0 0 f p +) + (h - 0 0 0 0 f g -) + (m - 0 0 0 0 n l +) + (n - 0 0 0 0 n a +) + (ng - 0 0 0 0 n v +) + (ch - 0 0 0 0 a p -) + (j - 0 0 0 0 a p +) + (l - 0 0 0 0 l a +) + (w - 0 0 0 0 r l +) + (y - 0 0 0 0 r p +) + (r - 0 0 0 0 r a +) +;; (wh - 0 - - + l l -) ;; ?? +;; (wh - 0 - - + l l +) ;; map to w + (# - 0 0 0 0 0 0 -) + ) + ) + +(PhoneSet.silences '(#)) + +(provide 'holmes_phones) diff --git a/lib/hts.scm b/lib/hts.scm new file mode 100644 index 0000000..9cc8f45 --- /dev/null +++ b/lib/hts.scm @@ -0,0 +1,522 @@ +;; ---------------------------------------------------------------- ;; +;; Nagoya Institute of Technology and ;; +;; Carnegie Mellon University ;; +;; Copyright (c) 2002 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and ;; +;; distribute this software and its documentation without ;; +;; restriction, including without limitation the rights to use, ;; +;; copy, modify, merge, publish, distribute, sublicense, and/or ;; +;; sell copies of this work, and to permit persons to whom this ;; +;; work is furnished to do so, subject to the following conditions: ;; +;; ;; +;; 1. The code must retain the above copyright notice, this list ;; +;; of conditions and the following disclaimer. ;; +;; ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; ;; +;; 3. Original authors' names are not deleted. ;; +;; ;; +;; 4. The authors' names are not used to endorse or promote ;; +;; products derived from this software without specific prior ;; +;; written permission. ;; +;; ;; +;; NAGOYA INSTITUTE OF TECHNOLOGY, CARNEGIE MELLON UNIVERSITY AND ;; +;; THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH ;; +;; REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ;; +;; MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NAGOYA INSTITUTE ;; +;; OF TECHNOLOGY, CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS ;; +;; BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ;; +;; ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ;; +;; PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ;; +;; TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ;; +;; PERFORMANCE OF THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Generic HTS support code and specific features ;; +;; http://hts.ics.nitech.ac.jp ;; +;; Author : Alan W Black ;; +;; Date : August 2002 (and April 2004) ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Still has language specific features in here, that will have to ;; +;; move out to the voices ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defvar hts_synth_pre_hooks nil) +(defvar hts_synth_post_hooks nil) +(defvar hts_engine_params nil) + +(defvar hts_duration_stretch 0) +(defvar hts_f0_mean 0) +(defvar hts_f0_std 1) +(defvar hts_fw_factor 0.42) +(defvar hts_total_length 0.0) +(defvar hts_uv_threshold 0.5) +(defvar hts_use_phone_align 0) + +(defSynthType HTS + (let ((featfile (make_tmp_filename)) + (mcepfile (make_tmp_filename)) + (f0file (make_tmp_filename)) + (wavfile (make_tmp_filename)) + (labfile (make_tmp_filename))) + + (apply_hooks hts_synth_pre_hooks utt) + + (set! hts_output_params + (list + (list "-labelfile" featfile) + (list "-om" mcepfile) + (list "-of" f0file) + (list "-or" wavfile) + (list "-od" labfile)) + ) + + (hts_dump_feats utt hts_feats_list featfile) + + (HTS_Synthesize utt) + + (delete-file featfile) + (delete-file mcepfile) + (delete-file f0file) + (delete-file wavfile) + (delete-file labfile) + + (apply_hooks hts_synth_post_hooks utt) + utt) +) + +(define (hts_feats_output ofd s) + "This is bad as it makes decisions about what the feats are" +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; SEGMENT + +; boundary + (format ofd "%10.0f %10.0f " + (* 10000000 (item.feat s "segment_start")) + (* 10000000 (item.feat s "segment_end"))) + +; pp.name + (format ofd "%s" (if (string-equal "0" (item.feat s "p.p.name")) + "x" (item.feat s "p.p.name"))) +; p.name + (format ofd "^%s" (if (string-equal "0" (item.feat s "p.name")) + "x" (item.feat s "p.name"))) +; c.name + (format ofd "-%s" (if (string-equal "0" (item.feat s "name")) + "x" (item.feat s "name"))) +; n.name + (format ofd "+%s" (if (string-equal "0" (item.feat s "n.name")) + "x" (item.feat s "n.name"))) +; nn.name + (format ofd "=%s" (if (string-equal "0" (item.feat s "n.n.name")) + "x" (item.feat s "n.n.name"))) + +; position in syllable (segment) + (format ofd "@") + (format ofd "%s" (if (string-equal "pau" (item.feat s "name")) + "x" (+ 1 (item.feat s "pos_in_syl")))) + (format ofd "_%s" (if (string-equal "pau" (item.feat s "name")) + "x" (- (item.feat s "R:SylStructure.parent.R:Syllable.syl_numphones") + (item.feat s "pos_in_syl")))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; SYLLABLE + +;; previous syllable + +; p.stress + (format ofd "/A:%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.R:Syllable.stress") + (item.feat s "R:SylStructure.parent.R:Syllable.p.stress"))) +; p.accent + (format ofd "_%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.R:Syllable.accented") + (item.feat s "R:SylStructure.parent.R:Syllable.p.accented"))) +; p.length + (format ofd "_%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.R:Syllable.syl_numphones") + (item.feat s "R:SylStructure.parent.R:Syllable.p.syl_numphones"))) +;; current syllable + +; c.stress + (format ofd "/B:%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.stress"))) +; c.accent + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.accented"))) +; c.length + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.syl_numphones"))) + +; position in word (syllable) + (format ofd "@%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 (item.feat s "R:SylStructure.parent.R:Syllable.pos_in_word")))) + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (- + (item.feat s "R:SylStructure.parent.parent.R:Word.word_numsyls") + (item.feat s "R:SylStructure.parent.R:Syllable.pos_in_word")))) + +; position in phrase (syllable) + (format ofd "&%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 + (item.feat s "R:SylStructure.parent.R:Syllable.syl_in")))) + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 + (item.feat s "R:SylStructure.parent.R:Syllable.syl_out")))) + +; position in phrase (stressed syllable) + (format ofd "#%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 + (item.feat s "R:SylStructure.parent.R:Syllable.ssyl_in")))) + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 + (item.feat s "R:SylStructure.parent.R:Syllable.ssyl_out")))) + +; position in phrase (accented syllable) + (format ofd "$%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 + (item.feat s "R:SylStructure.parent.R:Syllable.asyl_in")))) + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 + (item.feat s "R:SylStructure.parent.R:Syllable.asyl_out")))) + +; distance from stressed syllable + (format ofd "!%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.lisp_distance_to_p_stress"))) + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.lisp_distance_to_n_stress"))) + +; distance from accented syllable + (format ofd ";%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.lisp_distance_to_p_accent"))) + (format ofd "-%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.lisp_distance_to_n_accent"))) + +; name of the vowel of current syllable + (format ofd "|%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.R:Syllable.syl_vowel"))) + +;; next syllable + (format ofd "/C:%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.R:Syllable.stress") + (item.feat s "R:SylStructure.parent.R:Syllable.n.stress"))) +; n.accent + (format ofd "+%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.R:Syllable.accented") + (item.feat s "R:SylStructure.parent.R:Syllable.n.accented"))) +; n.length + (format ofd "+%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.R:Syllable.syl_numphones") + (item.feat s "R:SylStructure.parent.R:Syllable.n.syl_numphones"))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; WORD + +;;;;;;;;;;;;;;;;;; +;; previous word + +; p.gpos + (format ofd "/D:%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.parent.R:Word.gpos") + (item.feat s "R:SylStructure.parent.parent.R:Word.p.gpos"))) +; p.lenght (syllable) + (format ofd "_%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.parent.R:Word.word_numsyls") + (item.feat s "R:SylStructure.parent.parent.R:Word.p.word_numsyls"))) + +;;;;;;;;;;;;;;;;; +;; current word + +; c.gpos + (format ofd "/E:%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Word.gpos"))) +; c.lenght (syllable) + (format ofd "+%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Word.word_numsyls"))) + +; position in phrase (word) + (format ofd "@%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 (item.feat s "R:SylStructure.parent.parent.R:Word.pos_in_phrase")))) + (format ofd "+%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Word.words_out"))) + +; position in phrase (content word) + (format ofd "&%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (+ 1 (item.feat s "R:SylStructure.parent.parent.R:Word.content_words_in")))) + (format ofd "+%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Word.content_words_out"))) + +; distance from content word in phrase + (format ofd "#%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Word.lisp_distance_to_p_content"))) + (format ofd "+%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Word.lisp_distance_to_n_content"))) + +;;;;;;;;;;;;;; +;; next word + +; n.gpos + (format ofd "/F:%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.parent.R:Word.gpos") + (item.feat s "R:SylStructure.parent.parent.R:Word.n.gpos"))) +; n.lenghte (syllable) + (format ofd "_%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.parent.R:Word.word_numsyls") + (item.feat s "R:SylStructure.parent.parent.R:Word.n.word_numsyls"))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; PHRASE + +;;;;;;;;;;;;;;;;;;;; +;; previous phrase + +; length of previous phrase (syllable) + (format ofd "/G:%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase") + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.p.lisp_num_syls_in_phrase"))) + +; length of previous phrase (word) + (format ofd "_%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase") + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.p.lisp_num_words_in_phrase"))) + +;;;;;;;;;;;;;;;;;;;; +;; current phrase + +; length of current phrase (syllable) + (format ofd "/H:%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase"))) + +; length of current phrase (word) + (format ofd "=%s" + (if (string-equal "pau" (item.feat s "name")) + "x" + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase"))) + +; position in major phrase (phrase) + (format ofd "@%s" + (+ 1 (item.feat s "R:SylStructure.parent.R:Syllable.sub_phrases"))) + (format ofd "=%s" + (- + (item.feat s "lisp_total_phrases") + (item.feat s "R:SylStructure.parent.R:Syllable.sub_phrases"))) + +; type of tobi endtone of current phrase + (format ofd "|%s" + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.daughtern.R:SylStructure.daughtern.tobi_endtone")) + +;;;;;;;;;;;;;;;;;;;; +;; next phrase + +; length of next phrase (syllable) + (format ofd "/I:%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase") + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.n.lisp_num_syls_in_phrase"))) + +; length of next phrase (word) + (format ofd "=%s" + (if (string-equal "pau" (item.feat s "name")) + (item.feat s "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase") + (item.feat s "R:SylStructure.parent.parent.R:Phrase.parent.n.lisp_num_words_in_phrase"))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; UTTERANCE + +; length (syllable) + (format ofd "/J:%s" (item.feat s "lisp_total_syls")) + +; length (word) + (format ofd "+%s" (item.feat s "lisp_total_words")) + +; length (phrase) + (format ofd "-%s" (item.feat s "lisp_total_phrases")) + + (format ofd "\n") + +) + +(define (hts_dump_feats utt feats ofile) + (let ((ofd (fopen ofile "w"))) + (mapcar + (lambda (s) + (hts_feats_output ofd s)) + (utt.relation.items utt 'Segment)) + (fclose ofd) + )) + + +;; +;; Extra features +;; From Segment items refer by +;; +;; R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase +;; R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase +;; lisp_total_words +;; lisp_total_syls +;; lisp_total_phrases +;; +;; The last three will act on any item + +(define (distance_to_p_content i) + (let ((c 0) (rc 0 ) (w (item.relation.prev i "Phrase"))) + (while w + (set! c (+ 1 c)) + (if (string-equal "1" (item.feat w "contentp")) + (begin + (set! rc c) + (set! w nil)) + (set! w (item.prev w))) + ) + rc)) + +(define (distance_to_n_content i) + (let ((c 0) (rc 0) (w (item.relation.next i "Phrase"))) + (while w + (set! c (+ 1 c)) + (if (string-equal "1" (item.feat w "contentp")) + (begin + (set! rc c) + (set! w nil)) + (set! w (item.next w))) + ) + rc)) + +(define (distance_to_p_accent i) + (let ((c 0) (rc 0 ) (w (item.relation.prev i "Syllable"))) + (while (and w (member_string (item.feat w "syl_break") '("0" "1"))) + (set! c (+ 1 c)) + (if (string-equal "1" (item.feat w "accented")) + (begin + (set! rc c) + (set! w nil)) + (set! w (item.prev w))) + ) + rc)) + +(define (distance_to_n_accent i) + (let ((c 0) (rc 0 ) (w (item.relation.next i "Syllable"))) + (while (and w (member_string (item.feat w "p.syl_break") '("0" "1"))) + (set! c (+ 1 c)) + (if (string-equal "1" (item.feat w "accented")) + (begin + (set! rc c) + (set! w nil)) + (set! w (item.next w))) + ) + rc)) + +(define (distance_to_p_stress i) + (let ((c 0) (rc 0 ) (w (item.relation.prev i "Syllable"))) + (while (and w (member_string (item.feat w "syl_break") '("0" "1"))) + (set! c (+ 1 c)) + (if (string-equal "1" (item.feat w "stress")) + (begin + (set! rc c) + (set! w nil)) + (set! w (item.prev w))) + ) + rc)) + +(define (distance_to_n_stress i) + (let ((c 0) (rc 0 ) (w (item.relation.next i "Syllable"))) + (while (and w (member_string (item.feat w "p.syl_break") '("0" "1"))) + (set! c (+ 1 c)) + (if (string-equal "1" (item.feat w "stress")) + (begin + (set! rc c) + (set! w nil)) + (set! w (item.next w))) + ) + rc)) + +(define (num_syls_in_phrase i) + (apply + + + (mapcar + (lambda (w) + (length (item.relation.daughters w 'SylStructure))) + (item.relation.daughters i 'Phrase)))) + +(define (num_words_in_phrase i) + (length (item.relation.daughters i 'Phrase))) + +(define (total_words w) + (length + (utt.relation.items (item.get_utt w) 'Word))) + +(define (total_syls s) + (length + (utt.relation.items (item.get_utt s) 'Syllable))) + +(define (total_phrases s) + (length + (utt.relation_tree (item.get_utt s) 'Phrase))) + +(provide 'hts) diff --git a/lib/init.scm b/lib/init.scm new file mode 100644 index 0000000..90bccb7 --- /dev/null +++ b/lib/init.scm @@ -0,0 +1,157 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Initialisation file -- loaded before anything else +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; Basic siod library (need this before load_library or require works) +(load (path-append libdir "siod.scm")) + +(defvar home-directory (or (getenv "HOME") "/") + "home-directory + Place looked at for .festivalrc etc.") + +;;; User startup initialization, can be used to override load-path +;;; to allow alternate basic modules to be loaded. +(if (probe_file (path-append home-directory ".siodvarsrc")) + (load (path-append home-directory ".siodvarsrc"))) + +(if (probe_file (path-append home-directory ".festivalvarsrc")) + (load (path-append home-directory ".festivalvarsrc"))) + +;;; A chance to set various variables to a local setting e.g. +;;; lexdir, voices_dir audio etc etc. +(if (probe_file (path-append libdir "sitevars.scm")) + (load (path-append libdir "sitevars.scm"))) + +;;; CSTR siod extensions +(require 'cstr) + +;;; Festival specific definitions +(require 'festival) + +;;; Dealing with module descriptions +(require 'module_description) + +;;; Web related definitions +(require 'web) + +;;; Utterance types and support +(require 'synthesis) + +;;; Some default parameters +(Parameter.def 'Wavefiletype 'riff) + +;;; Set default audio method +(cond + ((member 'nas *modules*) + (Parameter.def 'Audio_Method 'netaudio)) + ((member 'esd *modules*) + (Parameter.def 'Audio_Method 'esdaudio)) + ((member 'sun16audio *modules*) + (Parameter.def 'Audio_Method 'sun16audio)) + ((member 'freebsd16audio *modules*) + (Parameter.def 'Audio_Method 'freebsd16audio)) + ((member 'linux16audio *modules*) + (Parameter.def 'Audio_Method 'linux16audio)) + ((member 'irixaudio *modules*) + (Parameter.def 'Audio_Method 'irixaudio)) + ((member 'macosxaudio *modules*) + (Parameter.def 'Audio_Method 'macosxaudio)) + ((member 'win32audio *modules*) + (Parameter.def 'Audio_Method 'win32audio)) + ((member 'os2audio *modules*) + (Parameter.def 'Audio_Method 'os2audio)) + ((member 'mplayeraudio *modules*) + (Parameter.def 'Audio_Method 'mplayeraudio)) + (t ;; can't find direct support so guess that /dev/audio for 8k ulaw exists + (Parameter.def 'Audio_Method 'sunaudio))) +;;; If you have an external program to play audio add its definition +;;; in siteinit.scm + +;;; The audio spooler doesn't work under Windows so redefine audio_mode +(if (member 'mplayeraudio *modules*) + (define (audio_mode param) param) +) + +;;; Intonation +(require 'intonation) + +;;; Duration +(require 'duration) + +;;; A large lexicon +(require 'lexicons) +(require 'pauses) + +;;; Part of speech prediction +(require 'pos) + +;;; Phrasing (dependent on pos) +(require 'phrase) + +;;; POstlexical rules +(require 'postlex) + +;;; Different voices +(require 'voices) ;; sets voice_default +(require 'languages) + +;;; Some higher level functions +(require 'token) +(require 'tts) + +;;; +;;; Local site initialization, if the file exists load it +;;; +(if (probe_file (path-append libdir "siteinit.scm")) + (load (path-append libdir "siteinit.scm"))) + +;;; User initialization, if a user has a personal customization +;;; file loaded it +(if (probe_file (path-append home-directory ".siodrc")) + (load (path-append home-directory ".siodrc"))) + +(if (probe_file (path-append home-directory ".festivalrc")) + (load (path-append home-directory ".festivalrc"))) + +;;; Default voice (have to do something cute so autoloads still work) +(eval (list voice_default)) + +(provide 'init) + + + + + diff --git a/lib/intonation.scm b/lib/intonation.scm new file mode 100644 index 0000000..8062e03 --- /dev/null +++ b/lib/intonation.scm @@ -0,0 +1,187 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Basic Intonation modules. These call appropriate sub-modules +;;; depending on the chosen intonation methods +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; These modules should predict intonation events/labels +;;; based on information in the phrase and word streams + +; to detect prespecified accents (feature "accent" in 'Word relation) +; AS 5/29/00 + +(define (tobi_accent_prespecified utt) + (let ((tobi_found nil) + (words (utt.relation.items utt 'Word))) + + (while (and words (not tobi_found)) +; feature "accent" might be prespecified on words or tokens, AS 05/29/00 + (if (item.feat.present (car words) 'accent) + (set! tobi_found t) +; if Token relation exists, check tokens as well + (if (not (null (item.parent (item.relation (car words) 'Token)))) + (if (item.feat.present (item.parent (item.relation (car words) 'Token)) 'accent) + (set! tobi_found t) + (set! words (cdr words))) + (set! words (cdr words))))) + tobi_found)) + +(set! int_accent_cart_tree_no_accent +'((NONE))) + +(define (Intonation utt) +"(Intonation utt) +Select between different intonation modules depending on the Parameter +Int_Method. Currently offers three types: Simple, hats on each content +word; ToBI, a tree method for predicting ToBI accents; and Default a +really bad method with a simple downward sloping F0. This is the first +of a two-stage intonation prediction process. This adds accent-like +features to syllables, the second, Int_Targets generates the F0 contour +itself. [see Intonation]" + +; AS 5/29/00: Hack to avoid prediction of further accent labels +; on utterance chunks that have already been annotated with +; accent labels +; use CART that doesn't assign any labels when using Intonation_Tree + +(if (tobi_accent_prespecified utt) + (progn + (set! int_accent_cart_tree_save int_accent_cart_tree) + (set! int_accent_cart_tree int_accent_cart_tree_no_accent) + (Intonation_Tree utt) + (set! int_accent_cart_tree int_accent_cart_tree_save)) + + (let ((rval (apply_method 'Int_Method utt))) + (Parameter.get 'Int_Method) + (cond + (rval rval) ;; new style + ((eq 'Simple (Parameter.get 'Int_Method)) + (Intonation_Simple utt)) + ((eq 'ToBI (Parameter.get 'Int_Method)) + (format t "Using Intonation_Tree") + (Intonation_Tree utt)) + ((eq 'General (Parameter.get 'Int_Method)) + (Intonation_Simple utt)) ;; yes this is a duplication + (t + (Intonation_Default utt)))))) + + +;;; These modules should create an actual F0 contour based on the +;;; the existing intonational events/labels etc +;;; Specifically this is called after durations have been predicted + +(define (Int_Targets utt) +"(Int_Targets utt) +The second stage in F0 prediction. This generates F0 targets +related to segments using one of three methods, a simple hat, +linear regression based on ToBI markings, and a simple declining +slope. This second part deals with actual F0 values and durations, +while the previous section only deals with accent (and boundary tone) +assignment. [see Intonation]" + (let ((rval (apply_method 'Int_Target_Method utt))) + (cond + (rval rval) ;; new style + ((eq 'Simple (Parameter.get 'Int_Method)) + (Int_Targets_Simple utt)) + ((eq 'ToBI (Parameter.get 'Int_Method)) + (Int_Targets_LR utt)) + ((eq 'General (Parameter.get 'Int_Method)) + (Int_Targets_General utt)) + (t + (Int_Targets_Default utt))))) + +;;; +;;; A tree that adds accents (H) to all content words +;;; simple but better than nothing at all +;;; +(set! simple_accent_cart_tree + ' + ((R:SylStructure.parent.gpos is content) + ((stress is 1) + ((Accented)) + ((position_type is single) + ((Accented)) + ((NONE)))) + ((NONE)))) + +(defvar duffint_params '((start 130) (end 110)) + "duffint_params +Default parameters for Default (duff) intonation target generation. +This is an assoc list of parameters. Two parameters are supported +start specifies the start F0 in Hertz for an utterance, and end specifies +the end.") + +;;; +;;; For simple testing, this function adds fixed duration and +;;; monotone intonation to a set of phones +;;; +(defvar FP_F0 120 +"FP_F0 +In using Fixed_Prosody as used in Phones type utterances and hence +SayPhones, this is the value in Hertz for the monotone F0.") +(defvar FP_duration 100 +"FP_duration +In using Fixed_Prosody as used in Phones type utterances and hence +SayPhones, this is the fix value in ms for phone durations.") + +(define (Fixed_Prosody utt) +"(Fixed_Prosody UTT) +Add fixed duration and fixed monotone F0 to the sgements in UTT. +Uses values of FP_duration and FP_F0 as fixed values." + (let (utt1 + (dur_stretch (Parameter.get 'Duration_Stretch)) + (orig_duffint_params duffint_params)) + (Parameter.set 'Duration_Stretch (/ FP_duration 100.0)) + (set! duffint_params (list (list 'start FP_F0) (list 'end FP_F0))) + + (set! utt1 (Duration_Default utt)) + (set! utt1 (Int_Targets_Default utt1)) + + ;; Reset Parameter values back + (Parameter.set 'Duration_Stretch dur_stretch) + (set! duffint_params orig_duffint_params) + + utt1 + ) +) + +(define (segment_dpitch seg) +"(segment_dpitch UTT SEG) +Returns delta pitch, this pitch minus previous pitch." + (- + (parse-number (item.feat utt seg 'seg_pitch)) + (parse-number (item.feat utt seg 'R:Segment.p.seg_pitch)))) + +(provide 'intonation) diff --git a/lib/java.scm b/lib/java.scm new file mode 100644 index 0000000..e6f514e --- /dev/null +++ b/lib/java.scm @@ -0,0 +1,39 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Functions specific to supporting a Java client +;;; + +;; none required yet + +(provide 'java) diff --git a/lib/klatt_durs.scm b/lib/klatt_durs.scm new file mode 100644 index 0000000..8f3864c --- /dev/null +++ b/lib/klatt_durs.scm @@ -0,0 +1,85 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Phone duration info for Klatt rules, for mrpa phone set + +(set! duration_klatt_params +'( +(a 230.0 80.0) +(aa 240.0 100.0) +(@ 120.0 60.0) +(@@ 180.0 80.0) +(ai 250.0 150.0) +(au 240.0 100.0) +(b 85.0 60.0) +(ch 70.0 50.0) +(d 75.0 50.0) +(dh 50.0 30.0) +(e 150.0 70.0) +(e@ 270.0 130.0) +(ei 180.0 100.0) +(f 100.0 80.0) +(g 80.0 60.0) +(h 80.0 20.0) +(i 135.0 40.0) +(i@ 230.0 100.0) +(ii 155.0 55) +(jh 70.0 50.0) +(k 80.0 60.0) +(l 80.0 40.0) +(m 70.0 60.0) +(n 60.0 50.0) +(ng 95.0 60.0) +(o 240.0 130.0) +(oi 280.0 150.0) +(oo 240.0 130.0) +(ou 220.0 80.0) +(p 90.0 50.0) +(r 80.0 30.0) +(s 105.0 60.0) +(sh 105.0 80.0) +(t 75.0 50.0) +(th 90.0 60.0) +(u 210.0 70.0) +(u@ 230.0 110.0) +(uh 160.0 60.0) +(uu 230.0 150.0) +(v 60.0 40.0) +(w 80.0 60.0) +(y 80.0 40.0) +(z 75.0 40.0) +(zh 70.0 40.0) +(# 100.0 100.0) +)) + +(provide 'klatt_durs) diff --git a/lib/languages.scm b/lib/languages.scm new file mode 100644 index 0000000..9382ad3 --- /dev/null +++ b/lib/languages.scm @@ -0,0 +1,120 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Specification of voices and some major choices of synthesis +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; This should use some sort of database description for voices so +;;; new voices will become automatically available. +;;; + +(define (language_british_english) +"(language_british_english) +Set up language parameters for British English." + (require 'voices) + ;; Will get more elaborate, with different choices of voices in language + + (set! male1 voice_rab_diphone) + (set! male2 voice_don_diphone) + (if (symbol-bound? 'voice_gsw_diphone) + (set! male3 voice_gsw_diphone)) + (if (symbol-bound? 'voice_gsw_450) + (set! male4 voice_gsw_450)) + + (male1) + (Parameter.set 'Language 'britishenglish) +) + +(define (language_american_english) +"(language_american_english) +Set up language parameters for Aemerican English." + + (if (symbol-bound? 'voice_kal_diphone) + (set! female1 voice_kal_diphone)) + (set! male1 voice_ked_diphone) + + (male1) + (Parameter.set 'Language 'americanenglish) +) + +(define (language_scots_gaelic) +"(language_scots_gaelic) +Set up language parameters for Scots Gaelic." + (error "Scots Gaelic not yet supported.") + + (Parameter.set 'Language 'scotsgaelic) +) + +(define (language_welsh) +"(language_welsh) +Set up language parameters for Welsh." + + (set! male1 voice_welsh_hl) + + (male1) + (Parameter.set 'Language 'welsh) +) + +(define (language_castillian_spanish) +"(language_spanish) +Set up language parameters for Castillian Spanish." + + (voice_el_diphone) + (set! male1 voice_el_diphone) + + (Parameter.set 'Language 'spanish) +) + +(define (select_language language) + (cond + ((or (equal? language 'britishenglish) + (equal? language 'english)) ;; we all know its the *real* English + (language_british_english)) + ((equal? language 'americanenglish) + (language_american_english)) + ((equal? language 'scotsgaelic) + (language_scots_gaelic)) + ((equal? language 'welsh) + (language_welsh)) + ((equal? language 'spanish) + (language_castillian_spanish)) + ((equal? language 'klingon) + (language_klingon)) + (t + (print "Unsupported language, using English") + (language_british_english)))) + +(defvar language_default language_british_english) + +(provide 'languages) diff --git a/lib/lexicons.scm b/lib/lexicons.scm new file mode 100644 index 0000000..574c8fa --- /dev/null +++ b/lib/lexicons.scm @@ -0,0 +1,274 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Definition of various lexicons +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; If there exists a sudirectory of the lib-path called dicts then that +;;; is used as the lexicon directory by default. If it doesn't exist +;;; we set lexdir to the directory in CSTR where our lexicons are. +;;; In non-CSTR installations where lexicons are not in lib/dicts, +;;; you should set lexdir in sitevars.scm + +(defvar lexdir + (if (probe_file (path-append libdir "dicts")) + (path-append libdir "dicts/") + ;; else we'll guess we're in the CSTR filespace + (path-as-directory "/projects/festival/lib/dicts/")) + "lexdir + The directory where the lexicon(s) are, by default.") + +(require 'pos) ;; for part of speech mapping + +(define (setup_cstr_lex) +"(setup_cstr_lexicon) +Define and setup the CSTR lexicon. The CSTR lexicon consists +of about 25,000 entries in the mrpa phone set. A large number of +specific local entries are also added to the addenda." + (if (not (member_string "mrpa" (lex.list))) + (begin + (lex.create "mrpa") + (lex.set.compile.file (path-append lexdir "cstrlex.out")) + (lex.set.phoneset "mrpa") + (lex.set.lts.method 'lts_rules) + (lex.set.lts.ruleset 'nrl) + (lex.set.pos.map english_pos_map_wp39_to_wp20) + (mrpa_addenda) + (lex.add.entry + '("previous" nil (((p r ii) 1) ((v ii) 0) ((@ s) 0)))) + (lex.add.entry + '("audio" () (((oo d) 1) ((ii) 0) ((ou) 0)))) + (lex.add.entry + '("modules" () (((m o d) 1) ((uu l s) 0)))) + ))) + +(define (setup_oald_lex) +"(setup_oald_lexicon) +Define and setup the CUVOALD lexicon. This is derived from the +Computer Users Version of the Oxford Advanced Learners' Dictionary +of Current English. This version includes a trained set of letter +to sound rules which have also been used to reduce the actual lexicon +size by over half, for those entries that the lts model gets exactly +the same." + (if (not (member_string "oald" (lex.list))) + (load (path-append lexdir "oald/oaldlex.scm")))) + +(define (setup_cmu_lex) + "(setup_cmu_lex) +Lexicon derived from the CMU lexicon (cmudict-0.4), around 100,000 entries, +in the radio phoneset (sort of darpa-like). Includes letter to sound +rule model trained from this data, and uses the lexical stress predictor +from OALD." + (if (not (member_string "cmu" (lex.list))) + (load (path-append lexdir "cmu/cmulex.scm")))) + +(define (setup_cmumt_lex) + "(setup_cmumt_lex) +Lexicon derived from the CMU lexicon (cmudict-0.4), around 100,000 entries, +in the radio phoneset (sort of darpa-like). Includes letter to sound +rule model trained from this data, and uses the lexical stress predictor +from OALD." + (if (not (member_string "cmumt" (lex.list))) + (load (path-append lexdir "cmu_mt/cmumtlex.scm")))) + +(define (setup_cmu6_lex) + "(setup_cmu6_lex) +Lexicon derived from the CMU lexicon (cmudict-0.6), around 100,000 entries, +in the radio phoneset (sort of darpa-like). Includes letter to sound +rule model trained from this data, the format of this lexicon is suitable +for the UniSyn metrical phonology modules. That is the entries are +not syllabified," + (if (not (member_string "cmu6" (lex.list))) + (load (path-append lexdir "cmu6/cmu6lex.scm")))) + +(define (setup_moby_lex) +"(setup_moby_lexicon) +Define and setup the MOBY lexicon. This is derived from the public +domain version of the Moby (TM) Pronunciator II lexicon. It can be +converted automatically to British English mrpa phoneset which of +course is sub-optimal. It contains around 120,000 entries and has part +of speech information for homographs." + (if (not (member_string "moby" (lex.list))) + (begin + (lex.create "moby") + ; (lex.set.compile.file (path-append lexdir "mobylex.out")) + (lex.set.compile.file "/home/awb/src/mobypron/mobylex.out") + (lex.set.phoneset "mrpa") + (lex.set.lts.method 'lts_rules) + (lex.set.lts.ruleset 'nrl) + (lex.set.pos.map english_pos_map_wp39_to_wp20) + (lex.add.entry + '("a" dt (((@) 0)))) + (lex.add.entry + '("the" dt (((dh @) 0)))) + (lex.add.entry + '("taylor" n (((t ei) 1) ((l @) 0)))) + (lex.add.entry + '("who" prp ((( h uu ) 0)))) + (mrpa_addenda)))) + +(define (setup_beep_lex) + "(setup_beep_lex) +Lexicon derived from the British English Example Pronunciation dictionary +(BEEP) from Tony Robinson ajr@eng.cam.ac.uk. Around 160,000 entries." + (if (not (member_string "beep" (lex.list))) + (begin + (lex.create "beep") + (lex.set.compile.file (path-append lexdir "beep_lex.out")) + (lex.set.phoneset "mrpa") + (lex.set.lts.method 'lts_rules) + (lex.set.lts.ruleset 'nrl) + (lex.set.pos.map english_pos_map_wp39_to_wp20) + (lex.add.entry + '("taylor" nil (((t ei) 1) ((l @) 0)))) + (mrpa_addenda)))) + +;;; The nrl letter to sound rules produce mrpa phone set so we need +;;; to do some fancy things to make them work for American English +(define (f2b_lts word features) +"(f2b_lts WORD FEATURES) +Letter to sound rule system for f2b (American English), uses the NRL +LTS ruleset and maps the result to the radio phone set." + '("unknown" nil (((ah n) 0) ((n ow n) 1))) +) + +;;; A CART tree for predicting lexical stress for strings of phones +;;; generated by the LTS models. This was actually trained from +;;; OALD as that's the only lexicon with stress and part of speech information +;;; It trained in a phoneset independent way and may be used be either +;;; OALD or CMU models (and probably MOBY and OGI lex too). +;;; On held out data it gets +;;; 07390 378 7768 [7390/7768] 95.134 +;;; 1 512 8207 8719 [8207/8719] 94.128 +;;; 7902 8585 +;;; total 16487 correct 15597.000 94.602% +;;; +(set! english_stress_tree +'((sylpos < 1.7) + ((1)) + ((ph_vlng is a) + ((0)) + ((ph_vheight is 1) + ((num2end < 1.5) + ((ph_vfront is 1) + ((ph_vlng is s) ((0)) ((pos is v) ((1)) ((0)))) + ((pos is n) ((0)) ((sylpos < 2.2) ((1)) ((0))))) + ((ph_vlng is l) + ((1)) + ((ph_vfront is 1) + ((num2end < 2.4) + ((0)) + ((pos is a) + ((num2end < 3.3) ((sylpos < 2.3) ((1)) ((0))) ((0))) + ((sylpos < 3.2) + ((num2end < 3.3) ((0)) ((pos is v) ((1)) ((0)))) + ((0))))) + ((0))))) + ((num2end < 1.5) + ((pos is n) + ((0)) + ((sylpos < 2.4) + ((pos is v) + ((1)) + ((ph_vlng is d) + ((ph_vheight is 2) ((ph_vfront is 1) ((1)) ((0))) ((0))) + ((1)))) + ((ph_vlng is d) + ((sylpos < 3.3) + ((pos is v) + ((ph_vheight is 2) ((ph_vfront is 1) ((0)) ((1))) ((0))) + ((0))) + ((0))) + ((ph_vheight is 2) + ((1)) + ((ph_vrnd is +) ((1)) ((ph_vlng is l) ((0)) ((1)))))))) + ((ph_vlng is d) + ((pos is v) + ((sylpos < 2.4) ((1)) ((0))) + ((ph_vfront is 2) + ((pos is n) + ((num2end < 2.4) + ((ph_vrnd is +) + ((0)) + ((sylpos < 2.2) ((1)) ((ph_vheight is 2) ((1)) ((0))))) + ((sylpos < 2.4) ((ph_vheight is 2) ((0)) ((1))) ((0)))) + ((1))) + ((ph_vheight is 2) ((1)) ((ph_vfront is 1) ((0)) ((1)))))) + ((pos is n) + ((num2end < 2.4) + ((ph_vfront is 3) + ((sylpos < 2.3) ((1)) ((ph_vlng is l) ((1)) ((0)))) + ((1))) + ((1))) + ((1))))))))) + +(define (lex_user_unknown_word word feats) + "(lex_user_unknown_word WORD FEATS) +Function called by lexicon when 'function type letter to sound rules +is defined. It is the user's responsibility to defined this function +themselves when they want to deal with unknown words themselves." + (error "lex_user_unknown_word: has not been defined by user")) + +(define (Word utt) +"(Word utt) +Construct (synthesis specific) syllable/segments from Word relation +using current lexicon and specific module." + (let ((rval (apply_method 'Word_Method utt))) + (cond + (rval rval) ;; new style + (t + (Classic_Word utt))))) + +(define (find_oovs vocab oovs) + (let ((fd (fopen vocab "r")) + (ofd (fopen oovs "w")) + (e 0) + (oov 0) + (entry)) + + (while (not (equal? (set! entry (readfp fd)) (eof-val))) + (set! e (+ 1 e)) + (if (not (lex.lookup_all entry)) + (begin + (set! oov (+ 1 oov)) + (format ofd "%l\n" (lex.lookup entry nil)))) + ) + (format t ";; %d words %d oov %2.2f oov_rate\n" + e oov (/ (* oov 100.0) e)) + ) +) + + +(provide 'lexicons) + diff --git a/lib/lts.scm b/lib/lts.scm new file mode 100644 index 0000000..23c2dad --- /dev/null +++ b/lib/lts.scm @@ -0,0 +1,212 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Functions specific to supporting a trained LTS rules +;;; + +(define (lts_rules_predict word feats) + (let ((dcword (downcase word)) + (syls) (phones)) + (if (string-matches dcword "[a-z]*") + (begin + (set! phones + (cdr (reverse (cdr (reverse (lts_predict dcword)))))) + (set! phones (add_lex_stress word feats phones)) + (set! syls (lex.syllabify.phstress phones)) +;; (set! syls (add_lex_stress word syls)) + ) + (set! syls nil)) + (format t "word %l phones %l\n" word syls) + (list word nil syls))) + +;(define (add_lex_stress word syls) +; (cond +; ((> (length syls) 1) +; (set-car! (cdr (nth (- (length syls) 2) syls)) 1)) +; ((word-is-content word english_guess_pos) +; (set-car! (cdr (car syls)) 1))) +; syls) + +(define (word-is-content word guess_pos) + (cond + ((null guess_pos) + t) + ((member_string word (cdr (car guess_pos))) + nil) + (t + (word-is-content word (cdr guess_pos))))) + +(defvar lts_pos nil) + +(define (lts_predict word rules) + "(lts_predict word rules) +Return list of phones related to word using CART trees." + (let ((utt (make_let_utt (enworden (wordexplode word))))) + (predict_phones utt rules) + (cdr (reverse (cdr (reverse ;; remove #'s + (mapcar + (lambda (p) (intern (item.name p))) + (utt.relation.items utt 'PHONE)))))) + ) +) + +(define (wordexplode lets) + (if (consp lets) + lets + (symbolexplode lets))) + +(define (make_let_utt letters) +"(make_let_utt letters) +Build an utterances from th4ese letters." + (let ((utt (Utterance Text ""))) + (utt.relation.create utt 'LTS) + (utt.relation.create utt 'LETTER) + (utt.relation.create utt 'PHONE) + ;; Create letter stream + (mapcar + (lambda (l) + (let ((lsi (utt.relation.append utt 'LETTER))) + (item.set_feat lsi "pos" lts_pos) + (item.set_name lsi l))) + letters) + utt)) + +(define (predict_phones utt rules) + "(predict_phones utt) +Predict phones using CART." + (add_new_phone utt (utt.relation.first utt 'LETTER) '#) + (mapcar + (lambda (lsi) + (let ((tree (car (cdr (assoc_string (item.name lsi) rules))))) + (if (not tree) + (format t "failed to find tree for %s\n" (item.name lsi)) + (let ((p (wagon_predict lsi tree))) +; (format t "predict %s %s\n" (item.name lsi) p) + (cond + ((string-matches p ".*-.*-.*-.*") ; a quad one + (add_new_phone utt lsi (string-before p "-")) + (add_new_phone utt lsi (string-before (string-after p "-") "-")) + (add_new_phone utt lsi (string-before (string-after (string-after p "-") "-") "-")) + (add_new_phone utt lsi (string-after (string-after (string-after p "-") "-") "-"))) + ((string-matches p ".*-.*-.*") ; a triple one + (add_new_phone utt lsi (string-before p "-")) + (add_new_phone utt lsi (string-before (string-after p "-") "-")) + (add_new_phone utt lsi (string-after (string-after p "-") "-"))) + ((string-matches p ".*-.*");; a double one + (add_new_phone utt lsi (string-before p "-")) + (add_new_phone utt lsi (string-after p "-"))) + (t + (add_new_phone utt lsi p))))))) + (reverse (cdr (reverse (cdr (utt.relation.items utt 'LETTER)))))) + (add_new_phone utt (utt.relation.last utt 'LETTER) '#) + utt) + +(define (add_new_phone utt lsi p) + "(add_new_phone utt lsi p) +Add new phone linking to letter, ignoreing it if its _epsilon_." + (if (not (equal? p '_epsilon_)) + (let ((psi (utt.relation.append utt 'PHONE))) + (item.set_name psi p) + (item.relation.append_daughter + (utt.relation.append utt 'LTS lsi) + 'LTS psi) + ))) + +(define (enworden lets) + (cons '# (reverse (cons '# (reverse lets))))) + +;;; Lexical stress assignment +;;; + +(define (add_lex_stress word pos phones tree) + "(add_lex_stress word syls) +Predict lexical stress by decision tree." + (let ((utt (Utterance Text "")) + (si) + (nphones)) + (utt.relation.create utt 'Letter) + (set! si (utt.relation.append utt 'Letter)) + (item.set_feat si 'pos pos) + (item.set_feat si 'numsyls (count_syls phones)) + (item.set_feat si 'sylpos 1) + (set! nphones (add_lex_stress_syl phones si tree)) +; (format t "%l\n" phones) +; (format t "%l\n" nphones) + nphones)) + +(define (count_syls phones) + (cond + ((null phones) 0) + ((string-matches (car phones) "[aeiou@].*") + (+ 1 (count_syls (cdr phones)))) + (t (count_syls (cdr phones))))) + +(define (add_lex_stress_syl phones si tree) + "(add_lex_stress_syl phones si tree) +Add lexical stressing." + (cond + ((null phones) nil) + ((string-matches (car phones) "[aeiou@].*") + (item.set_feat si 'phone (car phones)) + (item.set_feat si 'name (car phones)) + (item.set_feat si 'num2end + (- (+ 1 (item.feat si 'numsyls)) + (item.feat si 'sylpos))) + (set! stress (wagon_predict si tree)) + (item.set_feat si 'sylpos + (+ 1 (item.feat si 'sylpos))) + (cons + (if (not (string-equal stress "0")) + (string-append (car phones) stress) + (car phones)) + (add_lex_stress_syl (cdr phones) si tree))) + (t + (cons + (car phones) + (add_lex_stress_syl (cdr phones) si tree))))) + +;;; Morphological analysis + + +;(define (wfst_stemmer) +; (wfst.load 'stemmer "/home/awb/projects/morpho/engstemmer.wfst") +; (wfst.load 'stemmerL "/home/awb/projects/morpho/engstemmerL.wfst") +; t) + +;(define (stem word) +; (wfst.transduce 'stemmer (enworden (symbolexplode word)))) + +;(define (stemL word) +; (wfst.transduce 'stemmerL (enworden (symbolexplode word)))) + +(provide 'lts) diff --git a/lib/lts_build.scm b/lib/lts_build.scm new file mode 100644 index 0000000..63567d9 --- /dev/null +++ b/lib/lts_build.scm @@ -0,0 +1,723 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Functions for building LTS rules sets from lexicons +;;; +;;; + +(defvar pl-table nil) + +(define (allaligns phones letters) + "(cummulate phones lets) +Aligns all possible ways for these strings." + (cond + ((null letters) + ;; (wrongly) assume there are never less letters than phones + (if phones + (format t "wrong end: %s\n" word)) + nil) + ((null phones) + nil) + (t + (if (< (length phones) (length letters)) + (begin + (cummulate '_epsilon_ (car letters)) + (allaligns phones (cdr letters)))) + (cummulate (car phones) (car letters)) + (allaligns (cdr phones) (cdr letters))))) + +(define (valid-pair phone letter) + "(valid-pair phone letter) +If predefined to be valid." + (let ((entry1 (assoc_string letter pl-table))) + (if entry1 + (assoc_string phone (cdr entry1)) + nil))) + +(define (valid-pair-e phone nphone letter) + "(valid-pair-e phone letter) +Special cases for when epsilon may be inserted before letter." + (let ((ll (assoc_string letter pl-table)) + (pp (intern (string-append phone "-" nphone)))) + (assoc_string pp (cdr ll)))) + +(define (find-aligns phones letters) + "(find-aligns phones letters) +Find all feasible alignments." + (let ((r nil)) + (cond + ((and (null (cdr phones)) (null (cdr letters)) + (equal? (car phones) (car letters)) + (equal? '# (car phones))) + (list (list (cons '# '#)))) ;; valid end match + (t + (if (valid-pair '_epsilon_ (car letters)) + (set! r (mapcar + (lambda (p) + (cons (cons '_epsilon_ (car letters)) p)) + (find-aligns phones (cdr letters))))) + (if (valid-pair (car phones) (car letters)) + (set! r + (append r + (mapcar + (lambda (p) + (cons (cons (car phones) (car letters)) p)) + (find-aligns (cdr phones) (cdr letters)))))) + ;; Hmm, change this to always check doubles + (if (valid-pair-e (car phones) (car (cdr phones)) (car letters)) + (set! r + (append r + (mapcar + (lambda (p) + (cons (cons (intern (format nil "%s-%s" + (car phones) + (car (cdr phones)))) + (car letters)) p)) + (find-aligns (cdr (cdr phones)) + (cdr letters)))))) + r)))) + +(define (findallaligns phones letters) + (let ((a (find-aligns phones letters))) + (if (null a) + (begin + (set! failedaligns (+ 1 failedaligns)) + (format t "failed: %l %l\n" letters phones))) + a)) + +(define (cummulate phone letter) + "(cummulate phone letter) +record the alignment of this phone and letter." + (if (or (equal? phone letter) + (and (not (equal? phone '#)) + (not (equal? letter '#)))) + (let ((entry1 (assoc_string letter pl-table)) + score) + (if (equal? phone '_epsilon_) + (set! score 0.1) + (set! score 1)) + (if entry1 + (let ((entry2 (assoc_string phone (cdr entry1)))) + (if entry2 + (set-cdr! entry2 (+ score (cdr entry2))) + (set-cdr! entry1 (cons (cons phone 1) (cdr entry1))))) + (set! pl-table + (cons + (cons letter + (list (cons phone score))) + pl-table))) + t))) + +(define (score-pair phone letter) +"(score-pair phone letter) +Give score for this particular phone letter pair." + (let ((entry1 (assoc_string letter pl-table))) + (if entry1 + (let ((entry2 (assoc_string phone (cdr entry1)))) + (if entry2 + (cdr entry2) + 0)) + 0))) + +(define (cummulate-aligns aligns) + (mapcar + (lambda (a) + (mapcar + (lambda (p) + (cummulate (car p) (cdr p))) + a)) + aligns) + t) + +(define (cummulate-pairs trainfile) + "(cummulate-pairs trainfile) +Build cummulatation table from allowable alignments in trainfile." + (set! failedaligns 0) + (set! allaligns 0) + (if (not pl-table) + (set! pl-table + (mapcar + (lambda (l) + (cons (car l) (mapcar (lambda (c) (cons c 0)) (cdr l)))) + allowables))) + (let ((fd (fopen trainfile "r")) + (c 0) (d 0) + (entry)) + (while (not (equal? (set! entry (readfp fd)) (eof-val))) + (if (equal? c 1000) + (begin + (format t "ENTRY: %d %l\n" (set! d (+ 1000 d)) entry) + (set! c 0))) + (set! word (car entry)) + (cummulate-aligns + (findallaligns + (enworden (car (cdr (cdr entry)))) + (enworden (wordexplode (car entry))))) + (set! allaligns (+ 1 allaligns)) + (format t "aligned %d\n" allaligns) + (set! c (+ 1 c))) + (fclose fd) + (format t "failedaligns %d/%d\n" failedaligns allaligns) + )) + +(define (find_best_alignment phones letters) + "(find_best_alignment phones letters) +Find the alignement containg the most frequent alignment pairs." + ;; hackily do this as a global + (set! fba_best_score 0) + (set! fba_best nil) + (find-best-align phones letters nil 0) + fba_best +) + + +(define (find-best-align phones letters path score) + "(find-best-align phones letters) +Find all feasible alignments." + (cond + ((null letters) + (if (> score fba_best_score) + (begin + (set! fba_best_score score) + (set! fba_best (reverse path)))) + nil) + (t + (if (valid-pair '_epsilon_ (car letters)) + (find-best-align phones (cdr letters) + (cons (cons '_epsilon_ (car letters)) path) + (+ score (score-pair '_epsilon_ (car letters))))) + (if (valid-pair (car phones) (car letters)) + (find-best-align (cdr phones) (cdr letters) + (cons (cons (car phones) (car letters))path) + (+ score (score-pair (car phones) (car letters))))) + (if (valid-pair-e (car phones) (car (cdr phones)) (car letters)) + (find-best-align (cdr (cdr phones)) (cdr letters) + (cons (cons (intern (format nil "%s-%s" + (car phones) + (car (cdr phones)))) + (car letters)) + path) + (+ score (score-pair + (intern (format nil "%s-%s" + (car phones) + (car (cdr phones)))) + (car letters)))))))) + +(define (align_and_score phones letters path score) + "(align_and_score phones lets) +Aligns all possible ways for these strings." + (cond + ((null letters) + (if (> score fba_best_score) + (begin + (set! fba_best_score score) + (set! fba_best (reverse path)))) + nil) + (t + (if (< (length phones) (length letters)) + (align_and_score + phones + (cdr letters) + (cons '_epsilon_ path) + (+ score + (score-pair '_epsilon_ (car letters))))) + (align_and_score + (cdr phones) + (cdr letters) + (cons (car phones) path) + (+ score + (score-pair (car phones) (car letters))))))) + +(define (aligndata file ofile) + (let ((fd (fopen file "r")) + (ofd (fopen ofile "w")) + (c 1) + (entry)) + (while (not (equal? (set! entry (readfp fd)) (eof-val))) + (set! lets (enworden (wordexplode (car entry)))) + (set! bp (find_best_alignment + (enworden (car (cdr (cdr entry)))) + lets)) + (if (not bp) + (format t "align failed: %l\n" entry) + (save_info (car (cdr entry)) bp ofd)) + (set! c (+ 1 c))) + (fclose fd) + (fclose ofd))) + +(define (enworden lets) + (cons '# (reverse (cons '# (reverse lets))))) + +(define (wordexplode lets) + (if (consp lets) + lets + (symbolexplode lets))) + +(define (save_info pos bp ofd) + "(save_info pos bp ofd) +Cut out one expensive step and 50M of diskspace and just save it +in a simpler format." + (format ofd "( ( ") + (mapcar + (lambda (l) + (if (not (string-equal "#" (cdr l))) + (format ofd "%l " (cdr l)))) + bp) + (format ofd ") %l" pos) + (mapcar + (lambda (l) + (if (not (string-equal "#" (car l))) + (format ofd " %s" (car l)))) + bp) + (format ofd " )\n")) + +(define (normalise-table pl-table) + "(normalise-table pl-table) +Change scores into probabilities." + (mapcar + (lambda (s) + (let ((sum (apply + (mapcar cdr (cdr s))))) + (mapcar + (lambda (p) + (if (equal? sum 0) + (set-cdr! p 0) + (set-cdr! p (/ (cdr p) sum)))) + (cdr s)))) + pl-table) + t) + +(define (save-table pre) + (normalise-table pl-table) + (set! fd (fopen (string-append pre "pl-tablesp.scm") "w")) + (format fd "(set! pl-table '\n") + (pprintf pl-table fd) + (format fd ")\n") + (fclose fd) + t) + +(define (build-feat-file alignfile featfile) +"(build-feat-file alignfile featfile) +Build a feature file from the given align file. The feature +file contain predicted phone, and letter with 3 preceding and +3 succeeding letters." + (let ((fd (fopen alignfile "r")) + (ofd (fopen featfile "w")) + (entry) + (pn) + (sylpos 1)) + (while (not (equal? (set! entry (readfp fd)) (eof-val))) +;; (format t "read: %l\n" entry) + (set! lets (append '(0 0 0 0 #) (wordexplode (car entry)) + '(# 0 0 0 0))) + (set! phones (cdr (cdr entry))) + (set! pn 5) + (mapcar + (lambda (p) + (format ofd + "%s %s %s %s %s %s %s %s %s %s %s\n" + p + (nth (- pn 4) lets) + (nth (- pn 3) lets) + (nth (- pn 2) lets) + (nth (- pn 1) lets) + (nth pn lets) + (nth (+ pn 1) lets) + (nth (+ pn 2) lets) + (nth (+ pn 3) lets) + (nth (+ pn 4) lets) + (cond + ((not (consp (car (cdr entry)))) + (car (cdr entry))) + ((not (consp (caar (cdr entry)))) + (caar (cdr entry))) + (t nil)) + ;; sylpos + ;; numsyls + ;; num2end + ) + (set! pn (+ 1 pn))) + phones)) + (fclose fd) + (fclose ofd)) +) + +(define (merge_models name filename allowables) +"(merge_models name filename) +Merge the models into a single list of cart trees as a variable +named by name, in filename." + (require 'cart_aux) + (let (trees fd) + (set! trees nil) + (set! lets (mapcar car allowables)) + (while lets + (if (probe_file (format nil "lts.%s.tree" (car lets))) + (begin + (format t "%s\n" (car lets)) + (set! tree (car (load (format nil "lts.%s.tree" (car lets)) t))) + (set! tree (cart_simplify_tree2 tree nil)) + (set! trees + (cons (list (car lets) tree) trees)))) + (set! lets (cdr lets))) + (set! trees (reverse trees)) + (set! fd (fopen filename "w")) + (format fd ";; LTS rules \n") + (format fd "(set! %s '(\n" name) + (mapcar + (lambda (tree) (pprintf tree fd)) + trees) + (format fd "))\n") + (fclose fd)) +) + +(define (lts_testset file cartmodels) + "(lts_testset file cartmodels) +Test an aligned lexicon file against a set of cart trees. Prints out +The number of letters correct (for each letter), total number of +letters correct and the total number of words correct. cartmodels is +the structure as saved by merge_models." + (let ((fd (fopen file "r")) + (entry) + (wordcount 0) + (correctwords 0) + (phonecount 0) + (correctphones 0)) + (while (not (equal? (set! entry (readfp fd)) (eof-val))) + (let ((letters (enworden (wordexplode (car entry)))) + (phones (enworden (cdr (cdr entry)))) + (pphones)) + (set! wordcount (+ 1 wordcount)) + (set! pphones (gen_cartlts letters (car (cdr entry)) cartmodels)) +; (set! pphones +; (or ; unwind-protect +; (gen_vilts letters (car (cdr entry)) +; cartmodels wfstname) +; nil)) + (if (equal? (ph-normalize pphones) (ph-normalize phones)) + (set! correctwords (+ 1 correctwords)) + (or nil + (format t "failed %l %l %l %l\n" (car entry) (car (cdr entry)) phones pphones))) + (count_correct_letters ;; exclude #, cause they're always right + (cdr letters) + (cdr phones) + (cdr pphones)) + (set! phonecount (+ (length (cdr (cdr letters))) phonecount)) + )) + (fclose fd) + (mapcar + (lambda (linfo) + (format t "%s %d correct %d (%2.2f)\n" + (car linfo) (car (cdr linfo)) + (car (cdr (cdr linfo))) + (/ (* (car (cdr (cdr linfo))) 100) (car (cdr linfo)))) + (set! correctphones (+ correctphones (car (cdr (cdr linfo)))))) + correct_letter_table) + (format t "phones %d correct %d (%2.2f)\n" + phonecount correctphones (/ (* correctphones 100) phonecount)) + (format t "words %d correct %d (%2.2f)\n" + wordcount correctwords (/ (* correctwords 100) wordcount)) + (format t "tree model has %d nodes\n" + (apply + (mapcar (lambda (a) (cart_tree_node_count (car (cdr a)))) + cartmodels))) + )) + +(define (cart_tree_node_count tree) + "(tree_node_count tree) +Count the number nodes (questions and leafs) in the given CART tree." + (cond + ((cdr tree) + (+ 1 + (cart_tree_node_count (car (cdr tree))) + (cart_tree_node_count (car (cdr (cdr tree)))))) + (t + 1))) + +(defvar correct_letter_table + (mapcar + (lambda (l) (list l 0 0)) + '(a b c d e f g h i j k l m n o p q r s t u v w x y z)) + "correct_letter_table +List used to cummulate the number of correct (and incorrect) letter to +phone predictions. This list will be extended if there are more letters +in your alphabet, though it doesn't take a fairly western european +view of the alphabet, but you can change this yourself is necessary.") + +(define (count_correct_letters lets phs pphs) + "(count_correct_letters lets phs pphs) +Count which letters have the correct phone prediction. Cummulate this +is a per letter table." + (cond + ((or (null phs) (null pphs) (null lets)) + (format t "misaligned entry\n") + nil) + ((and (null (cdr lets)) (null (cdr phs)) (null (cdr pphs))) + nil) ;; omit final # + (t + (let ((letinfo (assoc_string (car lets) correct_letter_table))) + (if (not letinfo) + (set! correct_letter_table + (append correct_letter_table + (list (set! letinfo (list (car lets) 0 0)))))) + (set-car! (cdr letinfo) (+ 1 (car (cdr letinfo)))) ;; total + (if (equal? (car phs) (car pphs)) ;; correct + (set-car! (cdr (cdr letinfo)) (+ 1 (car (cdr (cdr letinfo)))))) + (count_correct_letters (cdr lets) (cdr phs) (cdr pphs)))))) + +(define (ph-normalize ph) + (cond + ((null ph) nil) + ((string-equal "_epsilon_" (car ph)) + (ph-normalize (cdr ph))) + ((string-matches (car ph) ".*-.*") + (cons + (string-before (car ph) "-") + (cons + (string-after (car ph) "-") + (ph-normalize (cdr ph))))) + (t + (cons (car ph) (ph-normalize (cdr ph)))))) + +(define (make_let_utt_p letters pos) +"(make_let_utt letters) +Build an utterances from th4ese letters." + (let ((utt (Utterance Text ""))) + (utt.relation.create utt 'LTS) + (utt.relation.create utt 'LETTER) + (utt.relation.create utt 'PHONE) + ;; Create letter stream + (mapcar + (lambda (l) + (let ((lsi (utt.relation.append utt 'LETTER))) + (item.set_name lsi l) + (item.set_feat lsi "pos" pos))) + letters) + utt)) + +(define (gen_vilts letters pos cartmodels ngram) + "(get_vilts letters pos cartmodels ngram) +Use cart plus ngrams in viterbi search." + (require 'lts) + (let ((utt (make_let_utt_p letters pos))) + (set! gen_vit_params + (list + (list 'Relation "LETTER") + (list 'return_feat "phone") + (list 'p_word "#") + (list 'pp_word "0") + (list 'ngramname ngram) +; (list 'wfstname ngram) + (list 'cand_function 'lts_cand_function))) + (Gen_Viterbi utt) + (mapcar + (lambda (lsi) + (intern (item.feat lsi "phone"))) + (utt.relation.items utt 'LETTER)))) + +(define (gen_cartlts letters pos cartmodels) + "(get_cartlts letters cartmodels) +Generate the full list of predicted phones, including +epsilon and unexpanded multi-phones." + (require 'lts) + (let ((utt (make_let_utt_p letters pos))) + (enworden + (mapcar + (lambda (lsi) + (let ((tree (car (cdr (assoc_string (item.name lsi) cartmodels)))) + (p)) + (if (not tree) + (begin + (format t "failed to find tree for %s\n" (item.name lsi)) + nil) + (begin + (set! p (wagon_predict lsi tree)) + (item.set_feat lsi "val" p) + p)))) + (reverse (cdr (reverse (cdr (utt.relation.items utt 'LETTER))))))))) + +(define (reduce_lexicon entryfile exceptionfile lts_function) + "(reduce_lexicon entryfile exceptionfile lts_function) +Look up each word in entryfile using the current lexicon, if the entry +doesn't match save it in the exception file. This is a way of reducing +the lexicon based on a letter to sound model (and lexical stress +model, if appropriate)." + (let ((fd (fopen entryfile "r")) + (ofd (fopen exceptionfile "w")) + (entry) + (wordcount 0) + (correctwords 0)) + (while (not (equal? (set! entry (readfp fd)) (eof-val))) + (if (and (consp entry) + (> (length entry) 1)) + (let ((lts (lts_function (car entry) (car (cdr entry)))) + (encount (lex.entrycount (car entry)))) + (set! wordcount (+ 1 wordcount)) + (if (and (equal? (nth 2 entry) (nth 2 lts)) + (< encount 2)) + (set! correctwords (+ 1 correctwords)) + (format ofd "%l\n" entry)) + ))) + (fclose fd) + (fclose ofd) + (format t "words %d correct %d (%2.2f)\n" + wordcount correctwords (/ (* correctwords 100) wordcount)) + )) + +(define (dump-flat-entries infile outfile ltype) + (let ((ifd (fopen infile "r")) + (ofd (fopen outfile "w")) + clength + entry) +; (set! entry (readfp ifd)) +; (if (or (consp entry) (not (string-equal entry "MNCL"))) +; (begin +; (format t "Expected MNCL at start of file: not a compiled lexicon\n") +; (exit))) + (while (not (equal? (set! entry (readfp ifd)) (eof-val))) + (cond + ((not (consp entry)) + t) ;; not an entry + ((string-equal ltype "utf8") + (set! clength (length (utf8explode (car entry))))) + (t + (set! clength (length (car entry))))) + (cond + ((not (consp entry)) + t) ;; not an entry + ((and ;(string-matches (car entry) "...*") + ;(< clength 14) + (not (string-matches (car entry) ".*'.*")) ;; no quotes + (car (cddr entry))) ;; non-nil pronounciation + (begin + (cond + ((string-equal ltype "utf8") + (format ofd + "( %l %l (" + (utf8explode (car entry)) + (cadr entry))) + ((string-equal ltype "asis") + (format ofd + "( \"%s\" %l (" + (car entry) + (cadr entry))) + (t + (format ofd + "( \"%s\" %l (" + (downcase (car entry)) + (cadr entry)))) + (if (consp (car (car (cddr entry)))) + (begin ;; it is syllabified) + (mapcar + (lambda (syl) + (mapcar + (lambda (seg) + (cond + ((string-matches seg "[aeiouAEIOU@].*") + (format ofd "%s " (string-append seg (cadr syl)))) + (t + (format ofd "%s " seg)))) + (car syl))) + (car (cddr entry)))) + (begin ;; it is already flat + (mapcar + (lambda (p) + (format ofd "%s " p)) + (car (cddr entry))) + )) + (format ofd "))\n"))) + (t nil))) + (fclose ifd) + (fclose ofd))) + +(define (dump-lets-phones infile) + "(dump-lets-phones infile) +Dump all the letters to alllets.out and phones to allphones.out for processing. +This expects an external script to sort and uniquify them. This is done +in scheme so we can get utf8/non-utf8 to be easy." + (let ((ifd (fopen infile "r")) + (lfd (fopen "alllets.out" "w")) + (apfd (fopen "allphones.out" "w")) + (pfd (fopen "let2phones.out" "w")) + entry) + (while (not (equal? (set! entry (readfp ifd)) (eof-val))) + (mapcar + (lambda (l) + (format lfd "%s\n" l) + (format pfd "%s " l) + (mapcar + (lambda (p) (format pfd "%s " p)) + (car (cddr entry))) + (format pfd "\n")) + (wordexplode (car entry))) + (mapcar + (lambda (p) (format apfd "%s " p)) + (car (cddr entry))) + (format apfd "\n") + ) + (fclose ifd) + (fclose lfd) + (fclose pfd) + (fclose apfd) + t)) + +(define (dump-flat-entries-all infile outfile) + "(dump-flat-entries-all infile outfile) +Do this for *all* entries not just ones with more than three chars." + (let ((ifd (fopen infile "r")) + (ofd (fopen outfile "w")) + entry) + (readfp ifd) ;; skip "MNCL" + (while (not (equal? (set! entry (readfp ifd)) (eof-val))) + (if (consp entry) + (begin + (format ofd + "( \"%s\" %s (" + (downcase (car entry)) + (cadr entry)) + (mapcar + (lambda (syl) + (mapcar + (lambda (seg) + (cond +; ((string-equal seg "ax") +; (format ofd "%s " seg)) + ((string-matches seg "[aeiouAEIOU@].*") + (format ofd "%s " (string-append seg (cadr syl)))) + (t + (format ofd "%s " seg)))) + (car syl))) + (car (cddr entry))) + (format ofd "))\n")))) + (fclose ifd) + (fclose ofd))) + +(provide 'lts_build) + diff --git a/lib/mbrola.scm b/lib/mbrola.scm new file mode 100644 index 0000000..77d1e42 --- /dev/null +++ b/lib/mbrola.scm @@ -0,0 +1,103 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Support for MBROLA as an external module. +;;; + +;;; You might want to set this in your sitevars.scm +(defvar mbrola_progname "/cstr/external/mbrola/mbrola" + "mbrola_progname + The program name for mbrola.") +(defvar mbrola_database "fr1" + "mbrola_database + The name of the MBROLA database to usde during MBROLA Synthesis.") + +(define (MBROLA_Synth utt) + "(MBROLA_Synth UTT) + Synthesize using MBROLA as external module. Basically dump the info + from this utterance. Call MBROLA and reload the waveform into utt. + [see MBROLA]" + (let ((filename (make_tmp_filename)) + ) + (save_segments_mbrola utt filename) + (system (string-append mbrola_progname " " + mbrola_database " " + filename " " + filename ".au")) + (utt.import.wave utt (string-append filename ".au")) + (apply_hooks after_synth_hooks utt) + (delete-file filename) + (delete-file (string-append filename ".au")) + utt)) + +(define (save_segments_mbrola utt filename) + "(save_segments_mbrola UTT FILENAME) + Save segment information in MBROLA format in filename. The format is + phone duration (ms) [% position F0 target]*. [see MBROLA]" + (let ((fd (fopen filename "w"))) + (mapcar + (lambda (segment) + (save_seg_mbrola_entry + (item.feat segment 'name) + (item.feat segment 'segment_start) + (item.feat segment 'segment_duration) + (mapcar + (lambda (targ_item) + (list + (item.feat targ_item "pos") + (item.feat targ_item "f0"))) + (item.relation.daughters segment 'Target)) ;; list of targets + fd)) + (utt.relation.items utt 'Segment)) + (fclose fd))) + +(define (save_seg_mbrola_entry name start dur targs fd) + "(save_seg_mbrola_entry ENTRY NAME START DUR TARGS FD) + Entry contains, (name duration num_targs start 1st_targ_pos 1st_targ_val)." + (format fd "%s %d " name (nint (* dur 1000))) + (if targs ;; if there are any targets + (mapcar + (lambda (targ) ;; targ_pos and targ_val + (let ((targ_pos (car targ)) + (targ_val (car (cdr targ)))) + + (format fd "%d %d " + (nint (* 100 (/ (- targ_pos start) dur))) ;; % pos of target + (nint (parse-number targ_val))) ;; target value + )) + targs)) + (terpri fd) + (terpri fd) +) + +(provide 'mbrola) diff --git a/lib/mettree.scm b/lib/mettree.scm new file mode 100644 index 0000000..638ded1 --- /dev/null +++ b/lib/mettree.scm @@ -0,0 +1,88 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Some (experimental) data for investigating metrical trees +;;; + +;;; Set up generation of metrical tree, this includes getting +;;; a syntactic parse +;;; +;;; Use as +;;; (set! utt1 (metsynth (Utterance Text "For afternoon tea"))) +;;; (utt.relation_tree utt1 'MetricalTree) + +(require 'scfg) +(set! scfg_grammar (load (path-append libdir "scfg_wsj_wp20.gram") t)) + +(define (mettext utt) + (Initialize utt) + (Text utt) + (Token_POS utt) + (Token utt) + (POS utt) + (print "here1") + (Phrasify utt) + (print "here2") + (ProbParse utt) + (print "here3") + (auto_metrical_tree utt) +) + +(define (metsynth utt) + (mettext utt) + (Wave_Synth utt) +) + +;;; Assumed everything is using Roger diphones + +;;(lex.create "cmu_mettree") +;;;(lex.set.phoneset "radio_phones") +;;(lex.set.phoneset "radio_phones") + +(define (setup_cmu_mettree_lex) + "(setup_cmu_mettreelex) +Lexicon derived from the CMU lexicon (cmudict-0.1), around 100,000 entries, +in the radio phoneset (sort of darpa-like)." + (if (not (member_string "cmu_mettree" (lex.list))) + (begin + (print "making cmu lexicon") + (lex.create "cmu_mettree") + (lex.set.compile.file (path-append lexdir "cmu_mettree_lex.out")) + (lex.set.phoneset "radio") + (require 'lts__us) ;; US English letter to sound rules + (lex.set.lts.method 'lts_rules) + (lex.set.lts.ruleset 'nrl_us)))) + +(provide 'mettree) + + diff --git a/lib/module_description.scm b/lib/module_description.scm new file mode 100644 index 0000000..0cf426f --- /dev/null +++ b/lib/module_description.scm @@ -0,0 +1,117 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Handle module descriptions. +;;; + +(defvar *module-descriptions* nil + "*module-descriptions* + An association list recording the description objects for proclaimed + modules.") + +(define (set_module_description mod desc) + "(set_module_description MOD DESC) + Set the description for the module named MOD." + (let ((entry (assoc mod *module-descriptions*))) + (if entry + (set-cdr! entry (cons desc nil)) + (set! *module-descriptions* (cons (cons mod (cons desc nil)) + *module-descriptions*)) + ) + ) + ) + +(define (module_description mod) + "(module_description MOD) + Returns the description record of the module named by symbol MOD" + (let ((entry (assoc mod *module-descriptions*))) + (if entry + (car (cdr entry)) + nil + ) + ) + ) + +(defmac (proclaim form) + "(proclaim NAME &opt DESCRIPTION...) + Anounce the availability of a module NAME. DESCRIPTION + is a description in a fixed format." + (let ((name (car (cdr form))) + (description (cdr form)) + ) + (list 'proclaim-real (list 'quote name) (list 'quote description)) + ) + ) + +(define (proclaim-real name description) + (set! *modules* (cons name *modules*)) +; (if description +; (set_module_description name (create_module_description description)) +; ) + ) + +(define (describe_module mod) + "(describe_module MOD) + Describe the module named by the symbol MOD." + + (let ((entry (module_description mod))) + (format t "---------------------\n") + (if entry + (print_module_description entry) + (format t "No description for %l\n" mod) + ) + (format t "---------------------\n") + ) + ) + +(define (describe_all_modules) + "(describe_all_modules) + Print descriptions of all proclaimed modules" + (format t "---------------------\n") + (let ((p *module-descriptions*)) + (while p + (print_module_description (car (cdr (car p)))) + (format t "---------------------\n") + (set! p (cdr p)) + ) + ) + ) + +(proclaim + module_description 1.1 + "CSTR" "Richard Caley " + ( "Handle module descriptions from C++ and from Scheme." + ) + ) + +(provide 'module_description) diff --git a/lib/mrpa_allophones.scm b/lib/mrpa_allophones.scm new file mode 100644 index 0000000..fbabf36 --- /dev/null +++ b/lib/mrpa_allophones.scm @@ -0,0 +1,111 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; A definition of the extended mrpa phone set used for some diphone sets +;; + +(defPhoneSet + mrpa_allophones + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 -) + ;; vowel frontness: front mid back + (vfront 1 2 3 -) + ;; lip rounding + (vrnd + -) + ;; consonant type: stop fricative affricative nasal liquid + (ctype s f a n l 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar + (cplace l a p b d v 0) + ;; consonant voicing + (cvox + -) + ) + ;; Phone set members + ( + (uh + s 2 3 - 0 0 +) + (e + s 2 1 - 0 0 +) + (a + s 3 1 - 0 0 +) + (o + s 3 3 - 0 0 +) + (i + s 1 1 - 0 0 +) + (u + s 1 3 + 0 0 +) + (ii + l 1 1 - 0 0 +) + (uu + l 2 3 + 0 0 +) + (oo + l 3 2 - 0 0 +) + (aa + l 3 1 - 0 0 +) + (@@ + l 2 2 - 0 0 +) + (ai + d 3 1 - 0 0 +) + (ei + d 2 1 - 0 0 +) + (oi + d 3 3 - 0 0 +) + (au + d 3 3 + 0 0 +) + (ou + d 3 3 + 0 0 +) + (e@ + d 2 1 - 0 0 +) + (i@ + d 1 1 - 0 0 +) + (u@ + d 3 1 - 0 0 +) + (@ + a - - - 0 0 +) + (p - 0 - - + s l -) + (t - 0 - - + s a -) + (k - 0 - - + s p -) + (b - 0 - - + s l +) + (d - 0 - - + s a +) + (g - 0 - - + s p +) + (s - 0 - - + f a -) + (z - 0 - - + f a +) + (sh - 0 - - + f p -) + (zh - 0 - - + f p +) + (f - 0 - - + f b -) + (v - 0 - - + f b +) + (th - 0 - - + f d -) + (dh - 0 - - + f d +) + (ch - 0 - - + a a -) + (jh - 0 - - + a a +) + (h - 0 - - + a v -) + (m - 0 - - + n l +) + (n - 0 - - + n d +) + (ng - 0 - - + n v +) + (l - 0 - - + l d +) + (ll - 0 - - + l d +) + (y - 0 - - + l a +) + (r - 0 - - + l p +) + (w - 0 - - + l l +) + (# - 0 - - - 0 0 -) + ) + ) + +(PhoneSet.silences '(#)) + +(provide 'mrpa_allophones) diff --git a/lib/mrpa_durs.scm b/lib/mrpa_durs.scm new file mode 100644 index 0000000..86b14ca --- /dev/null +++ b/lib/mrpa_durs.scm @@ -0,0 +1,136 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; mrpa average phoneme durations from gsw 450 +;;; +(set! phoneme_durations +'( +(u 0.067) +(i@ 0.146) +(h 0.067) +(uu 0.105) +(uh 0.090) +(v 0.053) +(oo 0.145) +(i 0.060) +(jh 0.097) +(ii 0.095) +(w 0.066) +(k 0.088) +(+ 0.036) +(y 0.051) +(l 0.067) +(zh 0.080) +(ng 0.072) +(m 0.070) +(z 0.079) +(## 0.256) +(au 0.162) +(a 0.118) +(n 0.065) +(o 0.102) +(ai 0.156) +(b 0.071) +(ou 0.129) +(ch 0.119) +(p 0.094) +(oi 0.165) +(# 0.040) +(e@ 0.131) +(d 0.052) +(dh 0.032) +(e 0.091) +(r 0.062) +(sh 0.101) +(@@ 0.149) +(ei 0.131) +(f 0.091) +(s 0.093) +(g 0.066) +(u@ 0.120) +(aa 0.173) +(t 0.073) +(th 0.080) +(@ 0.054) +)) + +(set! gsw_durs +'( +(# 0.200 0.100) +(h 0.061 0.028) +(i@ 0.141 0.061) +(u 0.067 0.024) +(uu 0.107 0.044) +(uh 0.087 0.025) +(v 0.051 0.019) +(oo 0.138 0.046) +(i 0.058 0.023) +(ii 0.092 0.035) +(w 0.054 0.023) +(jh 0.094 0.024) +(k 0.089 0.034) +(y 0.048 0.025) +(l 0.056 0.026) +(zh 0.077 0.030) +(ng 0.064 0.024) +(m 0.063 0.021) +(z 0.072 0.029) +(a 0.120 0.036) +(au 0.171 0.046) +(n 0.059 0.025) +(ou 0.134 0.039) +(b 0.073 0.021) +(o 0.094 0.037) +(ai 0.137 0.047) +(ch 0.128 0.039) +(oi 0.183 0.050) +(p 0.101 0.032) +(e@ 0.144 0.061) +(d 0.048 0.021) +(dh 0.031 0.016) +(e 0.092 0.035) +(r 0.053 0.025) +(sh 0.108 0.031) +(f 0.095 0.033) +(@@ 0.147 0.035) +(ei 0.130 0.042) +(s 0.102 0.037) +(u@ 0.140 0.057) +(th 0.093 0.050) +(g 0.064 0.021) +(aa 0.155 0.045) +(t 0.070 0.034) +(@ 0.046 0.020) +)) + +(provide 'mrpa_durs) diff --git a/lib/mrpa_phones.scm b/lib/mrpa_phones.scm new file mode 100644 index 0000000..84e2c17 --- /dev/null +++ b/lib/mrpa_phones.scm @@ -0,0 +1,114 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Centre for Speech Technology Research ;; +;; University of Edinburgh, UK ;; +;; Copyright (c) 1996,1997 ;; +;; All Rights Reserved. ;; +;; ;; +;; Permission is hereby granted, free of charge, to use and distribute ;; +;; this software and its documentation without restriction, including ;; +;; without limitation the rights to use, copy, modify, merge, publish, ;; +;; distribute, sublicense, and/or sell copies of this work, and to ;; +;; permit persons to whom this work is furnished to do so, subject to ;; +;; the following conditions: ;; +;; 1. The code must retain the above copyright notice, this list of ;; +;; conditions and the following disclaimer. ;; +;; 2. Any modifications must be clearly marked as such. ;; +;; 3. Original authors' names are not deleted. ;; +;; 4. The authors' names are not used to endorse or promote products ;; +;; derived from this software without specific prior written ;; +;; permission. ;; +;; ;; +;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;; THIS SOFTWARE. ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; A definition of the mrpa phone set +;; + +(defPhoneSet + mrpa + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 0) + ;; vowel frontness: front mid back + (vfront 1 2 3 0) + ;; lip rounding + (vrnd + - 0) + ;; consonant type: stop fricative affricate nasal lateral approximant + (ctype s f a n l r 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar glottal + (cplace l a p b d v g 0) + ;; consonant voicing + (cvox + - 0) + ) + ;; Phone set members + ( + (uh + s 2 3 - 0 0 0) + (e + s 2 1 - 0 0 0) + (a + s 3 1 - 0 0 0) + (o + s 2 3 + 0 0 0) + (i + s 1 1 - 0 0 0) + (u + s 1 3 + 0 0 0) + (ii + l 1 1 - 0 0 0) + (uu + l 1 3 + 0 0 0) + (oo + l 3 3 + 0 0 0) + (aa + l 3 3 - 0 0 0) + (@@ + l 2 2 - 0 0 0) + (ai + d 3 2 - 0 0 0) + (ei + d 2 1 - 0 0 0) + (oi + d 3 3 + 0 0 0) + (au + d 3 2 + 0 0 0) + (ou + d 2 2 - 0 0 0) + (e@ + d 2 1 - 0 0 0) + (i@ + d 1 1 - 0 0 0) + (u@ + d 3 1 + 0 0 0) + (@ + a 2 2 - 0 0 0) + (p - 0 0 0 0 s l -) + (t - 0 0 0 0 s a -) + (k - 0 0 0 0 s v -) + (b - 0 0 0 0 s l +) + (d - 0 0 0 0 s a +) + (g - 0 0 0 0 s v +) + (s - 0 0 0 0 f a -) + (z - 0 0 0 0 f a +) + (sh - 0 0 0 0 f p -) + (zh - 0 0 0 0 f p +) + (f - 0 0 0 0 f b -) + (v - 0 0 0 0 f b +) + (th - 0 0 0 0 f d -) + (dh - 0 0 0 0 f d +) + (ch - 0 0 0 0 a p -) + (jh - 0 0 0 0 a p +) + (h - 0 0 0 0 f g -) + (m - 0 0 0 0 n l +) + (n - 0 0 0 0 n a +) + (ng - 0 0 0 0 n v +) + (l - 0 0 0 0 l a +) + (y - 0 0 0 0 r p +) + (r - 0 0 0 0 r a +) + (w - 0 0 0 0 r l +) + (# - 0 0 0 0 0 0 -) + ) + ) + +(PhoneSet.silences '(#)) + +(provide 'mrpa_phones) + + + + diff --git a/lib/multisyn/Makefile b/lib/multisyn/Makefile new file mode 100644 index 0000000..ceed122 --- /dev/null +++ b/lib/multisyn/Makefile @@ -0,0 +1,46 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 2004 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +# # +# Makefile for lib/multisyn directory # +# # +########################################################################### +TOP=../.. +DIRNAME=lib/multisyn + +PHONESETS = radio_phones_multisyn.scm +GENERAL = multisyn.scm multisyn_pauses.scm target_cost.scm +OTHERS = send_xwaves.scm + +FILES=Makefile $(PHONESETS) $(GENERAL) $(OTHERS) + +include $(TOP)/config/common_make_rules diff --git a/lib/multisyn/multisyn.scm b/lib/multisyn/multisyn.scm new file mode 100644 index 0000000..dcdd6a8 --- /dev/null +++ b/lib/multisyn/multisyn.scm @@ -0,0 +1,195 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2003, 2004 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Multisyn top level scheme code (Korin Richmond and Rob Clark) +;;; + +; Requires +(require_module 'UniSyn) +(require_module 'MultiSyn) +(require 'multisyn_pauses) +(require 'target_cost) + +;; use a global parameter to specify which UnitSelection voice +;; to use to synthesise a given utterance for now, because the +;; standard Festival synthesis mainline doesn't accept a voice +;; parameter. (This should be set to the current voice object) +(defvar currentMultiSynVoice nil) +(defvar relp t) +(defvar flattenVoice nil) + +; extract utt list from a .data file +(define (load_utt_list filename) +"(load_utt_list filename) +Loads a fextvox .data file and extracts an utterance list." +(let (l entries) + (set! entries (load filename t)) + (mapcar + (lambda (d) + (set! l (cons (car d) l)) + t) + entries) +l)) + +;; SynthType definition, main entry point. + +(defSynthType MultiSyn + ;(print "Multisyn unit selection synthesis") + (defvar MultiSyn_module_hooks nil) + (Param.def "unisyn.window_name" "hanning") + (Param.def "unisyn.window_factor" 1.0) + ;; Unisyn requires these to be set. + (set! us_abs_offset 0.0) + (set! us_rel_offset 0.0) + + (apply_hooks MultiSyn_module_hooks utt) ;; 4processing of diphone names + + ;; find appropriate unit sequence and put sythesis + ;; parameters in the Unit relation of the utterance structure + (voice.getUnits currentMultiSynVoice utt) + + ;(print "doing concat") + (us_unit_concat utt) + + ;(print "doing raw concat") + + (utt.relation.create utt 'SourceSegments) + + (set! do_prosmod (du_voice.prosodic_modification currentMultiSynVoice)) + + (if do_prosmod + (begin + (if (not (member 'f0 (utt.relationnames utt))) + (targets_to_f0 utt)) + ;; temporary fix + (if (utt.relation.last utt 'Segment) + (set! pm_end (+ (item.feat (utt.relation.last utt 'Segment) "end") 0.02)) + (set! pm_end 0.02)) + (us_f0_to_pitchmarks utt 'f0 'TargetCoef pm_end) + (us_mapping utt 'segment_single)) + (begin + (utt.copy_relation utt 'SourceCoef 'TargetCoef) + (us_mapping utt "linear"))) + + + ;(print "generating wave") +;; specify something else if you don't want lpc + (us_generate_wave utt 'lpc) +) + + +; target cost scheme code +(define (targetcost it1 it2) + (Default_Target_Cost it1 it2)) + +; Evil function which writes the functions to actually load and switch new voices. +(define (make_voice_definition name srate config_function backoff_rules data_dir config) + "(make_voice_definition NAME SRATE CONFIG_FUNCTION BACKOFF_RULES DATA_DIR CONFIG) +Create the fuction definitions to load and unload a voice." + (let ((voice_name (string-append "voice_" name)) + (free_name (string-append "free_voice_" name)) + (pre_config_function (string-append config_function "_pre")) + (voice_variable (upcase (string-append "voice_" name)))) + + (eval (list 'defvar (intern voice_variable) nil)) + + (eval (list 'define (list (intern voice_name)) + (list 'if (intern pre_config_function) + (list (intern pre_config_function) (intern voice_variable))) + (list 'if (list 'null (intern voice_variable)) + (list 'set! (intern voice_variable) + (list 'multisyn_load_voice_modules + (list 'quote name) + srate + (list 'quote backoff_rules) + data_dir + (list 'quote config)))) + (list (intern config_function) (intern voice_variable)) + (list 'set! 'current-voice (list 'quote name)) + (list 'define_current_voice_reset) + (list 'set! 'currentMultiSynVoice (intern voice_variable)) + )) + + (eval (list 'define + (list (intern free_name)) + (list 'cond + (list (list 'null (intern voice_variable)) + (list 'error "Voice not currently loaded!")) + (list (list 'eq? 'currentMultiSynVoice (intern voice_variable)) + (list 'error "Can't free current voice!")) + (list 't (list set! (intern voice_variable) 'nil)))))) + nil) + +(define (multisyn_load_voice_modules name srate backoff_rules base_dir module_list) +"(multisyn_add_module voice name srate backoff_rules base_dir module_list) +Add voice modules to a voice." +(let (voice) + (mapcar + (lambda (module_entry) + (let ((dirs (car module_entry)) + (utt_list (load_utt_list (path-append base_dir + (cadr module_entry))))) + (if (null voice) + (set! voice (make_du_voice utt_list dirs srate)) + (voice.addModule voice utt_list dirs srate)))) + module_list) + (voice.setName voice name) + (if flattenVoice + (du_voice.setTargetCost voice "flat") + (du_voice.setTargetCost voice t)) + (du_voice.setJoinCost voice t) + (format t "Please wait: Initialising multisyn voice.\n") + (voice.init voice) + (format t " Voice loaded successfully!\n") + (du_voice.set_ob_pruning_beam voice 0.25) + (du_voice.set_pruning_beam voice 0.25) + (du_voice.setDiphoneBackoff voice backoff_rules) +voice)) + + + + +(define (define_current_voice_reset) +"(define_current_voice_reset) +Re-define (current_voice_reset) correctly." + (eval (list 'define + (list 'current_voice_reset) + (list 'multisyn_reset_globals)))) + +(define (multisyn_reset_globals) +"(multisyn_reset_globals) +Reset multisyn specific global variables." +(Param.set 'unisyn.window_symmetric 1)) + + +(provide 'multisyn) diff --git a/lib/multisyn/multisyn_pauses.scm b/lib/multisyn/multisyn_pauses.scm new file mode 100644 index 0000000..9ea457b --- /dev/null +++ b/lib/multisyn/multisyn_pauses.scm @@ -0,0 +1,102 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2003, 2004 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Multisyn Pause module (Rob Clark and Korin Richmond) +;;; +;;; + +(defvar BB_Pause "B_300") +(defvar B_Pause "B_150") +(defvar mB_Pause "B_150") ; shouldn't be used + +(define (MultiSyn_Pauses utt) + "(MultiSyn_Pauses UTT) +Predict pause insertion in a Multisyn unit selection utterance structure." + (let ((words (utt.relation.items utt 'Word)) lastword tpname) + (if words + (begin + (insert_initial_pause utt) ;; always have a start pause + (set! lastword (car (last words))) + (mapcar + (lambda (w) + (let ((pbreak (item.feat w "pbreak")) + (emph (item.feat w "R:Token.parent.EMPH"))) + (cond + ((string-equal pbreak "BB") + (unitselection_pause_insert w BB_Pause)) + ((string-equal pbreak "mB") + (unitselection_pause_insert w mB_Pause)) + ((string-equal pbreak "B") + (unitselection_pause_insert w B_Pause))))) + words) + ;; The embarassing bit. Remove any words labelled as punc or fpunc + (mapcar + (lambda (w) + (let ((pos (item.feat w "pos"))) + (if (or (string-equal "punc" pos) + (string-equal "fpunc" pos)) + (let ((pbreak (item.feat w "pbreak")) + (wp (item.relation w 'Phrase))) + (if (and (string-matches pbreak "BB?") + (item.relation.prev w 'Word)) + (item.set_feat + (item.relation.prev w 'Word) "pbreak" pbreak)) + (item.relation.remove w 'Word) + ;; can't refer to w as we've just deleted it + (item.relation.remove wp 'Phrase))))) + words))) + (utt.relation.print utt 'Word) + (utt.relation.print utt 'Segment) + utt)) + +(define (unitselection_pause_insert word pause) + "(pause_insert word pause) + Insert segments needed for a pause." +(let ((silence (car (cadr (car (PhoneSet.description '(silences)))))) + (seg (item.relation (find_last_seg word) 'Segment)) + pause_item) + (format t " inserting pause after: %s.\n" (item.name seg)) + (format t " Inserting pause\n") +; if next seg is not silence insert one. + (if (or (not (item.next seg)) + (not (string-equal (item.name (item.next seg)) silence))) + (item.insert seg (list silence) 'after)) +; insert pause after that if not the end. + (if (item.next (item.next seg)) + (begin + (set! pause_item (item.insert (item.next seg) (list pause) 'after)) +;if next seg after that is not silence add one. + (if (not (string-equal (item.name (item.next pause_item)) silence)) + (item.insert pause_item (list silence) 'after)))))) + +(provide 'multisyn_pauses) diff --git a/lib/multisyn/radio_phones_multisyn.scm b/lib/multisyn/radio_phones_multisyn.scm new file mode 100644 index 0000000..1c6af01 --- /dev/null +++ b/lib/multisyn/radio_phones_multisyn.scm @@ -0,0 +1,136 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997,2003, 2004 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A definition of the radio phone set used in the BU RADIO FM +;;; corpus, some people call this the darpa set. This one +;;; has the closures removed and pauses added for multisyn +;;; + +(defPhoneSet + radio_multisyn + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 0) + ;; vowel frontness: front mid back + (vfront 1 2 3 0) + ;; lip rounding + (vrnd + - 0) + ;; consonant type: stop fricative affricate nasal lateral approximant + (ctype s f a n l r 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar glottal + (cplace l a p b d v g 0) + ;; consonant voicing + (cvox + - 0) + ) + ;; Phone set members + ( + ;; multisyn extras + (# - 0 0 0 0 0 0 -) ;; slience ... + (B_10 - 0 0 0 0 0 0 -) ;; Pauses + (B_20 - 0 0 0 0 0 0 -) ;; Pauses + (B_30 - 0 0 0 0 0 0 -) ;; Pauses + (B_40 - 0 0 0 0 0 0 -) ;; Pauses + (B_50 - 0 0 0 0 0 0 -) ;; Pauses + (B_100 - 0 0 0 0 0 0 -) ;; Pauses + (B_150 - 0 0 0 0 0 0 -) ;; Pauses + (B_200 - 0 0 0 0 0 0 -) ;; Pauses + (B_250 - 0 0 0 0 0 0 -) ;; Pauses + (B_300 - 0 0 0 0 0 0 -) ;; Pauses + (B_400 - 0 0 0 0 0 0 -) ;; Pauses + + ;; Note these features were set by awb so they are wrong !!! + (aa + l 3 3 - 0 0 0) ;; father + (ae + s 3 1 - 0 0 0) ;; fat + (ah + s 2 2 - 0 0 0) ;; but + (ao + l 3 3 + 0 0 0) ;; lawn + (aw + d 3 2 - 0 0 0) ;; how + (ax + a 2 2 - 0 0 0) ;; about + (axr + a 2 2 - r a +) + (ay + d 3 2 - 0 0 0) ;; hide + (b - 0 0 0 0 s l +) + (ch - 0 0 0 0 a p -) + (d - 0 0 0 0 s a +) + (dh - 0 0 0 0 f d +) + (dx - a 0 0 0 s a +) ;; ?? + (eh + s 2 1 - 0 0 0) ;; get + (el + s 0 0 0 l a +) + (em + s 0 0 0 n l +) + (en + s 0 0 0 n a +) + (er + a 2 2 - r 0 0) ;; always followed by r (er-r == axr) + (ey + d 2 1 - 0 0 0) ;; gate + (f - 0 0 0 0 f b -) + (g - 0 0 0 0 s v +) + (hh - 0 0 0 0 f g -) + (hv - 0 0 0 0 f g +) + (ih + s 1 1 - 0 0 0) ;; bit + (iy + l 1 1 - 0 0 0) ;; beet + (jh - 0 0 0 0 a p +) + (k - 0 0 0 0 s v -) + (l - 0 0 0 0 l a +) + (m - 0 0 0 0 n l +) + (n - 0 0 0 0 n a +) + (nx - 0 0 0 0 n d +) ;; ??? + (ng - 0 0 0 0 n v +) + (ow + d 2 3 + 0 0 0) ;; lone + (oy + d 2 3 + 0 0 0) ;; toy + (p - 0 0 0 0 s l -) + (r - 0 0 0 0 r a +) + (s - 0 0 0 0 f a -) + (sh - 0 0 0 0 f p -) + (t - 0 0 0 0 s a -) + (th - 0 0 0 0 f d -) + (uh + s 1 3 + 0 0 0) ;; full + (uw + l 1 3 + 0 0 0) ;; fool + (v - 0 0 0 0 f b +) + (w - 0 0 0 0 r l +) + (y - 0 0 0 0 r p +) + (z - 0 0 0 0 f a +) + (zh - 0 0 0 0 f p +) + (pau - 0 0 0 0 0 0 -) + (h# - 0 0 0 0 0 0 -) + (brth - 0 0 0 0 0 0 -) + ) +) + +(PhoneSet.silences '(# pau h# brth)) + +(provide 'radio_phones_multisyn) + + + + diff --git a/lib/multisyn/send_xwaves.scm b/lib/multisyn/send_xwaves.scm new file mode 100644 index 0000000..f498324 --- /dev/null +++ b/lib/multisyn/send_xwaves.scm @@ -0,0 +1,318 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2003, 2004 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; xwaves interface for festival for multisyn (Rob Clark) +;;; +;;; This is never loaded by defualt. +;;; You'd need to change the paths here for this to currently work outside of CSTR. +;;; If anyone else ends up using it let me know and I'll make it more robust. +;;; + +;; Send commands to xwaves + +(defvar send_xwaves_command "/cstr/linux/entropic/esps531.linux/bin/send_xwaves") +(defvar spectrogram_command "/cstr/linux/entropic/esps531.linux/bin/sgram") +(defvar data_path "/projects/cougar/data/cstr/nina") + +(set! xw_object_count 0) +(set! xw_active_list nil) + +;; +;; Display a synthesised utterance +;; +(define (xwaves_display_utterance utt) +"(xwaves_display_utterance utt) +Display join and target information for an utterance." + (let ((units (utt.relation.items utt 'Unit)) + (object (xw_name_object)) + wavfile specfile segfile diphfile joinfile targfile sourcefile timefile) + + (set! wavfile (xw_make_tmp_filename object)) + (set! specfile (xw_make_tmp_filename object)) + (set! segfile (xw_make_tmp_filename object)) + (set! diphfile (xw_make_tmp_filename object)) + (set! joinfile (xw_make_tmp_filename object)) + (set! targfile (xw_make_tmp_filename object)) + (set! sourcefile (xw_make_tmp_filename object)) + (set! timefile (xw_make_tmp_filename object)) + + ; display resulting waveform + (utt.save.wave utt wavfile 'riff) + (xwaves_show_general object wavfile 1500 200 10 10) + ; display resulting spectrogram + (xw_genspec wavfile specfile) + (xwaves_show_general object specfile 1500 400 10 260) + ; segments + (utt.save.unit_selection_segs utt segfile) + (xwaves_show_labels object segfile specfile) + ; Unit information + (utt.save.unit_selection_info utt diphfile joinfile targfile sourcefile timefile) + (xwaves_show_labels object timefile specfile) + (xwaves_show_labels object sourcefile specfile) + (xwaves_show_labels object targfile specfile) + (xwaves_show_labels object joinfile specfile) + (xwaves_show_labels object diphfile specfile) + ; mark files + (xw_register_active object (list wavfile specfile segfile diphfile joinfile sourcefile timefile)) +)) + +;; +;; Edit a diphone source +;; + +(define (xwaves_edit_diphone utt id) + "(xwaves_edit_diphone utt id) +Access the source diphone for label correction." +(let ((diphone nil) + segfilename + wavefilename + (utt (Utterance Text nil)) + segs + (seg nil) + (start 0) + end) + + ;; find unit. + (mapcar + (lambda (unit) + (if (string-equal (format nil "_%s" id) (item.feat unit id)) + (set! diphone unit))) + (utt.relation.items utt 'Unit)) + (if (null diphone) + (error (format nil "Diphone with id _%s not found in utterance."))) + (set! uttname (item.feat diphone "source_utt")) + (set! end (item.feat diphone "source_end")) + + (set! segfilename (format nil "%s/lab/%s.lab" data_path uttname)) + (set! wavefilename (format nil "%s/wav/%s.wav" data_path uttname)) + (utt.relation.load utt 'Segment segfilename) + + (set! segs (utt.relation.items utt 'Segment)) + (while (and segs + (not (equal? (item.feat (car segs) "end") end))) + (set! segs (cdr segs))) + + if null seg ... + + (if (item.prev diphone) + (set! start (item.feat seg "start")) + (set! start 0)) + + +)) + + + + + +;; +;; Interface with xwaves. +;; + + +(define (xwaves_show_general object file width height xpos ypos) +"(xwaves_show_general object file width height xpos ypos) +Display an wave or track file." + (xw_send (format nil "make name %s file %s width %d height %d loc_x %d loc_y %d" object file width height xpos ypos))) + +(define (xwaves_show_wave object file) +"(xwaves_show_wave object file) +Display a waveform." + (xwaves_show_general object file 1500 200 10 10)) + +(define (xwaves_show_labels object file attachto) +"(xwaves_show_labels object file attachto) +Display a label file." + (xw_send (format nil "send make signal %s name %s file %s color 125" attachto object file)) + (xw_send "send activate fields 1 2 3 4 5")) + + +(define (xwaves_attach_xlabel) +"(xwaves_attach_xlabel) +Attach xlabel to xwaves." + (xw_send "attach function xlabel")) + +(define (xwaves_set_markers object left right) +"(xwaves_set_markers object left right) +Set the markers." + (xw_send (format nil "%s set l_marker_time %f" object left)) + (xw_send (format nil "%s set r_marker_time %f" object right))) + +(define (xwaves_bracket_markers object file) +"(xwaves_bracket_markers object file) +Bracket markers." + (xw_send (format nil "%s bracket file %s " object file))) + +(define (xwaves_close_windows object) +"(xwaves_close_windows object) +Close currently open windows related to object or all if nil.." +(cond + ((null object) + (xw_send "kill")) + (t + (xw_send (format nil "kill name %s" object)))) +(xw_clear_active_list object)) + + +(define (xwaves_wait) +"(xwaves_wait) +Wait for xwaves continue signal." + (xw_send "pause")) + + +;; +;; Object naming +;; +(define (xw_name_object) +"(xw_name_object) +Generate a name for this object." +(let (name) + (set! name (string-append "obj" xw_object_count)) + (set! xw_object_count (+ xw_object_count 1)) + name)) + +;; +;; Temp file lists +;; + +(define (xw_clear_active_list object) +"(xw_clear_active_list) +Clear active list of specified object, or all if nil." +(let (new_active_list) +(mapcar + (lambda (objectlist) + (cond + ((or (null object) + (string-equal object (car objectlist))) + (mapcar + (lambda (file) + (delete-file file)) + (cadr objectlist))) + (t + (set! new_active_list (cons objectlist new_active_list))))) + xw_active_list) +(set! xw_active_list new_active_list)) +nil) + + +(define (xw_register_active object flist) + "(xw_register_active object flist) +Adds an object and its filenames to the active list." + (set! xw_active_list (cons (cons object (list flist)) xw_active_list)) + nil) + +(define (xw_make_tmp_filename object) + "(xw_make_tmp_filename) +make tmp file name which incorporates object name." +(format nil "%s_%s" (make_tmp_filename) object)) + + +;; +;; Low level xwaves stuff. +;; + +(define (xw_genspec wavfile specfile) +"(xw_genspec wavfile specfile) +Generate a spectrogram file." + (system (format nil "%s -dHAMMING -o8 -E0.94 -S2 -w8 %s %s\n" spectrogram_command wavfile specfile))) + +(define (xw_send command) +"(xw_send command) +Send a command to xwaves." + (system (format nil "%s %s\n" send_xwaves_command command))) + + + +;; +;; General Festival stuff. +;; + + +(define (utt.save.unit_selection_segs utt filename) +"(utt.save.unit_selection_segs utt filename) + Save unit selection segments of UTT in a FILE in xlabel format." + (let ((fd (fopen filename "w"))) + (format fd "#\n") + (mapcar + (lambda (info) + (format fd "%2.4f 100 %s\n" (car info) (car (cdr info)))) + (utt.features utt 'Segment '(source_end name))) + (fclose fd) + utt)) + +(define (utt.save.unit_selection_info utt diphfile joinfile targfile sourcefile timefile) +"(utt.save.unit_selection_info utt diphfile joinfile targfile sourcefile timefile) + Save stuff in xlabel format." + (let ((fdd (fopen diphfile "w")) + (fdj (fopen joinfile "w")) + (fdt (fopen targfile "w")) + (fds (fopen sourcefile "w")) + (fdx (fopen timefile "w")) + real_join) + (format fdd "#\n") + (format fdj "#\n") + (format fdt "#\n") + (format fds "#\n") + (format fdx "#\n") + (mapcar + (lambda (unit) + (set! real_join "") + (if (item.next unit) + (if (not (string-equal (item.feat unit 'source_utt) + (item.feat (item.next unit) 'source_utt))) + (set! real_join "*"))) + (format fdd "%2.4f 100 %s %s\n" + (item.feat unit 'end) + (item.feat unit 'name) + real_join) + (format fdj "%2.4f 100 %s\n" + (item.feat unit 'end) + (if (item.next unit) + (item.feat (item.next unit) 'join_cost) + 0)) + (format fdt "%2.4f 100 %s\n" + (item.feat unit 'end) + (item.feat unit 'target_cost)) + (format fds "%2.4f 100 %s\n" + (item.feat unit 'end) + (item.feat unit 'source_utt)) + (format fdx "%2.4f 100 %s\n" + (item.feat unit 'end) + (item.feat unit 'source_end))) + (utt.relation.items utt 'Unit)) + (fclose fdd) + (fclose fdj) + (fclose fdt) + (fclose fds) + (fclose fdx) + utt)) diff --git a/lib/multisyn/target_cost.scm b/lib/multisyn/target_cost.scm new file mode 100644 index 0000000..fc5d223 --- /dev/null +++ b/lib/multisyn/target_cost.scm @@ -0,0 +1,410 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2003, 2004 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Multisyn scheme target cost (Rob Clark and Korin Richmond) +;;; +;;; + +(define (Default_Target_Cost targ cand) +"(Default_Target_Cost targ cand) +A Default Target Cost function." +(let ((cost 0)) + (mapcar + (lambda (row) + (set! cost (+ cost (tc_eval_row row targ cand)))) + target_matrix) + (set! cost (/ cost target_matrix_weight)) + cost)) + + +(define (tc_eval_row row targ cand) + "(tc_eval_row row targ cand) +Evaluate a target matrix row." +(let ((weight (car row)) + (func (cadr row)) + (result 0)) + (set! result (* weight (eval (list func targ cand)))) + result)) + +;; +;; Target cost Matrix +;; '(weight function) + +(define (get_matrix_weight m) + (let ((w 0)) + (mapcar + (lambda (x) + (set! w (+ w (car x)))) + m) + w)) + + +(set! test_matrix_max_weight 1) +(set! test_matrix +'( + (10 tc_stress ) + (5 tc_syl_pos ) + (5 tc_word_pos) + (6 tc_partofspeech) + (7 tc_phrase_pos) + (4 tc_left_context) + (3 tc_right_context) + (25 tc_bad_f0) ;; set to equal 1/3 of total cost (so high because interaction with join) +; (0 tc_segment_score) ;; was 4. turned off until utterances are built for this. + (10 tc_bad_duration) ;; was 6 +)) + +(set! test_matrix_weight (* test_matrix_max_weight (get_matrix_weight test_matrix))) + +(set! target_matrix test_matrix) +(set! target_matrix_weight test_matrix_weight) + + + +;; +;; tc_stress +;; +;; Compares stress on any vowel which form part of the diphone. stress +;; conditions must match for a zero target cost. +;; + +(define (tc_stress targ cand) +"(tc_stress targ cand) +Target Cost stressed. 0 - stress patterns match [ compares: 0 unstressed vs. > 0 stressed ] + 1 - stress miss-match. +" +(let ((c 0) + cand_stress targ_stress) + ;(format t "my_is_vowel %l\n" (my_is_vowel targ)) + ;(format t "phone_is_silence %l\n" (phone_is_silence (item.feat targ 'name))) + ;; For first segment + (if (and (not (phone_is_silence (item.feat targ 'name))) + (my_is_vowel targ)) + (begin + (set! cand_stress (item.feat cand "R:SylStructure.parent.stress")) + (set! targ_stress (item.feat targ "R:SylStructure.parent.stress")) + (if (or (and (eq? cand_stress 0) (> targ_stress 0)) + (and (eq? targ_stress 0) (> cand_stress 0))) + (set! c 1)))) + ;; For second segment + ;(format t "n.my_is_vowel %l\n" (my_is_vowel (item.next targ))) + ;(format t "n.phone_is_silence %l\n" (phone_is_silence (item.feat targ 'n.name))) + (if (and (not (phone_is_silence (item.feat targ 'n.name))) + (my_is_vowel (item.next targ))) + (begin + (set! cand_stress (item.feat cand "n.R:SylStructure.parent.stress")) + (set! targ_stress (item.feat targ "n.R:SylStructure.parent.stress")) + (if (or (and (eq? cand_stress 0) (> targ_stress 0)) + (and (eq? targ_stress 0) (> cand_stress 0))) + (set! c 1)))) +; (format t "tc_stress: %l\n" c) +c)) + + +;; +;; tc_syl_position +;; +;; Find and compare diphone position in syllabic structure. +;; Values are: inter - diphone crosses syllable boundary. +;; initial - diphone is syllable initial. +;; medial - diphone is syllable medial +;; final - diphone is syllable final +;; returns 0 for a match 1 for a mismatch. +;; +(define (tc_syl_pos targ cand) +"(tc_syl_pos targ cand) +Score position in syllable." +(let ((targ_pos "medial") + (cand_pos "medial") + (targ_syl (get_syl targ)) + (targ_next_syl (get_syl (item.next targ))) + (cand_syl (get_syl cand)) + (cand_next_syl (get_syl (item.next cand)))) + ;; target + (cond + ((not (equal? targ_syl targ_next_syl)) + (set! targ_pos "inter")) + ((not (equal? targ_syl (get_syl (item.prev targ)))) + (set! targ_pos "initial")) + ((not (equal? targ_next_syl (get_syl (item.next (item.next targ))))) + (set! targ_pos "final"))) + ;; candidate + (cond + ((not (equal? cand_syl cand_next_syl)) + (set! cand_pos "inter")) + ((not (equal? cand_syl (get_syl (item.prev cand)))) + (set! cand_pos "initial")) + ((not (equal? cand_next_syl (get_syl (item.next (item.next cand))))) + (set! cand_pos "final"))) +; (format t "targ_syl: %l cand_syl %l\n" targ_pos cand_pos) + (if (equal? targ_pos cand_pos) 0 1))) + +;; +;; tc_word_position +;; +;; Find and compare diphone position in word structure +;; Values are: inter - diphone crosses word boundary. +;; initial - diphone is word initial. +;; medial - diphone is word medial +;; final - diphone is word final +;; returns 0 for a match 1 for a mismatch. +;; +(define (tc_word_pos targ cand) +"(tc_word_pos targ cand) +Score position in word." +(let ((targ_pos "medial") + (cand_pos "medial") + (targ_word (get_word targ)) + (targ_next_word (get_word (item.next targ))) + (cand_word (get_word cand)) + (cand_next_word (get_word (item.next cand)))) + ;; target + (cond + ((not (equal? targ_word targ_next_word)) + (set! targ_pos "inter")) + ((not (equal? targ_word (get_word (item.prev targ)))) + (set! targ_pos "initial")) + ((not (equal? targ_next_word (get_word (item.next (item.next targ))))) + (set! targ_pos "final"))) + ;; candidate + (cond + ((not (equal? cand_word cand_next_word)) + (set! cand_pos "inter")) + ((not (equal? cand_word (get_word (item.prev cand)))) + (set! cand_pos "initial")) + ((not (equal? cand_next_word (get_word (item.next (item.next cand))))) + (set! cand_pos "final"))) +; (format t "targ_word: %l cand_word %l\n" targ_pos cand_pos) + (if (equal? targ_pos cand_pos) 0 1))) + + + +;; +;; tc_phrase_position +;; +;; Position (of word) in phrase +;; initial/medial/final +;; +;; 0 - match, 1 - mismatch +;; +(define (tc_phrase_pos targ cand) +"(tc_phrase_pos targ cand) + Score position in phrase." +(let ((targ_word (get_word targ)) + (cand_word (get_word cand))) + (cond + ((and (null targ_word) + (null cand_word)) + 0) + ((or (null targ_word) + (null cand_word)) + 1) + ((string-equal (item.feat targ_word 'pbreak) + (item.feat cand_word 'pbreak)) + 0) + (t 1)))) + +;; +;; tc_partofspeech +;; +;; +;; +(define (tc_partofspeech targ cand) +"(tc_partofspeech targ cand) + Score part of speech." +(let ((targ_word (get_word targ)) + (cand_word (get_word cand)) + targ_pos cand_pos) +(if targ_word + (set! targ_pos (simple_pos (item.feat targ_word 'pos)))) +(if cand_word + (set! cand_pos (simple_pos (item.feat cand_word 'pos)))) + ;(format t "targ_pos %l cand_pos %l\n" targ_pos cand_pos) + (if (equal? targ_pos cand_pos) 0 1))) + +(define (score_contexts targ_context cand_context) + "(score_contexts targ_context cand_context) +If both context items are nil, then score is 0. +If both context items are not nil, and are the same, then +score is 0. Otherwise, score is 1." + (if (and targ_context cand_context) + (if (equal? (item.feat targ_context "name") + (item.feat cand_context "name")) + 0 + 1) + (if (and (equal? targ_context nil) + (equal? cand_context nil)) + 0 + 1))) + + +(define (tc_left_context targ cand) +"(tc_left_context targ cand) +Score left phonetic context." +(let ((targ_context (item.prev targ)) + (cand_context (item.prev cand))) + (score_contexts targ_context cand_context))) + +;; +;; tc_right_context +;; +;; +;; +(define (tc_right_context targ cand) +"(tc_right_context targ cand) +Score right phonetic context." +(let ((targ_context (item.next (item.next targ))) + (cand_context (item.next (item.next cand)))) + (score_contexts targ_context cand_context))) + + +;; +;; tc_segment_score +;; +;; This currently thresholds based on looking at the distributions of the scores. +;; A nice exp function may be better. +(define (tc_segment_score targ cand) +"tc_segment_score targ cand) +A bad alignment score make a bad segment." +(let ((score 0)) + (if (not (phone_is_silence (item.feat cand "name"))) + (set! score (+ score (item.feat cand 'score)))) + (if (not (phone_is_silence (item.feat (item.next cand) "name"))) + (set! score (+ score (item.feat (item.next cand) 'score)))) + (cond + ((> score -4000) ;2000 (x2) is 7.5% + 0) + ((> score -5000) ;2500 (x2) is 5.0% + 0.5) + (t 1)))) + +;; +;; tc_bad_duration +;; +;; If the segment is marked as having a weird duration penalise it. +;; We allow bad_dur to be set on the target so resynthesis works +;; and so you could ask for really long/short segments. +;; +(define (tc_bad_duration targ cand) + (if (equal? (item.feat targ "bad_dur") + (item.feat cand "bad_dur")) + 0 + 1)) + + +;; +;; tc_bad_f0 +;; +;; If the candidate is deemed to have an inappropriate f0, then penalise it. +;; +;; Specifically, if the targ/cand segment type is expected to be voiced, then +;; an f0 of zero is bad (results from poor pitch tracking). In such a case, +;; the join cost would then favour other units with f0 (since the euclidean +;; distance between two zeros is very small ;) +;; We want to avoid that. +;; +;; Presumeably, we also want to penalise cases where supposedly voiceless +;; candidates have an f0 != 0 (either a consequence of bad pitch tracking +;; or bad labelling) but that's not done here yet... +;; +;; (the function itself has been implemented in C for convenience, and +;; this stub is left here just for this note ;) + +(define (tc_bad_f0 targ cand) + (let ((score (temp_tc_bad_f0 targ cand)) + (name (format nil "%s_%s" + (item.feat targ "name") + (item.feat (item.next targ) "name")))) + (if (not (equal? score 0.0)) + (format t "f0 score for %s is %f\n" name score)) + score)) + +;; +;; Is a segment a vowel? ( ph_is_a_vowel doesn't seem to work) +;; +(define (my_is_vowel seg) + (if seg + (if (equal? (item.feat seg 'ph_vc) "+") + t + nil))) + + + +;; get the syllable from sysstructure in normal utterance +;; +(define (get_syl seg) + (let (syl) + (if seg + (set! syl (item.relation.parent seg 'SylStructure))) + syl)) + +;; get the word from sylstructure in normal utterance +;; +(define (get_word seg) + (let ((syl (get_syl seg)) + word) + (if syl + (set! word (item.parent syl))) + word)) + + +;; simple pos +;; +(define (simple_pos pos) +(let (spos) + (cond + ((member_string pos '(vbd vb vbn vbz vbp vbg)) + (set! spos "v")) + ((member_string pos '(nn nnp nns nnps fw sym ls)) + (set! spos "n")) + ((member_string pos '(dt gin prp cc of to cd md pos wdt wp wrb ex uh pdt)) + (set! spos "func")) + ((member_string pos '(jj jjr jjs 1 2 rb rp rbr rbs)) + (set! spos "other"))) + spos)) + + +;; debugging + +(define (test_target_cost utt1 utt2) +(let ((segs1 (utt.relation.items utt1 'Segment)) + (segs2 (utt.relation.items utt2 'Segment)) + (tc 0)) + (while (and segs1 segs2) + (set! tc (Default_Target_Cost (car segs1) (car segs2))) + (format t "targ: %l cand: %l cost: %l\n" (item.name (car segs1)) (item.name (car segs2)) tc) + (set! segs1 (cdr segs1)) + (set! segs2 (cdr segs2))))) + + +(provide 'target_cost) diff --git a/lib/ogimarkup-mode.scm b/lib/ogimarkup-mode.scm new file mode 100644 index 0000000..2bca41a --- /dev/null +++ b/lib/ogimarkup-mode.scm @@ -0,0 +1,191 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; An example tts text mode for reading OGI's CSLU toolkit mark up +;;; +;;; Note not all tokens do something in festival but all are removed +;;; from the actual text +;;; + +(defvar ogimarkup_eou_tree +'((n.name matches "<.*") + ((1)) +((n.whitespace matches ".*\n.*\n\\(.\\|\n\\)*") ;; A significant break (2 nls) + ((1)) + ((punc in ("?" ":" "!")) + ((1)) + ((punc is ".") + ;; This is to distinguish abbreviations vs periods + ;; These are heuristics + ((name matches "\\(.*\\..*\\|[A-Z][A-Za-z]?[A-Za-z]?\\|etc\\)") ;; an abbreviation + ((n.whitespace is " ") + ((0)) ;; if abbrev single space isn't enough for break + ((n.name matches "[A-Z].*") + ((1)) + ((0)))) + ((n.whitespace is " ") ;; if it doesn't look like an abbreviation + ((n.name matches "[A-Z].*") ;; single space and non-cap is no break + ((1)) + ((0))) + ((1)))) + ((0))))))) + +(define (ogimarkup_init_func) + "Called on starting ogimarkup text mode." + (set! ogimarkup_in_tag nil) + (set! ogimarkup_tagtokens "") + (set! ogimarkup_previous_t2w_func token_to_words) + (set! english_token_to_words ogimarkup_token_to_words) + (set! token_to_words ogimarkup_token_to_words) + (set! ogimarkup_previous_eou_tree eou_tree) + (set! eou_tree ogimarkup_eou_tree)) + +(define (ogimarkup_exit_func) + "Called on exit ogimarkup text mode." + (Parameter.set 'Duration_Stretch 1.0) + (set! token_to_words ogimarkup_previous_t2w_func) + (set! english_token_to_words ogimarkup_previous_t2w_func) + (set! eou_tree ogimarkup_previous_eou_tree)) + +(define (ogimarkup_token_to_words token name) + "(ogimarkup_token_to_words token name) +OGI markup specific token to word rules. Tags may have optional +argument e.g. or which means the tag may be over +a number of tokens." + (let (tag (arg nil) (rval nil)) + (cond + ((string-matches name "<.*") + (set! ogimarkup_tagtokens "") + (set! tag (string-after name "<")) + (if (string-matches tag ".*>$") + (set! tag (string-before tag ">")) + (if (string-matches (set! arg (item.feat token "n.name")) + ".*>$") + (set! arg (string-before arg ">")))) + (set! ogimarkup_in_tag tag) + (cond + ((string-equal tag "slow") + (Parameter.set 'Duration_Stretch 1.3)) + ((string-equal tag "SLOW") + (Parameter.set 'Duration_Stretch 2.0)) + ((string-equal tag "normal") + (Parameter.set 'Duration_Stretch 1.0)) + ((string-matches tag "FAST") + (Parameter.set 'Duration_Stretch 0.5)) + ((string-matches tag "fast") + (Parameter.set 'Duration_Stretch 0.8)) + ((string-matches tag"spell") + ;; This ain't really right as we'll get an utterance break here + (set! rval (symbolexplode arg))) + ((string-matches tag "phone") + ;; This ain't really right as we'll get an utterance break here + (item.set_feat token "token_pos" "digits") ;; canonical phone number + (set! rval (ogimarkup_previous_t2w_func token arg))) + ((string-matches tag "male") + (if (and (member 'OGIresLPC *modules*) + (symbol-bound? 'voice_aec_diphone)) + (voice_aec_diphone) + (voice_kal_diphone))) + ((string-matches tag "Male") + (if (and (member 'OGIresLPC *modules*) + (symbol-bound? 'voice_mwm_diphone)) + (voice_mwm_diphone) + (voice_cmu_us_rms_cg))) + ((string-matches tag "MALE") + (if (and (member 'OGIresLPC *modules*) + (symbol-bound? 'voice_jph_diphone)) + (voice_jph_diphone) + (voice_rab_diphone))) + ((string-matches tag "FT") + t) ;; do nothing until the end of this tag + ((string-matches (downcase tag) "female") + ;; only one female voice so map female Female FEMALE to it + (if (and (member 'OGIresLPC *modules*) + (symbol-bound? 'voice_tll_diphone)) + (voice_tll_diphone) + (voice_cmu_us_slt_arctic_hts)))) + (if (string-matches name ".*>$") + (set! ogimarkup_in_tag nil)) + rval ;; mostly nil + ) + ((string-matches name ".*>$") + (set! ogimarkup_tagtokens + (string-append + ogimarkup_tagtokens + (ogimarkup_get_token_string token t))) ;; delete final > + (if (string-equal ogimarkup_in_tag "FT") + (ogimarkup_festival_eval ogimarkup_tagtokens)) + (set! ogimarkup_in_tag nil) ;; end of tag + nil) + (ogimarkup_in_tag + (set! ogimarkup_tagtokens + (string-append + ogimarkup_tagtokens + (ogimarkup_get_token_string token nil))) + nil) ;; still in tag + (t ;; for all other cases + (ogimarkup_previous_t2w_func token name))))) + +(set! tts_text_modes + (cons + (list + 'ogimarkup ;; mode name + (list ;; ogimarkup mode params + (list 'init_func ogimarkup_init_func) + (list 'exit_func ogimarkup_exit_func))) + tts_text_modes)) + +(define (ogimarkup_get_token_string token delend) + "(ogimarkup_get_token_string TOKEN DELEND) +return string for token including whitespace and punctuation. If DELEND +is true remove > from the name." + (string-append + (item.feat token "whitespace") + (item.feat token "prepunctuation") + (if delend + (string-before + (item.feat token "name") ">") + (item.feat token "name")) + (if (string-equal "0" (item.feat token "punc")) + "" + (item.feat token "punc")))) + +(define (ogimarkup_festival_eval tagtokens) +"(ogimarkup_festival_eval TAGTOKENS +Take a string of the tokens within the tag and read an s-expression from +it and then evaluate it." + (let ((com "") (command nil)) + (set! command (read-from-string tagtokens)) + (eval command))) + +(provide 'ogimarkup-mode) diff --git a/lib/pauses.scm b/lib/pauses.scm new file mode 100644 index 0000000..18af2a9 --- /dev/null +++ b/lib/pauses.scm @@ -0,0 +1,242 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Predicting pause insertion + +(define (Pauses utt) +"(Pauses utt) +Insert pauses where required." + (let ((rval (apply_method 'Pause_Method utt))) + (cond + (rval rval) ;; new style + (t + (Classic_Pauses utt)))) + (Pause_optional_deleting_B_X utt)) + +(define (Classic_Pauses utt) + "(Pauses UTT) +Predict pause insertion." + (let ((words (utt.relation.items utt 'Word)) lastword tpname) + (if words + (begin + (insert_initial_pause utt) ;; always have a start pause + (set! lastword (car (last words))) + (mapcar + (lambda (w) + (let ((pbreak (item.feat w "pbreak")) + (emph (item.feat w "R:Token.parent.EMPH"))) + (cond + ((or (string-equal "B" pbreak) + (string-equal "BB" pbreak)) + (insert_pause utt w)) +; ((string-equal emph "1") +; (insert_pause utt w)) + ((equal? w lastword) + (insert_pause utt w))))) + words) + ;; The embarrassing bit. Remove any words labelled as punc or fpunc + (mapcar + (lambda (w) + (let ((pos (item.feat w "pos"))) + (if (or (string-equal "punc" pos) + (string-equal "fpunc" pos)) + (let ((pbreak (item.feat w "pbreak")) + (wp (item.relation w 'Phrase))) + (if (and (string-matches pbreak "BB?") + (item.relation.prev w 'Word)) + (item.set_feat + (item.relation.prev w 'Word) "pbreak" pbreak)) + (item.relation.remove w 'Word) + ;; can't refer to w as we've just deleted it + (item.relation.remove wp 'Phrase))))) + words) + ;; 12/01/2006 V.Strom: Even more embarrasing: Delete all silences + ;; that are followed by a silence. These silence sequences + ;; emerge if 'punc of phrase-final words consists of more than one + ;; character, e.g. period+quote. That in turn causes problems in + ;; build_utts: the 2nd silence ends up with no features but its name, + ;; because there is no corresponding 2nd silence in the phone + ;; segmentation to align with. + ;; This schould be fixed in the functions below, but it is easier for + ;; me to clean up at the end: + (set! sil (car (car (cdr (car (PhoneSet.description '(silences))))))) + (set! seg (item.next(utt.relation.first utt 'Segment))) + (while seg + (if(and(equal? sil (item.name seg)) + (equal? sil (item.name (item.prev seg)))) + (item.delete (item.prev seg))) + (set! seg (item.next seg))))) + utt)) + +(define (insert_pause utt word) +"(insert_pause UTT WORDITEM) +Insert a silence segment after the last segment in WORDITEM in UTT." + (let ((lastseg (find_last_seg word)) + (silence (car (car (cdr (car (PhoneSet.description '(silences)))))))) + (if lastseg + (item.relation.insert + lastseg 'Segment (list silence) 'after)))) + +(define (insert_initial_pause utt) +"(insert_initial_pause UTT) +Always have an initial silence if the utterance is non-empty. +Insert a silence segment after the last segment in WORDITEM in UTT." + (let ((firstseg (car (utt.relation.items utt 'Segment))) + (silence (car (car (cdr (car (PhoneSet.description '(silences)))))))) + (if firstseg + (item.relation.insert + firstseg 'Segment (list silence) 'before)))) + +(define (insert_final_pause utt) +"(insert_final_pause UTT) +Always have a final silence if the utterance is non-empty." + (let ((lastseg (utt.relation.last utt 'Segment)) + (silence (car (car (cdr (car (PhoneSet.description '(silences)))))))) + (set! silence (format nil "%l" silence)) ; to make the symbol a string + ;(format t "silence is %l\n" silence) + ;(format t "lastseg is %l\n" (item.name lastseg)) + (if lastseg + (if (not(equal? (item.name lastseg) silence)) + (begin + (format t "iserted final pause %s\n" silence) + (item.relation.insert lastseg 'Segment (list silence) 'after)))))) + + +(define (find_last_seg word) +;;; Find the segment that is immediately at this end of this word +;;; If this word is punctuation it might not have any segments +;;; so we have to check back until we find a word with a segment in it + (cond + ((null word) + nil) ;; there are no segs (don't think this can happen) + (t + (let ((lsyl (item.relation.daughtern word 'SylStructure))) + (if lsyl + (item.relation.daughtern lsyl 'SylStructure) + (find_last_seg (item.relation.prev word 'Word))))))) + +(define (Unisyn_Pauses utt) + "(Unisyn_Pauses UTT) +Predict pause insertion in a Unisyn utterance structure." + (let ((words (utt.relation.items utt 'Word)) lastword tpname) + (if words + (begin + (us_insert_initial_pause utt) ;; always have a start pause + (set! lastword (car (last words))) + (mapcar + (lambda (w) + (let ((pbreak (item.feat w "pbreak")) + (emph (item.feat w "R:Token.parent.EMPH"))) + (cond + ((or (string-equal "B" pbreak) + (string-equal "BB" pbreak)) + (us_insert_pause utt w)) +; ((string-equal emph "1") +; (us_insert_pause utt w)) + ((equal? w lastword) + (us_insert_pause utt w))))) + words) + ;; The embarrassing bit. Remove any words labelled as punc or fpunc + (mapcar + (lambda (w) + (let ((pos (item.feat w "pos"))) + (if (or (string-equal "punc" pos) + (string-equal "fpunc" pos)) + (let ((pbreak (item.feat w "pbreak")) + (wp (item.relation w 'Phrase))) + (if (and (string-matches pbreak "BB?") + (item.relation.prev w 'Word)) + (item.set_feat + (item.relation.prev w 'Word) "pbreak" pbreak)) + (item.relation.remove w 'Word) + ;; can't refer to w as we've just deleted it + (item.relation.remove wp 'Phrase))))) + words))) + utt)) + +(define (us_insert_pause utt word) +"(us_insert_pause UTT WORDITEM) +Insert a silence segment after the last segment in WORDITEM in UTT." + (let ((lastseg (us_find_last_seg word)) + (silence "pau")) + (if lastseg + (item.relation.insert + lastseg 'Segment (list silence) 'after)))) + +(define (us_insert_initial_pause utt) +"(us_insert_initial_pause UTT) +Always have an initial silence if the utterance is non-empty. +Insert a silence segment after the last segment in WORDITEM in UTT." + (let ((firstseg (utt.relation.first utt 'Segment)) + (silence "pau")) + (if firstseg + (item.relation.insert + firstseg 'Segment (list silence) 'before)))) + +(define (us_find_last_seg word) +;;; Find the segment that is immediately at this end of this word +;;; If this word is punctuation it might not have any segments +;;; so we have to check back until we find a word with a segment in it + (cond + ((null word) + nil) ;; there are no segs (don't think this can happen) + (t + (if (item.daughtern_to (item.relation word 'WordStructure) 'Syllable) + (item.daughtern_to + (item.relation + (item.daughtern_to (item.relation word 'WordStructure) 'Syllable) + 'SylStructure) + 'Segment) + (us_find_last_seg (item.relation.prev word 'Word)))))) + +(define (Pause_optional_deleting_B_X utt) +"(Pause_optional_deleting_B_X utt) + +Delete all phone symbols starting with 'B_' from the segemt relation +(a B_150 e.g. is a 150ms pause) if symbol 'Pause_delete_B_X is defined. +" +; The B_X never occur in the phone segmentation but are predicted by +; some pause methods, in particular the default I used to produce the +; .utt files for the 2009 test sentences for the Blizzard challange. +; Some participants complained about them and I had to fix it quickly. + (if (symbol-bound? 'Pause_delete_B_X) + (let(seg ) + (set! seg (item.next(utt.relation.first utt 'Segment))) + (while seg + (set! next_seg (item.next seg)) + ;(format t "segment %l\n" (item.name seg)) + (if(string-matches (item.name seg) "B_[0-9]*") + (item.delete seg)) + (set! seg next_seg))))) + +(provide 'pauses) diff --git a/lib/phoneset.scm b/lib/phoneset.scm new file mode 100644 index 0000000..19d9b84 --- /dev/null +++ b/lib/phoneset.scm @@ -0,0 +1,134 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1999 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: April 1999 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Support code for phone set definitions +;;; + +(defmac (defPhoneSet form) + (list 'defPhoneSet_real + (list 'quote (cadr form)) + (list 'quote (car (cddr form))) + (list 'quote (cadr (cddr form))))) + +(define (defPhoneSet_real name featdefs phones) + "(defPhoneSet NAME FEATTYPES PHONES) +Define a phone set with given name, feature types and +list of phones. This also selects name as the current phoneset." + (let (info) + (if (not (eq? 'Features (car featdefs))) + (begin + ;; Old format that has the same number of phone features for + ;; all phones + (set! info + (mapcar + (lambda (ph) + (let ((fvs + (mapcar + list + (mapcar car featdefs) + (cdr ph)))) + (ps_check_fvals + (cons (car ph) (cons (list 'type t) fvs)) + (cons t fvs)) + (list (car ph) fvs))) + phones))) + ;; else + ;; New format where types are specified so phones may have + ;; different features + (set! info + (mapcar + (lambda (ph) + (let ((fvs + (cons + (list 'type (cadr ph)) + (mapcar + list + (mapcar car (cdr (assoc (cadr ph) (cdr featdefs)))) + (cddr ph))))) + (ps_check_fvals + (cons (car ph) fvs) + (assoc (cadr ph) (cdr featdefs))) + (list (car ph) fvs))) + (cdr phones)))) + (Param.set + (string-append "phonesets." name) + info) + (PhoneSet.select name) + (list name info))) + +(define (ps_check_fvals fvs featdefs) + "(ps_check_fvals fvs featdefs) +Check that feature values in a phone definition are in the defined +set of possibles." + (mapcar + (lambda (fp) + (let ((def (cdr (assoc (car fp) (cdr featdefs))))) + (cond + ((not def) + (error "Phoneset definition: phone has no defined type" fvs)) + ((not (member_string (car (cdr fp)) def)) + (error + (format nil "Phoneset definition: phone feature %l is undefined" fp) fvs))))) + (cdr (cdr fvs)))) + +(define (PhoneSet.select name) + "(PhoneSet.select name) +Select named phonset as current." + (if (feats.present Param (string-append "phonesets." name)) + (Param.set "phoneset" (Param.get (string-append "phonesets." name))) + (error "no phoneset defined: " name))) + +(define (PhoneSet.description name) + "(PhoneSet.description) +Return (lisp) representation of current phoneset." + (feats.tolisp (Param.get "phoneset"))) + +(define (PhoneSet.list) + "(PhoneSet.list) +List of the names of the currently defined phonesets." + ;; This isn't a particularly efficient way to get the answer + (mapcar car (feats.tolisp (Param.get "phonesets")))) + +(define (PhoneSet.silences sils) + "(PhoneSet.silences SILLIST) +Define the silence phones for the currently selected phoneset." + (Param.set "phoneset.silences" sils)) + +(provide 'phoneset) + + + + diff --git a/lib/phrase.scm b/lib/phrase.scm new file mode 100644 index 0000000..bbabba6 --- /dev/null +++ b/lib/phrase.scm @@ -0,0 +1,171 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Phrase boundary prediction. +;;; +;;; Two methods supported, if POS is enabled we use ngrams for that +;;; otherwise we use a CART tree +;;; +;;; Models trained from the IBM/Lancaster Spoken English Corpus and +;;; Boston University's FM Radio Corpus. + +;;; +;;; Here's a very simple CART tree for predicting phrase breaks +;;; based on punctuation only +;;; +(set! simple_phrase_cart_tree +' +((lisp_token_end_punc in ("?" "." ":")) + ((BB)) + ((lisp_token_end_punc in ("'" "\"" "," ";")) + ((B)) + ((n.name is 0) ;; end of utterance + ((BB)) + ((NB)))))) + +(define (token_end_punc word) + "(token_end_punc UTT WORD) +If punctuation at end of related Token and if WORD is last word +in Token return punc, otherwise 0." + (if (item.relation.next word "Token") + "0" + (item.feat word "R:Token.parent.punc"))) + +;;; This is a simple CART tree used after boundaries are predicted +;;; by the probabilistic method to get two levels of break +(set! english_phrase_type_tree +'((pbreak is NB) + ((num_break is 1) + ((mB)) + ((R:Token.parent.EMPH is 1) + ((NB)) + ((n.R:Token.parent.EMPH is 1) + ((NB)) + ((NB))))) + ((pbreak is BB) + ((BB)) + ((pbreak is mB) + ((mB)) + ((name in ("." "!" "?"));; only (potentially) change Bs to BBs + ((BB)) + ((B))))))) + +(set! f2b_phrase_cart_tree +' +((gpos is punc) + (((1 0.00238095) (3 0) (4 0.997619) B)) + (((4 0.00238095) (3 0) (1 0.997619) NB)))) + +;;; For more detailed prediction of phrase breaks we use POS and +;;; probability distribution of breaks +;;; These models were trained using data from the Lancaster/IBM +;;; Spoken English Corpus + +(require 'pos) ;; for part of speech map + +(defvar pbreak_ngram_dir libdir + "pbreak_ngram_dir + The directory containing the ngram models for predicting phrase + breaks. By default this is the standard library directory.") + +(defvar english_phr_break_params + (list + ;; The name and filename off the ngram with the a priori ngram model + ;; for predicting phrase breaks in the Phrasify module. This model should + ;; predict probability distributions for B and NB given some context of + ;; part of speech tags. + (list 'pos_ngram_name 'english_break_pos_ngram) + (list 'pos_ngram_filename + (path-append pbreak_ngram_dir "sec.ts20.quad.ngrambin")) + ;; The name and filename of the ngram containing the a posteriori ngram + ;; for predicting phrase breaks in the Phrasify module. This module should + ;; predict probability distributions for B and NB given previous B and + ;; NBs. + (list 'break_ngram_name 'english_break_ngram) + (list 'break_ngram_filename + (path-append pbreak_ngram_dir "sec.B.hept.ngrambin")) + ;; A weighting factor for breaks in the break/non-break ngram. + (list 'gram_scale_s 0.59) + ;; When Phrase_Method is prob_models, this tree, if set is used to + ;; potentially predict phrase type. At least some prob_models only + ;; predict B or NB, this tree may be used to change some Bs into + ;; BBs. If it is nil, the pbreak value predicted by prob_models + ;; remains the same. + (list 'phrase_type_tree english_phrase_type_tree) + ;; A list of tags used in identifying breaks. Typically B and NB (and + ;; BB). This should be the alphabet of the ngram identified in + ;; break_ngram_name + (list 'break_tags '(B NB)) + (list 'pos_map english_pos_map_wp39_to_wp20) + ) + "english_phr_break_params +Parameters for English phrase break statistical model.") + +(defvar phr_break_params nil + "phr_break_params +Parameters for phrase break statistical model. This is typcal set by +a voice selection function to the parameters for a particular model.") + +;;; +;;; Declaration of some features +;;; + +(def_feature_docstring + 'Word.pbreak + "Word.pbreak + Result from statistical phrasing module, may be B or NB denoting + phrase break or non-phrase break after the word.") + +(def_feature_docstring + 'Word.pbreak_score + "Word.pbreak_score + Log likelihood score from statistical phrasing module, for pbreak + value.") + +(def_feature_docstring + 'Word.blevel + "Word.blevel + A crude translation of phrase break into ToBI like phrase level. + Values may be 0,1,2,3,4.") + +(define (Phrasify utt) +"(Phrasify utt) +Construct phrasify over Words module." + (let ((rval (apply_method 'Phrasify_Method utt))) + (cond + (rval rval) ;; new style + (t + (Classic_Phrasify utt))))) + + +(provide 'phrase) diff --git a/lib/pos.scm b/lib/pos.scm new file mode 100644 index 0000000..2b678ef --- /dev/null +++ b/lib/pos.scm @@ -0,0 +1,225 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A part of speech tagger +;;; + +(set! english_guess_pos + '((in of for in on that with by at from as if that against about + before because if under after over into while without + through new between among until per up down) + (to to) + (det the a an no some this that each another those every all any + these both neither no many) + (md will may would can could should must ought might) + (cc and but or plus yet nor) + (wp who what where how when) + (pps her his their its our their its mine) + (aux is am are was were has have had be) + (punc "." "," ":" ";" "\"" "'" "(" "?" ")" "!") + )) + +(defvar guess_pos english_guess_pos + "guess_pos + An assoc-list of simple part of speech tag to list of words in that + class. This basically only contains closed class words all other + words may be assumed to be content words. This was built from information + in the f2b database and is used by the ffeature gpos.") + +;;; A more elaborate part of speech tagger using ngrams works but +;;; at present requires a large list of a priori probabilities +;;; to work. If that file exists on your system we'll use it otherwise +;;; POS is guessed by the lexicon + +;;; These models were build from the Penn TreeBank, WSJ corpus + +(defvar pos_model_dir lexdir + "pos_model_dir + The directory contains the various models for the POS module. By + default this is the same directory as lexdir. The directory should + contain two models: a part of speech lexicon with reverse log probabilities + and an ngram model for the same part of speech tag set.") + +(defvar pos_p_start_tag "punc" + "pos_p_start_tag + This variable's value is the tag most likely to appear before + the start of a sentence. It is used when looking for pos context + before an utterance. Typically it should be some type of punctuation + tag.") + +(defvar pos_pp_start_tag "n" + "pos_pp_start_tag + This variable's value is the tag most likely to appear before + pos_p_start_tag and any position preceding that. It is typically + some type of noun tag. This is used to provide pos context for + early words in an utterance.") + +(defvar pos_supported nil + "pos_supported + If set to non-nil use part of speech prediction, if nil just get + pos information from the lexicon.") + +(defvar pos_ngram_name nil + "pos_ngram_name + The name of a loaded ngram containing the a posteriori ngram model for + predicting part of speech. The a priori model is held as a + lexicon call poslex.") + +(defvar pos_map nil + "pos_map + If set this should be a reverse assoc-list mapping on part of speech + tag set to another. It is used after using the defined POS models to + map the pos feature on each word to a new tagset.") + +;;; +;;; All the names here don't really allow multiple versions +;;; they should be prefixed with english_ +;;; + +(if (probe_file (path-append pos_model_dir "wsj.wp39.poslexR")) + (begin + (lex.create "english_poslex") + (lex.set.compile.file + (path-append pos_model_dir "wsj.wp39.poslexR")) + (lex.set.phoneset "mrpa") + (lex.set.lts.method nil) + (set! pos_lex_name "english_poslex") + (set! pos_p_start_tag "punc") + (set! pos_pp_start_tag "nn") + ;; wp39 + (lex.add.entry '("_OOV_" ((nnp -2.9144) (jj -2.7357) (nn -3.5787) + (nns -3.4933) (vbn -3.2486) (vbg -2.9419) + (vb -3.5471) (vbd -3.7896) (vbz -3.7820) + (rb -4.1940) (vbp -3.2755) (nnps -2.1605)) + ())) + (lex.add.entry '("_number_" + ((cd -0.35202) (jj -4.1083) (nns -6.4488) (nnp -7.3595)) + () )) + (lex.add.entry '("," ((punc -0.88488)) () )) + (lex.add.entry '("." ((punc -1.1104)) () )) + (lex.add.entry '(":" ((punc -4.4236)) () )) + (lex.add.entry '("``" ((punc -2.7867)) () )) + (lex.add.entry '("`" ((punc -2.7867)) () )) + (lex.add.entry '("'" ((punc -2.7867)) () )) + (lex.add.entry '("\"" ((punc -2.7867)) () )) + ;; wp17 +;; (lex.add.entry '("_OOV_" ((n -3.4109) (j -2.7892) (v -3.7426)) ())) +; (lex.add.entry '("_OOV_" ((n -1.968) (j -2.351) (v -2.287)) ())) +; (lex.add.entry '("_number_" ((j -0.35202)) ())) +; (lex.add.entry '("," ((punc -0.88359)) () )) +; (lex.add.entry '("." ((punc -1.1101)) () )) +; (lex.add.entry '(":" ((punc -4.4236)) () )) +; (lex.add.entry '("``" ((punc -2.7867)) () )) +; (lex.add.entry '("`" ((punc -2.7867)) () )) +; (lex.add.entry '("'" ((punc -2.7867)) () )) +; (lex.add.entry '("\"" ((punc -2.7867)) () )) + ;; wp22 +; (lex.add.entry '("_OOV_" ((n -3.4109) (j -2.7892) (v -3.7426)) ())) +; (lex.add.entry '("_number_" ((cd -0.35202) (j -4.1908) (n -7.3890)) ())) +; (lex.add.entry '("," ((punc -0.88359)) () )) +; (lex.add.entry '("." ((punc -1.1101)) () )) +; (lex.add.entry '(":" ((punc -4.4236)) () )) +; (lex.add.entry '("``" ((punc -2.7867)) () )) + ;; wp18 +; (lex.add.entry '("_OOV_" ((n -3.4109) (j -2.7892) (v -3.7426)) ())) +; (lex.add.entry '("_number_" ((j -0.35202)) ())) +; (lex.add.entry '("`" ((punc -6.539) ) () )) +; (lex.add.entry '("``" ((punc -2.399) ) () )) +; (lex.add.entry '("," ((punc -0.480) ) () )) +; (lex.add.entry '("." ((fpunc -0.012) ) () )) +; (lex.add.entry '(":" ((punc -4.100) ) () )) + + (ngram.load 'english_pos_ngram + (path-append pos_model_dir "wsj.wp39.tri.ngrambin")) +; (ngram.load 'english_pos_ngram +; (path-append pos_model_dir "wsj.wp45.tri.ngram")) + (set! pos_supported t) + ) + (set! pos_supported nil)) + +(setq english_pos_map_wp39_to_wp20 + '( + (( vbd vb vbn vbz vbp vbg ) v) + (( nn nnp nns nnps fw sym ls ) n) + (( dt ) dt) + (( punc fpunc ) punc) + (( in ) in) + (( jj jjr jjs 1 2 ) j) + (( prp ) prp) + (( rb rp rbr rbs ) r) + (( cc ) cc) + (( of ) of) + (( to ) to) + (( cd ) cd) + (( md ) md) + (( pos ) pos) + (( wdt ) wdt) + (( wp ) wp) + (( wrb ) wrb) + (( ex ) ex) + (( uh ) uh) + (( pdt ) pdt) + )) + +(defvar pos_map nil + "pos_map +A reverse assoc list of predicted pos tags to some other tag set. Note +using this changes the pos tag loosing the actual predicted value. Rather +than map here you may find it more appropriate to map tags sets locally +in the modules that use them (e.g. phrasing and lexicons).") + +;;(setq pos_map_remap +;; '( +;; (( fpunc ) punc) +;; (( of ) in))) + +(def_feature_docstring 'Word.pos + "Word.pos + Part of speech tag value returned by the POS tagger module.") + +(def_feature_docstring 'Word.pos_score + "Word.pos_score + Part of speech tag log likelihood from Viterbi search.") + +(define (POS utt) +"(POS utt) +Apply part of speech tagging (and possible parsing too) to Word +relation." + (let ((rval (apply_method 'POS_Method utt))) + (cond + (rval rval) ;; new style + (t + (Classic_POS utt))))) + + +(provide 'pos) diff --git a/lib/postlex.scm b/lib/postlex.scm new file mode 100644 index 0000000..7fb038b --- /dev/null +++ b/lib/postlex.scm @@ -0,0 +1,587 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Postlexical rules +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Modifed for CSTR HTS Voice Library ;; +;; Author : Junichi Yamagishi (jyamagis@inf.ed.ac.uk) ;; +;; Date : Sept 2008 ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(define (PostLex utt) +"(PostLex utt) +Apply post lexical rules to segment stream. These may be almost +arbitrary rules as specified by the particular voice, through the +postlex_hooks variable. A number of standard post lexical rule +sets are provided including reduction, posessives etc. These +rules are also used to mark standard segments with their cluster +information used in creating diphone names." +(let ((rval (apply_method 'PostLex_Method utt))) + (cond + (rval rval) ;; new style + (t ;; should only really need this one + (apply_hooks postlex_rules_hooks utt))) + utt +)) + +(define (Classic_PostLex utt) + "(Classic_PostLex utt) +Apply post lexical rules (both builtin and those specified in +postlex_rules_hooks)." + (Builtin_PostLex utt) ;; haven't translated all the rules yet + (apply_hooks postlex_rules_hooks utt) + utt +) + +(defvar postlex_rules_hooks nil +"postlex_rules_hooks +A function or list of functions which encode post lexical rules. +This will be voice specific, though some rules will be shared across +languages.") + +;;; Mapping of full vowels to reduced vowels, this should be part +;;; of the phoneset definitions +(defvar postlex_vowel_reduce_table + '((mrpa + ((uh @) (i @) (a @) (e @) (u @) (o @) (oo @))) + (radio + ((ah ax el en em) + (ih ax) +; (er axr ax) +; (iy ih) +; (ey ax) + (aa ax) + (ae ax) + (eh ax)))) +"postlex_vowel_reduce_table +Mapping of vowels to their reduced form. This in an assoc list of +phoneset name to an assoc list of full vowel to reduced form.") + +(defvar postlex_vowel_reduce_cart_tree nil +"postlex_vowel_reduce_cart_tree +CART tree for vowel reduction.") + +(defvar postlex_vowel_reduce_cart_tree_hand + '((stress is 0) + ((p.syl_break < 2) + ((syl_break < 2) + ((1)) + ((0))) + ((0))) + ((0))) +"postlex_vowel_reduce_cart_tree_hand +A CART tree for vowel reduction. This is hand-written.") + +(defvar postlex_vowel_reduce_cart_data +' +((R:SylStructure.parent.gpos is cc) + (((0 0.993548) (1 0.00645161) 0)) + ((p.R:SylStructure.parent.gpos is md) + (((0 0.903226) (1 0.0967742) 0)) + ((p.R:SylStructure.parent.gpos is det) + ((n.R:SylStructure.parent.gpos is content) + ((last_accent < 2.5) + ((next_accent < 2.5) + ((next_accent < 1.2) + ((n.syl_break is 4) + (((0 0.967213) (1 0.0327869) 0)) + ((syl_break is 4) + (((0 0.952381) (1 0.047619) 0)) + ((n.syl_break is 4) + (((0 0.953488) (1 0.0465116) 0)) + ((position_type is single) + (((0 0.947368) (1 0.0526316) 0)) + ((accented is 0) + ((n.accented is 0) + (((0 0.857143) (1 0.142857) 0)) + (((0 0.415385) (1 0.584615) 1))) + (((0 0.974359) (1 0.025641) 0))))))) + (((0 0.968254) (1 0.031746) 0))) + (((0 0.969697) (1 0.030303) 0))) + (((0 0.976744) (1 0.0232558) 0))) + (((0 0.990291) (1 0.00970874) 0))) + ((next_accent < 108.5) + ((p.R:SylStructure.parent.gpos is pps) + (((0 0.828947) (1 0.171053) 0)) + ((R:SylStructure.parent.gpos is det) + ((accented is 0) + (((0 0.0599572) (1 0.940043) 1)) + (((0 0.949367) (1 0.0506329) 0))) + ((p.R:SylStructure.parent.gpos is cc) + (((0 0.880952) (1 0.119048) 0)) + ((p.R:SylStructure.parent.gpos is wp) + (((0 0.875) (1 0.125) 0)) + ((p.R:SylStructure.parent.gpos is in) + ((n.syl_break is 4) + (((0 0.961538) (1 0.0384615) 0)) + ((next_accent < 2.5) + ((syl_break is 4) + (((0 0.95122) (1 0.0487805) 0)) + ((next_accent < 1.2) + ((accented is 0) + ((n.stress is 0) + (((0 0.788462) (1 0.211538) 0)) + ((R:SylStructure.parent.R:Word.p.gpos is content) + (((0 0.863636) (1 0.136364) 0)) + ((position_type is single) + (((0 0.729167) (1 0.270833) 0)) + (((0 0.4) (1 0.6) 1))))) + (((0 0.983871) (1 0.016129) 0))) + (((0 0.96) (1 0.04) 0)))) + (((0 0.963636) (1 0.0363636) 0)))) + ((position_type is single) + ((syl_break is 4) + (((0 0.993865) (1 0.00613497) 0)) + ((p.R:SylStructure.parent.gpos is to) + (((0 0.984375) (1 0.015625) 0)) + ((syl_break is 1) + ((accented is 0) + ((n.R:SylStructure.parent.gpos is in) + (((0 0.869565) (1 0.130435) 0)) + ((R:SylStructure.parent.gpos is content) + (((0 0.861789) (1 0.138211) 0)) + ((p.R:SylStructure.parent.gpos is content) + ((p.syl_break is 4) + (((0 0.858065) (1 0.141935) 0)) + ((R:SylStructure.parent.gpos is in) + ((p.syl_break is 1) + ((n.R:SylStructure.parent.gpos is det) + (((0 0.659574) (1 0.340426) 0)) + ((p.stress is 0) + (((0 0.422222) (1 0.577778) 1)) + (((0 0.582278) (1 0.417722) 0)))) + ((n.accented is 0) + ((n.R:SylStructure.parent.gpos is content) + (((0 0.65) (1 0.35) 0)) + ((p.stress is 0) + (((0 0.464286) (1 0.535714) 1)) + (((0 0.538462) (1 0.461538) 0)))) + (((0 0.803279) (1 0.196721) 0)))) + ((n.R:SylStructure.parent.gpos is det) + (((0 0.952381) (1 0.047619) 0)) + ((n.syl_break is 4) + (((0 0.833333) (1 0.166667) 0)) + ((p.stress is 0) + ((p.syl_break is 1) + ((n.syl_break is 1) + (((0 0.740741) (1 0.259259) 0)) + ((R:SylStructure.parent.gpos is aux) + (((0 0.478261) (1 0.521739) 1)) + (((0 0.769231) (1 0.230769) 0)))) + (((0 0.755556) (1 0.244444) 0))) + (((0 0.797619) (1 0.202381) 0))))))) + (((0 0.870968) (1 0.129032) 0))))) + (((0 0.983806) (1 0.0161943) 0))) + (((0 0.977778) (1 0.0222222) 0))))) + ((next_accent < 21.6) + ((p.stress is 0) + ((R:SylStructure.parent.R:Word.p.gpos is md) + (((0 0.961538) (1 0.0384615) 0)) + ((position_type is mid) + (((0 0.977612) (1 0.0223881) 0)) + ((n.R:SylStructure.parent.gpos is det) + (((0 0.916667) (1 0.0833333) 0)) + ((R:SylStructure.parent.R:Word.n.gpos is 0) + (((0 0.915493) (1 0.084507) 0)) + ((R:SylStructure.parent.R:Word.n.gpos is pps) + (((0 0.884615) (1 0.115385) 0)) + ((n.stress is 0) + ((n.syl_break is 4) + (((0 0.986755) (1 0.013245) 0)) + ((p.syl_break is 4) + (((0 0.977011) (1 0.0229885) 0)) + ((n.syl_break is 4) + (((0 0.965517) (1 0.0344828) 0)) + ((last_accent < 1.2) + ((last_accent < 0.1) + (((0 0.910448) (1 0.0895522) 0)) + ((next_accent < 1.2) + ((R:SylStructure.parent.R:Word.n.gpos is in) + (((0 0.82) (1 0.18) 0)) + ((n.syl_break is 0) + ((R:SylStructure.parent.R:Word.p.gpos is content) + (((0 0.819672) (1 0.180328) 0)) + (((0 0.444444) (1 0.555556) 1))) + (((0 0.785714) (1 0.214286) 0)))) + (((0 0.836364) (1 0.163636) 0)))) + (((0 0.962025) (1 0.0379747) 0)))))) + ((stress is 0) + ((n.syl_break is 4) + (((0 0.21875) (1 0.78125) 1)) + ((R:SylStructure.parent.R:Word.p.gpos is aux) + (((0 0.259259) (1 0.740741) 1)) + ((p.syl_break is 1) + (((0 0.243094) (1 0.756906) 1)) + ((R:SylStructure.parent.R:Word.p.gpos is det) + (((0 0.290323) (1 0.709677) 1)) + ((R:SylStructure.parent.R:Word.p.gpos is in) + (((0 0.3) (1 0.7) 1)) + ((syl_break is 1) + (((0 0.289157) (1 0.710843) 1)) + ((p.syl_break is 4) + (((0 0.352941) (1 0.647059) 1)) + ((n.syl_break is 0) + (((0 0.311475) (1 0.688525) 1)) + ((syl_break is 4) + (((0 0.4) (1 0.6) 1)) + (((0 0.581395) (1 0.418605) 0))))))))))) + (((0 1) (1 0) 0))))))))) + ((stress is 0) + ((R:SylStructure.parent.R:Word.n.gpos is 0) + (((0 0.121212) (1 0.878788) 1)) + ((next_accent < 2.4) + ((R:SylStructure.parent.gpos is content) + ((position_type is mid) + (((0 0.176895) (1 0.823105) 1)) + ((p.syl_break is 1) + (((0 0.229167) (1 0.770833) 1)) + ((syl_break is 4) + (((0 0.242775) (1 0.757225) 1)) + ((p.syl_break is 0) + ((n.R:SylStructure.parent.gpos is in) + (((0 0.253521) (1 0.746479) 1)) + ((R:SylStructure.parent.R:Word.p.gpos is in) + (((0 0.262774) (1 0.737226) 1)) + ((last_accent < 2.1) + ((n.R:SylStructure.parent.gpos is aux) + (((0 0.304348) (1 0.695652) 1)) + ((next_accent < 1.2) + ((n.R:SylStructure.parent.gpos is cc) + (((0 0.291667) (1 0.708333) 1)) + ((syl_break is 1) + ((n.syl_break is 4) + (((0 0.344828) (1 0.655172) 1)) + ((R:SylStructure.parent.R:Word.p.gpos is det) + (((0 0.364706) (1 0.635294) 1)) + ((n.syl_break is 4) + (((0 0.384615) (1 0.615385) 1)) + ((last_accent < 1.2) + ((p.accented is 0) + (((0 0.584906) (1 0.415094) 0)) + ((n.accented is 0) + ((R:SylStructure.parent.R:Word.p.gpos is content) + (((0 0.41) (1 0.59) 1)) + (((0 0.6) (1 0.4) 0))) + (((0 0.333333) (1 0.666667) 1)))) + (((0 0.380952) (1 0.619048) 1)))))) + ((p.accented is 0) + (((0 0.183673) (1 0.816327) 1)) + ((n.R:SylStructure.parent.gpos is content) + ((n.stress is 0) + (((0 0.295455) (1 0.704545) 1)) + ((R:SylStructure.parent.R:Word.p.gpos is content) + ((n.syl_break is 1) + (((0 0.5) (1 0.5) 0)) + (((0 0.40625) (1 0.59375) 1))) + (((0 0.333333) (1 0.666667) 1)))) + (((0 0.2) (1 0.8) 1)))))) + (((0 0.3) (1 0.7) 1)))) + (((0 0.302326) (1 0.697674) 1))))) + (((0 0.25) (1 0.75) 1)))))) + (((0 0.173913) (1 0.826087) 1))) + (((0 0.166667) (1 0.833333) 1)))) + (((0 1) (1 0) 0)))) + (((0 0.2) (1 0.8) 1))))))))) + (((0 0.15) (1 0.85) 1))))))) + +(defvar postlex_mrpa_r_cart_tree +'((name is r) + ((R:Segment.n.ph_vc is -) + ((delete)) + ((nil))) + ((nil))) +"postlex_mrpa_r_cart_tree +For remove final R when not between vowels.") + + +;; Changed this to actually work... (Rob 09/12/04) +;; Changed this to delete the syllable when schwa is unneccesary (awb 19/07/04) +(define (postlex_apos_s_check utt) + "(postlex_apos_s_check UTT) +Deal with possesive s for English (American and British). Delete +schwa of 's if previous is not an alveolar or palatal fricative or affricative, and +change voiced to unvoiced s if previous is not voiced." + (mapcar + (lambda (syl) + ; word is 's + (if (string-equal "'s" (item.feat + syl "R:SylStructure.parent.name")) + (begin + ;; de-voice if last phone of previous word is unvoiced + (if (string-equal + "-" + (item.feat syl "p.R:SylStructure.daughtern.ph_cvox")) + (item.set_name + (item.relation.daughtern syl 'SylStructure) + "s")) ;; change it from "z" to "s" + ; if the previous seg is a aveolar or palatal, + ; fricative or affricate don't delete schwa otherwise delete it + (if (and + (member_string + (item.feat syl "p.R:SylStructure.daughtern.ph_ctype") '(f a)) + (member_string + (item.feat syl "p.R:SylStructure.daughtern.ph_cplace") '(a p))) + (begin + t) + (begin + ;; delete the schwa + (item.delete (item.relation.daughter1 syl 'SylStructure)) + ;; attach orphaned s/z to previous word + (item.relation.append_daughter + (item.prev syl) + 'SylStructure + (item.relation.daughtern syl 'SylStructure)) + ;; delete the now empty syllable + (item.delete syl)))))) + ;; never happens to if 's is first in an utterance + (cdr (utt.relation.items utt 'Syllable))) + utt) + +;; Changed this to work the other way round, too. Volker 10/08/06 +(define (postlex_the_vs_thee utt) +"(postlex_the_vs_thee utt) +Unnreduce the schwa in \"the\" when a vowel follows. +Reduce the vowel in \"the\" when no vowel follows (this +requires a lexicon entry for \"the\" with feature \"reduced\", +otherwise there will be no reduction)." +(let ((fullform (cadr (car (caar (cdr (cdar (lex.lookup_all 'thee))))))) + (reducedform (cadr(car(caar(cddr(lex.lookup 'the '(reduced))))))) + seg) + + (mapcar + (lambda (word) + (if (string-equal "the" (downcase (item.feat word "name"))) + (begin + (set! seg (item.relation (item.daughtern (item.relation.daughtern word 'SylStructure)) 'Segment)) + (if (string-equal "+" (item.feat (item.next seg) 'ph_vc)) + (item.set_feat seg 'name fullform) + (item.set_feat seg 'name reducedform))))) + (utt.relation.items utt 'Word))) +utt) + +(define (postlex_the_vs_thee_changeflag utt) +"(postlex_the_vs_thee_changeflag utt) +Unnreduce the schwa in \"the\" when a vowel follows. +Reduce the vowel in \"the\" when no vowel follows (this +requires a lexicon entry for \"the\" with feature \"reduced\", +otherwise there will be no reduction)." +(let ((fullform (cadr (car (caar (cdr (cdar (lex.lookup_all 'thee))))))) + (reducedform (cadr(car(caar(cddr(lex.lookup 'the '(reduced))))))) + seg) + + (mapcar + (lambda (word) + (if (string-equal "the" (downcase (item.feat word "name"))) + (begin + (set! seg (item.relation (item.daughtern (item.relation.daughtern word 'SylStructure)) 'Segment)) + (if (string-equal "+" (item.feat (item.next seg) 'ph_vc)) + (item.set_feat seg 'reducable 0) + (item.set_feat seg 'reducable 1))))) + (utt.relation.items utt 'Word))) +utt) + + +;; For Multisyn voices only. Volker 14/08/06 +(define (postlex_a utt) +"(postlex_a utt) +If POS of \"a\" is \"nn\" and segment feature \"reducable\", set it to 0. +This is a bugfix, but still requires the target cost function to add a +penalty if a candidate is reducable but the target is not. expro_target_cost +does that." +(let(seg) + (mapcar + (lambda(word) +;; (format t "%s\t%s\n" (item.feat word 'name)(item.feat word 'pos)) + (if(and(string-equal "a" (downcase (item.feat word "name"))) + (string-equal "nn" (item.feat word "pos"))) + (begin + (set! seg (item.relation (item.daughtern (item.relation.daughtern word +'SylStructure)) 'Segment)) +;; (format t "should not be reducable\n") + (if (eq 1 (parse-number (item.feat seg 'reducable))) + (item.set_feat seg 'reducable 0)))) + ) + (utt.relation.items utt 'Word))) +utt) + + + +(define (postlex_unilex_vowel_reduction utt) +"(postlex_unilex_vowel_reduction utt) +Perform vowel reduction based on unilex specification of what can be reduced." +(let () + (mapcar + (lambda (seg) + (if (and (eq? (parse-number (item.feat seg "reducable")) 1) + (not (> (parse-number (item.feat seg "R:SylStructure.parent.stress")) 0))) + (if (not (and (seg_word_final seg) + (string-equal (item.feat (item.next seg) 'ph_vc) "+"))) + (item.set_feat seg "name" (item.feat seg "reducedform"))))) + (utt.relation.items utt 'Segment))) +utt) + + + + +(define (seg_word_final seg) +"(seg_word_final seg) +Is this segment word final?" + (let ((this_seg_word (item.parent (item.relation.parent seg 'SylStructure))) + (silence (car (cadr (car (PhoneSet.description '(silences)))))) + next_seg_word) + (if (item.next seg) + (set! next_seg_word (item.parent (item.relation.parent (item.next seg) 'SylStructure)))) + (if (or (equal? this_seg_word next_seg_word) + (string-equal (item.feat seg "name") silence)) + nil + t))) + + + +;; imported from postlex_intervoc_r.scm Volker 14/08/06 +(define (postlex_intervoc_r utt) +"(postlex_intervoc_r UTT) + +Remove any word-final /r/ which is phrase-final or not going +to be inter-vocalic i.e. the following words does not start +with a vowel. + +NOTE: in older versions of unilex-rpx.out for Festival, there +is no word-final /r/. + +" +(let (word next_word last_phone following_phone) + (set! word (utt.relation.first utt 'Word)) + + (while word + (set! next_word (item.next word)) + (set! last_phone (item.daughtern + (item.daughtern(item.relation word 'SylStructure)))) + (if next_word + (begin + + (set! following_phone (item.daughter1 + (item.daughter1 + (item.relation next_word 'SylStructure)))) + ; last_phone and following_phone should always be defined at this point, + ; but since the upgrade to Fedora and characters no longer being in ISO + ; but in UTF8, the pound sterling is no longer treated correctly. + ; Probably (Token utt) should be fixed. + + (if (and following_phone last_phone) + (begin + (format t "%s\t%s %s %s %s\n" (item.name word) + (item.name last_phone) + (item.name following_phone) + (item.feat following_phone 'ph_vc) + (item.feat word 'pbreak)) + (if(and(equal? "r" (item.name last_phone)) + (or(not(equal? "NB" (item.feat word 'pbreak))) + (equal? "-" (item.feat following_phone 'ph_vc)))) + (begin + (format t "\t\t\t/r/ in \"%s %s\" deleted\n" + (item.name word)(item.name next_word)) + (item.delete last_phone)))))) + (if(and last_phone (equal? "r" (item.name last_phone))) + (begin + (format t "\t\t\tutterance-final /r/ deleted\n") + (item.delete last_phone))) + ) + + (set! word (item.next word)))) + utt) + + +(define (postlex_stop_deletion utt) +"(postlex_stop_deletion utt) + +Delete any stop or affricative (phone which has a closure) +immediately followed by another stop or affricative. + +Also save the identity of the deleted phone for the +context cost functions. Consider: + +backtrack /b a k t r a k/ -> /b a t r a k/ +(actually Jenny reduces : /b a k_cl k t_cl t r a k/ -> /b a k_cl t r a k/) +If we then look for a diphone /a t/ we want to favour +candidates coming from the same context i.e. which +are actually a reduced /a k t/. In the data base, +the 1st /a/ gets the feature right_context=k and the +/t/ gets the fearture left_context=k. + +" +(let(seg next_seg prev_seg) + (set! seg (utt.relation.first utt 'Segment)) + (while seg + (set! prev_seg (item.prev seg)) + (if prev_seg + (begin + ;(format t "%s %s %s\n" (item.name seg) + ; (item.feat seg 'ph_ctype) + ; (item.feat seg 'p.ph_ctype)) + (if(and(or(equal? "s" (item.feat seg 'ph_ctype)) + (equal? "a" (item.feat seg 'ph_ctype))) + (or(equal? "s" (item.feat seg 'p.ph_ctype)) + (equal? "a" (item.feat seg 'p.ph_ctype))) + ; When there are 3 stops in a row, and after the 1st has been + ; deleted, this prevents the 2nd to be deleted as well: + (equal? 0 (item.feat prev_seg 'left_context))) + (begin + (set! prev_prev_seg (item.prev prev_seg)) + (format t "postlex_stop_deletion: %s in %s\n" + (item.name prev_seg) + (item.name(item.parent(item.relation.parent prev_seg + 'SylStructure)))) + (if prev_prev_seg + (begin + ;(format t "setting left_context of %s and right context of %s to %s\n" + ; (item.name seg) + ; (item.name prev_prev_seg) + ; (item.name prev_seg)) + (item.set_feat seg 'left_context (item.name prev_seg)) + (item.set_feat prev_prev_seg 'right_context (item.name prev_seg)))) + (if(and(item.next seg) + (equal? (item.name seg) (item.name prev_seg))) + (begin + ;(format t "setting left_context of %s to %s\n" + ; (item.name (item.next seg) + ; (item.name prev_seg)) + + (item.set_feat (item.next seg) 'left_context (item.name prev_seg)))) + (item.delete prev_seg))))) + (set! seg (item.next seg)))) +utt) + +(provide 'postlex) diff --git a/lib/radio_phones.scm b/lib/radio_phones.scm new file mode 100644 index 0000000..7c6b524 --- /dev/null +++ b/lib/radio_phones.scm @@ -0,0 +1,122 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A definition of the radio phone set used in the BU RADIO FM +;;; corpus, some people call this the darpa set. This one +;;; has the closures removed +;;; + +(defPhoneSet + radio + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 0) + ;; vowel frontness: front mid back + (vfront 1 2 3 0) + ;; lip rounding + (vrnd + - 0) + ;; consonant type: stop fricative affricate nasal lateral approximant + (ctype s f a n l r 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar glottal + (cplace l a p b d v g 0) + ;; consonant voicing + (cvox + - 0) + ) + ;; Phone set members + ( + ;; Note these features were set by awb so they are wrong !!! + (aa + l 3 3 - 0 0 0) ;; father + (ae + s 3 1 - 0 0 0) ;; fat + (ah + s 2 2 - 0 0 0) ;; but + (ao + l 3 3 + 0 0 0) ;; lawn + (aw + d 3 2 - 0 0 0) ;; how + (ax + a 2 2 - 0 0 0) ;; about + (axr + a 2 2 - r a +) + (ay + d 3 2 - 0 0 0) ;; hide + (b - 0 0 0 0 s l +) + (ch - 0 0 0 0 a p -) + (d - 0 0 0 0 s a +) + (dh - 0 0 0 0 f d +) + (dx - a 0 0 0 s a +) ;; ?? + (eh + s 2 1 - 0 0 0) ;; get + (el + s 0 0 0 l a +) + (em + s 0 0 0 n l +) + (en + s 0 0 0 n a +) + (er + a 2 2 - r 0 0) ;; always followed by r (er-r == axr) + (ey + d 2 1 - 0 0 0) ;; gate + (f - 0 0 0 0 f b -) + (g - 0 0 0 0 s v +) + (hh - 0 0 0 0 f g -) + (hv - 0 0 0 0 f g +) + (ih + s 1 1 - 0 0 0) ;; bit + (iy + l 1 1 - 0 0 0) ;; beet + (jh - 0 0 0 0 a p +) + (k - 0 0 0 0 s v -) + (l - 0 0 0 0 l a +) + (m - 0 0 0 0 n l +) + (n - 0 0 0 0 n a +) + (nx - 0 0 0 0 n d +) ;; ??? + (ng - 0 0 0 0 n v +) + (ow + d 2 3 + 0 0 0) ;; lone + (oy + d 2 3 + 0 0 0) ;; toy + (p - 0 0 0 0 s l -) + (r - 0 0 0 0 r a +) + (s - 0 0 0 0 f a -) + (sh - 0 0 0 0 f p -) + (t - 0 0 0 0 s a -) + (th - 0 0 0 0 f d -) + (uh + s 1 3 + 0 0 0) ;; full + (uw + l 1 3 + 0 0 0) ;; fool + (v - 0 0 0 0 f b +) + (w - 0 0 0 0 r l +) + (y - 0 0 0 0 r p +) + (z - 0 0 0 0 f a +) + (zh - 0 0 0 0 f p +) + (pau - 0 0 0 0 0 0 -) + (h# - 0 0 0 0 0 0 -) + (brth - 0 0 0 0 0 0 -) + ) +) + +(PhoneSet.silences '(pau h# brth)) + +(provide 'radio_phones) + + + + diff --git a/lib/sable-latin.ent b/lib/sable-latin.ent new file mode 100644 index 0000000..f068020 --- /dev/null +++ b/lib/sable-latin.ent @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/sable-mode.scm b/lib/sable-mode.scm new file mode 100644 index 0000000..a11d80c --- /dev/null +++ b/lib/sable-mode.scm @@ -0,0 +1,560 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Festival (1.3.X) support for SABLE 0.2 the SGML/XML based mark up ;; +;;; language. ;; +;;; ;; +;;; This is XML version requiring Edinburgh's LTG's rxp XML parser as ;; +;;; distributed with Festival ;; +;;; ;; + +(require_module 'rxp) + +;;(set! auto-text-mode-alist +;; (cons +;; (cons "\\.sable$" 'sable) +;; auto-text-mode-alist)) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Remember where to find these two XML entities. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(xml_register_id "-//SABLE//DTD SABLE speech mark up//EN" + (path-append libdir "Sable.v0_2.dtd") + ) + +(xml_register_id "-//SABLE//ENTITIES Added Latin 1 for SABLE//EN" + (path-append libdir "sable-latin.ent") + ) + +;; (print (xml_registered_ids)) + +(defvar SABLE_RXDOUBLE "-?\\(\\([0-9]+\\.[0-9]*\\)\\|\\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\)\\([eE][---+]?[0-9]+\\)?") + +(defvar sable_pitch_base_map + '((highest 1.2) + (high 1.1) + (medium 1.0) + (default 1.0) + (low 0.9) + (lowest 0.8))) +(defvar sable_pitch_med_map + '((highest 1.2) + (high 1.1) + (medium 1.0) + (default 1.0) + (low 0.9) + (lowest 0.8))) +(defvar sable_pitch_range_map + '((largest 1.2) + (large 1.1) + (medium 1.0) + (default 1.0) + (small 0.9) + (smallest 0.8))) +(defvar sable_rate_speed_map + '((fastest 1.5) + (fast 1.2) + (medium 1.0) + (default 1.0) + (slow 0.8) + (slowest 0.6))) +(defvar sable_volume_level_map + '((loudest 2.0) + (loud 1.5) + (default 1.0) + (medium 1.0) + (quiet 0.5))) + +(define (sable_init_globals) + (set! utts nil) + (set! sable_omitted_mode nil) + (set! sable_word_features_stack nil) + (set! sable_pitch_context nil) + (set! sable_vol_context nil) + (set! sable_vol_type 'no_change) + (set! sable_vol_factor 1.0) + (set! sable_current_language 'britishenglish) + (set! sable_unsupported_language nil) + (set! sable_language_stack nil) + (set! sable_current_speaker 'voice_kal_diphone) + (set! sable_speaker_stack nil) +) + +(define (sable_token_to_words token name) + "(sable_token_to_words utt token name) +SABLE mode token specific analysis." + (cond + ((or sable_omitted_mode sable_unsupported_language) + ;; don't say anything (whole utterance) + nil) + ((string-equal "1" (item.feat token "done_sable_sub")) + ;; to catch recursive calls this when splitting up sub expressions + (sable_previous_token_to_words token name)) + ((and (not (string-equal "0" (item.feat token "sable_sub"))) + (string-equal "0" (item.feat token "p.sable_sub"))) + (let (words (sub (item.feat token "sable_sub"))) + (item.set_feat token "done_sable_sub" "1") + (set! words + (apply append + (mapcar + (lambda (w) + (set! www (sable_previous_token_to_words token w)) + www) + (read-from-string sub)))) + (item.set_feat token "done_sable_sub" "0") + words)) + ((string-equal "1" (item.feat token "sable_ignore")) + ;; don't say anything (individual word) + nil) + ((string-equal "1" (item.feat token "sable_ipa")) + ;; Each token is an IPA phone + (item.set_feat token "phonemes" (sable-map-ipa name)) + (list name)) + ((string-equal "1" (item.feat token "sable_literal")) + ;; Only deal with spell here + (let ((subwords) (subword)) + (item.set_feat token "pos" token.letter_pos) + (mapcar + (lambda (letter) + ;; might be symbols or digits + (set! subword (sable_previous_token_to_words token letter)) + (if subwords + (set! subwords (append subwords subword)) + (set! subwords subword))) + (symbolexplode name)) + subwords)) + ((not (string-equal "0" (item.feat token "token_pos"))) + ;; bypass the prediction stage, if English + (if (member_string (Parameter.get 'Language) + '(britishenglish americanenglish)) + (builtin_english_token_to_words token name) + (sable_previous_token_to_words token name))) + ;; could be others here later + (t + (sable_previous_token_to_words token name)))) + +(defvar sable_elements +'( + ("(SABLE" (ATTLIST UTT) + (eval (list sable_current_speaker)) ;; so we know what state we start in + (sable_setup_voice_params) + nil + ) + (")SABLE" (ATTLIST UTT) + (xxml_synth UTT) ;; Synthesis the remaining tokens + nil + ) + ;; Utterance break elements + ("(LANGUAGE" (ATTLIST UTT) + ;; Status: probably complete + (xxml_synth UTT) + (set! sable_language_stack + (cons + (list sable_current_language sable_unsupported_language) + sable_language_stack)) + ;; Select a new language + (let ((language (upcase (car (xxml_attval "ID" ATTLIST))))) + (cond + ((or (string-equal language "SPANISH") + (string-equal language "ES")) + (set! sable_current_language 'spanish) + (set! sable_unsupported_language nil) + (select_language 'spanish)) + ((or (string-equal language "ENGLISH") + (string-equal language "EN")) + (set! sable_current_language 'britishenglish) + (set! sable_unsupported_language nil) + (select_language 'britishenglish)) + (t ;; skip languages you don't know + ;; BUG: if current language isn't English this wont work + (apply_hooks tts_hooks + (eval (list 'Utterance 'Text + (string-append "Some text in " language)))) + (set! sable_unsupported_language t))) + nil)) + (")LANGUAGE" (ATTLIST UTT) + (xxml_synth UTT) + (set! sable_unsupported_language (car (cdr (car sable_language_stack)))) + (set! sable_current_language (car (car sable_language_stack))) + (set! sable_language_stack (cdr sable_language_stack)) + (if (not sable_omitted_mode) + (begin + (select_language sable_current_language) + (sable_setup_voice_params))) + nil) + ("(SPEAKER" (ATTLIST UTT) + ;; Status: GENDER/AGE ignored, should be done by sable-def-speaker + ;; function to define Festival voices to SABLE + (xxml_synth UTT) + (set! sable_speaker_stack (cons sable_current_speaker sable_speaker_stack)) + (cond + ((not equal? sable_current_language 'britishenglish) + (print "SABLE: choosen unknown voice, current voice unchanged")) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male1) + (set! sable_current_speaker 'voice_kal_diphone) + (voice_kal_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male2) + (set! sable_current_speaker 'voice_cmu_us_rms_cg) + (voice_cmu_us_rms_cg)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male3) + (set! sable_current_speaker 'voice_ked_diphone) + (voice_ked_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male4) + (set! sable_current_speaker 'voice_rab_diphone) + (voice_rab_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male5) + (set! sable_current_speaker 'voice_cmu_us_awb_cg) + (voice_cmu_us_awb_cg)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'female1) + (set! sable_current_speaker 'voice_cmu_us_slt_arctic_hts) + (voice_us1_mbrola)) + (t + (set! sable_current_speaker (intern (string-append "voice_" (car (xxml_attval "NAME" ATTLIST))))) + (eval (list sable_current_speaker)))) + (sable_setup_voice_params) + nil) + (")SPEAKER" (ATTLIST UTT) + (xxml_synth UTT) + (set! sable_utt UTT) + (set! sable_current_speaker (car sable_speaker_stack)) + (set! sable_speaker_stack (cdr sable_speaker_stack)) + (eval (list sable_current_speaker)) + (sable_setup_voice_params) + nil) + ("BREAK" (ATTLIST UTT) + ;; Status: probably complete + ;; may cause an utterance break + (let ((level (upcase (car (xxml_attval "LEVEL" ATTLIST))))) + (cond + ((null UTT) nil) + ((string-equal "LARGE" level) + (xxml_synth UTT) + nil) + (t + (let ((last_token (utt.relation.last UTT'Token))) + (if last_token + (item.set_feat last_token "pbreak" "B")) + UTT))))) + ("(DIV" (ATLIST UTT) + ;; Status: probably complete + (xxml_synth UTT) + nil) + ("AUDIO" (ATTLIST UTT) + ;; Status: MODE (background) ignored, only insertion supported + ;; mime type of file also ignored, as its LEVEL + (let ((tmpfile (make_tmp_filename))) + ;; ignoring mode-background (and will for sometime) + ;; ignoring level option + (xxml_synth UTT) ;; synthesizing anything ready to be synthesized + (get_url (car (xxml_attval "SRC" ATTLIST)) tmpfile) + (apply_hooks tts_hooks + (eval (list 'Utterance 'Wave tmpfile))) + (delete-file tmpfile) + nil)) + ("(EMPH" (ATTLIST UTT) + ;; Status: nesting makes no difference, levels ignored + ;; Festival is particularly bad at adding specific emphasis + ;; that's what happens when you use statistical methods that + ;; don't include any notion of emphasis + ;; This is *not* recursive and only one level of EMPH supported + (sable_push_word_features) + (set! xxml_word_features + (cons (list "dur_stretch" 1.6) + (cons + (list "EMPH" "1") xxml_word_features))) + UTT) + (")EMPH" (ATTLIST UTT) + (set! xxml_word_features (sable_pop_word_features)) + UTT) + ("(PITCH" (ATTLIST UTT) + ;; Status: probably complete + ;; At present festival requires an utterance break here + (xxml_synth UTT) + (set! sable_pitch_context (cons int_lr_params sable_pitch_context)) + (let ((base (sable_interpret_param + (car (xxml_attval "BASE" ATTLIST)) + sable_pitch_base_map + (cadr (assoc 'target_f0_mean int_lr_params)) + sable_pitch_base_original)) + (med (sable_interpret_param + (car (xxml_attval "MED" ATTLIST)) + sable_pitch_med_map + (cadr (assoc 'target_f0_mean int_lr_params)) + sable_pitch_med_original)) + (range (sable_interpret_param + (car (xxml_attval "RANGE" ATTLIST)) + sable_pitch_range_map + (cadr (assoc 'target_f0_std int_lr_params)) + sable_pitch_range_original)) + (oldmean (cadr (assoc 'target_f0_mean int_lr_params)))) + ;; Festival (if it supports anything) supports mean and std + ;; so we treat base as med if med doesn't seem to do anything + (if (equal? med oldmean) + (set! med base)) + (set! int_lr_params + (cons + (list 'target_f0_mean med) + (cons + (list 'target_f0_std range) + int_lr_params))) + nil)) + (")PITCH" (ATTLIST UTT) + (xxml_synth UTT) + (set! int_lr_params (car sable_pitch_context)) + (set! sable_pitch_context (cdr sable_pitch_context)) + nil) + ("(RATE" (ATTLIST UTT) + ;; Status: can't deal with absolute word per minute SPEED. + (sable_push_word_features) + ;; can't deal with words per minute value + (let ((rate (sable_interpret_param + (car (xxml_attval "SPEED" ATTLIST)) + sable_rate_speed_map + (sable_find_fval "dur_stretch" xxml_word_features 1.0) + sable_rate_speed_original))) + (set! xxml_word_features + (cons (list "dur_stretch" (/ 1.0 rate)) xxml_word_features)) + UTT)) + (")RATE" (ATTLIST UTT) + (set! xxml_word_features (sable_pop_word_features)) + UTT) + ("(VOLUME" (ATTLIST UTT) + ;; Status: probably complete + ;; At present festival requires an utterance break here + (xxml_synth UTT) + (set! sable_vol_context (cons (list sable_vol_type sable_vol_factor) + sable_vol_context)) + (let ((level (sable_interpret_param + (car (xxml_attval "LEVEL" ATTLIST)) + sable_volume_level_map + sable_vol_factor + 1.0))) + (cond + ((string-matches (car (xxml_attval "LEVEL" ATTLIST)) ".*%") + (set! sable_vol_type 'relative)) + ((string-matches (car (xxml_attval "LEVEL" ATTLIST)) SABLE_RXDOUBLE) + (set! sable_vol_type 'absolute)) + (t + (set! sable_vol_type 'relative))) + (set! sable_vol_factor level)) + nil) + (")VOLUME" (ATTLIST UTT) + (xxml_synth UTT) + (set! sable_vol_type (car (car sable_vol_context))) + (set! sable_vol_factor (car (cdr (car sable_vol_context)))) + (set! sable_vol_context (cdr sable_vol_context)) + nil) + ("(ENGINE" (ATTLIST UTT) + ;; Status: probably complete + (xxml_synth UTT) + (if (string-matches (car (xxml_attval "ID" ATTLIST)) "festival.*") + (let ((datastr "")) + (mapcar + (lambda (c) (set! datastr (string-append datastr " " c))) + (xxml_attval "DATA" ATTLIST)) + (apply_hooks tts_hooks (eval (list 'Utterance 'Text datastr))) + (set! sable_omitted_mode t)) ;; ignore contents + ;; else + ;; its not relevant to me + ) + nil) + (")ENGINE" (ATTLIST UTT) + (xxml_synth UTT) + (set! sable_omitted_mode nil) + nil) + ("MARKER" (ATTLIST UTT) + ;; Status: does nothing + ;; Can't support this without low-level control of audio spooler + (format t "SABLE: marker \"%s\"\n" + (car (xxml_attval "MARK" ATTLIST))) + UTT) + ("(PRON" (ATTLIST UTT) + ;; Status: IPA currently ignored + (sable_push_word_features) + ;; can't deal with words per minute value + (let ((ipa (xxml_attval "IPA" ATTLIST)) + (sub (xxml_attval "SUB" ATTLIST))) + (cond + (ipa + (format t "SABLE: ipa ignored\n") + (set! xxml_word_features + (cons (list "sable_ignore" "1") xxml_word_features))) + (sub + (set! xxml_word_features + (cons (list "sable_sub" (format nil "%l" sub)) + xxml_word_features)) + (set! xxml_word_features + (cons (list "sable_ignore" "1") xxml_word_features)))) + UTT)) + (")PRON" (ATTLIST UTT) + (set! xxml_word_features (sable_pop_word_features)) + UTT) + ("(SAYAS" (ATTLIST UTT) + ;; Status: only a few of the types are dealt with + (sable_push_word_features) + (set! sable_utt UTT) + ;; can't deal with words per minute value + (let ((mode (downcase (car (xxml_attval "MODE" ATTLIST)))) + (modetype (car (xxml_attval "MODETYPE" ATTLIST)))) + (cond + ((string-equal mode "literal") + (set! xxml_word_features + (cons (list "sable_literal" "1") xxml_word_features))) + ((string-equal mode "phone") + (set! xxml_word_features + (cons (list "token_pos" "digits") xxml_word_features))) + ((string-equal mode "ordinal") + (set! xxml_word_features + (cons (list "token_pos" "ordinal") xxml_word_features))) + ((string-equal mode "cardinal") + (set! xxml_word_features + (cons (list "token_pos" "cardinal") xxml_word_features))) + (t + ;; blindly trust festival to get it right + t)) + UTT)) + (")SAYAS" (ATTLIST UTT) + (set! xxml_word_features (sable_pop_word_features)) + UTT) + + +)) + +(define (sable_init_func) + "(sable_init_func) +Initialisation for SABLE mode" + (sable_init_globals) + (voice_kal_diphone) + (set! sable_previous_elements xxml_elements) + (set! xxml_elements sable_elements) + (set! sable_previous_token_to_words english_token_to_words) + (set! english_token_to_words sable_token_to_words) + (set! token_to_words sable_token_to_words)) + +(define (sable_exit_func) + "(sable_exit_func) +Exit function for SABLE mode" + (set! xxml_elements sable_previous_elements) + (set! token_to_words sable_previous_token_to_words) + (set! english_token_to_words sable_previous_token_to_words)) + +(define (sable_push_word_features) +"(sable_push_word_features) +Save current word features on stack." + (set! sable_word_features_stack + (cons xxml_word_features sable_word_features_stack))) + +(define (sable_adjust_volume utt) + "(sable_adjust_volume utt) +Amplify or attenutate signale based on value of sable_vol_factor +and sable_vol_type (absolute or relative)." + (set! utts (cons utt utts)) + (cond + ((equal? sable_vol_type 'no_change) + utt) + ((equal? sable_vol_type 'absolute) + (utt.wave.rescale utt sable_vol_factor 'absolute)) + ((equal? sable_vol_type 'relative) + (utt.wave.rescale utt sable_vol_factor)) + (t + (format stderr "SABLE: volume unknown type \"%s\"\n" sable_vol_type) + utt)) + utt) + +(define (sable_pop_word_features) +"(sable_pop_word_features) +Pop word features from stack." + (let ((r (car sable_word_features_stack))) + (set! sable_word_features_stack (cdr sable_word_features_stack)) + r)) + +(define (sable_find_fval feat flist def) + (cond + ((null flist) def) + ((string-equal feat (car (car flist))) + (car (cdr (car flist)))) + (t + (sable_find_fval feat (cdr flist) def)))) + +(define (sable_interpret_param ident map original current) +"(sable_interpret_param IDENT MAP ORIGINAL CURRENT) +If IDENT is in map return ORIGINAL times value in map, otherwise +treat IDENT of the form +/-N% and modify CURRENT accordingly." + (let ((mm (assoc ident map))) + (cond + (mm + (* original (car (cdr mm)))) + ((string-matches ident SABLE_RXDOUBLE) + (parse-number ident)) + ((string-matches ident ".*%") + (+ current (* current (/ (parse-number (string-before ident "%")) + 100.0)))) +;; ((string-matches ident ".*%") +;; (* current (/ (parse-number (string-before ident "%")) 100.0))) + ((not ident) current) + (t + (format stderr "SABLE: modifier \"%s\" not of float, tag or +/-N\n" + ident) + current)))) + +(define (sable_setup_voice_params) +"(sable_setup_voice_params) +Set up original values for various voice parameters." + (set! sable_pitch_base_original (cadr (assoc 'target_f0_mean int_lr_params))) + (set! sable_pitch_med_original (cadr (assoc 'target_f0_mean int_lr_params))) + (set! sable_pitch_range_original (cadr (assoc 'target_f0_std int_lr_params))) + (set! sable_rate_speed_original 1.0) + (if (and after_synth_hooks (not (consp after_synth_hooks))) + (set! after_synth_hooks + (cons after_synth_hooks (list sable_adjust_volume))) + (set! after_synth_hooks + (append after_synth_hooks (list sable_adjust_volume)))) +) + +;;; Declare the new mode to Festival +(set! tts_text_modes + (cons + (list + 'sable ;; mode name + (list + (list 'init_func sable_init_func) + (list 'exit_func sable_exit_func) + '(analysis_type xml) + )) + tts_text_modes)) + +(provide 'sable-mode) diff --git a/lib/scfg.scm b/lib/scfg.scm new file mode 100644 index 0000000..6716e5b --- /dev/null +++ b/lib/scfg.scm @@ -0,0 +1,62 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Some functions for manipulating a SCFG parse tree + +(require_module 'parser) + +(define (scfg_simplify tree) + "(scfg_brackets_only tree) +Output only the bracketing and the bottom level pos and words." + (cond + ((not tree) nil) + ((car (cdr (assoc 'pos (car (cdr (car tree)))))) + ;; terminal node + (list + (car (cdr (assoc 'pos (car (cdr (car tree)))))) + (car (car tree)))) + (t + (cons + (car (car tree)) + (mapcar scfg_simplify (cdr tree)))))) + +(define (scfg_simplify_relation_tree trees) + (mapcar scfg_simplify trees)) + +(defvar scfg_eos_tree eou_tree + "scfg_eos_tree +In MultiProbParse this CART tree is used to define end of sentence +within an utterance. It is applied to the token relation. +By default it is set to eou_tree.") + +(provide 'scfg) diff --git a/lib/scfg_wsj_wp20.gram b/lib/scfg_wsj_wp20.gram new file mode 100644 index 0000000..2df5414 --- /dev/null +++ b/lib/scfg_wsj_wp20.gram @@ -0,0 +1,523 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-*-mode:scheme-*- +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A Stochastic context free grammar for the wp20 tag set with 19 +;;; nonterminals +;;; +;;; This was trained from 10,000 sentences (00-04) of the UPenn WSJ tree +;;; bank using the inside-outside algorithm seeded with the bracketing from +;;; the treebank. The implementation is the scfg_ suite in the +;; speech tools and is based on the paper "Inside-Outside +;;; Reestimation from partially bracketed corpora", F Pereira and +;;; Y. Schabes. pp 128-135, 30th ACL, Newark, Delaware 1992. +;;; +;;; This grammar with 19 nonterminals was trained for 174 passes +;;; using a fifth of training data each time. It was tested against +;;; independent data both bracketed and unbracketed. After training, +;;; all rules with a probability less than 1.0e-6 were pruned. +;;; +;;; On an unseen test set of 686 sentences (from wsj/05/) this gets +;;; 92.2397% bracketing accuracy and 29.5918% sentences fully correct +;;; +;;; previous best 15_20 grammar +;;; 90.2377% bracketing accuracy and 24.7813% sentences fully correct +;;; +;;; Training this grammar took a long time. This is best grammar +;;; by testing grammars varying the number of non-terminals from 11-25 +;;; as the number of NTs increases the time for training also increases +;;; This 19_20 grammar took 20 days on a Sun Ultra 1 140, but I also +;;; had to search 11-18 to confirm this is best, which was done with a +;;; collection of Ultra 140s 170s and Pentium Pros (Linux and FreeBSD) +;;; +(0.00593452 NT00 NT00 NT00) +(0.0319023 NT00 NT00 NT13) +(0.00105452 NT00 NT00 NT18) +(0.00061816 NT00 NT02 NT10) +(0.000399698 NT00 NT02 NT12) +(0.0383818 NT00 NT05 NT00) +(0.00011458 NT00 NT06 NT03) +(0.00164298 NT00 NT06 NT17) +(0.00153884 NT00 NT07 NT07) +(0.00118244 NT00 NT07 NT12) +(0.00171642 NT00 NT07 NT13) +(0.00031308 NT00 NT07 NT17) +(0.0949408 NT00 NT09 NT18) +(0.000932166 NT00 NT10 NT03) +(0.000150288 NT00 NT10 NT17) +(0.0152371 NT00 NT12 NT18) +(0.73409 NT00 NT14 NT13) +(0.0403652 NT00 NT14 NT18) +(0.000195643 NT00 NT16 NT07) +(0.0134222 NT00 NT18 NT13) +(0.015624 NT00 NT18 NT18) +(0.00251118 NT01 NT01 NT07) +(0.00354571 NT01 NT01 NT11) +(0.22337 NT01 NT01 NT16) +(0.0467048 NT01 NT02 NT05) +(0.000518329 NT01 NT04 NT01) +(0.000100574 NT01 NT06 NT05) +(0.0480904 NT01 NT07 NT05) +(0.000358197 NT01 NT11 NT11) +(0.00278007 NT01 NT16 NT05) +(0.000179198 NT01 NT16 NT15) +(0.00140099 NT01 n) +(0.00228587 NT01 v) +(0.524988 NT01 dt) +(0.00128028 NT01 in) +(0.0660845 NT01 j) +(0.0131026 NT01 cd) +(0.00584238 NT01 r) +(0.0548382 NT01 prp) +(0.000445004 NT01 wdt) +(0.00135794 NT01 wp) +(0.000195991 NT01 wrb) +(0.000264526 NT02 NT01 NT01) +(0.00243627 NT02 NT01 NT02) +(0.613543 NT02 NT01 NT07) +(0.00180865 NT02 NT01 NT11) +(0.0042804 NT02 NT01 NT16) +(0.0392418 NT02 NT02 NT07) +(0.026104 NT02 NT02 NT12) +(0.000916683 NT02 NT02 NT16) +(0.00158862 NT02 NT04 NT01) +(0.000206161 NT02 NT04 NT02) +(0.00343189 NT02 NT04 NT16) +(0.000417113 NT02 NT07 NT05) +(0.0988457 NT02 NT07 NT07) +(0.000931386 NT02 NT07 NT11) +(0.00073236 NT02 NT07 NT12) +(0.000153421 NT02 NT10 NT13) +(0.00163484 NT02 NT11 NT02) +(0.0379562 NT02 NT11 NT07) +(0.0149 NT02 NT11 NT11) +(0.00105811 NT02 NT11 NT12) +(0.000175184 NT02 NT16 NT02) +(0.0403395 NT02 NT16 NT07) +(0.00297703 NT02 NT16 NT12) +(0.0875026 NT02 n) +(0.00496719 NT02 v) +(0.000409658 NT02 dt) +(0.00239978 NT02 j) +(0.010203 NT02 r) +(0.000194628 NT02 pdt) +(0.000377009 NT03 NT04 NT02) +(0.11551 NT03 NT08 NT13) +(0.347629 NT03 NT09 NT13) +(0.484911 NT03 NT10 NT13) +(0.00188291 NT03 NT11 NT12) +(0.0495461 NT03 NT17 NT13) +(0.00918797 NT04 NT03 NT05) +(0.000303954 NT04 NT04 NT02) +(0.00284848 NT04 NT04 NT04) +(0.00710115 NT04 NT04 NT12) +(0.000597744 NT04 NT04 NT15) +(0.000377075 NT04 NT04 NT16) +(0.00130088 NT04 NT09 NT05) +(0.00175428 NT04 NT10 NT13) +(0.000127716 NT04 NT15 NT04) +(0.00013648 NT04 NT15 NT06) +(0.00045093 NT04 NT15 NT07) +(0.000626479 NT04 NT15 NT16) +(0.000563588 NT04 NT16 NT15) +(0.0232089 NT04 NT17 NT05) +(0.000138094 NT04 NT17 NT15) +(0.00094009 NT04 n) +(0.671108 NT04 v) +(0.0150619 NT04 punc) +(0.00056566 NT04 dt) +(0.144629 NT04 r) +(0.00270621 NT04 prp) +(0.0449587 NT04 to) +(0.0543755 NT04 md) +(0.00839747 NT04 wdt) +(0.00813689 NT04 wp) +(0.000560496 NT05 NT07 NT05) +(0.000901219 NT05 NT15 NT07) +(0.180172 NT05 punc) +(0.533041 NT05 cc) +(0.285244 NT05 pos) +(0.00164003 NT06 NT00 NT13) +(0.00222915 NT06 NT01 NT06) +(0.275903 NT06 NT01 NT07) +(0.00191616 NT06 NT01 NT11) +(0.00316549 NT06 NT01 NT12) +(0.000730143 NT06 NT01 NT14) +(0.000559842 NT06 NT02 NT06) +(0.0236744 NT06 NT02 NT07) +(0.00284929 NT06 NT02 NT09) +(0.155052 NT06 NT02 NT12) +(0.00387995 NT06 NT02 NT14) +(0.0161403 NT06 NT02 NT18) +(0.000110944 NT06 NT04 NT01) +(0.00237845 NT06 NT04 NT02) +(0.00625142 NT06 NT04 NT06) +(0.00118802 NT06 NT04 NT08) +(0.000132901 NT06 NT04 NT10) +(0.000192545 NT06 NT04 NT11) +(0.000199118 NT06 NT06 NT01) +(0.0081704 NT06 NT06 NT12) +(0.00198439 NT06 NT06 NT14) +(0.000889455 NT06 NT06 NT18) +(0.00142038 NT06 NT07 NT05) +(0.0820095 NT06 NT07 NT07) +(0.000112894 NT06 NT07 NT09) +(0.0220243 NT06 NT07 NT12) +(0.000133911 NT06 NT07 NT14) +(0.00100807 NT06 NT07 NT17) +(0.000191764 NT06 NT08 NT13) +(0.000340112 NT06 NT10 NT08) +(0.000126776 NT06 NT10 NT09) +(0.0136266 NT06 NT10 NT12) +(0.00867414 NT06 NT10 NT13) +(0.00341334 NT06 NT10 NT18) +(0.00154851 NT06 NT11 NT12) +(0.00104947 NT06 NT12 NT12) +(0.000219189 NT06 NT14 NT05) +(0.00313879 NT06 NT14 NT13) +(0.000745073 NT06 NT15 NT02) +(0.000433144 NT06 NT15 NT06) +(0.000159867 NT06 NT15 NT16) +(0.00124313 NT06 NT16 NT02) +(0.00918606 NT06 NT16 NT07) +(0.00373496 NT06 NT16 NT12) +(0.014053 NT06 NT18 NT13) +(0.0155714 NT06 n) +(0.00123379 NT06 punc) +(0.0152764 NT06 dt) +(0.00123486 NT06 j) +(0.00359625 NT06 r) +(0.212966 NT06 prp) +(0.00199168 NT06 cc) +(0.0383471 NT06 wdt) +(0.0182587 NT06 wp) +(0.00204833 NT06 wrb) +(0.0109929 NT06 ex) +(0.0011995 NT07 NT05 NT16) +(0.119588 NT07 NT07 NT07) +(0.000353596 NT07 NT07 NT11) +(0.000177793 NT07 NT07 NT12) +(0.00101956 NT07 NT11 NT11) +(0.000357614 NT07 NT15 NT01) +(0.00084812 NT07 NT15 NT06) +(0.0182872 NT07 NT16 NT07) +(0.00018607 NT07 NT16 NT11) +(0.856315 NT07 n) +(0.000736333 NT07 v) +(0.000645479 NT08 NT00 NT09) +(0.000990156 NT08 NT01 NT02) +(0.0410251 NT08 NT01 NT07) +(0.0013863 NT08 NT01 NT09) +(0.000242552 NT08 NT01 NT12) +(0.00174478 NT08 NT01 NT14) +(0.000596656 NT08 NT01 NT16) +(0.00130945 NT08 NT02 NT07) +(0.166303 NT08 NT02 NT09) +(0.0143253 NT08 NT02 NT12) +(0.0113813 NT08 NT02 NT14) +(0.000597887 NT08 NT02 NT16) +(0.0133053 NT08 NT03 NT09) +(0.0109076 NT08 NT03 NT17) +(0.000211313 NT08 NT04 NT01) +(0.0105796 NT08 NT04 NT02) +(0.00440181 NT08 NT04 NT04) +(0.00203737 NT08 NT04 NT06) +(0.213275 NT08 NT04 NT08) +(0.0781169 NT08 NT04 NT09) +(0.0190657 NT08 NT04 NT10) +(0.00319326 NT08 NT04 NT12) +(0.000693766 NT08 NT04 NT15) +(0.00112226 NT08 NT04 NT16) +(0.00117025 NT08 NT06 NT02) +(0.00807496 NT08 NT06 NT08) +(0.0183971 NT08 NT06 NT09) +(0.00127343 NT08 NT06 NT14) +(0.0322725 NT08 NT06 NT17) +(0.00396897 NT08 NT07 NT07) +(0.0154729 NT08 NT07 NT09) +(0.000708139 NT08 NT07 NT10) +(0.00186499 NT08 NT07 NT11) +(0.000701346 NT08 NT07 NT14) +(0.0116278 NT08 NT08 NT09) +(0.0965117 NT08 NT10 NT09) +(0.000142086 NT08 NT10 NT12) +(0.000210725 NT08 NT10 NT14) +(0.00336223 NT08 NT11 NT07) +(0.00183799 NT08 NT11 NT09) +(0.00109249 NT08 NT11 NT11) +(0.000880671 NT08 NT11 NT12) +(0.0032493 NT08 NT12 NT08) +(0.0372072 NT08 NT12 NT09) +(0.00113127 NT08 NT12 NT12) +(0.00892231 NT08 NT15 NT02) +(0.00383754 NT08 NT15 NT06) +(0.000528365 NT08 NT15 NT07) +(0.0060705 NT08 NT15 NT08) +(0.00853698 NT08 NT15 NT10) +(0.0349777 NT08 NT15 NT14) +(0.000202857 NT08 NT16 NT06) +(0.00709689 NT08 NT16 NT07) +(0.000240097 NT08 NT16 NT08) +(0.0401819 NT08 NT16 NT09) +(0.00124754 NT08 NT16 NT14) +(0.00862498 NT08 n) +(0.0115193 NT08 v) +(0.000974267 NT08 in) +(0.0169837 NT08 j) +(0.00626434 NT08 r) +(0.00437851 NT08 prp) +(0.0062359 NT09 NT01 NT07) +(0.000165196 NT09 NT01 NT14) +(0.00151872 NT09 NT02 NT04) +(0.000660061 NT09 NT02 NT15) +(0.000434321 NT09 NT02 NT16) +(0.00805872 NT09 NT03 NT09) +(0.000180982 NT09 NT04 NT08) +(0.050609 NT09 NT04 NT09) +(0.000307442 NT09 NT04 NT15) +(0.00281491 NT09 NT04 NT17) +(0.000295911 NT09 NT06 NT15) +(0.00133828 NT09 NT07 NT11) +(0.0235741 NT09 NT12 NT09) +(0.00121997 NT09 NT12 NT12) +(0.00391762 NT09 NT15 NT01) +(0.173027 NT09 NT15 NT02) +(0.000462089 NT09 NT15 NT06) +(0.0276663 NT09 NT15 NT07) +(0.210483 NT09 NT15 NT08) +(0.000177004 NT09 NT15 NT09) +(0.243402 NT09 NT15 NT10) +(0.0174403 NT09 NT15 NT11) +(0.00646962 NT09 NT15 NT12) +(0.155174 NT09 NT15 NT14) +(0.00930502 NT09 NT15 NT17) +(0.000311399 NT09 NT16 NT02) +(0.0052031 NT09 NT16 NT07) +(0.00742336 NT09 NT16 NT09) +(0.000409254 NT09 in) +(0.0019424 NT09 j) +(0.0393282 NT09 r) +(0.00016039 NT09 prp) +(0.00268682 NT10 NT01 NT07) +(0.00173594 NT10 NT01 NT09) +(0.00550051 NT10 NT01 NT10) +(0.00269002 NT10 NT01 NT11) +(0.00881491 NT10 NT01 NT12) +(0.0158503 NT10 NT02 NT02) +(0.00229071 NT10 NT02 NT07) +(0.00765082 NT10 NT02 NT09) +(0.00102327 NT10 NT02 NT11) +(0.474288 NT10 NT02 NT12) +(0.0119086 NT10 NT02 NT14) +(0.000270767 NT10 NT02 NT15) +(0.00425023 NT10 NT02 NT16) +(0.0533347 NT10 NT04 NT02) +(0.00286524 NT10 NT04 NT06) +(0.0687658 NT10 NT04 NT10) +(0.0157381 NT10 NT04 NT12) +(0.000809508 NT10 NT05 NT12) +(0.00188343 NT10 NT06 NT04) +(0.000155481 NT10 NT06 NT09) +(0.00569591 NT10 NT06 NT14) +(0.00233367 NT10 NT06 NT17) +(0.000189475 NT10 NT07 NT05) +(0.018548 NT10 NT07 NT07) +(0.00472354 NT10 NT07 NT09) +(0.0121145 NT10 NT07 NT11) +(0.0698482 NT10 NT07 NT12) +(0.000402661 NT10 NT07 NT16) +(0.00183044 NT10 NT07 NT17) +(0.00166519 NT10 NT10 NT02) +(0.015445 NT10 NT10 NT09) +(0.019208 NT10 NT10 NT12) +(0.000942866 NT10 NT10 NT18) +(0.00149941 NT10 NT11 NT01) +(0.00624706 NT10 NT11 NT02) +(0.0381755 NT10 NT11 NT11) +(0.00754256 NT10 NT11 NT12) +(0.00139213 NT10 NT15 NT02) +(0.000523505 NT10 NT15 NT06) +(0.0015256 NT10 NT15 NT10) +(0.00119525 NT10 NT15 NT12) +(0.00683524 NT10 NT16 NT02) +(0.000398591 NT10 NT16 NT04) +(0.0701558 NT10 NT16 NT07) +(0.00198721 NT10 NT16 NT11) +(0.0075364 NT10 NT16 NT12) +(0.0186618 NT10 n) +(0.000591828 NT10 uh) +(0.157827 NT11 NT11 NT11) +(0.0422576 NT11 NT15 NT11) +(0.00247895 NT11 NT15 NT16) +(0.000257833 NT11 dt) +(0.754818 NT11 cd) +(0.0421123 NT11 r) +(0.00236916 NT12 NT01 NT07) +(0.000118511 NT12 NT02 NT16) +(0.00638739 NT12 NT04 NT02) +(0.0055731 NT12 NT04 NT04) +(0.0340903 NT12 NT04 NT12) +(0.00102031 NT12 NT04 NT15) +(0.00143793 NT12 NT04 NT16) +(0.000102621 NT12 NT04 NT17) +(0.0032774 NT12 NT06 NT04) +(0.000366976 NT12 NT07 NT07) +(0.00218153 NT12 NT07 NT11) +(0.0117989 NT12 NT11 NT07) +(0.00303601 NT12 NT12 NT12) +(0.0747798 NT12 NT13 NT03) +(0.000232806 NT12 NT15 NT01) +(0.341016 NT12 NT15 NT02) +(0.0190932 NT12 NT15 NT06) +(0.100931 NT12 NT15 NT07) +(0.193386 NT12 NT15 NT10) +(0.0142796 NT12 NT15 NT11) +(0.000915196 NT12 NT16 NT07) +(0.000299768 NT12 NT16 NT11) +(0.0135637 NT12 NT16 NT12) +(0.115493 NT12 n) +(0.00344871 NT12 v) +(0.0262404 NT12 punc) +(0.000493049 NT12 in) +(0.00235382 NT12 j) +(0.0192274 NT12 r) +(0.00199831 NT12 prp) +(0.000209376 NT13 NT11 NT15) +(0.00188858 NT13 NT13 NT03) +(0.540855 NT13 punc) +(0.00804226 NT13 cc) +(0.000413617 NT14 NT00 NT09) +(0.0218326 NT14 NT00 NT14) +(0.000451496 NT14 NT00 NT18) +(0.00149459 NT14 NT01 NT07) +(0.00384046 NT14 NT01 NT17) +(0.00138254 NT14 NT02 NT09) +(0.0525259 NT14 NT03 NT14) +(0.000893974 NT14 NT04 NT02) +(0.000175088 NT14 NT04 NT06) +(0.000478859 NT14 NT04 NT08) +(0.00086439 NT14 NT04 NT09) +(0.00529624 NT14 NT04 NT10) +(0.000476852 NT14 NT04 NT12) +(0.00549502 NT14 NT04 NT14) +(0.0281873 NT14 NT05 NT14) +(0.76715 NT14 NT06 NT17) +(0.00303311 NT14 NT07 NT07) +(0.00027137 NT14 NT07 NT09) +(0.000748841 NT14 NT07 NT12) +(0.0874896 NT14 NT07 NT17) +(0.00416962 NT14 NT09 NT14) +(0.00175999 NT14 NT10 NT09) +(0.000710869 NT14 NT11 NT17) +(0.000723932 NT14 NT12 NT07) +(0.00440147 NT14 NT12 NT14) +(0.000761726 NT14 NT14 NT09) +(0.00084762 NT14 NT14 NT17) +(0.000323644 NT14 NT15 NT02) +(0.00264492 NT14 NT15 NT14) +(0.000238841 NT14 NT16 NT07) +(0.000126025 NT14 NT16 NT09) +(0.000217731 NT14 r) +(0.00024161 NT14 wrb) +(0.000366989 NT15 NT04 NT04) +(0.00127143 NT15 NT04 NT15) +(0.00137902 NT15 NT11 NT07) +(0.000109067 NT15 NT15 NT04) +(0.00380199 NT15 NT15 NT06) +(0.000193842 NT15 NT15 NT15) +(0.000253898 NT15 NT15 NT16) +(0.00556123 NT15 v) +(0.0798535 NT15 punc) +(0.557206 NT15 in) +(0.0519477 NT15 cc) +(0.170466 NT15 of) +(0.113587 NT15 to) +(0.0125211 NT15 wrb) +(0.00146961 NT15 pdt) +(0.000682686 NT16 NT01 NT16) +(0.000353409 NT16 NT02 NT02) +(0.0034721 NT16 NT02 NT05) +(0.00392739 NT16 NT04 NT04) +(0.0225952 NT16 NT04 NT16) +(0.00368407 NT16 NT05 NT16) +(0.000275916 NT16 NT06 NT05) +(0.0263102 NT16 NT07 NT05) +(0.00344251 NT16 NT07 NT12) +(0.00271063 NT16 NT07 NT16) +(0.000950873 NT16 NT10 NT13) +(0.0229124 NT16 NT11 NT07) +(0.0173136 NT16 NT11 NT11) +(0.0094147 NT16 NT11 NT16) +(0.00210054 NT16 NT13 NT03) +(0.000417271 NT16 NT15 NT01) +(0.0100377 NT16 NT15 NT11) +(0.000679194 NT16 NT16 NT05) +(0.00203961 NT16 NT16 NT11) +(0.00352444 NT16 NT16 NT12) +(0.0133536 NT16 NT16 NT16) +(0.0041124 NT16 n) +(0.0518387 NT16 v) +(0.0133556 NT16 punc) +(0.746857 NT16 j) +(0.0325454 NT16 cd) +(0.000994964 NT16 r) +(0.000325555 NT17 NT03 NT09) +(0.000431668 NT17 NT03 NT17) +(0.000283523 NT17 NT04 NT01) +(0.00308221 NT17 NT04 NT02) +(0.000106449 NT17 NT04 NT07) +(0.584517 NT17 NT04 NT08) +(0.0389749 NT17 NT04 NT09) +(0.00927257 NT17 NT04 NT10) +(0.000698039 NT17 NT04 NT11) +(0.0594712 NT17 NT04 NT14) +(0.000381951 NT17 NT04 NT16) +(0.248255 NT17 NT04 NT17) +(0.000264379 NT17 NT05 NT08) +(0.00194384 NT17 NT05 NT10) +(0.000308808 NT17 NT05 NT14) +(0.000271388 NT17 NT07 NT08) +(0.000131093 NT17 NT07 NT10) +(0.00011195 NT17 NT07 NT17) +(0.000462643 NT17 NT08 NT09) +(0.00153331 NT17 NT11 NT07) +(0.00214335 NT17 NT11 NT11) +(0.000307068 NT17 NT11 NT12) +(0.000550528 NT17 NT15 NT10) +(0.000125644 NT17 NT16 NT02) +(0.000474489 NT17 NT17 NT09) +(0.00032483 NT17 NT17 NT18) +(0.045027 NT17 v) +(0.00425503 NT18 NT07 NT18) +(0.978831 NT18 NT13 NT00) +(0.00130119 NT18 NT13 NT03) +(0.0155958 NT18 NT17 NT13) diff --git a/lib/sec.B.hept.ngrambin b/lib/sec.B.hept.ngrambin new file mode 100644 index 0000000000000000000000000000000000000000..3434e0f5736b3582c1ca3d53b1a4b5c50aed9172 GIT binary patch literal 545 zcmeZEFG|dH%FK&5QZVOoQt)$9fRgrW3(hS$-*WVT9RnEHKej7>r%FS5wuA`py$5gW8Tc9?{Tnj?~u#}Yjnl9H^CXsDqnDT$;Z zO+~T;8y5&5Wa&i!Z;7n4$e+-Ef{{hG;X12ioh&lxs^58jr>0G6Gwkl_Q>RWD#5z2)Ac<++39=E3sZi~syTUqAik@wfVo z&G_%d|NWQspZ@I||E~V%-l+dSzxws>|M!3VTH{~8c;1WHIo|Juef#5_m;PlBpFd1H z@Dr~`_eTD|mN@vqFF4=Gaqmxj_uJY!CI~;KZ?J1WZad@B1%H1O6I#Y89C#*=mUfJT zKWq0t58UD}<8!=zxCT#)+vm4GN!(c;hy#7ouAv`slh<$V;&tX55Bl4(Yw!GAmrgwx zpPo3i}3*ZXHU z6MpE1&f-U0d#pp6zyL9si=UVfplmkH_0Rma+sT*t z@bo&t{@Z5n`xNz*cts!fyTl_7tyA~Aq(AEim%N}$+q;+_@#`E(Jhh2Grfa={FP`Yg ze2c^Vx94~Hz*Bhc&-J~&4vWI$Fmb(}9FP5obB#FZ&wRB%OFZHtuh?U^q#ga{PjP{N zbsZM;w@W!6KUcHO`lo)u$FK9xe(InH%y#|1ue46J0JeCb2HcOQ>H;4Od4=-!BD;;Alaa}NNId|929c+ffhPzUm#`irl} z6ZAHPclH;5*t71FZ}FSF%6zNijvsKGAN7eIGrQTn>rOZ*JmByC@biqi7u;FhByOqa zJE1_)k9uN1Aa3K;eSO(@!KGdf)*+17Nr@-q(|zcv_BUce!8z{X&-J!_MEH|+s`HNg zr7l{RHe7jvm%sc^+q?MyN-tAe8B72nSb)CdFTP}mtvyE*+(o7!f}44ht7X^TwjL+c*+m= zp~UljsNA>lleoH9;3voR-VUA?N8!Od$G82}<0?4lPdtX#XF6~`!IyZb3*K|l|MzDX z>v_6Fzs1{+*NginaZl~v>I27hZ&ye6_IZ?j!t`T3aW1G1a=&vu{e415564}-aUr`1Vcy8x)fpJ9r2WU70`2pVgyqGVi)igJ*h* z7jcp&^vnKYM_rlz9$#nwHaph)3|I98uS3(3{^;JGH=H9p-(W}F$wT<)Vmfzp*h|0Q zP=Acue#LV%dGO~2?FaAyH}R%=xIKQozGpbB7vjY({kz|i$JxF}9XOA)*FHg`TmV*Yl@+E>4|_2Rt30{C@Cc0JU3*M}P9- zTws6VIikJOVjeuQEuP?TFUxw-eoEc^@;8CQdb*T6^4`^>xqYt9c6&QU8lNlYJo2mh zXWg*g&;$J^{pGoi^)u6veG^>b$vDsjezaMyrGHkJ8MoJKnNM9=yv2^XLVW4V&QkeHqAL2K|!`|_dN7)alXSYX3@Tdpu@lQW|d5)z&pHIb`esCR! zI%FLCuSMdh1MO>!!^`5pukxGr;E*?s+x-4+8;-$|{ls6tcXF}){YgLfPWOAOU5qnX z&;9iA#rCuNG&)m%=(smvbPg+CaGWPPcpfufMK}80-tIT@JGqyXb!NEj>Kb|w*Y#|> z-@{3~(XHoP{I$zz4=#0?I_P^6=|}H1vCq2pe%Hy{)Th4>R6Fw`ezegQ{}~tf+#jU3 zjnj`k?S8)xOLU>X*?Z$MkNBKyWYL;9sYj*EZ# z+Yff}xQC%bxz|vaGknI$*JR(5f76ZUg~mD|&)h?Nz0TG*`#0wmIOOZV;-2jX@bh)X zdUQUl8+5=g_j)b&?0@U?BkIxfkp78>_rBnxFKywnFYbpU z{A--}s0*t{?7{VRKUfE__tVA?&okigoY!vWe0VGaZu{Pvb&|S($NE>B`RGU7N9zD& z-(|m$j@;AGH}~)ML5q2N->B`uLn6@K^A&UJDf@$=K1$2o3x?cU?SCGV~i?VQ)ndf4;5t^A&tc-r%Nxi2R#)kES2 z>h^qKob?Ajb%j2y4LYg|>Ra|Ptnry2*=PP$x8yBx+H33hm-2)@tOH-C%v<6g<@Xk6 z{;+4?g$Mg8I?|tQJtxqQJ@u0PB|hxzb8PZ}K4so35tsT|ml>CI%IDGc-mX34;P)6l zKNr{WFTDrM_1ccY0Q=(i+U~gHdpteNH{3JGFZk^^3^aas9UatVn|eOl5x-Ndd8+x@Rb;F)^;!)Sc z34Z(V$(Trg;Wep8#YtYhJ|^?HLVx(c zGvlY;jZus zJ8)<-&*S@f0C*nyFaB%H1h??@xPS8GLi;lRau6#0d)W_9_@mE3j?8ZeZ+A-elnOBopRk5 zKC}41cfaTg9(iT|aQhj~%rD>DW*q!%bAF;X@8zF4t{?Z%$9NXpNnI6P;YIw(x9~x? zd`|#>xAV5n8|oB2mJx>TUxiol(RyMZ;Jg4QV07NgThgJEU)c}}6e z;FI&fL$CJ1N%&vJ5B)uZ9?gwE$Elxt^o?~`g2y=gOTX)Ikn_F&71MBOC0bnpWm{6T(9IOeAZi@8{iSo^!>t2pY&Va z10JqJD8)})*i#4ZM`ZYS{S^150k>(lqK7>D-<80h=J7m=&Q>>5f9Q5=9ggAG-Uwvo z>Gz?RVYX?n#82$Q`h4F8@7?IpIDFuT&g3cgOXAYJ^b!<%(M+j-l#c)6XmStnXo@Fkz* zFX!p|Ebwr@)Cc!Dn@@bM-?V?W5A5ygLmaMa`TZN>c=WFW03JRM{hpQA?72$oo9|Dc zN6_Eir(DOj20xEK?fBjV{5#*bN!`SSda(d~P6_<~zLcR|0m+YYYl=k4x( zZrOZW|9;Odc<|sknfR=3J%8R7FY4a(DfZk0us44^KcgRY)Q)!JZRUsiE%!Rpt>|Fm zp1+=Tr1eex;oo%c)R)DjdoSl5>zg`z8XmZNK^T2J9=-2O|Lx?-n1H?i9<%i2xj5r1 zxO_f0;oF1O_WfqI`JB4F(MAtEdXAU+SYp8YOI~uHbUVdkI?+F~Fa4a0zJIVkct7Wt z*8}$}>YjDx=PJK1O?~0t@c4XEI#Oq>r=PbWpvKt;4X5v?&dj4;IDfvqJ1)GeQ`SSf zv1`Y37JBv=R$Wk^;9;k>>zeaf*S?>&JK=$Pb$#duUwo+JE8#%nlXd7kS?Atg{5_xe z=}-R2Gj;57Xa1!p_7i?RzyILBKkNMDpZKYt#4r4pZJ)K%)>_hP<> zBK>3f_FSia;g^1}_xRMNu5Ygc5qrL8#`)pT4gS4T@OtuUJkMBs*cJU|`OW>j*ppxM zPCxJ^4xM+{Kcha>ZM(j!OP}p)6P|@n@+kf6Cr{&P@rtK^AIi>6^iUm=7j(CJ>F``4 zq0E<_mv{U9+$s4=eTx5s)YtuU-?Dzy5B$;H?8uYzn#MKb$GL+s2O&CfP=#9y9gnQwVxpVNH&vz|QvlXby-=h7l0e!9n4smF`8$a;*JL1?AXV3M{@0XP4 z&TzBgzQy+*v=5{|wW*i94{Ci`{rb7+ZPhFD$Sd_W@!Q#Nh>P#XCXTjIJ_dGf;Z?i9!=bys}-1AD^ z6DRf2Uf$JFc}%@nPpoIvsnv(Z_YDvIsSp4AMQxWa&#&-rd49pWhq*p)Zr9e)qj9TK zbl3Pn+I!t`zxV#hzB=7U**6>qUZxxSQ^_xN=JvDtN}l9F@xIeSALqk9o%zAO@R;~3 zc9VO%bh0>j?}cCT{G0d zj7#>D`O?YuKVRRnGkxi`IdwbFkp8KI5t-s(7Z@-m?7otP; zl=lYC%`(5GJ@F7H{=FZ24z8hrJPsZV;;l=;*!qp2fV9cul$%l^%Ix#p4AJ#e?GJKJaV7({ztLl7F|An zJebno;q7ta-*G4Vr*J0o@F!jJJkUMT{lII2=lg;DJI+LB@+>~HxbnOaPjs4nZ+Nnw z_m3Wrh+Kz)JL55lL+24X!Ea`t{J4iJe)gBl3;pFD3P01i=xO=WzMTC0e#rjd`poiL z>}I-ikKjBO;NBHIM zJHe;i=aY==J*r931J!JoL)v zWq*EBy(B;JMbCT>%6_Bo8G%n8*&lMAaMG^veI#(nJMm8PR&;fI=M69R0n?rPmGowR zGd;EMSU);z{(j_z{!&l&`~RB9=a1kU&r)A|>4*5p>!s)~zvqA5c-cLty|WGj_`sjG z;y-R-N8b2e?lQVJ{C`C>FS@tu?MLhADfpAPd(Llu-z1;Z)AhhrU9xYZ4|RDh?Wi;S zW<1VY?;Fg%>`#f)UT>TK|BwB?;PJj4Jl1vQ8~)6bf6JG~;m`bKxYvH;I#ZA0XY;tH z>wPEs5no$}gXa6*8@qmcG`D$&KmKSZzVl>0JpH{G|DRI!E1r+|J6c}@sfp@k5(^x~w0ok7CbzDRlHY&UMm0j0nqo@X7P+{BE1^pUyX% zhhCh&?RXvb@<;s~wZOUiIL6sWp7Q+1y#(F*n0@|yKZ~1j>dk(ir5(3nq4V=jOkn+$ z-xGGcqjmJ)zuP$d@TJXtvGnJ;Q~Jpt^+vo_Px?L*{gXQIdZq5Ber+FhJ8$=E>rkTf zzuhnHXCHt!b(r6c<3^Tv-n|MyZu{z@Dg9v?f&T2I%Hog`}O2LM?JF7 zi#K(Tjv24~)4sIpzu?5M^26tC@{{`#I&|#O_rcldVO;ZO^_jm%RP4DAyRLk{!TYI0 z@&O;}((U=&#QP`jzY0J07hfk!2!j1H*H=DQmV9ttIZxvC`kuv`^+Ek8FL@7yuli?x z@#k^RaBSb`Ay7v(c2D*96n_10mtj%-&+3=w zOIyF3H=MhQW41mr55DgE>~kyDi|3Pi@w!7_@1H%VfN%EPixdy*$?Q7&VD^{u?et=u z9lxx@)UVvz_ad<+Z{)@K!Q1ttzT7_GwZAI, 2006: +;;; - Slur support. +;;; - Czech support. +;;; - Some cleanup. +;;; - Print debugging information only when singing-debug is true. +;;; +;;; This code is public domain; anyone may use it freely. +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require_module 'rxp) + +(xml_register_id "-//SINGING//DTD SINGING mark up//EN" + (path-append xml_dtd_dir "Singing.v0_1.dtd") + ) + +(xml_register_id "-//SINGING//ENTITIES Added Latin 1 for SINGING//EN" + (path-append xml_dtd_dir "sable-latin.ent") + ) + +;; Set this to t to enable debugging messages: +(defvar singing-debug nil) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; XML parsing functions +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +;; singing_xml_targets +;; +;; This variable defines the actions that are to be taken when +;; parsing each of our XML tags: SINGING, PITCH, DURATION, and REST. +;; +;; When we get the pitch and duration of each token, we store them +;; in features of the token. Later our intonation and duration +;; functions access these features. +;; + +(defvar singing_xml_elements + '( + ("(SINGING" (ATTLIST UTT) + (set! singing_pitch_att_list nil) + (set! singing_dur_att_list nil) + (set! singing_global_time 0.0) + (set! singing_bpm (get-bpm ATTLIST)) + (set! singing_bps (/ singing_bpm 60.0)) + nil) + + (")SINGING" (ATTLIST UTT) + (xxml_synth UTT) ;; Synthesize the remaining tokens + nil) + + ("(PITCH" (ATTLIST UTT) + (set! singing_pitch_att_list ATTLIST) + UTT) + + (")PITCH" (ATTLIST UTT) + (let ((freq (get-freqs singing_pitch_att_list))) + (if singing-debug + (begin + (print "freqs") + (print freq))) + (singing-append-feature! UTT 'freq freq)) + UTT) + + ("(DURATION" (ATTLIST UTT) + (set! singing_dur_att_list ATTLIST) + UTT) + + (")DURATION" (ATTLIST UTT) + (let ((dur (get-durs singing_dur_att_list))) + (if singing-debug + (begin + (print "durs") + (print dur))) + (singing-append-feature! UTT 'dur dur)) + UTT) + + ("(REST" (ATTLIST UTT) + (let ((dur (get-durs ATTLIST))) + (if singing-debug + (begin + (print "rest durs") + (print dur))) + (singing-append-feature! UTT 'rest (caar dur))) + UTT) + )) + +;; +;; get-bpm +;; +;; Given the attribute list of a SINGING tag, returns the beats +;; per minute of the song from the BPM parameter. +;; + +(define (get-bpm atts) + (parse-number (car (car (cdr (assoc 'BPM atts)))))) + +;; +;; get-durs +;; +;; Given the attribute list of a DURATION tag, returns a list of +;; durations in seconds for the syllables of the word enclosed by +;; this tag. +;; +;; It first looks for a BEATS parameter, and converts these to +;; seconds using BPM, which was set in the SINGING tag. If this +;; is not present, it looks for the SECONDS parameter. +;; + +(define (get-durs atts) + (let ((seconds (car (car (cdr (assoc 'SECONDS atts))))) + (beats (car (car (cdr (assoc 'BEATS atts)))))) + (if (equal? beats 'X) + (mapcar (lambda (lst) (mapcar parse-number lst)) + (string->list seconds)) + (mapcar (lambda (lst) + (mapcar (lambda (x) (/ (parse-number x) singing_bps)) lst)) + (string->list beats))))) + +;; +;; get-freqs +;; +;; Given the attribute list of a PITCH tag, returns a list of +;; frequencies in Hertz for the syllables of the word enclosed by +;; this tag. +;; +;; It first looks for a NOTE parameter, which can contain a MIDI +;; note of the form "C4", "D#3", or "Ab6", and if this is not +;; present it looks for the FREQ parameter. +;; + +(define (get-freqs atts) + (let ((freqs (car (car (cdr (assoc 'FREQ atts))))) + (notes (car (car (cdr (assoc 'NOTE atts)))))) + (if (equal? notes 'X) + (mapcar (lambda (lst) (mapcar parse-number lst)) + (string->list freqs)) + (mapcar (lambda (lst) (mapcar note->freq lst)) + (string->list notes))))) + +;; +;; note->freq +;; +;; Converts a string representing a MIDI note such as "C4" and +;; turns it into a frequency. We use the convention that +;; A5=440 (some call this note A3). +;; + +(define (note->freq note) + (if singing-debug + (format t "note is %l\n" note)) + (set! note (format nil "%s" note)) + (if singing-debug + (print_string note)) + (let (l octave notename midinote thefreq) + (set! l (string-length note)) + (set! octave (substring note (- l 1) 1)) + (set! notename (substring note 0 (- l 1))) + (set! midinote (+ (* 12 (parse-number octave)) + (notename->midioffset notename))) + (set! thefreq (midinote->freq midinote)) + (if singing-debug + (format t "note %s freq %f\n" note thefreq)) + thefreq)) + +;; +;; midinote->freq +;; +;; Converts a MIDI note number (1 - 127) into a frequency. We use +;; the convention that 69 = "A5" =440 Hz. +;; + +(define (midinote->freq midinote) + (* 440.0 (pow 2.0 (/ (- midinote 69) 12)))) + +;; +;; notename->midioffset +;; +;; Utility function that looks up the name of a note like "F#" and +;; returns its offset from C. +;; + +(define (notename->midioffset notename) + (parse-number (car (cdr (assoc_string notename note_names))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Pitch modification functions +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +;; singing_f0_targets +;; +;; This function replaces the normal intonation function used in +;; festival. For each syllable, it extracts the frequency that +;; was calculated from the XML tags and stored in the token this +;; syllable comes from, and sets this frequency as both the start +;; and end f0 target. Really straightforward! +;; + +(defvar singing-last-f0 nil) +(define (singing_f0_targets utt syl) + "(singing_f0_targets utt syl)" + (let ((start (item.feat syl 'syllable_start)) + (end (item.feat syl 'syllable_end)) + (freqs (mapcar parse-number (syl->freq syl))) + (durs (syl->durations syl))) + (let ((total-durs (apply + durs)) + (total-time (- end start)) + (time start) + (prev-segment (item.prev (item.relation (item.daughter1 (item.relation syl 'SylStructure)) 'Segment))) + (last-f0 singing-last-f0)) + (if freqs + (begin + (set! singing-last-f0 (car (last freqs))) + (append (if (and last-f0 + prev-segment + (item.prev prev-segment) + (string-equal (item.feat prev-segment 'name) + (car (car (cdr (car (PhoneSet.description '(silences)))))))) + (let ((s (item.feat prev-segment "p.end")) + (e (item.feat prev-segment "end"))) + (list (list (+ s (* (- e s) 0.8)) last-f0) + (list (+ s (* (- e s) 0.9)) (car freqs))))) + (apply append + (mapcar (lambda (d f) + (let ((range (* (/ d total-durs) total-time)) + (old-time time)) + (set! time (+ time range)) + (let ((range-fraction (* 0.1 range))) + (list (list (+ old-time range-fraction) f) + (list (- time range-fraction) f))))) + durs freqs)))))))) + +;; +;; syl->freq +;; +;; Given a syllable, looks up the frequency in its token. The token +;; stores a list of all of the frequencies associated with its +;; syllables, so this syllable grabs the frequency out of the list +;; corresponding to its index within the word. (This assumes that +;; a frequency was given for each syllable, and that a token +;; corresponds directly to a word. Singing-mode is not guaranteed +;; to work at all if either of these things are not true.) +;; + +(define (syl->freq syl) + (let ((index (item.feat syl "R:Syllable.pos_in_word")) + (freqs (singing-feat syl "R:SylStructure.parent.R:Token.parent.freq"))) + (nth index freqs))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Duration modification functions +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +;; singing_duration_method +;; +;; Calculates the duration of each phone in the utterance, in three +;; passes. Consult the three functions it calls, below, to see what +;; each one does. +;; + +(define (singing_duration_method utt) + (mapcar singing_adjcons_syllable (utt.relation.items utt 'Syllable)) + (singing_do_initial utt (car (utt.relation.items utt 'Token))) + (mapcar singing_do_syllable (utt.relation.items utt 'Syllable)) + (mapcar singing_fix_segment (utt.relation.items utt 'Segment)) + utt) + +;; +;; singing_adjcons_syllable +;; +;; First pass. Looks at the first phone of each syllable and +;; adjusts the starting time of this syllable such that the +;; perceived start time of the first phone is at the beginning +;; of the originally intended start time of the syllable. +;; +;; If this is not done, telling it to say the word "ta" at time +;; 2.0 actually doesn't "sound" like it says the "t" sound until +;; about 2.1 seconds. +;; +;; This function has a little bit of duplicated code from +;; singing_do_syllable, below - it could be modularized a little +;; better. +;; + +(define (singing_adjcons_syllable syl) + (let ((totlen (apply + (mapcar (lambda (s) + (get_avg_duration (item.feat s "name"))) + (item.leafs + (item.relation syl 'SylStructure))))) + (syldur (apply + (syl->durations syl))) + ;; figure out the offset of the first phone + (phone1 (item.daughter1 (item.relation syl 'SylStructure))) + (prevsyl (item.prev (item.relation syl 'Syllable)))) + (let ((offset (get_duration_offset (item.feat phone1 "name")))) + (if singing-debug + (format t "offset: %f\n" offset) ) + (if (< syldur totlen) + (set! offset (* offset (/ syldur totlen)))) + (if singing-debug + (format t "Want to adjust syl by %f\n" offset)) + (if prevsyl + (begin + (item.set_feat prevsyl 'subtractoffset offset) + (item.set_feat syl 'addoffset offset)))))) + +;; +;; singing_do_syllable +;; +;; Second pass. For each syllable, adds up the amount of time +;; that would normally be spent in consonants and vowels, based +;; on the average durations of these phones. Then, if the +;; intended length of this syllable is longer than this total, +;; stretch only the vowels; otherwise shrink all phones +;; proportionally. This function actually sets the "end" time +;; of each phone using a global "singing_global_time" variable. +;; +;; We also handle rests at this point, which are tagged onto the +;; end of the previous token. +;; + +(defvar singing-max-short-vowel-length 0.11) + +(define (singing_do_initial utt token) + (if (equal? (item.name token) "") + (let ((restlen (car (item.feat token 'rest)))) + (if singing-debug + (format t "restlen %l\n" restlen)) + (if (> restlen 0) + (let ((silence (car (car (cdr (assoc 'silences (PhoneSet.description))))))) + (set! singing_global_time restlen) + (item.relation.insert (utt.relation.first utt 'Segment) 'Segment + (list silence (list (list "end" singing_global_time))) + 'before)))))) + +(define (singing_do_syllable syl) + (let ((conslen 0.0) + (vowlen 0.0) + (segments (item.leafs (item.relation syl 'SylStructure)))) + ;; if there are no vowels, turn a middle consonant into a vowel; + ;; hopefully this works well for languages where syllables may be + ;; created by some consonants too + (let ((segments* segments) + (vowel-found nil)) + (while (and segments* (not vowel-found)) + (if (equal? "+" (item.feat (car segments*) "ph_vc")) + (set! vowel-found t) + (set! segments* (cdr segments*)))) + (if (not vowel-found) + (item.set_feat (nth (nint (/ (- (length segments) 1) 2)) + segments) + "singing-vc" "+"))) + ;; sum up the length of all of the vowels and consonants in + ;; this syllable + (mapcar (lambda (s) + (let ((slen (get_avg_duration (item.feat s "name")))) + (if (or (equal? "+" (item.feat s "ph_vc")) + (equal? "+" (item.feat s "singing-vc"))) + (set! vowlen (+ vowlen slen)) + (set! conslen (+ conslen slen))))) + segments) + (let ((totlen (+ conslen vowlen)) + (syldur (apply + (syl->durations syl))) + (addoffset (item.feat syl 'addoffset)) + (subtractoffset (item.feat syl 'subtractoffset)) + offset) + (set! offset (- subtractoffset addoffset)) + (if singing-debug + (format t "Vowlen: %f conslen: %f totlen: %f\n" vowlen conslen totlen)) + (if (< offset (/ syldur 2.0)) + (begin + (set! syldur (- syldur offset)) + (if singing-debug + (format t "Offset: %f\n" offset)))) + (if singing-debug + (format t "Syldur: %f\n" syldur)) + (if (> totlen syldur) + ;; if the total length of the average durations in the syllable is + ;; greater than the total desired duration of the syllable, stretch + ;; the time proportionally for each phone + (let ((stretch (/ syldur totlen))) + (mapcar (lambda (s) + (let ((slen (* stretch (get_avg_duration (item.feat s "name"))))) + (set! singing_global_time (+ slen singing_global_time)) + (item.set_feat s 'end singing_global_time))) + (item.leafs (item.relation syl 'SylStructure)))) + ;; otherwise, stretch the vowels and not the consonants + (let ((voweltime (- syldur conslen))) + (let ((vowelstretch (/ voweltime vowlen)) + (phones (mapcar car (car (cdar (PhoneSet.description '(phones))))))) + (mapcar (lambda (s) + (let ((slen (get_avg_duration (item.feat s "name")))) + (if (or (equal? "+" (item.feat s "ph_vc")) + (equal? "+" (item.feat s "singing-vc"))) + (begin + (set! slen (* vowelstretch slen)) + ;; If the sound is long enough, better results + ;; may be achieved by using longer versions of + ;; the vowels. + (if (> slen singing-max-short-vowel-length) + (let ((sname (string-append (item.feat s "name") ":"))) + (if (member_string sname phones) + (item.set_feat s "name" sname)))))) + (set! singing_global_time (+ slen singing_global_time)) + (item.set_feat s 'end singing_global_time))) + segments)))))) + (let ((restlen (car (syl->rest syl)))) + (if singing-debug + (format t "restlen %l\n" restlen)) + (if (> restlen 0) + (let ((lastseg (item.daughtern (item.relation syl 'SylStructure))) + (silence (car (car (cdr (assoc 'silences (PhoneSet.description)))))) + (singing_global_time* singing_global_time)) + (let ((seg (item.relation lastseg 'Segment)) + (extra-pause-length 0.00001)) + (set! singing_global_time (+ restlen singing_global_time)) + (item.insert seg (list silence (list (list "end" singing_global_time))) 'after) + ;; insert a very short extra pause to avoid after-effects, especially + ;; after vowels + (if (and seg + (equal? (item.feat seg "ph_vc") "+") + (< extra-pause-length restlen)) + (item.insert seg (list silence (list (list "end" (+ singing_global_time* + extra-pause-length)))) + 'after))))))) + +;; +;; singing_fix_segment +;; +;; Third pass. Finds any segments (phones) that we didn't catch earlier +;; (say if they didn't belong to a syllable, like silence) and sets them +;; to zero duration +;; + +(define (singing_fix_segment seg) + (if (equal? 0.0 (item.feat seg 'end)) + (if (equal? nil (item.prev seg)) + (item.set_feat seg 'end 0.0) + (item.set_feat seg 'end (item.feat (item.prev seg) 'end))) + (if singing-debug + (format t "segment: %s end: %f\n" (item.name seg) (item.feat seg 'end))))) + +;; returns the duration of a syllable (stored in its token) +(define (syl->durations syl) + (let ((index (item.feat syl "R:Syllable.pos_in_word")) + (durs (singing-feat syl "R:SylStructure.parent.R:Token.parent.dur"))) + (mapcar parse-number (nth index durs)))) + +;; returns the duration of the rest following a syllable +(define (syl->rest syl) + (let ((index (item.feat syl "R:Syllable.pos_in_word")) + (durs (singing-feat syl "R:SylStructure.parent.R:Token.parent.dur")) + (pauselen (singing-feat syl "R:SylStructure.parent.R:Token.parent.rest"))) + (if (equal? index (- (length durs) 1)) + (list (or pauselen 0.0)) + (list 0.0)))) + +;; get the average duration of a phone +(define (get_avg_duration phone) + (let ((pd (assoc_string phone phoneme_durations))) + (if pd + (car (cdr pd)) + 0.08))) + +;; get the duration offset of a phone (see the description above) +(define (get_duration_offset phone) + (parse-number (car (cdr (assoc_string phone phoneme_offsets*))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Other utility functions +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (char-quote string) + (if (member string '("*" "+" "?" "[" "]" ".")) + (string-append "[" string "]") + string)) + +(define (split-string string separator) + (if (string-matches string (string-append ".+" (char-quote separator) ".+")) + (cons (string-before string separator) + (split-string (string-after string separator) separator)) + ;; We have to convert the weird XML attribute value type to string + (list (string-append string "")))) + +(define (string->list string) + (mapcar (lambda (s) (split-string s "+")) (split-string string ","))) + +(define (singing-append-feature! utt feature value) + (let ((tokens (utt.relation.items utt 'Token))) + (if tokens + ;; we have to wrap value into a list to work around a Festival bug + (item.set_feat (car (last tokens)) feature (list value)) + (begin + (utt.relation.append utt 'Token '("" ((name "") (whitespace "") + (prepunctuation "") (punc "")))) + (item.set_feat (car (last (utt.relation.items utt 'Token))) feature (list value)))))) + +(define (singing-feat item feature) + (let ((value (item.feat item feature))) + (if (equal? value 0) + nil + (car value)))) + +(define (current-language) + (cadr (car (assoc 'language (voice.description current-voice))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Initializing and exiting singing mode +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; +;; singing_init_func +;; + +(defvar singing_previous_eou_tree nil) + +(define (singing_init_func) + "(singing_init_func) - Initialization for Singing mode" + (if (not (symbol-bound? 'phoneme_durations)) + (set! phoneme_durations '())) + ;; use our intonation function + (Parameter.set 'Int_Method 'General) + (Parameter.set 'Int_Target_Method Int_Targets_General) + (set! int_general_params `((targ_func ,singing_f0_targets))) + (set! singing-last-f0 nil) + ;; use our duration function + (Parameter.set 'Duration_Method singing_duration_method) + ;; set phoneme corrections for the current language + (let ((language (cadr (assoc 'language + (cadr (voice.description current-voice)))))) + (set! phoneme_offsets* (cdr (assoc language phoneme_offsets)))) + ;; avoid splitting to multiple utterances with insertion of unwanted pauses + (set! singing_previous_eou_tree eou_tree) + (set! eou_tree nil) + ;; use our xml parsing function + (set! singing_previous_elements xxml_elements) + (set! xxml_elements singing_xml_elements)) + +;; +;; singing_exit_func +;; + +(define (singing_exit_func) + "(singing_exit_func) - Exit function for Singing mode" + (set! eou_tree singing_previous_eou_tree) + (set! xxml_elements singing_previous_elements)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Data tables +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defvar note_names + '((C 0) + (C# 1) + (Db 1) + (D 2) + (D# 3) + (Eb 3) + (E 4) + (E# 5) + (Fb 4) + (F 5) + (F# 6) + (Gb 6) + (G 7) + (G# 8) + (Ab 8) + (A 9) + (A# 10) + (Bb 10) + (B 11) + (B# 12) + (Cb 11))) + +;; +;; The following list contains the offset into each phone that best +;; represents the perceptual onset of the phone. This is important +;; to know to get durations right in singing. For example, if the +;; offset for "t" is .060, and you want to start a "t" sound at +;; time 2.0 seconds, you should actually start the phone playing +;; at time 1.940 seconds in order for it to sound like the onset of +;; the "t" is really right at 2.0. +;; +;; These were derived empically by looking at and listening to the +;; waveforms of each phone for mwm's voice. +;; + +(defvar phoneme_offsets + `((english (t 0.050) + (T 0.050) + (d 0.090) + (D 0.090) + (p 0.080) + (b 0.080) + (k 0.090) + (g 0.100) + (9r 0.050) ;; r + (l 0.030) + (f 0.050) + (v 0.050) + (s 0.040) + (S 0.040) + (z 0.040) + (Z 0.040) + (n 0.040) + (N 0.040) + (m 0.040) + (j 0.090) + (E 0.0) + (> 0.0) + (>i 0.0) + (aI 0.0) + (& 0.0) + (3r 0.0) + (tS 0.0) + (oU 0.0) + (aU 0.0) + (A 0.0) + (ei 0.0) + (iU 0.0) + (U 0.0) + (@ 0.0) + (h 0.0) + (u 0.0) + (^ 0.0) + (I 0.0) + (dZ 0.0) + (i: 0.0) + (w 0.0) + (pau 0.0) + (brth 0.0) + (h# 0.0) + ))) + +(defvar phoneme_offsets* nil) + +;; +;; Declare the new mode to Festival +;; + +(set! tts_text_modes + (cons `(singing ;; mode name + ((init_func ,singing_init_func) + (exit_func ,singing_exit_func) + (analysis_type xml))) + tts_text_modes)) + +(provide 'singing-mode) diff --git a/lib/siteinit.scm b/lib/siteinit.scm new file mode 100644 index 0000000..7e2adac --- /dev/null +++ b/lib/siteinit.scm @@ -0,0 +1,57 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Site specific initialisation file +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; If festival's internal audio playing support doesn't work on your +;; machine you can make Festival use your own program to play waveform +;; files. Uncomment the following and change "play" to the name of +;; your local program that can play files + +;(Parameter.set 'Audio_Required_Format 'riff) +;(Parameter.set 'Audio_Command "afplay $FILE") +;(Parameter.set 'Audio_Method 'Audio_Command) + +;; If you want a voice different from the system installed default +;; uncomment the following line and change the name to the voice you +;; want + +;(set! voice_default 'voice_cmu_us_awb_arctic_hts) + +(provide 'siteinit) + + + + diff --git a/lib/soleml-mode.scm b/lib/soleml-mode.scm new file mode 100644 index 0000000..9856fb2 --- /dev/null +++ b/lib/soleml-mode.scm @@ -0,0 +1,336 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Support for an SGML based mark-up language used in the SOLE +;;; project. This is all still experimental. +;;; +;;; This currently treats one file as one utterance (to make dealing with +;;; the SOLE museaum database easy + +(set! soleml_word_features_stack nil) +(defvar sole_current_node nil) + +(define (soleml_token_to_words utt token name) + "(soleml_token_to_words utt token name) +SOLEML mode token specific analysis." + (cond + + (t + (soleml_previous_token_to_words utt token name)))) + +(define (voice_soleml) +"(soleml_voice) +Speaker specific initialisation for SOLE museum data." + (voice_rab_diphone) + ;; Utterances only come at end of file + (set! eou_tree '((0))) +) + +(defvar soleml_elements +'( + ("(SOLEML" (ATTLIST UTT) + ;; required to identify type + (voice_soleml) ;; so we know what state we start in + (set! soleml_utt (Utterance Tokens nil)) + (utt.stream.create soleml_utt 'Token) + (utt.relation.create soleml_utt 'SOLEML) + (set! sole_current_node + (utt.relation_append soleml_utt 'SOLEML (cons "sole-ml" ATTLIST))) + soleml_utt + ) + (")SOLEML" (ATTLIST UTT) + ;; required to identify end token + ;; Don't really want to synthesize this + ;; (xxml_synth UTT) ;; Synthesis the remaining tokens + (set! soleml_utt UTT) + UTT + ) + ;; Utterance break elements + ("(LANGUAGE" (ATTLIST UTT) + ;; Select a new language + (select_language (car (xxml_attval "NAME" ATTLIST))) + UTT) + ("(VOICE" (ATTLIST UTT) + ;;(xxml_synth UTT) + ;; Select a new voice + (cond + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male1) + (voice_soleml_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male2) + (voice_soleml_diphone)) + ((equal? (car (xxml_attval "NAME" ATTLIST)) 'male3) + (voice_soleml_diphone)) + (t + (print "SOLEML: selecting unknown voice") + (voice_soleml_diphone))) + UTT) + ;; phrase-boundary // mark on token (??) + ;; punct-elem // mark on token + ;; sem-elem + ;; text-elem // ignore + ;; rhet-elem has nucleus and satellite + ;; anaphora-elem + ;; syn-elem + ;; info-struct-elem + ;; other-elem + ("(PUNCT-ELEM" (ATTLIST UTT) + (soleml_push_word_features) + (set! xxml_word_features + (cons (list "punct-elem" "1") + (soleml_conv_attlist ATTLIST))) + UTT) + (")PUNCT-ELEM" (ATTLIST UTT) + (set! xxml_word_features (soleml_pop_word_features)) + UTT) + ("(PHRASE-BOUNDARY" (ATTLIST UTT) + (if (string-equal "4" (car (xxml_attval "STRENGTH" ATTLIST))) + (begin +;; (xxml_synth UTT) + UTT) + (let ((last_token (car (last (utt.stream UTT 'Token))))) + (if last_token + (item.set_feat last_token "pbreak" "B")) + UTT))) + ;; For each recursive element simply build a new node + ("(RHET-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'rhet-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")RHET-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(RHET-EMPH" (ATTLIST UTT) + (let ((sdesc (list 'rhet-emph (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")RHET-EMPH" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(ANAPHORA-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'anaphora-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")ANAPHORA-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(SYN-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'syn-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")SYN-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(CONNECTIVE" (ATTLIST UTT) + (let ((sdesc (list 'connective (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")CONNECTIVE" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(TEXT-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'text-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")TEXT-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(SEM-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'sem-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")SEM-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(INFO-STRUCT-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'info-struct-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")INFO-STRUCT-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(OTHER-ELEM" (ATTLIST UTT) + (let ((sdesc (list 'other-elem (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")OTHER-ELEM" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(NUCLEUS" (ATTLIST UTT) + (let ((sdesc (list 'nucleus (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")NUCLEUS" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ("(SATELLITE" (ATTLIST UTT) + (let ((sdesc (list 'satellite (soleml_conv_attlist ATTLIST)))) + (set! sole_current_node + (node.append_daughter sole_current_node sdesc)) + UTT)) + (")SATELLITE" (ATTLIST UTT) + (set! sole_current_node (node.parent sole_current_node)) + UTT) + ;; Other control functions (probably not used in SOLE) + ("(CALL" (ATTLIST UTT) +;; (xxml_synth UTT) + (if (string-matches (car (xxml_attval "ENGID" ATTLIST)) "festival.*") + (let ((comstr "")) + (mapcar + (lambda (c) (set! comstr (string-append comstr " " c))) + (xxml_attval "COMMAND" ATTLIST)) + (eval (read-from-string comstr)))) + UTT) + ("(DEFINE" (ATTLIST UTT) +;; (xxml_synth UTT) + (if (not (string-equal "NATIVE" (car (xxml_attval "SCHEME" ATTLIST)))) + (format t "DEFINE: unsupported SCHEME %s, definition ignored\n" + (car (xxml_attval "SCHEME" ATTLIST))) + (lex.add.entry + (list + (car (xxml_attval "WORDS" ATTLIST)) ;; head form + nil ;; pos + (lex.syllabify.phstress (xxml_attval "PRONS" ATTLIST))))) + UTT) + ("(SOUND" (ATTLIST UTT) +;; (xxml_synth UTT) + (if (not soleml_omitted_mode) + (apply_hooks tts_hooks + (eval (list 'Utterance 'Wave + (car (xxml_attval "SRC" ATTLIST)))))) + UTT) + ("(EMPH" (ATTLIST UTT) + ;; Festival is particularly bad at adding specific emphasis + ;; that's what happens when you use statistical methods that + ;; don't include any notion of emphasis + ;; This is *not* recursive + (soleml_push_word_features) + (set! xxml_word_features + (cons (list "EMPH" "1") xxml_word_features)) + UTT) + (")EMPH" (ATTLIST UTT) + (set! xxml_word_features (soleml_pop_word_features)) + UTT) + ("(WORD" (ATTLIST UTT) + ;; a word in-line + (let ((name (xxml_attval "NAME" ATTLIST)) + (pos (xxml_attval "POS" ATTLIST)) + (accent (xxml_attval "ACCENT" ATTLIST)) + (tone (xxml_attval "TONE" ATTLIST)) + (phonemes (xxml_attval "PHONEMES" ATTLIST)) + token) + (utt.item.insert UTT 'Token) ;; add new Token + (set! token (utt.stream.tail UTT 'Token)) + (item.set_name token (car name)) + (if pos (item.set_feat token "pos" (car pos))) + (if accent (item.set_feat token "accent" (car accent))) + (if tone (item.set_feat token "tone" (car tone))) + (if phonemes (item.set_feat token "phonemes" + (format nil "%l" phonemes))) + UTT)) +)) + +(define (soleml_init_func) + "(soleml_init_func) +Initialisation for SOLEML mode" + (voice_soleml) + (set! soleml_previous_elements xxml_elements) + (set! xxml_elements soleml_elements) + (set! xxml_token_hooks soleml_token_function) + (set! soleml_previous_token_to_words english_token_to_words) + (set! english_token_to_words soleml_token_to_words) + (set! token_to_words soleml_token_to_words)) + +(define (soleml_exit_func) + "(soleml_exit_func) +Exit function for SOLEML mode" + (set! xxml_elements soleml_previous_elements) + (set! token_to_words soleml_previous_token_to_words) + (set! english_token_to_words soleml_previous_token_to_words)) + +(define (soleml_token_function si) +"(soleml_token_function si) +This is called for each token found." + (node.append_daughter sole_current_node si)) + +(define (soleml_push_word_features) +"(soleml_push_word_features) +Save current word features on stack." + (set! soleml_word_features_stack + (cons xxml_word_features soleml_word_features_stack))) + +(define (soleml_pop_word_features) +"(soleml_pop_word_features) +Pop word features from stack." + (let ((r (car soleml_word_features_stack))) + (set! soleml_word_features_stack (cdr soleml_word_features_stack)) + r)) + +(define (soleml_conv_attlist alist) +"(soleml_conv_attlist alist) +Flatten alist arguments." + (cond + ((null alist) nil) + ((null (car (cdr (car alist)))) + (soleml_conv_attlist (cdr alist))) + ((equal? (length (car (cdr (car alist)))) 1) + (cons + (list (car (car alist)) (car (car (cdr (car alist))))) + (soleml_conv_attlist (cdr alist)))) + (t + (cons + (list (car (car alist)) (format nil "%l" (car (cdr (car alist))))) + (soleml_conv_attlist (cdr alist)))))) + +(set! tts_text_modes + (cons + (list + 'soleml ;; mode name + (list ;; email mode params + (list 'init_func soleml_init_func) + (list 'exit_func soleml_exit_func) + '(analysis_type xxml) + (list 'filter + (format nil "%s -D %s " sgml_parse_progname libdir)))) + tts_text_modes)) + +(provide 'soleml-mode) diff --git a/lib/speech.properties b/lib/speech.properties new file mode 100644 index 0000000..507a519 --- /dev/null +++ b/lib/speech.properties @@ -0,0 +1,2 @@ +# Register speech engines +cstr.festival.EngineCentral=cstr.festival.jsapi.EngineCentral diff --git a/lib/synthesis.scm b/lib/synthesis.scm new file mode 100644 index 0000000..69c5d56 --- /dev/null +++ b/lib/synthesis.scm @@ -0,0 +1,443 @@ + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Centre for Speech Technology Research ;; + ;; University of Edinburgh, UK ;; + ;; Copyright (c) 1996,1997 ;; + ;; All Rights Reserved. ;; + ;; ;; + ;; Permission is hereby granted, free of charge, to use and distribute ;; + ;; this software and its documentation without restriction, including ;; + ;; without limitation the rights to use, copy, modify, merge, publish, ;; + ;; distribute, sublicense, and/or sell copies of this work, and to ;; + ;; permit persons to whom this work is furnished to do so, subject to ;; + ;; the following conditions: ;; + ;; 1. The code must retain the above copyright notice, this list of ;; + ;; conditions and the following disclaimer. ;; + ;; 2. Any modifications must be clearly marked as such. ;; + ;; 3. Original authors' names are not deleted. ;; + ;; 4. The authors' names are not used to endorse or promote products ;; + ;; derived from this software without specific prior written ;; + ;; permission. ;; + ;; ;; + ;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; + ;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; + ;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; + ;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; + ;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; + ;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; + ;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; + ;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; + ;; THIS SOFTWARE. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Author: Richard Caley (rjc@cstr.ed.ac.uk) ;; + ;; Date: Fri Aug 15 1997 ;; + ;; ------------------------------------------------------------------- ;; + ;; New synthesis mainline. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Hooks to add to the synthesis process. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defvar default_before_synth_hooks nil + "default_before_synth_hooks + The default list of functions to be run on all synthesized utterances + before synthesis starts.") + +(defvar before_synth_hooks default_before_synth_hooks + "before_synth_hooks + List of functions to be run on synthesised utterances before synthesis + starts.") + +(defvar default_after_analysis_hooks nil + "default_after_analysis_hooks + The default list of functions to be run on all synthesized utterances + after analysis but before synthesis.") + +(defvar after_analysis_hooks default_after_analysis_hooks + "after_analysis_hooks + List of functions to be applied after analysis and before synthesis.") + +(defvar default_after_synth_hooks nil + "default_after_synth_hooks + The default list of functions to be run on all synthesized utterances + after Wave_Synth. This will normally be nil but if for some reason you + need to change the gain or rescale *all* waveforms you could set the + function here, in your siteinit.scm.") + +(defvar after_synth_hooks default_after_synth_hooks + "after_synth_hooks + List of functions to be applied after all synthesis modules have been + applied. This is primarily designed to allow waveform manipulation, + particularly resampling and volume changes.") + +(defvar default_access_strategy 'ondemand + "default_access_strategy + How to access units from databases.") + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Macro to define utterance types. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defmac (defUttType form) + (list 'defUttType_real + (list 'quote (cadr form)) + (list 'quote (cddr form)))) + +(defvar UttTypes nil + "UttTypes + List of types and functions used by the utt.synth function to call + appropriate methods.") + +(define (defUttType_real type form) + "(defUttType TYPE . BODY) + Define a new utterance type. TYPE is an atomic type that is specified + as the first argument to the function Utterance. BODY is evaluated + with argument utt, when utt.synth is called with an utterance of type + TYPE. You almost always require the function Initialize first. + [see Utterance types]" + ;;; Yes I am cheating a bit with the macro/function name. + ;;; should check about redefining and the syntax of the forms + (set! UttTypes + (cons + (cons type form) + UttTypes)) + type) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Macro to define synthesis types. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defmac (defSynthType form) + (list 'defSynthType_real + (list 'quote (cadr form)) + (list 'quote (cddr form)))) + +(defvar SynthTypes nil + "SynthTypes + List of synthesis types and functions used by the utt.synth function to + call appropriate methods for wave synthesis.") + +(define (defSynthType_real type form) + "(defSynthType TYPE . BODY) + Define a new wave synthesis type. TYPE is an atomic type that + identifies the type of synthesis. BODY is evaluated with argument + utt, when utt.synth is called with an utterance of type TYPE. + [see Utterance types]" + + (set! SynthTypes + (cons + (cons type form) + SynthTypes)) + type) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Some actual Utterance type definitions +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defUttType Words + (Initialize utt) + (POS utt) + (Phrasify utt) + (Word utt) + (Pauses utt) + (Intonation utt) + (PostLex utt) + (Duration utt) + (Int_Targets utt) + (Wave_Synth utt) + ) + +(defUttType Text + (Initialize utt) + (Text utt) + (Token_POS utt) + (Token utt) + (POS utt) + (Phrasify utt) + (Word utt) + (Pauses utt) + (Intonation utt) + (PostLex utt) + (Duration utt) + (Int_Targets utt) + (Wave_Synth utt) + ) + +(defUttType Tokens ;; This is used in tts_file, Tokens will be preloaded + (Token_POS utt) ;; when utt.synth is called + (Token utt) + (POS utt) + (Phrasify utt) + (Word utt) + (Pauses utt) + (Intonation utt) + (PostLex utt) + (Duration utt) + (Int_Targets utt) + (Wave_Synth utt) + ) + +(defUttType Concept ;; rather gradious name for when information has + (POS utt) ;; been preloaded (probably XML) to give a word + (Phrasify utt) ;; relation (SOLE uses this) + (Word utt) + (Pauses utt) + (Intonation utt) + (PostLex utt) + (Duration utt) + (Int_Targets utt) + (Wave_Synth utt) + ) + +(defUttType Phrase + (Initialize utt) + (Token_POS utt) + (Token utt) + (POS utt) + (Phrasify utt) + (Word utt) + (Pauses utt) + (Intonation utt) + (PostLex utt) + (Duration utt) + (Int_Targets utt) + (Wave_Synth utt) + ) + +(defUttType Segments + (Initialize utt) + (Wave_Synth utt) + ) + +(defUttType Phones + (Initialize utt) + (Fixed_Prosody utt) + (Wave_Synth utt) + ) + +(defUttType SegF0 + (Wave_Synth utt) + ) + +(defUttType Wave + (Initialize utt)) + + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; And some synthesis types. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defSynthType Taylor + (Taylor_Synthesize utt) + ) + +(defSynthType UniSyn + (defvar UniSyn_module_hooks nil) + (Param.def "unisyn.window_name" "hanning") + (Param.def "unisyn.window_factor" 1.0) + (Parameter.def 'us_sigpr 'lpc) + + (apply_hooks UniSyn_module_hooks utt) ;; for processing of diphone names + (us_get_diphones utt) + (us_unit_concat utt) + + (if (not (member 'f0 (utt.relationnames utt))) + (targets_to_f0 utt)) +;; temporary fix + (if (utt.relation.last utt 'Segment) + (set! pm_end (+ (item.feat (utt.relation.last utt 'Segment) "end") 0.02)) + (set! pm_end 0.02)) + + (us_f0_to_pitchmarks utt 'f0 'TargetCoef pm_end) + (us_mapping utt 'segment_single) + (cond + ((string-equal "td_psola" (Parameter.get 'us_sigpr)) + ;; Not in standard distribution, so has to be separate function + (us_tdpsola_synthesis utt 'analysis_period)) + (t + ;; All the rest + (us_generate_wave utt (Parameter.get 'us_sigpr) + 'analysis_period))) +) + +(defSynthType None + ;; do nothing + utt + ) + +(defSynthType Standard + (print "synth method: Standard") + + (let ((select (Parameter.get 'SelectionMethod))) + (if select + (progn + (print "select") + (apply select (list utt)) + ) + ) + ) + + (let ((join (Parameter.get 'JoiningMethod))) + (if join + (progn + (print "join") + (apply join (list utt)) + ) + ) + ) + + (let ((impose (Parameter.get 'ImposeMethod))) + (if impose + (progn + (print "impose") + (apply impose (list utt)) + ) + ) + ) + + (let ((power (Parameter.get 'PowerSmoothMethod))) + (if power + (progn + (print "power") + (apply power (list utt)) + ) + ) + ) + + (let ((wavesynthesis (Parameter.get 'WaveSynthesisMethod))) + (if wavesynthesis + (progn + (print "synthesis") + (apply wavesynthesis (list utt)) + ) + ) + ) + ) + +(defSynthType Minimal + (print "synth method: Minimal") + + (let ((select (Parameter.get 'SelectionMethod))) + (if select + (progn + (print "select") + (apply select (list utt)) + ) + ) + ) + + (let ((wavesynthesis (Parameter.get 'WaveSynthesisMethod))) + (if wavesynthesis + (progn + (print "synthesis") + (apply wavesynthesis (list utt "Unit" "Join" "Wave")) + ) + ) + ) + ) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; Finally the actual driver function. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (utt.synth utt) + + "(utt.synth UTT) + The main synthesis function. Given UTT it will apply the + functions specified for UTT's type, as defined with deffUttType + and then those demanded by the voice. After modules have been + applied synth_hooks are applied to allow extra manipulation. + [see Utterance types]" + + (apply_hooks before_synth_hooks utt) + + (let ((type (utt.type utt))) + (let ((definition (assoc type UttTypes))) + (if (null? definition) + (error "Unknown utterance type" type) + (let ((body (eval (cons 'lambda + (cons '(utt) (cdr definition)))))) + (body utt))))) + + (apply_hooks after_synth_hooks utt) + utt) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; And a couple of utility expressions. ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (SayText text) +"(SayText TEXT) +TEXT, a string, is rendered as speech." + (utt.play (utt.synth (eval (list 'Utterance 'Text text))))) + +(define (SynthText text) +"(SynthText TEXT) +TEXT, a string, is rendered as speech." + (utt.synth (eval (list 'Utterance 'Text text)))) + +(define (SayPhones phones) +"(SayPhones PHONES) +PHONES is a list of phonemes. This uses the Phones type utterance +to synthesize and play the given phones. Fixed duration specified in +FP_duration and fixed monotone duration (FP_F0) are used to generate +prosody." + (utt.play (utt.synth (eval (list 'Utterance 'Phones phones))))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; ;; + ;; This is the standard synthesis function. The Wave Synthesis may be ;; + ;; more than a simple module ;; + ;; ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(define (Wave_Synth utt) +"(Wave_Synth UTT) + Generate waveform from information in UTT, at least a Segment stream + must exist. The actual form of synthesis used depends on the Parameter + Synth_Method. If it is a function that is applied. If it is atom it + should be a SynthType as defined by defSynthType + [see Utterance types]" + (apply_hooks after_analysis_hooks utt) + (let ((method_val (Parameter.get 'Synth_Method))) + (cond + ((null method_val) + (error "Undefined Synth_Method")) + ((and (symbol? method_val) (symbol-bound? method_val)) + ;; Wish there was a function? + (apply (symbol-value method_val) (list utt))) + ((member (typeof method_val) '(subr closure)) + (apply method_val (list utt))) + (t ;; its a defined synthesis type + (let ((synthesis_modules (assoc_string method_val SynthTypes))) + (if (null? synthesis_modules) + (error (format nil "Undefined SynthType %s\n" method_val)) + (let ((body (eval (cons 'lambda + (cons '(utt) (cdr synthesis_modules)))))) + (body utt))))))) + utt) + +(provide 'synthesis) + + + diff --git a/lib/tilt.scm b/lib/tilt.scm new file mode 100644 index 0000000..92dbec6 --- /dev/null +++ b/lib/tilt.scm @@ -0,0 +1,972 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Author: Alan W Black, Kurt Dusterhoff, Janet Hitzeman +;;; Date: April 1999 +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Tilt intonation modules, accent/boundary preditions and F0 generation +;;; The F0 generation is done using models as described in +;;; Dusterhoff, K. and Black, A. (1997). "Generating F0 contours for +;;; speech synthesis using the Tilt intonation theory" +;;; (http://www.cstr.ed.ac.uk/awb/papers/esca-int97.ps) +;;; Proceedings of ESCA Workshop of Intonation, pp 107-110, September, +;;; Athens, Greece. +;;; +;;; Intonation_Tilt assigns accents and boundaries by a CART tree +;;; the c and sil nodes are derived directly duration creation +;;; +;;; Int_Targets_Tilt generates the F0 using the CART trees as +;;; described in the paper referenced above. +;;; +;;; THIS CONTAINS *VERY* EXPERIMENTAL CODE +;;; it requires a thoroughly clean up and probably split into +;;; multiple files + +(defvar int_tilt_params nil + "int_tilt_params +Parameters for tilt intonation model.") + +(Parameter.def 'tilt_method 'cart) + +(define (Intonation_Tilt utt) + "(Intonation_Tilt utt) +Assign accent and boundary IntEvents to each syllable, and fill in +spaces with silence and connections." + (let (accent boundary) + ;; Create basic intonation relations + (utt.relation.create utt 'Intonation) + (utt.relation.create utt 'IntonationSyllable) + (mapcar + (lambda (syl) + ;; If first syllable in phrase add phrase_start + (if (string-equal "pau" + (item.feat syl "R:SylStructure.daughter1_to.Segment.p.name")) + (tilt_add_intevent utt syl 'phrase_start)) + + (set! accent (wagon_predict syl tilt_a_cart_tree)) + (set! boundary (wagon_predict syl tilt_b_cart_tree)) +; (format t "%s: accent %s boundary %s\n" +; (item.feat syl "R:WordStructure.root.name") +; accent +; boundary) + (if (not (string-equal accent "0")) + (tilt_add_intevent utt syl accent)) + (if (not (string-equal boundary "0")) + (if (and (string-equal boundary "afb") + (not (string-equal accent "0"))) + (tilt_add_intevent utt syl "fb") ;; can't have a/afb + (tilt_add_intevent utt syl boundary))) + + ;; If last syllable in phrase add phrase_end + (if (string-equal "pau" + (item.feat syl "R:SylStructure.daughtern_to.Segment.n.name")) + (tilt_add_intevent utt syl 'phrase_end))) + (utt.relation.items utt 'Syllable)) +;; (utt.relation.print utt 'Intonation) + utt)) + +(define (tilt_add_intevent utt syl name) +"(tilt_add_intevent utt syl name) +Add a new IntEvent related to syl with name." + (let (ie) + (set! ie (utt.relation.append utt 'Intonation (list name))) + (if (not (item.relation syl 'IntonationSyllable)) + (utt.relation.append utt 'IntonationSyllable syl)) + (item.relation.append_daughter syl 'IntonationSyllable ie) + (if (not (string-matches name "phrase_.*")) + (item.set_feat ie "int_event" 1)) + ie)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Fo generate through tilt parameters and F0 rendering +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define (Int_Targets_Tilt utt) + "(Int_Targets_Tilt utt) +Assign Tilt parameters to each IntEvent and then generate the +F0 contour and assign targets." + (utt.relation.set_feat utt "Intonation" "intonation_style" "tilt") + (tilt_assign_parameters utt) +; (tilt_F0_and_targets utt) ;; this has to be C++, sorry +; (tilt_map_f0_range utt) + (tilt_to_f0 utt "f0") + (tilt_validate utt) + utt +) + +(define (tilt_validate utt) + "(tilt_validate utt) +Checks that the predicted tilt parameter fall with reasonable +limits and modify them where possible to be more reasonable." + (mapcar + (lambda (ie) + (cond + ((string-equal (item.name ie) "phrase_end") + ;; check previous event does overflow segments + ) + (t + t)) + ) + (utt.relation.items utt 'Intonation)) +) + +(define (tilt_map_f0_range utt) + "(tilt_map_f0_range utt) +In order fo better trained models to be used for voices which don't +have the necessary data to train models from the targets may be mapped +to a different pitch range. Note this is not optimal as pitch ranges +don't map that easily, but the the results can sometimes be better than +using a less sophisticated F0 generation model. The method used +is to define the mean and standard deviation of the speaker the +model was trained on and the mean and standard deciation of the +desired speaker. Mapping is by converting the actual F0 value +to zscores (distance from mean in number of stddev) and back into +the other domain. The variable int_tilt_params is used to find +the values." + (let ((target_f0_mean (car (cdr (assoc 'target_f0_mean int_tilt_params)))) + (target_f0_std (car (cdr (assoc 'target_f0_std int_tilt_params)))) + (model_f0_std (car (cdr (assoc 'model_f0_std int_tilt_params)))) + (model_f0_mean (car (cdr (assoc 'model_f0_mean int_tilt_params))))) + (if target_f0_mean ;; only if one is specified + (lambda (targ) + (item.set_name + targ + (+ target_f0_mean + (* target_f0_std + (/ (- (parse-number (item.name targ)) + model_f0_mean) + model_f0_std))))) + (utt.relation.leafs utt 'Target)))) + +(define (tilt_assign_parameters utt) + "(tilt_assign_parameters utt) +Assigned tilt parameters to IntEvents, depending on the value +of the Parameter tilt_method uses wagon trees (cart) or linear +regression models (lr)." + (let ((method (Parameter.get 'tilt_method))) + (cond + ((equal? method 'cart) + (tilt_assign_parameters_wagon utt)) + ((equal? method 'lr) + (tilt_assign_parameters_lr utt)) + (t + (error "Tilt: unknown tilt param prediction method: " tilt_method))))) + +(define (tilt_assign_parameters_wagon utt) + "(tilt_assign_parameters_wagon utt) +Assing parameters (start_f0, tilt, amplitude, peak_pos and duration) +to each IntEvent. Uses Wagon trees to predict values" + (mapcar + (lambda (ie) + (let ((param_trees (cdr (assoc_string (item.name ie) + tilt_param_trees)))) + (item.set_feat ie "time_path" "IntonationSyllable") + (if (string-equal "1" (item.feat ie "int_event")) + (item.set_function ie "time" "unisyn_tilt_event_position") + (item.set_function ie "time" "unisyn_tilt_phrase_position")) + (cond + ((null param_trees) + (format stderr "Tilt: unknown Intonation type %s, ignored\n" + (item.name ie)) + ;; *need* to assign default values + (item.set_feat ie "ev.f0" 100) + (item.set_feat ie "tilt.amp" 20.0) + (item.set_feat ie "tilt.dur" 0.25) + (item.set_feat ie "tilt.tilt" -0.2) + (item.set_feat ie "rel_pos" 0.0) + ) + (t + (tilt_assign_params_wagon ie param_trees))))) + (utt.relation.items utt 'Intonation))) + +(define (tilt_assign_params_wagon ie trees) + "(tilt_assign_params_wagon ie trees) +Assign the names parameters to ie using the trees and names in +trees." + (mapcar + (lambda (tree) + (let ((val (wagon_predict ie (car (cdr tree))))) + (item.set_feat ie (car tree) val))) + trees)) + +(define (tilt_assign_parameters_lr utt) + "(tilt_assign_parameters_lr utt) +Assing parameters (start_f0, tilt, amplitude, peak_pos and duration) +to each IntEvent. Prediction by linear regression models" + (mapcar + (lambda (ie) + (let ((param_lrmodels (cdr (assoc_string (item.name ie) + tilt_param_lrmodels)))) + (cond + ((null param_lrmodels) + (format stderr "Tilt: unknown IntEvent type %s, ignored\n" + (item.name ie)) + ;; *need* to assign default values + (item.set_feat ie "ev.f0" 100) + (item.set_feat ie "tilt.amp" 20.0) + (item.set_feat ie "tilt.dur" 0.25) + (item.set_feat ie "tilt.tilt" -0.2) + (item.set_feat ie "rel_pos" 0.0) + ) + (t + (tilt_assign_params_lr ie param_lrmodels))))) + (utt.relation.items utt 'IntEvent))) + +(define (tilt_assign_params_lr ie lrmodels) + "(tilt_assign_params_lr ie lrmodels) +Assign the names parameters to ie using the trees and names in +trees." + (mapcar + (lambda (lrm) + (let ((val (lr_predict ie (cdr lrm)))) + (item.set_feat ie (car lrm) val))) + lrmodels)) + +(define (utt.save.tilt_events utt filename) +"(utt.save.til_events UTT FILENAME) +Save tilt events in UTT to FILENAME in a format suitable for +ev_synth." + (let ((fd (fopen filename "w"))) + (format fd "#\n") + (mapcar + (lambda (ie) + (let ((name (item.name ie))) + (cond + ((or (string-equal name "sil") + (string-equal name "c")) + (format fd " %2.4f 100 %s; tilt: %2.6f\n" + (item.feat ie 'end) + name + (item.feat ie "tilt_start_f0"))) + (t ;; accent or boundary + (format fd " %2.4f 100 %s; tilt: %2.6f %2.6f %2.6f %2.6f %2.6f\n" + (item.feat ie 'end) + name + (item.feat ie "ev.f0") + (item.feat ie "tilt.amp") + (item.feat ie "tilt.dur") + (item.feat ie "tilt.tilt") + (item.feat ie "rel_pos")))))) + (utt.relation.items utt 'IntEvent)) + (fclose fd) + utt)) + + +;;;;; +;;; Some features which should be pruned +;;;;; + +(def_feature_docstring 'Syllable.lisp_time_to_next_vowel + "Syllable.lisp_time_to_next_vowel syl + The time from vowel_start to next vowel_start") +(define (time_to_next_vowel syl) + "(time_to_next_vowel syl) + The time from vowel_start to next vowel_start" + (let (ttnv) + (if (string-equal "0" (item.feat syl "n.vowel_start")) + (set! ttnv 0.00) + (set! ttnv (- (item.feat syl "n.vowel_start") + (item.feat syl "vowel_start")))) + ttnv)) + +(def_feature_docstring 'Syllable.lisp_next_stress + "Syllable.lisp_next_stress + Number of syllables to next stressed syllable. 0 if this syllable is + stressed. It is effectively assumed the syllable after the last syllable + is stressed.") +(define (next_stress syl) + (cond + ((null syl) 0) + ((string-equal (item.feat syl 'stress_num) "1") + 0) + (t + (+ 1 (next_stress (item.relation.next syl 'Syllable)))))) + +(def_feature_docstring 'Syllable.lisp_last_stress + "Syllable.lisp_last_stress + Number of syllables from previous stressed syllable. 0 if this syllable + is stressed. It is effectively assumed that the syllable before the + first syllable is stressed.") +(define (last_stress syl) + (cond + ((null syl) 0) + ((string-equal (item.feat syl 'stress_num) "1") + 0) + (t + (+ 1 (last_stress (item.relation.prev syl 'Syllable)))))) + + +(def_feature_docstring 'SylStructure.lisp_length_to_last_seg + "SylStructure.lisp_length_to_last_seg + Length from start of the vowel to start of last segment of syllable.") +(define (length_to_last_seg syl) + (- (item.feat syl "daughtern_to.Segment.start") + (item.feat syl "vowel_start"))) + +(def_feature_docstring 'SylStructure.lisp_get_rhyme_length + "Syllable.lisp_get_rhyme_length + Length from start of the vowel to end of syllable.") +(define (get_rhyme_length syl) + (- (item.feat syl 'end) + (item.feat syl 'vowel_start syl))) + +(def_feature_docstring 'SylStructure.lisp_get_onset_length + "Syllable.lisp_get_onset_length + Length from start of syllable to start of vowel.") +(define (get_onset_length syl) + (cond + ((< (- (item.feat syl 'vowel_start) + (item.feat syl 'start)) + 0.000) + 0.000) ;; just in case + (t + (- (item.feat syl 'vowel_start) + (item.feat syl 'start))))) + +(def_feature_docstring 'Syllable.lisp_tilt_accent + "Syllable.lisp_tilt_accent + Returns \"a\" if there is a tilt accent related to this syllable, 0 + otherwise.") +(define (tilt_accent syl) + (let ((events (item.relation.daughters syl 'IntonationSyllable)) + (r "0")) + (mapcar + (lambda (i) + (if (member_string (item.name i) tilt_accent_list) + (set! r "a"))) + events) + r)) + +(def_feature_docstring 'Syllable.lisp_tilt_boundary + "Syllable.lisp_tilt_boundary + Returns boundary label if there is a tilt boundary related to this +syllable, 0 otherwise.") +(define (tilt_boundary syl) + (let ((events (item.relation.daughters syl 'IntonationSyllable)) + (r "0")) + (mapcar + (lambda (i) + (let ((name (item.name i))) + (if (member_string name tilt_boundary_list) + (cond + ((string-matches name "a.*") + (set! r (string-after name "a"))) + ((string-matches name "m.*") + (set! r (string-after name "m"))) + (t + (set! r name)))))) + events) + r)) + +(def_feature_docstring 'Syllable.lisp_tilt_accented + "Syllable.lisp_tilt_accented + Returns 1 if there is a tilt accent related to this syllable, 0 + otherwise.") +(define (tilt_accented syl) + (let ((events (item.relation.daughters syl 'IntonationSyllable)) + (r "0")) + (mapcar + (lambda (i) + (if (member_string (item.name i) tilt_accent_list) + (set! r "1"))) + events) + r)) + +(def_feature_docstring 'Syllable.lisp_tilt_boundaried + "Syllable.lisp_tilt_boundaried + Returns 1 if there is a tilt boundary related to this syllable, 0 + otherwise.") +(define (tilt_boundaried syl) + (let ((events (item.relation.daughters syl 'IntonationSyllable)) + (r "0")) + (mapcar + (lambda (i) + (if (member_string (item.name i) tilt_boundary_list) + (set! r "1"))) + events) + r)) + +(def_feature_docstring 'SylStructure.lisp_vowel_height + "SylStructure.lisp_vowel_height syl +Classifies vowels as high, low or mid") +(define (vowel_height syl) + (let ((vh (item.feat syl "daughtern.daughter1.daughter1.df.height"))) + vh) +) + +(def_feature_docstring 'SylStructure.lisp_vowel_frontness + "SylStructure.vowel_frontness syl +Classifies vowels as front, back or mid") +(define (vowel_frontness syl) + (let ((vf (item.feat syl "daughtern.daughter1.daughter1.df.front"))) + vf) +) + +(def_feature_docstring 'SylStructure.lisp_vowel_length + "SylStructure.vowel_length syl +Returns the df.length feature of a syllable's vowel") +(define (vowel_length syl) + (let ((vl (item.feat syl "daughtern.daughter1.daughter1.df.length"))) + vl) +) + +(defvar sonority_vless_obst '("f" "h" "hh" "k" "p" "s" "sh" "t" "th" "ch") + "sonority_vless_obst +List of voiceless obstruents for use in sonority scaling (only good w/ radio_speech)" + ) +(defvar sonority_v_obst '("v" "b" "g" "z" "zh" "d" "dh" "jh") + "sonority_v_obst +List of voiced obstruents for use in sonority scaling (only good w/ radio_speech)" + ) +(defvar sonority_nas '("m" "n" "ng" "nx" "em" "en") + "sonority_nas +List of nasals (only good w/ radio_speech)" + ) +(defvar sonority_liq '("r" "l" "er" "el" "axr") + "sonority_liq +List of liquids (only good w/ radio_speech)" + ) +(defvar sonority_glides '("y" "w") + "sonority_glides +List of glides (only good w/ radio_speech)" + ) + +(def_feature_docstring 'SylStructure.lisp_sonority_scale_coda + "SylStructure.sonority_scale_coda syl +Returns value on sonority scale (1 -6, where 6 is most sonorous) +for the coda of a syllable, based on least sonorant portion.") +(define (sonority_scale_coda syl) + (let ((segs (item.daughters (item.daughtern (item.daughtern syl)))) + (scale 6)) + (mapcar + (lambda (seg) + (cond + ((member_string (item.name seg) sonority_vless_obst) + (if (> scale 1) + (set! scale 1))) + ((member_string (item.name seg) sonority_v_obst) + (if (> scale 2) + (set! scale 2))) + ((member_string (item.name seg) sonority_nas) + (if (> scale 3) + (set! scale 3))) + ((member_string (item.name seg) sonority_liq) + (if (> scale 4) + (set! scale 4))) + ((member_string (item.name seg) sonority_glides) + (if (> scale 5) + (set! scale 5))) + (t + (if (> scale 6) + (set! scale 6))) + ) + ) + segs) + scale)) + +(def_feature_docstring 'SylStructure.lisp_sonority_scale_onset + "SylStructure.sonority_scale_onset syl +Returns value on sonority scale (1 -6, where 6 is most sonorous) +for the onset of a syllable, based on least sonorant portion.") +(define (sonority_scale_onset syl) + (if (string-equal "Onset" (item.feat (item.daughter1 syl) "sylval")) + (let ((segs (item.daughters (item.daughter1 syl))) + (scale 6)) + (mapcar + (lambda (seg) + (cond + ((member_string (item.name seg) sonority_vless_obst) + (if (> scale 1) + (set! scale 1))) + ((member_string (item.name seg) sonority_v_obst) + (if (> scale 2) + (set! scale 2))) + ((member_string (item.name seg) sonority_nas) + (if (> scale 3) + (set! scale 3))) + ((member_string (item.name seg) sonority_liq) + (if (> scale 4) + (set! scale 4))) + ((member_string (item.name seg) sonority_glides) + (if (> scale 5) + (set! scale 5))) + (t (set! scale 6)) + ) + ) + segs) + scale) + 0)) + +(def_feature_docstring 'SylStructure.lisp_num_postvocalic_c + "SylStructure.lisp_num_postvocalic_c +Finds the number of postvocalic consonants in a syllable.") +(define (num_postvocalic_c syl) + "(num_postvocalic_c syl) +Finds the number of postvocalic consonants in a syllable." + (let (segs (npc 0)) + (set! segs (item.daughters (item.daughtern (item.daughtern syl)))) + (mapcar + (lambda (seg) + (set! npc (+ npc 1)) + ) + segs) + npc)) + + +(def_feature_docstring 'SylStructure.lisp_syl_numphones + "SylStructure.lisp_syl_numphones syl +Finds the number segments in a syllable.") +(define (syl_numphones syl) + (length (mt_segs_from_syl syl)) + ) + +(def_feature_docstring 'Segment.lisp_pos_in_syl + "Segment.lisp_pos_in_syl seg +Finds the position in a syllable of a segment - returns a number.") +(define (pos_in_syl seg) + (let ((segments (mt_segs_from_syl + (item.relation (item.parent_to + (item.relation seg 'SylStructure) + 'Syllable) + 'SylStructure))) + (seg_count 1)) + (mapcar + (lambda (s) + (if (not (eqv? s seg)) + (set! seg_count (+ 1.0 seg_count)) + nil)) + segs) + seg_count)) + +(def_feature_docstring 'Intonation.lisp_peak_anchor_segment_type + "Intonation.peak_anchor_segment_type ie +Determines whether the segment anchor for a peak +is the first consonant of a syl - C0 -, the +vowel of a syl - V0 -, or segments after that +- C1->X,V1->X. If the segment is in a following syl, +the return value will be preceded by a 1 - e.g. 1V1") +(define (peak_anchor_segment_type ie) + (let ( syl peak_anchor_num numsegs peak_anchor_type) + (set! peak_anchor_num (peak_segment_anchor ie)) + + + (if (> 9 peak_anchor_num) + (set! syl (item.relation + (item.parent (item.relation ie "IntonationSyllable")) + "SylStructure"))) + (if (> 9 peak_anchor_num) + (set! numsegs (item.feat syl "syl_numphones"))) + + (cond + ((< 9 peak_anchor_num) + (set! peak_anchor_type "none")) + ((> 0 peak_anchor_num) + (set! peak_anchor_type + (string-append + "-1" (get_anchor_value (item.prev syl) + (+ peak_anchor_num + (item.feat syl "p.syl_numphones")))))) + ((< peak_anchor_num numsegs) + (set! peak_anchor_type (get_anchor_value syl numsegs))) + ((> peak_anchor_num numsegs) + (set! peak_anchor_type + (string-append + "1" (get_anchor_value (item.next syl) (- peak_anchor_num numsegs))))) + (set! peak_anchor_type "none")) +; (format stderr "pat: %s\n" peak_anchor_type) + peak_anchor_type)) + +(define (get_anchor_value sylSyl seg_num) + "(get_anchor_value sylSyl seg_num) +Gets the c/v value of the segment within a syllable." + (let ((syl (item.relation sylSyl "SylStructure")) + (seg_val "none") segs (ccnt -1) (vcnt -1) (vpis 0)) + (set! segs (mt_segs_from_syl sylSyl)) + (mapcar + (lambda (seg) + (cond + ((string-equal "consonant" (item.feat seg "df.type")) + (set! vcnt (+ 1 vcnt)) + (set! vpis (item.feat seg "pos_in_syl"))) + (t + (set! ccnt (+ 1 ccnt)))) + (cond + ((and + (eq (- seg_num 1.0) (item.feat seg "pos_in_syl")) + ( string-equal "consonant" (item.feat seg "df.type"))) + (set! seg_val (string-append "V" vcnt))) + ((and + (eq (- seg_num 1.0) (item.feat seg "pos_in_syl")) + ( string-equal "vowel" (item.feat seg "df.type"))) + (set! seg_val (string-append "C" (- (item.feat seg "pos_in_syl") + vpis) "V" vcnt))) + (t nil)) + ) + segs) + seg_val)) + +(define (peak_segment_anchor ie) + "peak_segment_anchor ie +Determines what segment acts as the anchor for a peak. +Returns number of segments from start of accented syllable +to peak." +; (format stderr "accent: %s\n" +; (item.name ie)) + (let ((pk_pos (item.feat ie "position")) + (peak_seg_anchor 11)) + (if + (or + (string-equal "phrase_start" (item.name ie)) + (string-equal "phrase_end" (item.name ie)) + (string-equal "pause" (item.name ie))) + (set! peak_seg_anchor 10) + (set! peak_seg_anchor (find_peak_seg_anchor ie pk_pos))) + peak_seg_anchor)) + +(define (find_peak_seg_anchor ie pk_pos) + "find_peak_seg_anchor ie pk_pos +Part of the workings of peak_segment_anchor." + (let (( syl (item.relation + (item.parent (item.relation ie 'IntonationSyllable)) + 'SylStructure)) + (seg_anchor 11)) + (cond + ((not (eq 9.0 (segs_to_peak syl pk_pos))) + (set! seg_anchor (segs_to_peak syl pk_pos))) + + ((and (item.prev syl) + (not (eq 9.0 (segs_to_peak (item.prev syl) pk_pos)))) +; (format stderr "%s\n" (item.name (item.prev syl))) + (set! seg_anchor (* -1 + (- (+ 1 (item.feat syl "p.syl_numphones")) + (segs_to_peak (item.prev syl) pk_pos))))) + + ((and (item.next syl) + (> pk_pos (item.feat syl "n.start"))) +; (format stderr "%s\n" (item.name (item.next syl))) + (set! seg_anchor (+ 1 + (item.feat syl "syl_numphones") + (segs_to_peak (item.next syl) pk_pos)))) + (t + (format stderr "No seg anchor could be found\n"))) +; (format stderr "seg_anchor: %f\n" seg_anchor) + seg_anchor)) + +(define (segs_to_peak sylSyl pk_pos) + "(segs_to_peak sylSyl pk_pos) +Determines the number of segments from the start of a syllable +to an intonation peak" + (let ((syl (item.relation sylSyl "SylStructure")) + (segs_2_peak 9) segs) + (set! segs (mt_segs_from_syl syl)) + (mapcar + (lambda (seg) +; (format stderr "seg_end: %f pk: %f\n" (item.feat seg "end") +; pk_pos) + (if (eq 1.0 (peak_wi_seg seg pk_pos)) + (set! segs_2_peak (item.feat seg "pos_in_syl"))) +; (format stderr "segs_2_peak: %f\n" segs_2_peak) + ) + segs) + segs_2_peak)) + +(define (peak_wi_seg segment pk_pos) + "peak_wi_seg segment pk_pos +Finds if a peak occurs w/i a segment" + (let ((s_start (item.feat segment "start")) + (s_end (item.feat segment "end")) + (ret 0.0)) + (if (and (< s_start pk_pos) + (< pk_pos s_end)) + (set! ret 1.0) + nil) + ret)) + +(defvar tilt_accent_list '("a" "arb" "afb" "m" "mfb" "mrb") + "tilt_accent_list +List of events containing accents in tilt model.") +(defvar tilt_boundary_list '("rb" "arb" "afb" "fb" "mfb" "mrb") + "tilt_boundary_list +List of events containing boundaries in tilt model.") + +(def_feature_docstring 'Intonation.lisp_last_tilt_accent + "Intonation.lisp_last_tilt_accent + Returns the most recent tilt accent.") +(define (last_tilt_accent intev) + (let ((pie (item.relation.prev intev 'Intonation))) + (cond + ((not pie) + "0") + ((member_string (item.name pie) tilt_accent_list) + (item.name pie)) + (t (last_tilt_accent pie))))) + +(def_feature_docstring 'Intonation.lisp_next_tilt_accent + "Intonation.lisp_next_tilt_accent + Returns the next tilt accent.") +(define (next_tilt_accent intev) + (let ((nie (item.relation.next intev 'Intonation))) + (cond + ((not nie) "0") + ((member_string (item.name nie) tilt_accent_list) + (item.name nie)) + (t (next_tilt_accent nie))))) + +(def_feature_docstring 'Intonation.lisp_last_tilt_boundary + "Intonation.lisp_last_tilt_boundary + Returns the most recent tilt boundary.") +(define (last_tilt_boundary intev) + (let ((pie (item.relation.prev intev 'Intonation))) + (cond + ((not pie) "0") + ((member_string (item.name pie) tilt_boundary_list) + (item.name pie)) + (t (last_tilt_boundary pie))))) + +(def_feature_docstring 'Intonation.lisp_next_tilt_boundary + "Intonation.lisp_next_tilt_boundary + Returns the next tilt boundary.") +(define (next_tilt_boundary intev) + (let ((nie (item.relation.next intev 'Intonation))) + (cond + ((not nie) "0") + ((member_string (item.name nie) tilt_boundary_list) + (item.name nie)) + (t (next_tilt_boundary nie))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Some basic function to metrical tree structure +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define (mt_syl_from_seg seg) + (if seg + (item.root (item.relation seg 'SylStructure)) + nil)) +(define (mt_word_from_syl syl) + (if syl + (item.root (item.relation syl 'WordStructure)) + nil)) +(define (mt_word_from_seg seg) + (mt_word_from_syl (mt_syl_from_seg seg))) + +(define (mt_segs_from_syl s) + (cond + ((null s) nil) + ((member_string 'Segment (item.relations s)) + (list s)) + (t + (apply + append + (mapcar mt_segs_from_syl (item.relation.daughters s 'SylStructure)))))) + +(define (sylmtval s) + (let ((syl (mt_syl_from_seg s))) + (if syl + (item.feat syl "MetricalValue") + "0"))) + +(define (sylpmtval s) + (let ((syl (mt_syl_from_seg s))) + (if syl + (item.feat syl "R:MetricalTree.parent.MetricalValue") + "0"))) + +(define (mt_numsyls w) + (let ((s1 (item.daughter1_to (item.relation w 'WordStructure) 'Syllable)) + (sn (item.daughtern_to (item.relation w 'WordStructure) 'Syllable)) + (count 1)) + (while (and s1 (not (equal? s1 sn))) + (set! count (+ 1 count)) + (set! s1 (item.next s1))) + (if s1 + count + 0))) + +(define (mt_seg_numsyls s) + (let ((w (mt_word_from_seg s))) + (if w + (mt_num_syls w) + 0))) + + +;;; These functions should be sort out some time + +;;; Difference between this syl and the next +;;; number of closing brackets, number of opening brackets +;;; difference between them + +(define (mt_close n) + "(mt_close n) +The number of consituents this is the end of, Effectively the +number of closing brackets after this word." + (if (or (not n) (item.next n)) + 0 + (+ 1 (mt_close (item.parent n))))) + +(define (mt_open n) + "(mt_open n) +The number of consituents this is the start of, Effectively the +number of opening brackets before this word." + (if (or (not n) (item.prev n)) + 0 + (+ 1 (mt_open (item.parent n))))) + +(define (mt_postype syl) + "(mt_postype syl) +Returns single, initial, final or middle." + (let ((w (mt_word_from_syl syl)) + (psw (mt_word_from_syl (item.relation.prev syl 'Syllable))) + (nsw (mt_word_from_syl (item.relation.next syl 'Syllable)))) + (cond + ((and (equal? w psw) + (equal? w nsw)) + 'middle) + ((and (not (equal? w psw)) + (not (equal? w nsw))) + 'single) + ((equal? w psw) + 'final) + (t + 'initial)))) + +(define (mt_accent syl) + "(mt_accent syl) +Accent or 0 if none." + (let ((a 0)) + (mapcar + (lambda (i) + (if (string-matches (item.name i) "^a.*") + (set! a "a"))) + (item.relation.daughters syl 'IntonationSyllable)) + a)) + +(define (mt_break syl) + "(mt_break syl) +Break or 0 if none." + (let ((a 0)) + (mapcar + (lambda (i) + (if (string-matches (item.name i) ".*b$") + (set! a (item.name i)))) + (item.relation.daughters syl 'IntonationSyllable)) + a)) + +(define (mt_ssyl_out s) + (cond + ((null s) 0) + ((not (string-equal + "0" (item.feat s "R:WordStructure.root.lisp_word_mt_break"))) + 0) + ((string-equal "s" (item.feat s "MetricalValue")) + (+ 1 (mt_ssyl_out (item.relation.next s 'Syllable)))) + (t + (mt_ssyl_out (item.relation.next s 'Syllable))))) + +(define (mt_num_s s) + "(mt_num_s s) +The number of s MetricalValues from here to a w or top." + (cond + ((null s) 0) + ((string-equal "w" (item.feat s "MetricalValue")) + 0) + (t + (+ 1 (mt_num_s (item.parent s)))))) + +(define (mt_num_w s) + "(mt_num_w s) +The number of w MetricalValues from here to a s or top." + (cond + ((null s) 0) + ((string-equal "s" (item.feat s "MetricalValue")) + 0) + (t + (+ 1 (mt_num_w (item.parent s)))))) + +(define (mt_strong s) + "(mt_strong s) +1 if all MetricalValues a s to a word, 0 otherwise." + (cond + ((string-equal "w" (item.feat s "MetricalValue")) + "0") + ((member_string 'Word (item.relations s)) "1") + (t + (mt_strong (item.relation.parent s 'MetricalTree))))) + +(define (mt_lssp s) + "(mt_lssp s) +1 if last stressed syllable in phrase, 0 otherwise." + (if (and (string-equal "s" (item.feat s "MetricalValue")) + (equal? 0 (mt_ssyl_out s))) + "1" + "0")) + +(define (mt_fssw s) + "(mt_fssw s) +1 if first stressed syllable in word, 0 otherwise." + (if (and (string-equal "s" (item.feat s "MetricalValue")) + (mt_no_stress_before (item.relation.prev s 'Syllable))) + "1" + "0")) + +(define (mt_nfssw s) + "(nfssw s) +1 if second or later stressed syllable in word, 0 otherwise." + (if (and (string-equal "s" (item.feat s "MetricalValue")) + (null (mt_no_stress_before (item.relation.prev s 'Syllable)))) + "1" + "0")) + +(define (mt_no_stress_before ss) + (cond + ((null ss) t) + ((not (string-equal + (item.feat ss "R:WordStructure.root.addr") + (item.feat (item.next ss) "R:WordStructure.root.addr"))) + t) + ((string-equal "s" (item.feat ss "MetricalValue")) + nil) + (t + (mt_no_stress_before (item.prev ss))))) + +(define (word_mt_break w) + (cond + ((string-equal "1" (item.feat w "sentence_end")) + "BB") + ((string-equal "1" (item.feat w "phrase_end")) + "B") + (t + "0"))) + +(provide 'tilt) diff --git a/lib/tobi.scm b/lib/tobi.scm new file mode 100644 index 0000000..f542113 --- /dev/null +++ b/lib/tobi.scm @@ -0,0 +1,338 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A CART tree for predicting ToBI accents (learned from f2b) +;;; punctuation and minimal pos +;;; + +; NON !H* L+H L*+ +; NONE10265 583 66 40 0 0 10954 [10265/10954] 93.710 +; H* 650 1805 61 57 0 0 2573 [1805/2573] 70.152 +; !H* 317 241 125 42 0 0 725 [125/725] 17.241 +; L+H* 457 486 76 80 0 0 1099 [80/1099] 7.279 +; L* 45 113 14 4 0 0 176 [0/176] 0.000 +; L*+H 6 6 0 1 0 0 13 [0/13] 0.000 +; 11740 3234 342 224 0 0 +;total 15540 correct 12275.000 78.990% + +(set! f2b_int_accent_cart_tree +' +;; these first few lines are hand written to deal with emphasis (from ssml) +((R:SylStructure.parent.R:Token.parent.EMPH is 1) + (((NONE 0.0) (H* 1) (!H* 0.0) (L+H* 0) (L* 0) (L*+H 0) H*)) + ((n.R:SylStructure.parent.R:Token.parent.EMPH is 1) + (((NONE 1.0) (H* 0) (!H* 0.0) (L+H* 0) (L* 0) (L*+H 0) NONE)) + ((p.R:SylStructure.parent.R:Token.parent.EMPH is 1) + (((NONE 1.0) (H* 0) (!H* 0.0) (L+H* 0) (L* 0) (L*+H 0) NONE)) + +((ssyl_in is 10) + (((NONE 0.99726) (H* 0) (!H* 0.00273973) (L+H* 0) (L* 0) (L*+H 0) NONE)) + ((R:SylStructure.parent.gpos is to) + (((NONE 0.995984) (H* 0.00401606) (!H* 0) (L+H* 0) (L* 0) (L*+H 0) NONE)) + ((R:SylStructure.parent.gpos is cc) + (((NONE 0.987768) (H* 0.00611621) (!H* 0) (L+H* 0.00611621) (L* 0) (L*+H 0) NONE)) + ((ssyl_out is 10) + (((NONE 0.927273) (H* 0.0545455) (!H* 0) (L+H* 0.0181818) (L* 0) (L*+H 0) NONE)) + ((R:SylStructure.parent.gpos is in) + (((NONE 0.938322) (H* 0.0353618) (!H* 0.00493421) (L+H* 0.0197368) (L* 0.00164474) (L*+H 0) NONE)) + ((R:SylStructure.parent.gpos is wp) + (((NONE 0.895238) (H* 0.0857143) (!H* 0) (L+H* 0.0190476) (L* 0) (L*+H 0) NONE)) + ((R:SylStructure.parent.gpos is aux) + (((NONE 0.912281) (H* 0.0380117) (!H* 0.00584795) (L+H* 0.0350877) (L* 0.00584795) (L*+H 0.00292398) NONE)) + ((R:SylStructure.parent.gpos is det) + (((NONE 0.898004) (H* 0.0643016) (!H* 0.00332594) (L+H* 0.0332594) (L* 0) (L*+H 0.00110865) NONE)) + ((stress is 0) + (((NONE 0.978415) (H* 0.0144999) (!H* 0.00164772) (L+H* 0.00510793) (L* 0.000329544) (L*+H 0) NONE)) + ((R:SylStructure.parent.R:Word.p.gpos is 0) + (((NONE 0.209877) (H* 0.716049) (!H* 0) (L+H* 0.0617284) (L* 0.0123457) (L*+H 0) H*)) + ((R:SylStructure.parent.gpos is md) + (((NONE 0.693548) (H* 0.177419) (!H* 0.0322581) (L+H* 0.0967742) (L* 0) (L*+H 0) NONE)) + ((p.syl_break is 3) + ((syl_break is 1) + (((NONE 0.4375) (H* 0.416667) (!H* 0) (L+H* 0.135417) (L* 0.0104167) (L*+H 0) NONE)) + (((NONE 0.171171) (H* 0.666667) (!H* 0) (L+H* 0.144144) (L* 0.018018) (L*+H 0) H*))) + ((pp.syl_break is 4) + ((R:SylStructure.parent.R:Word.pp.gpos is in) + (((NONE 0.0980392) (H* 0.803922) (!H* 0) (L+H* 0.0784314) (L* 0.0196078) (L*+H 0) H*)) + ((syl_out is 0) + (((NONE 0.0185185) (H* 0.796296) (!H* 0.037037) (L+H* 0.0925926) (L* 0.0555556) (L*+H 0) H*)) + ((R:SylStructure.parent.R:Word.n.gpos is in) + (((NONE 0.132353) (H* 0.676471) (!H* 0) (L+H* 0.161765) (L* 0.0294118) (L*+H 0) H*)) + ((syl_break is 0) + (((NONE 0.125) (H* 0.633929) (!H* 0.0133929) (L+H* 0.183036) (L* 0.0401786) (L*+H 0.00446429) H*)) + ((n.stress is 0) + (((NONE 0.364865) (H* 0.567568) (!H* 0) (L+H* 0.0540541) (L* 0.0135135) (L*+H 0) H*)) + ((p.syl_break is 0) + (((NONE 0.612903) (H* 0.290323) (!H* 0) (L+H* 0.0967742) (L* 0) (L*+H 0) NONE)) + (((NONE 0.32) (H* 0.44) (!H* 0.02) (L+H* 0.22) (L* 0) (L*+H 0) H*)))))))) + ((ssyl_in is 0) + (((NONE 0.167769) (H* 0.628926) (!H* 0.0214876) (L+H* 0.142975) (L* 0.0363636) (L*+H 0.00247934) H*)) + ((ssyl_out is 4) + (((NONE 0.490385) (H* 0.240385) (!H* 0.0961538) (L+H* 0.163462) (L* 0.00961538) (L*+H 0) NONE)) + ((pp.syl_break is 3) + ((R:SylStructure.parent.R:Word.p.gpos is content) + (((NONE 0.346154) (H* 0.346154) (!H* 0.0769231) (L+H* 0.192308) (L* 0.0384615) (L*+H 0) NONE)) + (((NONE 0.160714) (H* 0.571429) (!H* 0.0178571) (L+H* 0.178571) (L* 0.0714286) (L*+H 0) H*))) + ((syl_in is 2) + ((n.stress is 0) + ((R:SylStructure.parent.R:Word.p.gpos is in) + (((NONE 0.218182) (H* 0.618182) (!H* 0.0363636) (L+H* 0.0909091) (L* 0.0181818) (L*+H 0.0181818) H*)) + ((syl_out is 2) + (((NONE 0.0961538) (H* 0.634615) (!H* 0.0961538) (L+H* 0.134615) (L* 0.0384615) (L*+H 0) H*)) + ((R:SylStructure.parent.R:Word.p.gpos is content) + ((syl_out is 4) + (((NONE 0.56) (H* 0.12) (!H* 0.08) (L+H* 0.24) (L* 0) (L*+H 0) NONE)) + (((NONE 0.262821) (H* 0.378205) (!H* 0.121795) (L+H* 0.192308) (L* 0.0448718) (L*+H 0) H*))) + (((NONE 0.161905) (H* 0.590476) (!H* 0.0285714) (L+H* 0.171429) (L* 0.047619) (L*+H 0) H*))))) + ((n.syl_break is 0) + (((NONE 0.551724) (H* 0.293103) (!H* 0) (L+H* 0.155172) (L* 0) (L*+H 0) NONE)) + (((NONE 0.408451) (H* 0.422535) (!H* 0.056338) (L+H* 0.112676) (L* 0) (L*+H 0) H*)))) + ((R:SylStructure.parent.R:Word.n.gpos is 0) + ((syl_break is 0) + (((NONE 0.105263) (H* 0.315789) (!H* 0.157895) (L+H* 0.421053) (L* 0) (L*+H 0) L+H*)) + (((NONE 0.641509) (H* 0.132075) (!H* 0.132075) (L+H* 0.0943396) (L* 0) (L*+H 0) NONE))) + ((syl_break is 1) + ((ssyl_in is 3) + (((NONE 0.638889) (H* 0.152778) (!H* 0.125) (L+H* 0.0833333) (L* 0) (L*+H 0) NONE)) + ((p.syl_break is 0) + (((NONE 0.551402) (H* 0.186916) (!H* 0.158879) (L+H* 0.0841122) (L* 0.0186916) (L*+H 0) NONE)) + ((n.stress is 0) + ((pp.syl_break is 0) + (((NONE 0.413043) (H* 0.184783) (!H* 0.152174) (L+H* 0.23913) (L* 0.0108696) (L*+H 0) NONE)) + (((NONE 0.2125) (H* 0.3375) (!H* 0.1875) (L+H* 0.2125) (L* 0.05) (L*+H 0) H*))) + (((NONE 0.449153) (H* 0.245763) (!H* 0.101695) (L+H* 0.20339) (L* 0) (L*+H 0) NONE))))) + ((syl_out is 4) + ((nn.syl_break is 0) + ((pp.syl_break is 0) + (((NONE 0.45614) (H* 0.210526) (!H* 0.192982) (L+H* 0.140351) (L* 0) (L*+H 0) NONE)) + (((NONE 0.288462) (H* 0.25) (!H* 0.0961538) (L+H* 0.346154) (L* 0) (L*+H 0.0192308) L+H*))) + (((NONE 0.163934) (H* 0.459016) (!H* 0.131148) (L+H* 0.245902) (L* 0) (L*+H 0) H*))) + ((syl_out is 5) + ((R:SylStructure.parent.R:Word.p.gpos is content) + (((NONE 0.372881) (H* 0.20339) (!H* 0.169492) (L+H* 0.220339) (L* 0.0338983) (L*+H 0) NONE)) + (((NONE 0.0961538) (H* 0.673077) (!H* 0.115385) (L+H* 0.0961538) (L* 0.0192308) (L*+H 0) H*))) + ((R:SylStructure.parent.R:Word.pp.gpos is in) + ((syl_in is 4) + (((NONE 0.352113) (H* 0.422535) (!H* 0.15493) (L+H* 0.0704225) (L* 0) (L*+H 0) H*)) + ((syl_in is 3) + (((NONE 0.290323) (H* 0.467742) (!H* 0.0806452) (L+H* 0.145161) (L* 0.016129) (L*+H 0) H*)) + ((pp.syl_break is 0) + (((NONE 0.465517) (H* 0.293103) (!H* 0.172414) (L+H* 0.0689655) (L* 0) (L*+H 0) NONE)) + ((R:SylStructure.parent.R:Word.p.gpos is content) + (((NONE 0.18) (H* 0.36) (!H* 0.28) (L+H* 0.14) (L* 0.04) (L*+H 0) H*)) + (((NONE 0.0877193) (H* 0.22807) (!H* 0.368421) (L+H* 0.298246) (L* 0.0175439) (L*+H 0) !H*)))))) + ((ssyl_out is 2) + ((p.syl_break is 0) + (((NONE 0.634921) (H* 0.174603) (!H* 0.0793651) (L+H* 0.111111) (L* 0) (L*+H 0) NONE)) + ((pp.syl_break is 0) + (((NONE 0.388889) (H* 0.148148) (!H* 0.148148) (L+H* 0.259259) (L* 0.0185185) (L*+H 0.037037) NONE)) + (((NONE 0.294118) (H* 0.137255) (!H* 0.215686) (L+H* 0.333333) (L* 0.0196078) (L*+H 0) L+H*)))) + ((R:SylStructure.parent.R:Word.pp.gpos is to) + (((NONE 0.0877193) (H* 0.350877) (!H* 0.210526) (L+H* 0.315789) (L* 0.0350877) (L*+H 0) H*)) + ((syl_break is 3) + ((pp.syl_break is 0) + (((NONE 0.478261) (H* 0.141304) (!H* 0.195652) (L+H* 0.184783) (L* 0) (L*+H 0) NONE)) + (((NONE 0.217822) (H* 0.366337) (!H* 0.257426) (L+H* 0.128713) (L* 0.029703) (L*+H 0) H*))) + ((syl_in is 7) + ((n.stress is 0) + ((R:SylStructure.parent.R:Word.n.gpos is content) + (((NONE 0.117647) (H* 0.220588) (!H* 0.441176) (L+H* 0.176471) (L* 0.0441176) (L*+H 0) !H*)) + (((NONE 0.415385) (H* 0.0461538) (!H* 0.2) (L+H* 0.246154) (L* 0.0923077) (L*+H 0) NONE))) + (((NONE 0.716981) (H* 0.113208) (!H* 0.0943396) (L+H* 0.0754717) (L* 0) (L*+H 0) NONE))) + ((R:SylStructure.parent.R:Word.n.gpos is cc) + (((NONE 0.292308) (H* 0.184615) (!H* 0.276923) (L+H* 0.246154) (L* 0) (L*+H 0) NONE)) + ((nn.syl_break is 3) + (((NONE 0.2) (H* 0.333333) (!H* 0.283333) (L+H* 0.15) (L* 0.0333333) (L*+H 0) H*)) + ((ssyl_in is 4) + (((NONE 0.383838) (H* 0.151515) (!H* 0.212121) (L+H* 0.20202) (L* 0.050505) (L*+H 0) NONE)) + ((p.syl_break is 0) + ((n.syl_break is 1) + (((NONE 0.526316) (H* 0.210526) (!H* 0.0921053) (L+H* 0.171053) (L* 0) (L*+H 0) NONE)) + ((ssyl_in is 3) + (((NONE 0.509804) (H* 0.0980392) (!H* 0.215686) (L+H* 0.156863) (L* 0.0196078) (L*+H 0) NONE)) + ((pp.syl_break is 0) + (((NONE 0.506667) (H* 0.173333) (!H* 0.106667) (L+H* 0.2) (L* 0.0133333) (L*+H 0) NONE)) + ((ssyl_in is 1) + (((NONE 0.1) (H* 0.4) (!H* 0.266667) (L+H* 0.188889) (L* 0.0444444) (L*+H 0) H*)) + (((NONE 0.326316) (H* 0.210526) (!H* 0.221053) (L+H* 0.189474) (L* 0.0526316) (L*+H 0) NONE)))))) + ((R:SylStructure.parent.R:Word.p.gpos is in) + (((NONE 0.0625) (H* 0.296875) (!H* 0.265625) (L+H* 0.328125) (L* 0.046875) (L*+H 0) L+H*)) + ((syl_in is 6) + (((NONE 0.271739) (H* 0.152174) (!H* 0.358696) (L+H* 0.184783) (L* 0.0326087) (L*+H 0) !H*)) + ((syl_out is 2) + (((NONE 0.111111) (H* 0.361111) (!H* 0.319444) (L+H* 0.138889) (L* 0.0555556) (L*+H 0.0138889) H*)) + ((syl_in is 4) + (((NONE 0.224) (H* 0.152) (!H* 0.328) (L+H* 0.24) (L* 0.056) (L*+H 0) !H*)) + ((n.stress is 0) + ((syl_in is 3) + (((NONE 0.0833333) (H* 0.333333) (!H* 0.233333) (L+H* 0.216667) (L* 0.133333) (L*+H 0) H*)) + (((NONE 0.283465) (H* 0.188976) (!H* 0.23622) (L+H* 0.204724) (L* 0.0708661) (L*+H 0.015748) NONE))) + (((NONE 0.305263) (H* 0.284211) (!H* 0.210526) (L+H* 0.178947) (L* 0.0210526) (L*+H 0) NONE)))))))))))))))))))))))))))))))))))))))) +) + +; NON L-L L-H H-L +; NONE13017 0 0 0 0 0 13017 [13017/13017] 100.000 +; H- 339 81 0 1 1 0 422 [81/422] 19.194 +; L- 223 52 0 5 0 0 280 [0/280] 0.000 +; L-L% 17 0 0 1057 96 0 1170 [1057/1170] 90.342 +; L-H% 16 0 0 457 139 0 612 [139/612] 22.712 +; H-L% 5 0 0 30 4 0 39 [0/39] 0.000 +; 13617 133 0 1550 240 0 +;total 15540 correct 14294.000 91.982% +(set! f2b_int_tone_cart_tree +'((lisp_syl_yn_question is 1) + (((H-H% 1.0) H-H%)) +((R:SylStructure.parent.gpos is cc) + (((NONE 0.996942) (H- 0.0030581) (L- 0) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((ssyl_in is 10) + (((NONE 0.989041) (H- 0.00273973) (L- 0) (L-L% 0.00273973) (L-H% 0.00547945) (H-L% 0) NONE)) + ((R:SylStructure.parent.gpos is md) + (((NONE 0.986014) (H- 0) (L- 0) (L-L% 0.00699301) (L-H% 0.00699301) (H-L% 0) NONE)) + ((p.old_syl_break is 4) + (((NONE 0.99462) (H- 0.00239091) (L- 0.00119546) (L-L% 0) (L-H% 0.00119546) (H-L% 0.000597729) NONE)) + ((R:SylStructure.parent.gpos is det) + (((NONE 0.984635) (H- 0.00512164) (L- 0.00384123) (L-L% 0.00384123) (L-H% 0.00256082) (H-L% 0) NONE)) + ((n.old_syl_break is 3) + (((NONE 0.981848) (H- 0.00495049) (L- 0.00330033) (L-L% 0.00660066) (L-H% 0.00330033) (H-L% 0) NONE)) + ((n.old_syl_break is 4) + (((NONE 0.986982) (H- 0.000591716) (L- 0.0100592) (L-L% 0.00118343) (L-H% 0.00118343) (H-L% 0) NONE)) + ((R:SylStructure.parent.gpos is in) + (((NONE 0.977865) (H- 0.00390625) (L- 0.00390625) (L-L% 0.0078125) (L-H% 0.00651042) (H-L% 0) NONE)) + ((old_syl_break is 4) + ((R:SylStructure.parent.R:Word.n.gpos is 0) + (((NONE 0) (H- 0.00892857) (L- 0) (L-L% 0.982143) (L-H% 0.00892857) (H-L% 0) L-L%)) + ((R:SylStructure.parent.R:Word.p.gpos is aux) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.761905) (L-H% 0.238095) (H-L% 0) L-L%)) + ((R:SylStructure.parent.R:Word.n.gpos is det) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.652542) (L-H% 0.347458) (H-L% 0) L-L%)) + ((ssyl_in is 4) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.682243) (L-H% 0.313084) (H-L% 0.0046729) L-L%)) + ((syl_in is 6) + (((NONE 0) (H- 0) (L- 0.00649351) (L-L% 0.688312) (L-H% 0.298701) (H-L% 0.00649351) L-L%)) + ((R:SylStructure.parent.R:Word.n.gpos is aux) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.464286) (L-H% 0.535714) (H-L% 0) L-H%)) + ((syl_in is 5) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.666667) (L-H% 0.322034) (H-L% 0.0112994) L-L%)) + ((sub_phrases is 2) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.696429) (L-H% 0.267857) (H-L% 0.0357143) L-L%)) + ((R:SylStructure.parent.R:Word.p.gpos is det) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.628866) (L-H% 0.350515) (H-L% 0.0206186) L-L%)) + ((sub_phrases is 0) + ((R:SylStructure.parent.R:Word.n.gpos is in) + ((n.old_syl_break is 0) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.68254) (L-H% 0.31746) (H-L% 0) L-L%)) + (((NONE 0) (H- 0.0147059) (L- 0) (L-L% 0.338235) (L-H% 0.632353) (H-L% 0.0147059) L-H%))) + ((n.stress is 0) + (((NONE 0) (H- 0) (L- 0.0108303) (L-L% 0.599278) (L-H% 0.32491) (H-L% 0.064982) L-L%)) + (((NONE 0) (H- 0) (L- 0) (L-L% 0.386364) (L-H% 0.579545) (H-L% 0.0340909) L-H%)))) + (((NONE 0) (H- 0) (L- 0.00456621) (L-L% 0.652968) (L-H% 0.324201) (H-L% 0.0182648) L-L%)))))))))))) + ((R:SylStructure.parent.gpos is pps) + (((NONE 0.988764) (H- 0.011236) (L- 0) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((syl_in is 0) + (((NONE 0.984848) (H- 0.0126263) (L- 0.00252525) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.gpos is content) + ((R:SylStructure.parent.R:Word.nn.gpos is 0) + (((NONE 0.967914) (H- 0.0106952) (L- 0.0213904) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((pp.old_syl_break is 4) + (((NONE 0.972315) (H- 0.0232558) (L- 0.00442968) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((syl_in is 1) + (((NONE 0.951163) (H- 0.0372093) (L- 0.0116279) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((nn.old_syl_break is 4) + (((NONE 0.956244) (H- 0.0127621) (L- 0.0291705) (L-L% 0) (L-H% 0) (H-L% 0.00182315) NONE)) + ((R:SylStructure.parent.R:Word.nn.gpos is in) + (((NONE 0.941919) (H- 0.0378788) (L- 0.020202) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.p.gpos is cc) + (((NONE 0.919643) (H- 0.0714286) (L- 0.00892857) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((nn.old_syl_break is 3) + (((NONE 0.927273) (H- 0.0472727) (L- 0.0254545) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.nn.gpos is cc) + (((NONE 0.921569) (H- 0.0588235) (L- 0.0196078) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((ssyl_in is 0) + (((NONE 0.911591) (H- 0.0825147) (L- 0.00589391) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.nn.gpos is to) + (((NONE 0.912281) (H- 0.0350877) (L- 0.0526316) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.pp.gpos is to) + (((NONE 0.894737) (H- 0.0526316) (L- 0.0526316) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.p.gpos is in) + (((NONE 0.888554) (H- 0.0662651) (L- 0.0451807) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.pp.gpos is in) + (((NONE 0.875817) (H- 0.0718954) (L- 0.0522876) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((syl_in is 2) + (((NONE 0.869942) (H- 0.0867052) (L- 0.0433526) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.nn.gpos is aux) + (((NONE 0.854839) (H- 0.0967742) (L- 0.0483871) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((sub_phrases is 1) + (((NONE 0.836538) (H- 0.0721154) (L- 0.0913462) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.pp.gpos is det) + (((NONE 0.832402) (H- 0.0949721) (L- 0.0726257) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((ssyl_in is 4) + (((NONE 0.793103) (H- 0.103448) (L- 0.103448) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((n.old_syl_break is 0) + (((NONE 0.850816) (H- 0.0839161) (L- 0.0652681) (L-L% 0) (L-H% 0) (H-L% 0) NONE)) + ((R:SylStructure.parent.R:Word.n.gpos is content) + (((NONE 0.889447) (H- 0.0753769) (L- 0.0251256) (L-L% 0) (L-H% 0) (H-L% 0.0100503) NONE)) + ((old_syl_break is 3) + (((NONE 0) (H- 0.609023) (L- 0.390977) (L-L% 0) (L-H% 0) (H-L% 0) H-)) + (((NONE 1) (H- 0) (L- 0) (L-L% 0) (L-H% 0) (H-L% 0) NONE))))))))))))))))))))))) + (((NONE 0.978947) (H- 0.0131579) (L- 0.00789474) (L-L% 0) (L-H% 0) (H-L% 0) NONE))))))))))))))) + +) + +(defvar tobi_support_yn_questions t + "tobi_support_yn_questions +If set a crude final rise will be added at utterance that are judged +to be yesy/no questions. Namely ending in a ? and not starting with +a wh-for word.") + +(define (first_word syl) + (let ((w (item.relation.parent syl 'SylStructure))) + (item.relation.first w 'Word))) + +(define (syl_yn_question syl) +"(syl_yn_question utt syl) +Return 1 if this is the last syllable in a yes-no question. Basically +if it ends in question mark and doesn't start with a wh-woerd. This +isn't right but it depends on how much you want rising intonation." + (if (and + tobi_support_yn_questions + (member_string (item.feat syl "syl_break") '("4" "3")) + (not (member_string + (downcase (item.name (first_word syl))) + '("how" "why" "which" "who" "what" "where" "when"))) + (string-matches + (item.feat syl "R:SylStructure.parent.R:Token.parent.punc") + ".*\\?.*")) + "1" + "0")) + +(provide 'tobi) diff --git a/lib/tobi_rules.scm b/lib/tobi_rules.scm new file mode 100644 index 0000000..1b3e4e5 --- /dev/null +++ b/lib/tobi_rules.scm @@ -0,0 +1,1002 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Authors: Robert A. J. Clark and Alan W Black +;;; Modifications and Checking: +;;; Gregor Moehler (moehler@ims.uni-stuttgart.de) +;;; Matthew Stone (mdstone@cs.rutgers.edu) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Generate F0 points from tobi labels using rules given in: +;;; Jilka, Moehler & Dogil (forthcomming in Speech Communications) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; *** Converted to new Relation architecture -- but not checked yet -- awb +;;; -> crude (beta) checking: gm in Dec. 98 +;;; +;;; -> fixed TAKEOVER bug that used time value +;;; as pitch target (!) - MDS 1/02 +;;; -> hacked around bunches of target overlap problems - MDS 1/02 +;;; -> added primitive pitch range controls +;;; +;;; Known problems and bugs: +;;; Can't currently use voicing intervals which cross syllable boundaries, +;;; so pre/post-nuclear tones are currently places 0.2s before/after the +;;; nuclear tone even if no voicing occurs. Failing this they default a +;;; percentage of the voicing for that syllable. +;;; +;;; Don't know about target points ahead of the current syllable. +;;; (As you need to know what comes before them to calculate them) +;;; So: post accent tones are placed 0.2 ahead if following syllable exists +;;; ends before 0.2 from starred target and is not accented +;;; The H-target of the H+!H* is 0.2 sec instead of 0.15 sec before +;;; starred tone. +;;; +;;; Multi-utterance input has not been tested. +;;; +;;; !H- does not generate any targets +;;; +;;; Unfortunaltely some other modules may decide to put pauses in the +;;; middle of a phrase +;;; +;;; valleys are not tested yet +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; To use this in a voice +;;; (require 'tobi_rules) +;;; And in the voice call +;;; (setup_tobi_f0_method) +;;; Set the following for your speaker's F0 range +;;; (Parameter.set 'Default_Topline 146) +;;; (Parameter.set 'Default_Start_Baseline 61) +;;; (Parameter.set 'Valley_Dip 75) + +;; level of debug printout +(set! printdebug 0) + +(define (setup_tobi_f0_method) + "(setup_tobi_f0_method) +Set up parameters for current voice to use the implementaion +of ToBI labels to F0 targets by rule." + (Parameter.set 'Int_Method Intonation_Tree) + (Parameter.set 'Int_Target_Method Int_Targets_General) + (set! int_accent_cart_tree no_int_cart_tree) ; NONE always + (set! int_tone_cart_tree no_int_cart_tree) ; NONE always + (set! int_general_params + (list + (list 'targ_func tobi_f0_targets))) ; we will return a list of f0 targets here + + (Parameter.set 'Phrase_Method 'cart_tree) + (set! phrase_cart_tree tobi_label_phrase_cart_tree) ; redefines the phrasebreak tree + t) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;; +;;;;;; Define and set the new f0 rules +;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; Set global parameters +;;; You may want to reset these for different speakers + +(Parameter.set 'Default_Topline 146) ;146 +(Parameter.set 'Default_Start_Baseline 61) ;61 +(Parameter.set 'Current_Topline (Parameter.get 'Default_Topline)) +(Parameter.set 'Current_Start_Baseline (Parameter.get 'Default_Start_Baseline)) +(Parameter.set 'Current_End_Baseline (Parameter.get 'Current_Start_Baseline)) +(Parameter.set 'Downstep_Factor 0.70) +(Parameter.set 'Valley_Dip 75) +;;; function to add target points on a given syllable and fill in +;;; targets where necessary + +(define (tobi_f0_targets utt syl) + "(tobi_f0_targets UTT ITEM) + Returns a list of targets for the given syllable." + (if (and (>= printdebug 1) + (not(equal? 0 (item.feat syl "R:Intonation.daughter1.name")))) + (format t "### %l (%.2f %.2f) %l ptarg: %l ###\n" (item.name syl) + (item.feat syl "syllable_start")(item.feat syl "syllable_end") + (item.feat syl "R:Intonation.daughter1.name") (ttt_last_target_time syl))) + + ;; only continue if there is a Word related to this syllable + ;; I know there always should be, but there might be a bug elsewhere + (cond + ((not(equal? 0 (item.feat syl "R:SylStructure.parent.name"))) + + ; get current label. This assumes that there is only one accent and + ; one endtone on a syllable. Although there can be one of each. + (let ((voicing (ttt_get_voice_times syl)) ; voicing interval + (pvoicing (ttt_get_voice_times ; previous voicing + (item.relation.prev syl 'Syllable))) + (nvoicing (ttt_get_voice_times ; next voicing + (item.relation.next syl 'Syllable)))) + + ; if first syl of phrase set Phrase_Start and Phrase_End parameters + ; and reset downstep (currently does so on big and little breaks.) + ; only assignes Default values at this stage + ; maybe trained from CART later - first steps now - MDS + ; following Moehler and Mayer, SSW 2001 + (if (eq 0 (item.feat syl 'syl_in)) ;; GM maybe something better needed here? + (progn + (Parameter.set 'Phrase_Start (item.feat syl 'R:SylStructure.parent.R:Phrase.last.word_start)) + (Parameter.set 'Phrase_End (item.feat syl 'R:SylStructure.parent.R:Phrase.last.word_end)) + (Parameter.set 'Current_Topline + (/ (* (wagon syl ttt_topline_tree) + (Parameter.get 'Default_Topline)) 100)) + (Parameter.set 'Current_Start_Baseline + (/ (* (wagon syl ttt_baseline_tree) + (Parameter.get 'Default_Start_Baseline)) 100)) + (Parameter.set 'Current_End_Baseline + (Parameter.get 'Current_Start_Baseline)) + (if (>= printdebug 3) + (begin + (print (format nil "new range: %f %f %f" + (Parameter.get 'Current_Topline) + (Parameter.get 'Current_Start_Baseline) + (Parameter.get 'Current_End_Baseline) )))) )) + + ; do stuff (should go only if there is an accent/boundary?) + (let ((new_targets + (ttt_to_targets syl (wagon syl ttt_starttone_tree) + voicing + pvoicing + nvoicing + 'Starttones))) + + (set! new_targets (append new_targets + (ttt_to_targets syl (wagon syl ttt_accent_tree) + voicing + pvoicing + nvoicing + 'Accents))) + + (set! new_targets (append new_targets + (ttt_to_targets syl (wagon syl ttt_endtone_tree) + voicing + pvoicing + nvoicing + 'Endtones))) + + (if (and(not(equal? new_targets nil)) + (>= printdebug 2)) + (begin + (format t ">> Targets: %l\n" new_targets) + (format t ">> LastTarget: %l\n" (last new_targets)) + )) + + new_targets))))) + + +;;; CART tree to specify no accents + +(set! no_int_cart_tree +' +((NONE))) + +;;; +;;; Relate phrasing to boundary tones. +;;; Added downstepped tones - MDS + +(set! tobi_label_phrase_cart_tree +' +((tone in ("L-" "H-" "!H-")) + ((B)) + ((tone in ("H-H%" "H-L%" "!H-L%" "L-L%" "L-H%")) + ((BB)) + ((NB))))) + +;;; +;;; The other functions +;;; + +;;; process a list of relative targets and convert to actual targets + +(define (ttt_to_targets syl rlist voicing pvoicing nvoicing type) + "Takes a list of target sets and returns a list of targets." + (if (or (and (>= printdebug 2) + rlist (atom (caar rlist)) + (not (equal? 'NONE (caar rlist))) (not (equal? '(NONE) (caar rlist)))) + (>= printdebug 3)) + (begin (print "Entering ttt_to_targets with:") + (print (format nil "rlist: %l vc: %l pvc: %l nvc: %l type: %s" rlist voicing pvoicing nvoicing type)))) +(cond + ;; nowt + ((eq (length rlist) 0) ()) + ;; a single target set + ((atom (car (car rlist))) + (cond + ((eq type 'Accents) + (ttt_accent_set_to_targets syl rlist voicing pvoicing nvoicing)) + ((eq type 'Starttones) + (ttt_bound_set_to_targets syl rlist voicing pvoicing)) + ((eq type 'Endtones) + (ttt_bound_set_to_targets syl rlist voicing pvoicing)) + (t (error "unknown target set encountered in ttt_to_targets")))) + ;; list of target sets + ((atom (car (car (car rlist)))) + (append (ttt_to_targets syl (cdr rlist) voicing pvoicing nvoicing type) + (ttt_to_targets syl (car rlist) voicing pvoicing nvoicing type))) + ;; error + (t (error "something strange has happened in ttt_to_targets")))) + + +;; process a starttone/endtone target set. + +(define (ttt_bound_set_to_targets syl tset voicing pvoicing) + "takes a start/endtone target set and returns a list of target points." + (if (>= printdebug 3) (begin + (print "Entering ttt_bound_set_to_targets with:") + (pprintf (format nil "tset: %l vc: %l pvc: %l" tset voicing pvoicing)))) + (cond + ;; usually target given is NONE. (also ignore unknown!) + ((or (eq (car (car tset)) 'NONE) + (eq (car (car tset)) 'UNKNOWN)) + nil) + ;; a pair of target pairs + ((eq (length tset) 2) + (list (ttt_get_target (car tset) voicing) + (ttt_get_target (car (cdr tset)) voicing))) + ;; single target pair + ((eq (length tset) 1) + (cond + ;; an actual target pair + ((not (null (cdr (car tset)))) + (list (ttt_get_target (car tset) voicing))) + ;; a TAKEOVER marker + ((eq (car (car tset)) 'TAKEOVER) + (list (list (ttt_interval_percent voicing 0) + (ttt_last_target_value syl)))) + (t (error "unknown target pair in ttt_bound_set_to_targets")))) + (t (error "unknown target set type in ttt_bound_set_to_targets")))) + + +;; process an accent target set. + +(define (ttt_accent_set_to_targets syl tset voicing pvoicing nvoicing) + "takes a accent target set and returns a list of target points." + (if (>= printdebug 3) (begin + (print "Entering ttt_accent_set_to_targets with:") + (pprintf (format nil "tset: %l vc: %l pvc: %l nvc: %l" tset voicing pvoicing nvoicing)))) + (cond + ;; single target in set + ((null (cdr tset)) + (cond + ; target given is NONE. + ((or (eq (car (car tset)) 'NONE) + (eq (car (car tset)) 'UNKNOWN)) nil) + ; V1 marker + ((eq (car (car tset)) 'V1) + (let ((target_time (+ (/ (- (next_accent_start syl) + (ttt_last_target_time syl)) + 2.0) + (ttt_last_target_time syl)))) + (list (list target_time (ttt_accent_pitch (Parameter.get 'Valley_Dip) target_time))))) + ; V2 marker + ((eq (car (car tset)) 'V2) + (let ((target_time (+ (ttt_last_target_time syl) 0.25))) + (list (list target_time (ttt_accent_pitch (Parameter.get 'Valley_Dip) target_time))))) + ; V3 marker + ((eq (car (car tset)) 'V3) + (let ((target_time (- (next_accent_start syl) 0.25))) + (list (list target_time (ttt_accent_pitch (Parameter.get 'Valley_Dip) target_time))))) + ; single target pair + (t (list (ttt_get_target (car tset) voicing))))) + ;; a pair of targets + ((length tset 2) + (cond + ;; a *ed tone with PRE type tone (as in L+H*) + ((eq (car (car tset)) 'PRE) + (let ((star_target (ttt_get_target (car (cdr tset)) voicing)) + (last_target (parse-number(ttt_last_target_time syl)))) + (cond + ; normal 0.2s case (currently doesn't check for voicing) + ((and (eqv? 0 (ip_initial syl)) + (> (- (car star_target) 0.2) last_target)) + (list (list (- (car star_target) 0.2) + (ttt_accent_pitch (car (cdr (car tset))) + (- (car star_target) 0.2))) ; the time + star_target)) + + ; 90% prev voiced if not before last target - Added back in MDS, + ; with parse-number added and new check for ip_initial + ((and (eqv? 0 (ip_initial syl)) + (> (parse-number (ttt_interval_percent pvoicing 90)) + (parse-number (ttt_last_target_time syl)))) + (list (list (ttt_interval_percent pvoicing 90) + (ttt_accent_pitch (car (cdr (car tset))) + (ttt_interval_percent pvoicing 90))) + star_target)) + + ; otherwise (UNTESTED) [NOTE: Voicing for this syllable only] + (t + (list (list (ttt_interval_percent voicing 20) + (ttt_accent_pitch (car (cdr (car tset))) + (ttt_interval_percent voicing 20))) + star_target))))) + ; a *ed tone with POST type tone (as L*+H) + ((eq (car(car(cdr tset))) 'POST) + (let ((star_target (ttt_get_target (car tset) voicing)) + (next_target nil ) ; interesting problem + (next_syl (item.next syl))) + + (cond + ; normal 0.2s case (UNTESTED) + ((and (not (equal? next_syl nil)) + (eq 0 (item.feat next_syl "accented"))) + (cond + ((< (+ (car star_target) 0.2) (item.feat next_syl "syllable_end")) + (list star_target + (list (+ (car star_target) 0.2) + (ttt_accent_pitch (car (cdr (car (cdr tset)))) + (+ (car star_target) 0.2) )))) + (t + + (list star_target + (list (ttt_interval_percent nvoicing 90) + (ttt_accent_pitch (car (cdr (car (cdr tset)))) + (ttt_interval_percent nvoicing 90) )))))) + + ; 20% next voiced (BUG: Can't do this as the next target hasn't been + ; calculated yet!) + (nil nil) + ;otherwise (UNTESTED) + (t (list star_target + (list (ttt_interval_percent voicing 90) + (ttt_accent_pitch (car (cdr (car (cdr tset)))) + (ttt_interval_percent voicing 90) ))))))) + + (t + ;; This case didn't use to happen, but now must + ;; to avoid +H's clobbering endtones - MDS's hack. + (list (ttt_get_target (car tset) voicing) + (ttt_get_target (cadr tset) voicing))))) + + + ;; something else... + (t (error (format nil "unknown accent set in ttt_accent_set_to_targets: %l" tset))))) + + + +(define (ttt_get_target pair voicing) + "Returns actual target pair, usually for a stared tone." + (if (>= printdebug 4) (begin + (print "Entering ttt_get_target with:") + (pprintf pair) (pprintf voicing))) + (list (ttt_interval_percent voicing (car pair)) + (ttt_accent_pitch (car (cdr pair)) + (ttt_interval_percent voicing (car pair))))) + +(define (ttt_accent_pitch value time) + "Converts a accent pitch entry to a pitch value." + (if (>= printdebug 4) (begin + (print "Entering ttt_accent_pitch with:") + (pprintf value))) + (cond + ;; a real value + ((number? value) + (ttt_interval_percent (list (ttt_get_current_baseline time) + (Parameter.get 'Current_Topline)) + value)) + ;; Downstep then Topline + ((eq value 'DHIGH) + (progn + (Parameter.set 'Current_Topline (+ (ttt_get_current_baseline time) + (* (Parameter.get 'Downstep_Factor) + (- (Parameter.get 'Current_Topline) + (ttt_get_current_baseline time))))) + (ttt_interval_percent (list (ttt_get_current_baseline time) + (Parameter.get 'Current_Topline)) + 100))) + + ;; Unknown + (t (error "Unknown accent pitch value encountered")))) + + +(define (ttt_get_current_baseline v) + "Returns the current declined baseline at time v." + (if (>= printdebug 4) (begin + (print "Entering ttt_get_current_baseline with:") + (pprintf v))) + (let ((h (Parameter.get 'Current_Start_Baseline)) + (l (Parameter.get 'Current_End_Baseline)) + (e (Parameter.get 'Phrase_End)) + (s (Parameter.get 'Phrase_Start))) + (- h (* (/ (- h l) (- e s)) (- v s))))) + +;;; find the time n% through an inteval + +(define (ttt_interval_percent pair percent) + "Returns the time that is percent percent thought the pair." + (if (>= printdebug 4) (begin + (print "Entering ttt_interval_percent with:") + (pprintf (format nil "%l, %l" pair percent)))) + (cond + ; no pair given: just return nil + ((null pair) nil) + ; otherwise do the calculation + (t (let ((start (car pair)) + (end (car(cdr pair)))) + (+ start (* (- end start) (/ percent 100))))))) + + +;;; Getting start and end voicing times in a syllable + +(define (ttt_get_voice_times syl_item) + "Returns a pair of start time of first voiced phone in syllable and +end of last voiced phone in syllable, or nil if syllable is nil" + (cond + ((null syl_item) nil) + (t (let ((segs (item.relation.daughters syl_item "SylStructure"))) + (list + (item.feat (ttt_first_voiced segs) "segment_start") + (item.feat (ttt_first_voiced (reverse segs)) "end")))))) + +(define (ttt_first_voiced segs) + "Returns first segment that is voiced (vowel or voiced consonant) +returns last segment if all are unvoiced." + (cond + ((null (cdr segs)) + (car segs)) ;; last possibility + ((equal? "+" (item.feat (car segs) "ph_vc")) + (car segs)) + ((equal? "+" (item.feat (car segs) "ph_cvox")) + (car segs)) + (t + (ttt_first_voiced (cdr segs))))) + +;;; ttt_last_target has bifurcated into +;;; ttt_last_target_time and +;;; ttt_last_target_value +;;; to fix a place where f0 was set to last target time! +;;; - MDS + +(define (ttt_last_target_time syl) + "Returns the end of the most recent previous target +in the utterance or nil if there is not one present +" + (if (>= printdebug 3) + (begin (print "Entering ttt_last_target_time") + (print syl)) + ) + (let ((target (ttt_last_target syl))) + (if (null? target) + nil + (item.feat target "R:Target.daughter1.pos")))) + +(define (ttt_last_target_value syl) + "Returns the pitch of the most recent previous target +in the utterance or nil if there is not one present +" + (if (>= printdebug 3) + (begin (print "Entering ttt_last_target_time") + (print syl)) + ) + (let ((target (ttt_last_target syl))) + (if (null? target) + nil + (item.feat target "R:Target.daughter1.f0")))) + +;; Changed to scan through segments in the segment relation, +;; to catch (notional) targets on pauses. - MDS +;; +;;; associated segments are: +;;; - the segments in the word +;;; - subsequent segments not in the syllable structure +;;; and on the first word, preceding segments +;;; not in the syllable structure + +(define (ttt_collect_following seg accum) + (if (or (null? seg) + (not (null? (item.relation seg 'SylStructure)))) + accum + (ttt_collect_following (item.next seg) + (cons seg accum)))) + + +(define (ttt_last_target syl) + "Returns the most recent previous target +in the utterance or nil if there is not one present +" +(if (>= printdebug 3) + (begin (print "Entering ttt_last_target") + (print syl)) + ) + (let ((prev_syl (item.relation.prev syl 'Syllable))) + (cond +; ((symbol-bound? 'new_targets) (last (caar new_targets))) + ((null prev_syl) nil) + ((ttt_last_target_segs + (ttt_collect_following + (item.relation.next + (item.relation.daughtern prev_syl "SylStructure") + "Segment") + (reverse (item.relation.daughters prev_syl "SylStructure"))))) + ;list of segments of prev. syllable + ;in reverse order, with pauses + ;prepended. + (t (ttt_last_target prev_syl))))) + +(define (ttt_last_target_segs segs) + "Returns the first target no earlier than seg +or nil if there is not one +" +(if (>= printdebug 4) + (begin (print "Entering ttt_last_target_segs with:") + (pprintf (format nil "%l" segs)) +)) + (cond + ((null segs) nil) + ((and (> (parse-number + (item.feat (car segs) "R:Target.daughter1.f0")) 0) + (eq 0 (item.feat (car segs) "R:SylStructure.parent.lisp_lh_condition")) + (eq 0 (item.feat (car segs) "R:SylStructure.parent.lisp_hl_condition")) + (eq 0 (item.feat (car segs) "R:SylStructure.parent.lisp_valley_condition"))) + (car segs)) + + (t (ttt_last_target_segs (cdr segs))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;; +;;;;;; CART TREES (ttt - tobi to target) +;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; +;;; Return a list of target lists. A target list comprises of a list +;;; of related targets (ie for the L and H in L+H*), just to confuse +;;; matters each target is also a list! (pos pitch) +;;; + + +(set! ttt_endtone_tree ; BUG: does it check the current syl for last accent? + ' + ((tobi_endtone is NONE) ; ususally none + ((((NONE)))) + ((tobi_endtone is "H-H%") ; H-H% + ((((100 120)))) + ((tobi_endtone is "L-L%") ; L-L% + ((((100 -20)))) + ((tobi_endtone is "L-H%") ; L-H% + ((lisp_last_accent > 2) + ((lisp_last_accent_type is "L*") + ((((0 25) (100 40)))) ; paper says 80 but AWB had 40 + ((((0 0) (100 40))))) + ((lisp_last_accent_type is "L*") + ((((100 40)))) + ((((50 0) (100 40)))))) + ((tobi_endtone is "H-L%") ; H-L% + ((lisp_last_accent_type is "L*") + ((tobi_accent is"L*") + ((((50 100) (100 100)))) + ((((0 100) (100 100))))) + ((((100 100))))) + ((tobi_endtone is "!H-L%") ; !H-L% + ((lisp_last_accent_type is "L*") + ((tobi_accent is"L*") + ((((50 DHIGH) (100 100)))) + ((((0 DHIGH) (100 100))))) + ((((100 DHIGH))))) + ((tobi_endtone is "H-") + ((((100 100)))) + ((tobi_endtone is "!H-") + ((((100 DHIGH)))) + ((tobi_endtone is "L-") + ((((100 0)))) + ((((UNKNOWN)))))))))))))) + +(set! ttt_starttone_tree + ' + ((lisp_ip_initial = 1) + ((tobi_endtone is "%H") + ((((0 100)))) + ((p.tobi_endtone in ("H-" "!H-" "L-")) + ((((TAKEOVER)))) ; takeover case + ((tobi_accent is NONE) + ((lisp_next_accent > 2) ; default cases (dep. on whether next target is low) + ((lisp_next_accent_type in ("L*" "L*+H" "L*+!H" "L+H*" "L+!H*" "L-" "L-H%" "L-L%")) + ((((0 50)(100 25)))) + ((((0 50)(100 75))))) + ((lisp_next_accent_type in ("L*" "L*+H" "L*+!H" "L+H*" "L+!H*" "L-" "L-H%" "L-L%")) + ((((0 30)))) + ((((0 70)))))) + ((tobi_accent in ("L*" "L*+H" "L*+!H" "L+H*" "L+!H*" "L-" "L-H%" "L-L%")) + ((((0 30)))) + ((((0 70)))))))) + ((((NONE)))))) ; otherwise (and usually) nothing. + +;; Redone after Jilka, Moehler and Dogil +;; - But treating one-syllable-ip's like +;; last-syllable-of-ip's in cases of +;; two tone switches per syllable (e.g. H* L-H%). +;; - And (hack) a 70% target for the initial +;; H*'s of phrases when the next accent is L+H* +;; - MDS + +(set! ttt_accent_tree + ' + ((tobi_accent is "H*" ) ; H* + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((50 100)))) + ((((25 100))))) + ((lisp_hstar_weak_target = 1) + ((((60 70)))) + ((lisp_ip_initial = 1) + ((((85 100)))) + ((((60 100))))))) + + ((tobi_accent is "!H*" ) ; !H* + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((50 DHIGH)))) + ((((25 DHIGH))))) + ((lisp_ip_initial = 1) + ((((85 DHIGH)))) + ((((60 DHIGH)))))) + + ((tobi_accent is "L*" ) ; L* + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((50 0)))) + ((((25 0))))) + ((lisp_ip_initial = 1) + ((((85 0)))) + ((((60 0)))))) + + ((tobi_accent is "L+H*") ; L+H* + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((PRE 20) (50 100)))) ; JMD estimated 70 + ((((PRE 20) (25 100))))) + ((lisp_ip_initial = 1) + ((((PRE 20) (90 100)))) + ((((PRE 20) (75 100)))))) + + ((tobi_accent is "L+!H*") ; L+!H* + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((PRE 20) (70 DHIGH)))) + ((((PRE 20) (25 DHIGH))))) + ((lisp_ip_initial = 1) + ((((PRE 20) (90 DHIGH)))) + ((((PRE 20) (75 DHIGH)))))) + + ((tobi_accent is "L*+H") ; L*+H + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((35 0) (80 100)))) ; POST would clobber endtones + ((((15 0) (40 100))))) ; POST would clobber endtones - MDS + ((lisp_ip_initial = 1) + ((((55 0) (POST 100)))) + ((((40 0) (POST 100)))))) + + ((tobi_accent is "L*+!H") ; L*+!H + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((35 0) (80 DHIGH)))) ; POST would clobber endtones - MDS + ((((15 0) (40 DHIGH))))) ; POST would clobber endtones - MDS + ((lisp_ip_initial = 1) + ((((55 0) (POST DHIGH)))) + ((((40 0) (POST DHIGH)))))) + + ((tobi_accent is "H+!H*") ; H+!H* + ((lisp_ip_final = 1) + ((lisp_ip_one_syllable_case = 1) + ((((PRE 143) (60 DHIGH)))) ; the 143 is a hack to level out the downstep + ((((PRE 143) (20 DHIGH))))) + ((lisp_ip_initial = 1) + ((((PRE 143) (90 DHIGH)))) + ((((PRE 143) (60 DHIGH)))))) + + ((lisp_lh_condition = 1) + ((((100 75)))) + ((lisp_lh_condition = 2) + ((((0 90)))) + ((lisp_hl_condition = 1) + ((((100 25)))) + ((lisp_valley_condition = 1) + ((((V1 85)))) + ((lisp_valley_condition = 2) + ((((V2 70)))) + ((lisp_valley_condition = 3) + ((((V3 70)))) + ((tobi_accent is NONE) ; usually we find no accent + ((((NONE)))) + ((((UNKNOWN)))))))))))))))))))) ; UNKNOWN TARGET FOUND + +;;; Cart tree to "predict" pitch range +;;; Right now just accesses a feature +;;; "register" following Moehler & Mayer 2001. +;;; Register must be one of +;;; H - primary high register (default): 133% lowest, 92% highest +;;; H-H - expanded high register: 134% lowest, 100% highest +;;; H-L - lowered high register: 128% lowest, 87% highest +;;; L - primary low register: 100% lowest, 73% highest +;;; L-L and HL-L - low compressed: 100% lowest, 66% highest +;;; HL - expanded register: 100% lowest, 84% highest +;;; HL-H - complete register: 100% lowest, 96% highest +;;; For their speaker, ,BASELINE was 42% of PEAK + +(set! ttt_topline_tree + ' + ((R:SylStructure.parent.register is "H") + (92) + ((R:SylStructure.parent.register is "H-H") + (100) + ((R:SylStructure.parent.register is "H-L") + (87) + ((R:SylStructure.parent.register is "L") + (73) + ((R:SylStructure.parent.register is "L-L") + (66) + ((R:SylStructure.parent.register is "HL") + (84) + ((R:SylStructure.parent.register is "HL-H") + (96) + (92))))))))) + +(set! ttt_baseline_tree + ' + ((R:SylStructure.parent.register is "H") + (133) + ((R:SylStructure.parent.register is "H-H") + (134) + ((R:SylStructure.parent.register is "H-L") + (128) + ((R:SylStructure.parent.register is "L") + (100) + ((R:SylStructure.parent.register is "L-L") + (100) + ((R:SylStructure.parent.register is "HL") + (100) + ((R:SylStructure.parent.register is "HL-H") + (100) + (133))))))))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;; +;;;;;; Lisp Feature functions. +;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (valley_condition syl) +"(valley_condition syl) +Function to determine if a lowered target between two high target points +is needed in this syllable. +Returns: 0 - no target required + 1 - the single target case + 2 - the first of the two target case + 3 - the second of the two target case +" +(if (>= printdebug 4) + (begin (print "Entering valley_condition"))) +(cond + ((and (eq 0 (item.feat syl 'accented)) + (string-matches (next_accent_type syl) + "\\(H\\*\\|H\\-\\|H\\-L\\%\\|H\\-H\\%\\|\\!H\\*\\|\\!H\\-\\|\\!H\\-L\\%\\|\\!H\\-H\\%\\)") + (string-matches (last_accent_type syl) + "\\(H\\*\\|L\\+H\\*\\|L\\*\\+H\\\\|\\!H\\*\\|L\\+\\!H\\*\\|L\\*\\+\\!H\\)")) + ;GM: excluded %H (returns nil for last target) + (let ((nas (next_accent_start syl)) + (syls (item.feat syl 'syllable_start)) + (syle (item.feat syl 'syllable_end)) + (las (ttt_last_target_time syl))) + (if (>= printdebug 3) + (begin (print (format nil "nas: %l syls: %l syle %l las %l" nas syls syle las)))) + (cond + ((and (< (- nas las) 0.5) + (> (- nas las) 0.25) + (< syls (+ (/ (- nas las) 2.0) (ttt_last_target_time syl))) + (> syle (+ (/ (- nas las) 2.0) (ttt_last_target_time syl)))) 1) + ((and (> (- nas las) 0.5) + (< syls (+ (ttt_last_target_time syl) 0.25)) + (> syle (+ (ttt_last_target_time syl) 0.25))) 2) + ((and (> (- nas las) 0.5) + (< syls (- nas 0.25)) + (> syle (- nas 0.25))) 3) + (t 0)))) + (t 0))) + + + +(define (lh_condition syl) +"(lh_condition syl) +Function to determine the need for extra target points between an L and an H +Returns: 1 - first extra target required + 2 - second extra target required + 0 - no target required. +" +(if (>= printdebug 4) + (begin (print "Entering LH_condition"))) +(cond + ((and (eq 0 (item.feat syl 'accented)) + (string-matches (last_accent_type syl) "\\(L\\*\\)") + (string-matches (next_accent_type syl) + "\\(H\\*\\|H\\-\\|H\\-L\\%\\|H\\-H\\%\\)")) + (cond + ((and (eq 1 (last_accent syl)) + (< 2 (next_accent syl))) 1) + ((and (< 2 (last_accent syl)) + (eq 1 (next_accent syl))) 2) + (t 0))) + (t 0))) + +(define (hl_condition syl) +"(lh_condition syl) +Function to determine the need for extra target points between an H and an L +Returns: 1 - extra target required + 0 - no target required. +" +(if (>= printdebug 4) + (begin (print "Entering HL_condition"))) +(cond + ((and (eq 0 (item.feat syl 'accented)) + (string-matches (next_accent_type syl) + "\\(L\\*\\|L\\+H\\*\\|L\\+\\!H\\*\\|L\\*\\+H\\|L\\*\\+!H\\|L\\-\\|L\\-L\\%\\|L-H\\%\\)") + (string-matches (last_accent_type syl) + "\\(H\\*\\|L\\+H\\*\\|L\\*\\+H\\\\|\\!H\\*\\|L\\+\\!H\\*\\|L\\*\\+\\!H\\|\\%H\\)") + ;MDS: added !H's + (eq 1 (last_accent syl)) + + ;; fall faster! -MDS + (<= 2 (next_accent syl))) 1) + (t 0))) + +(define (next_accent syl) +"(next_accent syl) +Wrapper for c++ func ff_next_accent. +Returns the number of the syllables to the next accent in the following format. +0 - no next accent +1 - next syllable +2 - next next syllable +etc..." +(if (>= printdebug 4) + (begin (print "Entering next_accent"))) +(cond + ((eq 0 (next_accent_type syl)) 0) + (t (+ (item.feat syl 'next_accent) 1)))) + +;; Fixed bug that crashed complex phrase tones. - MDS +;; Not sure how else to get a big number... +(define infinity (/ 1 0)) + +;; Modified to include current accent as well -MDS + +(define (last_accent syl) +"(last_accent syl) +Wrapper for c++ func ff_last_accent. +Returns the number of the syllables to the previous accent in the following format. +0 - accent on current syllable +1 - prev syllable +2 - prev to prev syllable +etc... +infinity - no previous syllable" +(if (>= printdebug 4) + (begin (print "Entering last_accent"))) +(cond + ((not (equal? "NONE" (item.feat syl 'tobi_accent))) 0) + ((equal? 0 (last_accent_type syl)) infinity) + (t (+ (item.feat syl 'last_accent) 1)))) + +(define (next_accent_type syl) +"(next_accent_type syl) +Returns the type of the next accent." +(cond + ((not (eq 0 (item.feat syl "n.R:Intonation.daughter1.name"))) + (item.feat syl "n.R:Intonation.daughter1.name")) + ((eq 0 (item.feat syl 'syl_out)) 0) ;;GM real ip_final would be better + (t (next_accent_type (item.relation.next syl 'Syllable))))) + +(define (last_accent_type syl) +"(last_accent_type syl) +Returns the type of the last (previous) accent." +(if (>= printdebug 4) + (begin (print "Entering last_accent_type"))) +(cond + ((not (equal? "NONE" (item.feat syl 'p.tobi_endtone))) + (item.feat syl 'R:Syllable.p.tobi_endtone)) + ((not (equal? "NONE" (item.feat syl 'p.tobi_accent))) + (item.feat syl 'R:Syllable.p.tobi_accent)) + ((eq 0 (item.feat syl 'syl_in)) 0) ;;GM real ip_initial would be better + (t (last_accent_type (item.prev syl 'Syllable))))) + +(define (next_accent_start syl) +"(next_accent_start syl) +Returns the start time of the vowel of next accented syllable" +(if (>= printdebug 4) + (begin (print "Entering next_accent_start"))) +(cond + ((not (eq 0 (item.feat syl "n.R:Intonation.daughter1.name"))) + (item.feat syl "R:Syllable.n.syllable_start")) ;;GM vowel start would be better + ((eq 0 (item.feat syl 'syl_out)) 0) + (t (next_accent_start (item.relation.next syl 'Syllable))))) + +; new features (not used yet) + +(define (ip_final syl) + "(ip_final SYL) + returns 1 if the syllable is the final syllable of an + ip (intermediate phrase)" + (cond + ((or (equal? 0 (item.feat syl "syl_out")) + (equal? "L-" (item.feat syl "tobi_endtone")) + (equal? "H-" (item.feat syl "tobi_endtone")) + (equal? "!H-" (item.feat syl "tobi_endtone"))) 1) + (t 0))) + +(define (ip_initial syl) + "(ip_initial SYL) + returns 1 if the syllable is the initial syllable of an + ip (intermediate phrase)" + (cond + ((equal? 0 (item.feat syl "syl_in")) + 1) + ((equal? 1 (ip_final (item.relation.prev syl 'Syllable))) + 1) + (t 0))) + +;; NEXT TWO FUNCTIONS ARE NEW - MDS +(define (ip_one_syllable_case syl) + "(ip_one_syllable_case SYL) + returns true if the syllable is the initial syllable of an + ip (intermediate phrase) and doesn't itself contain a complex + tone that starts opposite this syllable's accent" + (if (eqv? 0 (ip_initial syl)) + 0 + (let ((accent (item.feat syl "tobi_accent")) + (tone (item.feat syl "tobi_endtone"))) + (cond + ((and (equal? tone "L-H%") + (or (equal? accent "H*") + (equal? accent "!H*") + (equal? accent "L+H*") + (equal? accent "L+!H*") + (equal? accent "L*+H") + (equal? accent "L*+!H*") + (equal? accent "H+!H*"))) + 0) + ((and (or (equal? tone "H-L%") + (equal? tone "!H-L%")) + (equal? accent "L*")) + 0) + (t + 1))))) + +(define (hstar_weak_target syl) + (if (and (equal? 0 (item.feat syl 'asyl_in)) + (member (next_accent_type syl) + (list "L*" "L*+H" "L*+!H" "L+H*" "L+!H*"))) + 1 + 0)) + +(provide 'tobi_rules) diff --git a/lib/token.scm b/lib/token.scm new file mode 100644 index 0000000..e2c40a6 --- /dev/null +++ b/lib/token.scm @@ -0,0 +1,639 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Various tokenizing functions and customization + +(define (Token utt) + "(Token UTT) +Build a Word stream from the Token stream, analyzing compound words +numbers etc as tokens into words. Respects the Parameter Language +to choose the appropriate token to word module." + (let ((rval (apply_method 'Token_Method utt)) ;; might be defined + (language (Parameter.get 'Language))) + (cond + (rval rval) ;; newer style + ((or (string-equal "britishenglish" language) + (string-equal "english" language) + (string-equal "americanenglish" language)) + (Token_English utt)) + ((string-equal "welsh" language) + (Token_Welsh utt)) + (t + (Token_Any utt))))) + +(define (remove_leadtrail_underscores name) + "(remove_leadtrail_underscores name) +Get rid of leading and trailing underscores that may be used for emphasis, +not this is called when there are underscores at the beginning and end but +there may not be an equal number of them." + (let ((se (symbolexplode name))) + (while (string-equal "_" (car se)) + (set! se (cdr se))) + (set! se (reverse se)) + (while (string-equal "_" (car se)) + (set! se (cdr se))) + (apply string-append (reverse se)))) + +(define (english_token_to_words token name) +"(english_token_to_words TOKEN NAME) +Returns a list of words for NAME from TOKEN. This allows the +user to customize various non-local, multi-word, context dependent +translations of tokens into words. If this function is unset only +the builtin translation rules are used, if this is set the builtin +rules are not used unless explicitly called. [see Token to word rules]" + (cond + ((string-matches name "[A-Z]*[\\$#\\\\Y£][0-9,]+\\(\\.[0-9]+\\)?") + ;; Some form of money (pounds or type of dollars) + (let (amount type currency) + (cond + ((string-matches name ".*\\$.*") + (set! amount (string-after name "$")) + (set! type (string-before name "$")) + (set! currency "dollar")) + ((string-matches name ".*£.*") + (set! amount (string-after name "£")) + (set! type (string-before name "£")) + (set! currency "pound")) + ((string-matches name ".*#.*") + (set! amount (string-after name "#")) + (set! type (string-before name "#")) + (set! currency "pound")) + ((string-matches name ".*Y[0-9].*") + (set! amount (string-after name "Y")) + (set! type (string-before name "Y")) + (set! currency "yen")) + ((string-matches name ".*\\\\.*") + (set! amount (string-after name "\\")) + (set! type (string-before name "\\")) + (set! currency "yen")) + (t + ;; who knows + (set! amount (string-after name "$")) + (set! type (string-before name "$")) + (set! currency "dollar"))) + (cond + ((string-matches (item.feat token "n.name") + ".*illion.?") + (append ;; "billions and billions" - Sagan + (builtin_english_token_to_words token amount) + (list (item.feat token "n.name")) ;; illion + (token_money_expand type) + (list (string-append currency "s")))) + ((string-matches amount ".*\\...$") + (append ;; exactly two places after point + (builtin_english_token_to_words token (string-before amount ".")) + (token_money_expand type) + (if (or (string-matches amount "1\\..*") + (string-equal currency "yen")) + (list currency) + (list (string-append currency "s"))) + (if (not (string-matches name ".*\\.00$")) + (builtin_english_token_to_words + token (remove_leading_zeros (string-after amount "."))) + nil))) + (t + (append ;; nothing after point or lots after point + (builtin_english_token_to_words token amount) + (token_money_expand type) + (if (or (string-matches amount "1") + (string-equal currency "yen")) + (list currency) + (list (string-append currency "s")))))))) + ((and (string-matches name ".*illion.?") + (string-matches (item.feat token "p.name") + "[A-Z]*[\\$#][0-9,]+\\(\\.[0-9]+\\)?")) + nil ;; dealt with on the previous symbol + ) + ((string-matches name "[1-9][0-9]*/[1-9][0-9]*") + (let ((numerator (string-before name "/")) + (denominator (string-after name "/")) + ) + (cond + ((string-matches name "1/2") + (list "half")) + ((string-matches denominator "4") + (append + (builtin_english_token_to_words token numerator) + (list "quarter") + (if (string-equal numerator "1") + (list '((name "'s")(pos nnp))) + nil))) + (t + (append + (builtin_english_token_to_words token numerator) + (begin + (item.set_feat token "token_pos" "ordinal") + (builtin_english_token_to_words token denominator)) + (if (string-equal numerator "1") + nil + (list '((name "'s")(pos nnp))))))))) + ((and (string-matches name "No") + (item.next token) + (string-matches (item.feat token "n.name") + "[0-9]+")) + (list + "number")) + ((string-matches name ".*%$") + (append + (token_to_words token (string-before name "%")) + (list "percent"))) + ((string-matches name "[0-9]+s") ;; e.g. 1950s + (item.set_feat token "token_pos" "year") ;; reasonable guess + (append + (builtin_english_token_to_words token (string-before name "s")) + (list '((name "'s")(pos nnp))) ;; will get assimilated by postlexical rules + )) + ((string-matches name "[0-9]+'s") ;; e.g. 1950's + (item.set_feat token "token_pos" "year") ;; reasonable guess + (append + (builtin_english_token_to_words token (string-before name "'s")) + (list '((name "'s")(pos nnp))) ;; will get assimilated by postlexical rules + )) + ((and (string-matches name ".*s$") + (string-equal (item.feat token "punc") "'")) + ;; potential possessive or may be end of a quote + (if (token_no_starting_quote token) + (item.set_feat token "punc" "")) + (builtin_english_token_to_words token name)) + ((and (string-equal name "A") ;; letter or determiner + (or (string-matches (item.feat token "p.name") "[a-z].*") + (string-matches (item.feat token "n.name") "[A-Z].*"))) + (list (list '(name "a")(list 'pos token.letter_pos)))) + ((member_string name english_homographs) + (list (list (list 'name name) + (list 'hg_pos (item.feat token "token_pos"))))) + ((string-matches name "__*[^_][^_]*_*_") ;; _emphasis_ + (english_token_to_words + token + (remove_leadtrail_underscores name) + )) + ((string-matches name "[0-9]?[0-9][:\\.][0-9][0-9][AaPp][Mm]") ;; time + ;; must be am/pm present for . to be acceptable separator + (let (hours mins half sep (ttime (downcase name))) + (if (string-matches ttime ".*:.*") + (set! sep ":") + (set! sep ".")) + (set! hours (string-before ttime sep)) + (set! mins (string-after ttime sep)) + (if (string-matches ttime ".*am") + (set! sep "am") + (set! sep "pm")) + (set! mins (string-before mins sep)) + (append + (builtin_english_token_to_words token hours) + (cond + ((string-equal mins "00") + nil) + ((string-matches mins "0.") + (cons + "oh" + (builtin_english_token_to_words token (string-after mins "0")))) + (t + (builtin_english_token_to_words token mins))) + (if (string-equal sep "am") + (builtin_english_token_to_words token "A.M") + (builtin_english_token_to_words token "P.M"))))) + ((string-matches name "[0-9]?[0-9]:[0-9][0-9]") ;; time + (append + (builtin_english_token_to_words + token (remove_leading_zeros (string-before name ":"))) + (cond + ((string-equal "00" (string-after name ":")) + nil) + ((string-matches (string-after name ":") "0.") + (cons + "oh" + (builtin_english_token_to_words + token + (remove_leading_zeros (string-after name ":"))))) + (t + (builtin_english_token_to_words + token + (string-after name ":")))))) + ((string-matches name "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]") ;; exact time + (append + (builtin_english_token_to_words + token (remove_leading_zeros (string-before name ":"))) + (list "hours") + (builtin_english_token_to_words + token (remove_leading_zeros + (string-before (string-after name ":") ":"))) + (list "minutes" "and") + (builtin_english_token_to_words + token (remove_leading_zeros + (string-after (string-after name ":") ":"))) + (list "seconds"))) + ((string-matches name "[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9]\\([0-9][0-9]\\)?") + ;; date, say it as numbers to avoid American/British problem + (let ((num1 (string-before name "/")) + (num2 (string-before (string-after name "/") "/")) + (year (string-after (string-after name "/") "/")) + day month) + (item.set_feat token "token_pos" "cardinal") + (set! day (builtin_english_token_to_words token num1)) + (set! month (builtin_english_token_to_words token num2)) + (item.set_feat token "token_pos" "year") + (append + day + month + (list '((name ",")(pbreak_scale 0.9))) + (builtin_english_token_to_words token year)))) + ((string-matches name "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]") + (item.set_feat token "token_pos" "digits") ;; canonical phone number + (append + (builtin_english_token_to_words token (string-before name "-")) + (list '((name ",")(pbreak_scale 1.0))) + (builtin_english_token_to_words token (string-after name "-")))) + ((string-matches name "[0-9]+-[0-9]+-[-0-9]+") + ;; long distance number + (let ((r '(dummy)) (remainder name)) + (item.set_feat token "token_pos" "digits") + (while (> (length remainder) 0) + (if (string-matches remainder "[0-9]+") + (set! r (append r + (builtin_english_token_to_words + token remainder))) + (set! r (append r + (builtin_english_token_to_words + token (string-before remainder "-"))))) + (set! remainder (string-after remainder "-")) + (if (> (length remainder) 0) + (set! r (append r (list '((name ",")(pbreak_scale 1.0))))))) + (cdr r)) + ) + ((and (string-matches name "[0-9][0-9][0-9]") + (string-matches (item.feat token "n.name") + "[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]")) + (item.set_feat token "token_pos" "digits") + (builtin_english_token_to_words token name)) + ((string-matches name "[0-9]+-[0-9]+") + (let ((tokpos)) + (item.set_name token (string-before name "-")) + (set! tokpos (wagon token + (car (cdr (assoc "[0-9]+" token_pos_cart_trees))))) + (item.set_feat token "token_pos" (car tokpos)) + (append + (builtin_english_token_to_words token (string-before name "-")) + (list "to") + (builtin_english_token_to_words token (string-after name "-"))))) + ((string-matches name "\\(II?I?\\|IV\\|VI?I?I?\\|IX\\|X[VIX]*\\)") + ;; Roman numerals + (let ((tp (item.feat token "token_pos"))) + (cond + ((string-matches tp "century");; always believe this + (item.set_feat token "token_pos" "ordinal") + (if (or (string-equal "1" (tok_rex token)) + (item.feat token "p.lisp_tok_rex_names")) + (append + (list "the") + (builtin_english_token_to_words + token (tok_roman_to_numstring name))) + (builtin_english_token_to_words + token (tok_roman_to_numstring name)))) + ((string-matches name "[IVX]");; be *very* wary of this one + (if (and (string-equal + "1" (item.feat token "p.lisp_tok_section_name")) + (string-matches tp "number")) + (builtin_english_token_to_words + token (tok_roman_to_numstring name)) + (tok_string_as_letters name))) + ((string-matches tp "number") + (item.set_feat token "token_pos" "cardinal") + (builtin_english_token_to_words + token (tok_roman_to_numstring name))) + (t;; else its a letter + (tok_string_as_letters name))))) + ((and (string-matches name "pp") + (string-matches (item.feat token "n.name") + "[0-9]+-[0-9]+")) + (list "pages")) + ((and (string-matches name "ss") + (string-matches (item.feat token "n.name") + "[0-9]+-[0-9]+")) + (list "sections")) + ((string-matches name "_____+") + (list "line" "of" "underscores")) + ((string-matches name "=====+") + (list "line" "of" "equals")) + ((string-matches name "-----+") + (list "line" "of" "hyphens")) + ((string-matches name "\\*\\*\\*\\*\\*+") + (list "line" "of" "asterisks")) + ((string-matches name "--+") + (list '((name ",")(pbreak_scale 1.0)))) + ((string-matches name ".*--+.*") + (append + (builtin_english_token_to_words token (string-before name "--")) + (list '((name ",")(pbreak_scale 1.0))) + (builtin_english_token_to_words token (string-after name "--")))) + ((string-matches name "[A-Z][A-Z]?&[A-Z][A-Z]?") + (append + (tok_string_as_letters (string-before name "&")) + (list "and") + (tok_string_as_letters (string-after name "&")))) + ((and (string-equal name "Ms") + (string-matches (item.feat token "n.name") "[A-Z][^A-Z]*")) + (list "mizz")) + ((or (string-matches name "[A-Z][A-Z]+s") + (string-matches name "[BCDEFGHJKLMNOPQRSTVWXYZ]+s")) + (append + (builtin_english_token_to_words token (string-before name "s")) + (list '((name "'s")(pos nnp))) ;; will get assimilated by postlexical rules + )) + ((string-matches name "<.*@.*>") ;; quoted e-mail + (append + (builtin_english_token_to_words + token (string-after (string-before name "@") "<")) + (list "at") + (builtin_english_token_to_words + token (string-before (string-after name "@") ">")))) + ((string-matches name ".*@.*") ;; e-mail + (append + (builtin_english_token_to_words + token (string-before name "@")) + (list "at") + (builtin_english_token_to_words + token (string-after name "@") ">"))) + ((string-matches name "\\([dD][Rr]\\|[Ss][tT]\\)") + (if (string-equal (item.feat token "token_pos") "street") + (if (string-matches name "[dD][rR]") + (list "drive") + (list "street")) + (if (string-matches name "[dD][rR]") ;; default on title side + (list "doctor") + (list "saint")))) + ((string-matches name "[Cc]alif") ;; hopelessly specific ... + (list + "california")) + (t + (builtin_english_token_to_words token name)))) + +;;; This is set as the default +(defvar token_to_words english_token_to_words) + +(defvar token.punctuation "\"'`.,:;!?(){}[]" + "token.punctuation +A string of characters which are to be treated as punctuation when +tokenizing text. Punctuation symbols will be removed from the text +of the token and made available through the \"punctuation\" feature. +[see Tokenizing]") +(defvar token.prepunctuation "\"'`({[" + "token.prepunctuation +A string of characters which are to be treated as preceding punctuation +when tokenizing text. Prepunctuation symbols will be removed from the text +of the token and made available through the \"prepunctuation\" feature. +[see Tokenizing]") +(defvar token.whitespace " \t\n\r" + "token.whitespace +A string of characters which are to be treated as whitespace when +tokenizing text. Whitespace is treated as a separator and removed +from the text of a token and made available through the \"whitespace\" +feature. [see Tokenizing]") +(defvar token.singlecharsymbols "" + "token.singlecharsymbols +Characters which have always to be split as tokens. This would be +usual is standard text, but is useful in parsing some types of +file. [see Tokenizing]") + +(defvar token.letter_pos 'nn + "token.letter_pos +The part of speech tag (valid for your part of speech tagger) for +individual letters. When the tokenizer decide to pronounce a token +as a list of letters this tag is added to each letter in the list. +Note this should be from the part of speech set used in your tagger +which may not be the same one that appears in the actual lexical +entry (if you map them afterwards). This specifically allows \"a\" +to come out as ae rather than @.") + +(defvar token.unknown_word_name "unknown" + "token.unknown_word_name +When all else fails and a pronunciation for a word or character can't +be found this word will be said instead. If you make this \"\" them +the unknown word will simple be omitted. This will only +really be called when there is a bug in the lexicon and characters +are missing from the lexicon. Note this word should be in the lexicon.") + +(def_feature_docstring + 'Token.punc + "Token.punc +Succeeding punctuation symbol found after token in original +string/file.") +(def_feature_docstring + 'Token.whitespace + "Token.whitespace +Whitespace found before token in original string/file.") +(def_feature_docstring + 'Token.prepunctuation + "Token.prepunctuation +Preceeding puctuation symbol found before token in original string/file.") + +(require 'tokenpos) +;;; +;;; Token pos are gross level part of speech tags which help decide +;;; pronunciation of tokens (particular expansion of Tokens into words) +;;; The most obvious example is identifying number types (ordinals, +;;; years, digits or numbers). +;;; +(defvar english_token_pos_cart_trees + '( + ;; Format is (Regex Tree) + ("[0-9]+" + ((lisp_num_digits < 3.8) + ((p.lisp_token_pos_guess is month) + ((lisp_month_range is 0) ((year)) ((ordinal))) + ((n.lisp_token_pos_guess is month) + ((lisp_month_range is 0) ((cardinal)) ((ordinal))) + ((n.lisp_token_pos_guess is numeric) + ((lisp_num_digits < 2) + ((p.lisp_token_pos_guess is numeric) + ((pp.lisp_token_pos_guess is sym) ((digits)) ((cardinal))) + ((cardinal))) + ((nn.lisp_token_pos_guess is sym) ((cardinal)) ((digits)))) + ((lisp_num_digits < 2) + ((nn.lisp_token_pos_guess is numeric) + ((n.lisp_token_pos_guess is sym) + ((lisp_month_range is 0) ((digits)) ((cardinal))) + ((cardinal))) + ((cardinal))) + ((name < 302.3) + ((p.lisp_token_pos_guess is flight) + ((digits)) + ((n.lisp_token_pos_guess is sym) + ((p.lisp_token_pos_guess is sym) ((digits)) ((cardinal))) + ((cardinal)))) + ((p.lisp_token_pos_guess is a) + ((digits)) + ((n.lisp_token_pos_guess is sym) + ((nn.lisp_token_pos_guess is sym) + ((name < 669.2) ((digits)) ((cardinal))) + ((cardinal))) + ((name < 373.2) + ((cardinal)) + ((name < 436.2) + ((name < 392.6) ((digits)) ((cardinal))) + ((name < 716.5) + ((cardinal)) + ((name < 773.6) + ((p.lisp_token_pos_guess is _other_) ((digits)) ((cardinal))) + ((cardinal))))))))))))) + ((p.lisp_token_pos_guess is numeric) + ((pp.lisp_token_pos_guess is month) + ((year)) + ((nn.lisp_token_pos_guess is numeric) ((cardinal)) ((digits)))) + ((nn.lisp_token_pos_guess is numeric) + ((n.lisp_token_pos_guess is month) + ((cardinal)) + ((n.lisp_token_pos_guess is numeric) + ((digits)) + ((p.lisp_token_pos_guess is _other_) ((cardinal)) ((year))))) + ((p.lisp_token_pos_guess is _other_) + ((lisp_num_digits < 4.4) + ((name < 2959.6) + ((name < 1773.4) ((cardinal)) ((year))) + ((cardinal))) + ((pp.lisp_token_pos_guess is _other_) ((digits)) ((cardinal)))) + ((n.lisp_token_pos_guess is to) + ((year)) + ((p.lisp_token_pos_guess is sym) + ((pp.lisp_token_pos_guess is sym) + ((cardinal)) + ((lisp_num_digits < 4.6) ((year)) ((digits)))) + ((lisp_num_digits < 4.8) + ((name < 2880) + ((name < 1633.2) + ((name < 1306.4) ((cardinal)) ((year))) + ((year))) + ((cardinal))) + ((cardinal))))))))) + ) + ("\\(II?I?\\|IV\\|VI?I?I?\\|IX\\|X[VIX]*\\)";; Roman numerals + ((p.lisp_tok_rex_names is 0) + ((lisp_num_digits is 5) + ((number)) + ((lisp_num_digits is 4) + ((number)) + ((nn.lisp_num_digits is 13) + ((number)) + ((p.lisp_num_digits is 7) + ((number)) + ((p.lisp_tok_section_name is 0) + ((lisp_tok_rex is 0) + ((lisp_num_digits is 3) + ((p.lisp_num_digits is 4) + ((number)) + ((nn.lisp_num_digits is 4) + ((number)) + ((n.lisp_num_digits is 4) + ((number)) + ((pp.lisp_num_digits is 3) + ((number)) + ((p.lisp_num_digits is 2) + ((letter)) + ((nn.lisp_num_digits is 2) + ((letter)) + ((n.cap is 0) ((letter)) ((number))))))))) + ((nn.lisp_num_digits is 11) + ((letter)) + ((lisp_num_digits is 1) + ((pp.lisp_num_digits is 9) + ((letter)) + ((p.lisp_num_digits is 9) + ((letter)) + ((n.lisp_num_digits is 6) + ((letter)) + ((pp.lisp_num_digits is 6) + ((letter)) + ((pp.cap is 0) + ((n.cap is 0) + ((p.lisp_num_digits is 1) + ((letter)) + ((n.lisp_num_digits is 4) ((letter)) ((letter)))) + ((letter))) + ((letter))))))) + ((p.lisp_num_digits is 10) + ((number)) + ((n.lisp_num_digits is 8) + ((number)) + ((pp.lisp_num_digits is 9) + ((number)) + ((nn.lisp_num_digits is 5) + ((number)) + ((n.lisp_num_digits is 4) ((number)) ((letter)))))))))) + ((letter))) + ((number))))))) + ((century)))) + ("\\([dD][Rr]\\|[Ss][tT]\\)" + ((n.name is 0) + ((p.cap is 1) + ((street)) + ((p.name matches "[0-9]*\\(1[sS][tT]\\|2[nN][dD]\\|3[rR][dD]\\|[0-9][tT][hH]\\)") + ((street)) + ((title)))) + ((punc matches ".*,.*") + ((street)) + ((p.punc matches ".*,.*") + ((title)) + ((n.cap is 0) + ((street)) + ((p.cap is 0) + ((p.name matches "[0-9]*\\(1[sS][tT]\\|2[nN][dD]\\|3[rR][dD]\\|[0-9][tT][hH]\\)") + ((street)) + ((title))) + ((pp.name matches "[1-9][0-9]+") + ((street)) + ((title))))))))) + ("lead" + ((p.name in (was were had been having has is are)) + ((led)) + ((liid)))) + ("read" + ((p.name in (to)) + ((riid)) + ((red)))) + )) + +(defvar english_homographs + '("lead" "read") + "english_homographs +A list of tokens that are dealt with by a homograph disambiguation tree +in english_token_pos_cart_trees.") + +(defvar token_pos_cart_trees + english_token_pos_cart_trees + "token_pos_cart_trees +This is a list of pairs or regex plus CART tree. Tokens that match +the regex will have the CART tree aplied, setting the result as +the token_pos feature on the token. The list is checked in order +and only the first match will be applied.") + +(provide 'token) diff --git a/lib/tokenpos.scm b/lib/tokenpos.scm new file mode 100644 index 0000000..9470eb4 --- /dev/null +++ b/lib/tokenpos.scm @@ -0,0 +1,265 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Functions used in identifying token types. +;;; + +(defvar token_most_common +'( +sym numeric month to day in the of on and writes a years from +for jst at million by is was gmt page he that than more since as when +with but after about or his i has it date no died number bst who miles +university some people an only w year have ago were are pages up days +months hours minutes through out had which least hi last now ft this +all one its there between cents until over will before past they +nearly times tim message so lbs just if age we during she billion then +other be time new her first states not you members under would many +says degrees two next fax week while bush been around including back +campaign american within publisher flight points even early later +world countries every edt can president most could their what them +former began women killed another also received long americans pounds +do dear said km made into did dead war tel still old x took total men +like f am less c well late down weeks end chapter among place house +away him election death almost students state soviet where version +summer man s nation because washington top though m id est these spent +seats gnu estimated those lost ian high each copies children acres +tons son per my found won off seconds power nations federal born +presidential much city begin p name different whose three home hello) + +"token_most_common +A list of (English) words which were found to be most common in +an text database and are used as discriminators in token analysis.") + +(define (token_pos_guess sc) +"(tok_pos sc) +Returns a general pos for sc's name. + numeric All digits + number float or comma'd numeric + sym Contains at least one non alphanumeric + month has month name (or abbrev) + day has day name (or abbrev) + rootname else downcased alphabetic. +Note this can be used to find token_pos but isn't used directly as +its not disciminatory enough." + (let ((name (downcase (item.name sc)))) + (cond + ((string-matches name "[0-9]+") + 'numeric) + ((or (string-matches name "[0-9]+\\.[0-9]+") + (string-matches name + "[0-9][0-9]?[0-9]?,\\([0-9][0-9][0-9],\\)*[0-9][0-9][0-9]")) + 'number) + ((string-matches name ".*[^A-Za-z0-9].*") + 'sym) + ((member_string name '(jan january feb february mar march + apr april may jun june + jul july aug august sep sept september + oct october nov november dec december)) + 'month) + ((member_string name '(sun sunday mon monday tue tues tuesday + wed wednesday thu thurs thursday + fri friday sat saturday)) + 'day) + ((member_string name token_most_common) + name) + (t + '_other_)))) + +(define (token_no_starting_quote token) + "(token_no_starting_quote TOKEN) +Check to see if a single quote (or backquote) appears as prepunctuation +in this token or any previous one in this utterance. This is used to +disambiguate ending single quote as possessive or end quote." + (cond + ((null token) + t) + ((string-matches (item.feat token "prepunctuation") "[`']") + nil) + (t + (token_no_starting_quote (item.relation.prev token "Token"))))) + +(define (token_zerostart sc) +"(zerostart sc) +Returns, 1 if first char of sc's name is 0, 0 otherwise." + (if (string-matches (item.name sc) "^0.*") + "1" + "0")) + +(define (tok_roman_to_numstring roman) + "(tok_roman_to_numstring ROMAN) +Takes a string of roman numerals and converts it to a number and +then returns the printed string of that. Only deals with numbers up to 50." + (let ((val 0) (chars (symbolexplode roman))) + (while chars + (cond + ((equal? (car chars) 'X) + (set! val (+ 10 val))) + ((equal? (car chars) 'V) + (set! val (+ 5 val))) + ((equal? (car chars) 'I) + (cond + ((equal? (car (cdr chars)) 'V) + (set! val (+ 4 val)) + (set! chars (cdr chars))) + ((equal? (car (cdr chars)) 'X) + (set! val (+ 9 val)) + (set! chars (cdr chars))) + (t + (set! val (+ 1 val)))))) + (set! chars (cdr chars))) + (format nil "%d" val))) + +(define (num_digits sc) +"(num_digits SC) +Returns number of digits (actually chars) is SC's name." + (string-length (format nil "%s" (item.name sc)))) + +(define (month_range sc) +"(month_range SC) +1 if SC's name is > 0 and < 32, 0 otherwise." + (let ((val (parse-number (item.name sc)))) + (if (and (> val 0) (< val 32)) + "1" + "0"))) + +(define (remove_leading_zeros name) + "(remove_leading_zeros name) +Remove leading zeros from given string." + (let ((nname name)) + (while (string-matches nname "^0..*") + (set! nname (string-after nname "0"))) + nname)) + +(define (token_money_expand type) +"(token_money_expand type) +Convert shortened form of money identifier to words if of a known type." + (cond + ((string-equal type "HK") + (list "Hong" "Kong")) + ((string-equal type "C") + (list "Canadian")) + ((string-equal type "A") + (list "Australian")) + ((< (length type) 4) + (mapcar + (lambda (letter) + (list (list 'name letter) + (list 'pos token.letter_pos))) + (symbolexplode type))) + (t + (list type)))) + +(define (find_month_from_number token string-number) + "(find_month_from_number token string-number) +Find the textual representation of the month from the given string number" + (let ((nnum (parse-number string-number))) + (cond + ((equal? 1 nnum) (list "January")) + ((equal? 2 nnum) (list "February")) + ((equal? 3 nnum) (list "March")) + ((equal? 4 nnum) (list "April")) + ((equal? 5 nnum) (list "May")) + ((equal? 6 nnum) (list "June")) + ((equal? 7 nnum) (list "July")) + ((equal? 8 nnum) (list "August")) + ((equal? 9 nnum) (list "September")) + ((equal? 10 nnum) (list "October")) + ((equal? 11 nnum) (list "November")) + ((equal? 12 nnum) (list "December")) + (t + (cons "month" + (builtin_english_token_to_words token string-number)))))) + +(define (tok_allcaps sc) + "(tok_allcaps sc) +Returns 1 if sc's name is all capitals, 0 otherwise" + (if (string-matches (item.name sc) "[A-Z]+") + "1" + "0")) + +(define (tok_section_name sc) + "(tok_section_name sc) +Returns 1 if sc's name is in list of things that are section/chapter +like." + (if (member_string + (downcase (item.name sc)) + '(chapter section part article phrase verse scene act book + volume chap sect art vol war fortran saturn + trek)) + "1" + "0")) + +(define (tok_string_as_letters name) + "(tok_string_as_letters NAME) +Return list of letters marked as letter part of speech made +by exploding NAME." + (mapcar + (lambda (letter) + (list (list 'name letter) + (list 'pos token.letter_pos))) + (symbolexplode name))) + +(define (tok_rex sc) + "(tok_rex sc) +Returns 1 if King like title is within 3 tokens before or 2 after." + (let ((kings '(king queen pope duke tsar emperor shah ceasar + duchess tsarina empress baron baroness + count countess))) + (if (or (member_string + (downcase (item.feat sc "R:Token.pp.name")) + kings) + (member_string + (downcase (item.feat sc "R:Token.pp.p.name")) + kings) + (member_string + (downcase (item.feat sc "R:Token.n.name")) + kings)) + "1" + "0"))) + +(define (tok_rex_names sc) + "(tok_rex sc) +Returns 1 if this is a King-like name." + (if (and + (member_string + (downcase (item.name sc)) + '(louis henry charles philip george edward pius william richard + ptolemy john paul peter nicholas + alexander frederick james alfonso ivan napolean leo + gregory catherine alexandria pierre elizabeth mary)) + (or (string-equal "" (item.feat sc "punc")) + (string-equal "0" (item.feat sc "punc")))) + "1" + "0")) + +(provide 'tokenpos) diff --git a/lib/tts.scm b/lib/tts.scm new file mode 100644 index 0000000..2888967 --- /dev/null +++ b/lib/tts.scm @@ -0,0 +1,304 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Various tts functions and hooks + +;;; Once the utterance is built these functions synth and play it +(defvar tts_hooks (list utt.synth utt.play) + "tts_hooks +Function or list of functions to be called during text to speech. +The function tts_file, chunks data into Utterances of type Token and +applies this hook to the utterance. This typically contains the utt.synth +function and utt.play. [see TTS]") + +;;; This is used to define utterance breaks in tts on files +(defvar eou_tree + '((lisp_max_num_tokens > 200) + ((1)) + ((n.whitespace matches ".*\n.*\n\\(.\\|\n\\)*");; significant break (2 nls) + ((1)) + ((name matches "--+") + ((1)) + ((punc matches ".*[\\?:!;].*") + ((1)) + ((punc matches ".*\\..*") + ((punc matches "..+");; longer punctuation string + ((punc matches "\\..*,") ;; for U.S.S.R., like tokens + ((0)) + ((1))) + ;; This is to distinguish abbreviations vs periods + ;; These are heuristics + ((name matches "\\(.*\\..*\\|[A-Z][A-Za-z]?[A-Za-z]?\\|etc\\)");; an abbreviation + ((n.whitespace is " ") + ((0));; if abbrev single space isn't enough for break + ((n.name matches "[A-Z].*") + ((1)) + ((0)))) + ((n.whitespace is " ");; if it doesn't look like an abbreviation + ((n.name matches "[A-Z].*");; single space and non-cap is no break + ((1)) + ((0))) + ((1))))) + ((0))))))) + "eou_tree +End of utterance tree. A decision tree used to determine if the given +token marks the end of an utterance. It may look one token ahead to +do this. [see Utterance chunking]") + +(define (max_num_tokens x) + "(num_tokens x) +This is probably controversial, but its good to have a maximum number +of tokens in an utterance. You really dont want to wait on very long +utterances, some utts can be thousands of words long, these maybe +shouldn't be spoken, but we do have to deal with them." + (let ((c 1) (y x)) + (while y + (set! c (+ 1 c)) + (set! y (item.prev y))) + c)) + +;;; The program used to parse stml files +;;; Needs version 1.0 to allow -D option to work +(defvar sgml_parse_progname "nsgmls-1.0" + "sgml_parse_progname +The name of the program to use to parse SGML files. Typically this is +nsgml-1.0 from the sp SGML package. [see XML/SGML requirements]") + +;;; When PHRASE elements are specified in an utterance in STML +;;; no other method for phrase prediction is to be used, so we +;;; use the following tree +(set! stml_phrase_cart_tree +'((R:Token.parent.pbreak is B) + ((B)) + ((n.name is 0) + ((B)) + ((NB))))) + +(define (xxml_synth utt) +"(xxml_synth UTT) +This applies the xxml_hooks (mode specific) and tts_hooks to the +given utterance. This function should be called from xxml element +definitions that signal an utterance boundary." + (cond + ((or (not utt) + (not (utt.relation utt 'Token))) ;; no tokens + nil) + (t + (apply_hooks xxml_hooks utt) + (apply_hooks tts_hooks utt) + (set! utt nil) ;; not enough ... + (gc) + utt)) +) + +(define (xxml_attval ATTNAME ATTLIST) +"(xxml_attval ATTNAME ATTLIST) +Returns attribute value of ATTNAME in ATTLIST or nil if it doesn't +exists." + (cond + ((not ATTLIST) + nil) + ((string-equal ATTNAME (car (car ATTLIST))) + (car (cdr (car ATTLIST)))) + (t + (xxml_attval ATTNAME (cdr ATTLIST))))) + +(defvar xxml_word_features nil + "xxml_word_features +An assoc list of features to be added to the current word when +in xxml parse mode.") + +(defvar xxml_token_hooks nil + "xxml_token_hooks +Functions to apply to each token.") + +(defvar xxml_hooks nil + "xxml_hooks + Function or list of functions to be applied to an utterance when + parsed with xxML, before tts_hooks.") + +(defvar xxml_elements nil + "xxml_elements +List of Scheme actions to perform on finding xxML tags.") + +(defvar xml_dtd_dir libdir + "xml_dtd_dir +The directory holding standard DTD form the xml parser.") + +(set! tts_fnum 1) +(define (save_tts_output utt) + (let ((fname (string-append "tts_file_" tts_fnum ".wav"))) + (format stderr "festival: saving waveform in %s\n" fname) + (utt.save.wave utt fname) + (set! tts_fnum (+ 1 tts_fnum)) + utt)) + +(define (save_waves_during_tts) + "(save_waves_during_tts) +Save each waveform in the current directory in files \"tts_file_XXX.wav\". +use (save_waves_during_tts_STOP) to stop saving waveforms" + (if (not (member save_tts_output tts_hooks)) + (set! tts_hooks (append tts_hooks (list save_tts_output)))) + t) + +(define (save_waves_during_tts_STOP) + "(save_waves_during_tts_STOP) +Stop saving waveforms when doing tts." + (if (member save_tts_output tts_hooks) + (set! tts_hooks (delq save_tts_output tts_hooks))) + t) + +(define (tts file mode) + "(tts FILE MODE) + Convert FILE to speech. MODE identifies any special treatment + necessary for FILE. This is simply a front end to tts_file but + puts the system in async audio mode first. [see TTS]" + (audio_mode 'async) + (if mode + (tts_file file mode) + (tts_file file (tts_find_text_mode file auto-text-mode-alist))) +;; (audio_mode 'sync) ;; Hmm this is probably bad +) + +(define (tts_text string mode) + "(tts_text STRING mode) +Apply tts on given string. That is, segment it into utterances and +apply tts_hooks to each utterance. This is naively done by saving the +string to a file and calling tts_file on that file. This differs from +SayText which constructs a single utterance for the whole given text." + (let ((tmpfile (make_tmp_filename)) + (fd)) + (set! fd (fopen tmpfile "wb")) + (format fd "%s" string) + (fclose fd) + (audio_mode 'async) + (tts_file tmpfile mode) + (delete-file tmpfile))) + +(define (save_record_wave utt) +"Saves the waveform and records its so it can be joined into a +a single waveform at the end." + (let ((fn (make_tmp_filename))) + (utt.save.wave utt fn) + (set! wavefiles (cons fn wavefiles)) + utt)) + +(define (combine_waves) + "(combine_waves) +Join all the waves together into the desired output file +and delete the intermediate ones." + (let ((wholeutt (Utterance Text ""))) + (mapcar + (lambda (d) + (utt.import.wave wholeutt d t) + (delete-file d)) + (reverse wavefiles)) + wholeutt)) + +(define (tts_textall string mode) + "(tts_textall STRING MODE) +Apply tts to STRING. This function is specifically designed for +use in server mode so a single function call may synthesize the string. +This function name maybe added to the server safe functions." + (if (not (string-equal mode "nil")) + (begin + ;; a mode has been specified so do something different + (let ((tmpfile (make_tmp_filename)) + (fd)) + (set! fd (fopen tmpfile "wb")) + (format fd "%s" string) + (fclose fd) + (set! tts_hooks (list utt.synth save_record_wave)) + (set! wavefiles nil) + (tts_file tmpfile mode) + (delete-file tmpfile) + (utt.send.wave.client (combine_waves)) + )) + ;; Simple fundamental mode + (utt.send.wave.client + (utt.synth + (eval (list 'Utterance 'Text string)))))) + +;; Function to interface with app_festival for asterisk +;; See http://www.asterisk.org +(define (tts_textasterisk string mode) + "(tts_textasterisk STRING MODE) +Apply tts to STRING. This function is specifically designed for +use in server mode so a single function call may synthesize the string. +This function name may be added to the server safe functions." + (utt.send.wave.asterisk + (utt.synth + (eval (list 'Utterance 'Text string))))) + + + +(define (tts_return_to_client) + "(tts_return_to_client) +This function is called by clients who wish to return waveforms of +their text samples asynchronously. This replaces utt.play in tts_hooks +with utt.send.wave.client." + (if (not (member utt.send.wave.client tts_hooks)) + (set! tts_hooks + (append (delq utt.play tts_hooks) + (list utt.send.wave.client))))) + +(defvar tts_text_modes nil +"tts_text_modes +An a-list of text modes data for file type specific tts functions. +See the manual for an example. [see Text modes]") + +(define (tts_find_text_mode file alist) + "(find_text_mode FILE ALIST) +Search through ALIST for one that matches FILE. Returns nil if +nothing macthes." + (cond + ((null alist) nil) ;; can't find a match + ((string-matches file (string-append ".*" (car (car alist)) ".*")) + (cdr (car alist))) + (t + (tts_find_text_mode file (cdr alist))))) + +(defvar auto-text-mode-alist + (list + (cons "\\.sable$" 'sable) + (cons "\\.ogi" 'ogimarkup) + (cons "\\.email" 'email) + (cons "" 'fundamental) + ) + "auto-text-mode-alist +Following Emacs' auto-mode-alist thios provides a mechanism for auto +selecting a TTS text mode based on the filename being analyzed. Its +format is exactly the same as Emacs in that it consists of an alist of +dotted pairs of regular expression and text mode name.") + +(provide 'tts) diff --git a/lib/unilex_phones.scm b/lib/unilex_phones.scm new file mode 100644 index 0000000..25e905e --- /dev/null +++ b/lib/unilex_phones.scm @@ -0,0 +1,189 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2003, 2004 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; unilex phoneset +;;; + + +(defPhoneSet + unilex + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 0) + ;; vowel frontness: front mid back + (vfront 1 2 3 0) + ;; lip rounding + (vrnd + - 0) + ;; consonant type: stop fricative affricative nasal liquid approximant + (ctype s f a n l t r 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar glottal + (cplace l a p b d v g 0) + ;; consonant voicing + (cvox + - 0) + ) + ( + (SIL - 0 0 0 0 0 0 -) ;; slience ... + (# - 0 0 0 0 0 0 -) ;; slience ... + (B_10 - 0 0 0 0 0 0 -) ;; Pauses + (B_20 - 0 0 0 0 0 0 -) ;; Pauses + (B_30 - 0 0 0 0 0 0 -) ;; Pauses + (B_40 - 0 0 0 0 0 0 -) ;; Pauses + (B_50 - 0 0 0 0 0 0 -) ;; Pauses + (B_100 - 0 0 0 0 0 0 -) ;; Pauses + (B_150 - 0 0 0 0 0 0 -) ;; Pauses + (B_200 - 0 0 0 0 0 0 -) ;; Pauses + (B_250 - 0 0 0 0 0 0 -) ;; Pauses + (B_300 - 0 0 0 0 0 0 -) ;; Pauses + (B_400 - 0 0 0 0 0 0 -) ;; Pauses + (IGNORE - 0 0 0 0 0 0 -) ;; Pauses + + + ;; insert the phones here, see examples in + ;; festival/lib/*_phones.scm + + ;(name vc vling vheight vfront vrnd ctype cplace cvox) + + ;;; Rob guesed these values for Edinburgh English + ;;; Not to be taken too seriously. + + (p - 0 0 0 0 s l -) + (t - 0 0 0 0 s a -) + (? - 0 0 0 0 s g +) ;;; ??? + (t^ - 0 0 0 0 t a +) ;;; ??? + (k - 0 0 0 0 s v -) + (x - 0 0 0 0 f v -) + (b - 0 0 0 0 s l +) + (d - 0 0 0 0 s a +) + (g - 0 0 0 0 s v +) + (ch - 0 0 0 0 a p -) + (jh - 0 0 0 0 a p +) + (s - 0 0 0 0 f a -) + (z - 0 0 0 0 f a +) + (sh - 0 0 0 0 f p -) + (zh - 0 0 0 0 f p +) + (f - 0 0 0 0 f b -) + (v - 0 0 0 0 f b +) + (th - 0 0 0 0 f d -) + (dh - 0 0 0 0 f d +) + (h - 0 0 0 0 f 0 -) ;;; ??? + (m - 0 0 0 0 n l +) + (m! - 0 0 0 0 n l +) + (n - 0 0 0 0 n a +) + (n! - 0 0 0 0 n a +) + (ng - 0 0 0 0 n v +) + (l - 0 0 0 0 r a +) + (ll - 0 0 0 0 r a +) + (lw - 0 0 0 0 r a +) + (l! - 0 0 0 0 r a +) + (r - 0 0 0 0 r a +) + (y - 0 0 0 0 l p +) + (w - 0 0 0 0 l l +) + (hw - 0 0 0 0 l l +) + (e + s 2 1 - 0 0 0) + (ao + s 3 1 - 0 0 0) + (a + s 3 1 - 0 0 0) + (ah + s 3 1 - 0 0 0) + (oa + s 3 1 - 0 0 0) + (aa + s 3 1 - 0 0 0) + (ar + s 3 1 - 0 0 0) + (eh + s 3 1 - 0 0 0) ;;; ? + (oul + d 2 3 + 0 0 0) ;;; ? + (ou + d 2 3 + 0 0 0) + (ouw + d 2 3 + 0 0 0) + (oou + l 3 3 + 0 0 0) + (o + l 3 3 + 0 0 0) + (au + l 3 3 + 0 0 0) + (oo + l 3 3 + 0 0 0) + (or + l 3 3 + 0 0 0) + (our + d 2 3 + 0 0 0) + (ii + l 1 1 - 0 0 0) + (ihr + s 1 1 - 0 0 0) + (iy + l 1 1 - 0 0 0) + (i + s 1 1 - 0 0 0) + (ie + l 1 1 - 0 0 0) ;;; ? + (iii + s 1 1 - 0 0 0) ;;; was ii; + (@r + a 2 2 - r a +) + (@ + a 2 2 - 0 0 0) + (uh + s 2 2 - 0 0 0) + (uhr + s 2 2 - 0 0 0) + (u + l 1 3 + 0 0 0) + (uu + l 1 3 + 0 0 0) + (iu + l 1 3 + 0 0 0) + (uuu + l 1 3 + 0 0 0) ;;; was uu; + (uw + l 1 3 + 0 0 0) ;;; ??? + (uul + l 1 3 + 0 0 0) ;;; ??? + (ei + d 2 1 - 0 0 0) + (ee + d 2 1 - 0 0 0) + (ai + d 3 2 - 0 0 0) ;;; ??? + (ae + d 3 2 - 0 0 0) ;;; ??? + (aer + d 3 2 - 0 0 0) ;;; ??? + (aai + d 3 2 - 0 0 0) ;;; ??? + (oi + d 2 3 + 0 0 0) ;;; ??? + (oir + d 2 3 + 0 0 0) ;;; ??? + (ow + d 3 2 - 0 0 0) + (owr + d 3 2 - 0 0 0) ;;; ??? + (oow + d 3 2 - 0 0 0) ;;; ??? + (i@ + l 1 1 - 0 0 0) ;;; iy + @ ? + (ir + s 1 1 - 0 0 0) + (irr + s 1 1 - 0 0 0) ;;; was ir; + (iir + s 1 1 - 0 0 0) + (@@r + a 2 2 - 0 0 0) + (er + s 2 1 - 0 0 0) + (eir + s 2 1 - 0 0 0) ;;; ??? + (ur + s 1 3 + 0 0 0) ;;; ??? + (urr + s 1 3 + 0 0 0) ;;; ??? + (iur + s 1 3 + 0 0 0) ;;; ??? + ) +) + +(PhoneSet.silences '( # SIL)) + +(define (unilex::select_phoneset) + "(unilex::select_phoneset) +Set up phone set for unilex" + (Parameter.set 'PhoneSet 'unilex) + (PhoneSet.select 'unilex) +) + +(define (unilex::reset_phoneset) + "(unilex::reset_phoneset) +Reset phone set for unilex." + t +) + +(provide 'unilex_phones) diff --git a/lib/voices.scm b/lib/voices.scm new file mode 100644 index 0000000..af3f908 --- /dev/null +++ b/lib/voices.scm @@ -0,0 +1,360 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Preapre to access voices. Searches down a path of places. +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define current-voice nil + "current-voice + The name of the current voice.") + +;; The path to search for voices is created from the load-path with +;; an extra list of directories appended. + +(defvar system-voice-path '( ) + "system-voice-path + Additional directory not near the load path where voices can be + found, this can be redefined in lib/sitevars.scm if desired.") + +(defvar system-voice-path-multisyn '( ) + "system-voice-path-multisyn + Additional directory not near the load path where multisyn voices can be + found, this can be redefined in lib/sitevars.scm if desired.") + +(defvar voice-path + (remove-duplicates + (append (mapcar (lambda (d) (path-append d "voices/")) load-path) + (mapcar (lambda (d) (path-as-directory d)) system-voice-path) + )) + + "voice-path + List of places to look for voices. If not set it is initialised from + load-path by appending \"voices/\" to each directory with + system-voice-path appended.") + +(defvar voice-path-multisyn + (remove-duplicates + (append (mapcar (lambda (d) (path-append d "voices-multisyn/")) load-path) + (mapcar (lambda (d) (path-as-directory d)) system-voice-path-multisyn) + )) + + "voice-path-multisyn + List of places to look for multisyn voices. If not set it is initialised from + load-path by appending \"voices-multisyn/\" to each directory with + system-voice-path-multisyn appended.") + + +;; Declaration of voices. When we declare a voice we record the +;; directory and set up an autoload for the vocie-selecting function + +(defvar voice-locations () + "voice-locations + Association list recording where voices were found.") + +(defvar voice-location-trace nil + "voice-location-trace + Set t to print voice locations as they are found") + +(define (voice-location name dir doc) + "(voice-location NAME DIR DOCSTRING) + Record the location of a voice. Called for each voice found on voice-path. + Can be called in site-init or .festivalrc for additional voices which + exist elsewhere." + (let ((func_name (intern (string-append "voice_" name))) + ) + + (set! name (intern name)) + (set! voice-locations (cons (cons name dir) voice-locations)) + (eval (list 'autoload func_name (path-append dir "festvox/" name) doc)) + (if voice-location-trace + (format t "Voice: %s %s\n" name dir) + ) + ) + ) + +(define (voice-location-multisyn name rootname dir doc) + "(voice-location NAME ROOTNAME DIR DOCSTRING) + Record the location of a voice. Called for each voice found on voice-path. + Can be called in site-init or .festivalrc for additional voices which + exist elsewhere." + (let ((func_name (intern (string-append "voice_" name))) + ) + + (set! name (intern name)) + (set! voice-locations (cons (cons name dir) voice-locations)) + (eval (list 'autoload func_name (path-append dir "festvox/" rootname) doc)) + (if voice-location-trace + (format t "Voice: %s %s\n" name dir) + ) + ) + ) + + + +(define (current_voice_reset) +"(current_voice_reset) +This function is called at the start of defining any new voice. +It is design to allow the previous voice to reset any global +values it has messed with. If this variable value is nil then +the function wont be called.") + +(define (voice_reset) +"(voice_reset) +This resets all variables back to acceptable values that may affect +voice generation. This function should always be called at the +start of any function defining a voice. In addition to reseting +standard variables the function current_voice_reset will be called. +This should always be set by the voice definition function (even +if it does nothing). This allows voice specific changes to be reset +when a new voice is selection. Unfortunately I can't force this +to be used." + (Parameter.set 'Duration_Stretch 1.0) + (set! after_synth_hooks default_after_synth_hooks) + + ;; The follow are reset to allow existing voices to continue + ;; to work, new voices should be setting these explicitly + (Parameter.set 'Token_Method 'Token_English) + (Parameter.set 'POS_Method Classic_POS) + (Parameter.set 'Phrasify_Method Classic_Phrasify) + (Parameter.set 'Word_Method Classic_Word) + (Parameter.set 'Pause_Method Classic_Pauses) + (Parameter.set 'PostLex_Method Classic_PostLex) + + (set! diphone_module_hooks nil) + (set! UniSyn_module_hooks nil) + + (if current_voice_reset + (current_voice_reset)) + (set! current_voice_reset nil) +) + + +(defvar Voice_descriptions nil + "Internal variable containing list of voice descriptions as +decribed by proclaim_voice.") + +(define (proclaim_voice name description) +"(proclaim_voice NAME DESCRIPTION) +Describe a voice to the systen. NAME should be atomic name, that +conventionally will have voice_ prepended to name the basic selection +function. OPTIONS is an assoc list of feature and value and must +have at least features for language, gender, dialect and +description. The first there of these are atomic, while the description +is a text string describing the voice." + (let ((voxdesc (assoc name Voice_descriptions))) + (if voxdesc + (set-car! (cdr voxdesc) description) + (set! Voice_descriptions + (cons (list name description) Voice_descriptions)))) +) + +(define (voice.description name) +"(voice.description NAME) +Output description of named voice. If the named voice is not yet loaded +it is loaded." + (let ((voxdesc (assoc name Voice_descriptions)) + (cv current-voice)) + (if (null voxdesc) + (unwind-protect + (begin + (voice.select name) + (voice.select cv) ;; switch back to current voice + (set! voxdesc (assoc name Voice_descriptions))))) + (if voxdesc + voxdesc + (begin + (format t "SIOD: unknown voice %s\n" name) + nil)))) + +(define (voice.select name) +"(voice.select NAME) +Call function to set up voice NAME. This is normally done by +prepending voice_ to NAME and call it as a function." + (eval (list (intern (string-append "voice_" name))))) + +(define (voice.describe name) +"(voice.describe NAME) +Describe voice NAME by saying its description. Unfortunately although +it would be nice to say that voice's description in the voice itself +its not going to work cross language. So this just uses the current +voice. So here we assume voices describe themselves in English +which is pretty anglo-centric, shitsurei shimasu." + (let ((voxdesc (voice.description name))) + (let ((desc (car (cdr (assoc 'description (car (cdr voxdesc))))))) + (cond + (desc (tts_text desc nil)) + (voxdesc + (SayText + (format nil "A voice called %s exist but it has no description" + name))) + (t + (SayText + (format nil "There is no voice called %s defined" name))))))) + +(define (voice.list) +"(voice.list) +List of all (potential) voices in the system. This checks the voice-location +list of potential voices found be scanning the voice-path at start up time. +These names can be used as arguments to voice.description and +voice.describe." + (mapcar car voice-locations)) + +;; Voices are found on the voice-path if they are in directories of the form +;; DIR/LANGUAGE/NAME + +(define (search-for-voices) + "(search-for-voices) + Search down voice-path to locate voices." + + (let ((dirs voice-path) + (dir nil) + languages language + voices voicedir voice + ) + (while dirs + (set! dir (car dirs)) + (setq languages (directory-entries dir t)) + (while languages + (set! language (car languages)) + (set! voices (directory-entries (path-append dir language) t)) + (while voices + (set! voicedir (car voices)) + (set! voice (path-basename voicedir)) + (if (string-matches voicedir ".*\\..*") + nil + (voice-location + voice + (path-as-directory (path-append dir language voicedir)) + "voice found on path") + ) + (set! voices (cdr voices)) + ) + (set! languages (cdr languages)) + ) + (set! dirs (cdr dirs)) + ) + ) + ) + +;; A single file is allowed to define multiple multisyn voices, so this has +;; been adapted for this. Rob thinks this is just evil, but couldn't think +;; of a better way. +(define (search-for-voices-multisyn) + "(search-for-voices-multisyn) + Search down multisyn voice-path to locate multisyn voices." + (let ((dirs voice-path-multisyn) + (dir nil) + languages language + voices voicedir voice voice-list + ) + (while dirs + (set! dir (car dirs)) + (set! languages (directory-entries dir t)) + (while languages + (set! language (car languages)) + (set! voices (directory-entries (path-append dir language) t)) + (while voices + (set! voicedir (car voices)) + (set! voice (path-basename voicedir)) + (if (string-matches voicedir ".*\\..*") + nil + (begin + ;; load the voice definition file, but don't evaluate it! + (set! voice-def-file (load (path-append dir language voicedir "festvox" + (string-append voicedir ".scm")) t)) + ;; now find the "proclaim_voice" lines and register these voices. + (mapcar + (lambda (line) + (if (string-matches (car line) "proclaim_voice") + (voice-location-multisyn (intern (cadr (cadr line))) voicedir (path-append dir language voicedir) "registerd multisyn voice"))) + voice-def-file) + )) + (set! voices (cdr voices))) + (set! languages (cdr languages))) + (set! dirs (cdr dirs))))) + +(search-for-voices) +(search-for-voices-multisyn) + +;; We select the default voice from a list of possibilities. One of these +;; had better exist in every installation. + +(define (no_voice_error) + (format t "\nWARNING\n") + (format t "No default voice found in %l\n" voice-path) + (format t "either no voices unpacked or voice-path is wrong\n") + (format t "Scheme interpreter will work, but there is no voice to speak with.\n") + (format t "WARNING\n\n")) + +(defvar voice_default 'no_voice_error + "voice_default +A variable whose value is a function name that is called on start up to +the default voice. [see Site initialization]") + +(defvar default-voice-priority-list + '(kal_diphone + cmu_us_bdl_arctic_hts + cmu_us_jmk_arctic_hts + cmu_us_slt_arctic_hts + cmu_us_awb_arctic_hts +; cstr_rpx_nina_multisyn ; restricted license (lexicon) +; cstr_rpx_jon_multisyn ; restricted license (lexicon) +; cstr_edi_awb_arctic_multisyn ; restricted license (lexicon) +; cstr_us_awb_arctic_multisyn + ked_diphone + don_diphone + rab_diphone + en1_mbrola + us1_mbrola + us2_mbrola + us3_mbrola + gsw_diphone ;; not publically distributed + el_diphone + ) + "default-voice-priority-list + List of voice names. The first of them available becomes the default voice.") + +(let ((voices default-voice-priority-list) + voice) + (while (and voices (eq voice_default 'no_voice_error)) + (set! voice (car voices)) + (if (assoc voice voice-locations) + (set! voice_default (intern (string-append "voice_" voice))) + ) + (set! voices (cdr voices)) + ) + ) + + +(provide 'voices) diff --git a/missing b/missing new file mode 100755 index 0000000..7789652 --- /dev/null +++ b/missing @@ -0,0 +1,190 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..7752276 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.1 2001/04/04 13:12:35 awb Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/packaging/festival-1.95-audsp.patch b/packaging/festival-1.95-audsp.patch new file mode 100644 index 0000000..106b62c --- /dev/null +++ b/packaging/festival-1.95-audsp.patch @@ -0,0 +1,11 @@ +--- src/arch/festival/audspio.cc ++++ src/arch/festival/audspio.cc +@@ -108,7 +108,7 @@ + { + audio = ft_get_param("Audio_Method"); + command = ft_get_param("Audio_Command"); +- audfds = pipe_open("audsp"); ++ audfds = pipe_open("/usr/lib/festival/audsp"); + if (audio != NIL) + audsp_send(EST_String("method ")+get_c_string(audio)); + if (command != NIL) diff --git a/packaging/festival-1.95-examples.patch b/packaging/festival-1.95-examples.patch new file mode 100644 index 0000000..1af4629 --- /dev/null +++ b/packaging/festival-1.95-examples.patch @@ -0,0 +1,12 @@ +--- festival/examples/Makefile ++++ festival/examples/Makefile +@@ -54,8 +54,7 @@ + + $(ALL) : % : %.sh + rm -f $@ +- @echo "#!/bin/sh" >$@ +- @echo "\"true\" ; exec "$(FESTIVAL_HOME)/bin/festival --script '$$0 $$*' >>$@ ++ @echo "#!/usr/bin/festival --script" >$@ + cat $< >>$@ + chmod +x $@ + diff --git a/packaging/festival-1.95-libdir.patch b/packaging/festival-1.95-libdir.patch new file mode 100644 index 0000000..dbd1476 --- /dev/null +++ b/packaging/festival-1.95-libdir.patch @@ -0,0 +1,10 @@ +--- config/project.mak ++++ config/project.mak +@@ -113,6 +113,6 @@ + DOCXX_DIRS = $(TOP)/src + MODULE_TO_DOCXX = perl $(TOP)/src/modules/utilities/extract_module_doc++.prl + +-FTLIBDIR = $(FESTIVAL_HOME)/lib ++FTLIBDIR = /usr/share/festival + + diff --git a/packaging/festival-1.96-chroot.patch b/packaging/festival-1.96-chroot.patch new file mode 100644 index 0000000..ec6554c --- /dev/null +++ b/packaging/festival-1.96-chroot.patch @@ -0,0 +1,111 @@ +--- src/main/festival_main.cc ++++ src/main/festival_main.cc +@@ -39,6 +39,10 @@ + /* */ + /*=======================================================================*/ + #include ++#include ++#include ++#include ++#include + + using namespace std; + +@@ -75,6 +79,9 @@ + EST_StrList files; + int real_number_of_files = 0; + int heap_size = FESTIVAL_HEAP_SIZE; ++ unsigned int uid = -1; ++ unsigned int gid = -1; ++ struct passwd *pw; + + if (festival_check_script_mode(argc,argv) == TRUE) + { // Need to check this directly as in script mode args are +@@ -106,6 +113,9 @@ + " english, spanish and welsh are available\n"+ + "--server Run in server mode waiting for clients\n"+ + " of server_port (1314)\n"+ ++ "--chroot Run server in chroot\n"+ ++ "--uid Run server as given user\n"+ ++ "--gid Run server with this group\n"+ + "--script \n"+ + " Used in #! scripts, runs in batch mode on\n"+ + " file and passes all other args to Scheme\n"+ +@@ -123,6 +133,77 @@ + exit(0); + } + ++ if( al.present( "--uid" ) ) ++ { ++ EST_String b = al.sval( "--uid" ); ++ ++ pw = getpwnam( b.str() ); ++ if( pw != NULL ) ++ { ++ uid = pw->pw_uid; ++ gid = pw->pw_gid; ++ } ++ else ++ { ++ printf("unknow user\n"); ++ festival_error(); ++ } ++ } ++ ++ if( al.present( "--gid" ) ) ++ { ++ gid = al.ival( "--gid" ); ++ if( al.present( "--uid" ) ) ++ { ++ printf( "useless without --uid\n" ); ++ festival_error(); ++ } ++ } ++ ++ if( al.present( "--chroot" ) ) ++ { ++ if( !al.present( "--uid" ) ) ++ { ++ printf( "chroot only makes sense in combination with uid switching\n" ); ++ festival_error(); ++ } ++ ++ EST_String a = al.sval( "--chroot" ); ++ printf( "chroot to %s\n", a.str() ); ++ if( chdir( a.str() ) ) ++ { ++ festival_error(); ++ } ++ if( chroot( a.str() ) ) ++ { ++ festival_error(); ++ } ++ if( chdir( "/" ) ) ++ { ++ festival_error(); ++ } ++ } ++ ++ if( al.present( "--uid" ) ) ++ { ++ if( setgroups( 1, &gid ) < 0 ) ++ { ++ festival_error(); ++ } ++ ++ if( setgid( gid ) != 0 ) ++ { ++ printf( "can't setgid\n" ); ++ festival_error(); ++ } ++ ++ if( setuid( uid ) != 0 ) ++ { ++ printf( "can't setuid\n" ); ++ festival_error(); ++ } ++ } ++ + if (al.present("--libdir")) + festival_libdir = wstrdup(al.val("--libdir")); + else if (getenv("FESTLIBDIR") != 0) diff --git a/packaging/festival-no-LD_LIBRARY_PATH-extension.patch b/packaging/festival-no-LD_LIBRARY_PATH-extension.patch new file mode 100644 index 0000000..054b61e --- /dev/null +++ b/packaging/festival-no-LD_LIBRARY_PATH-extension.patch @@ -0,0 +1,69 @@ +Index: festival/src/scripts/shared_script +=================================================================== +--- festival.orig/src/scripts/shared_script ++++ festival/src/scripts/shared_script +@@ -1,24 +1,5 @@ + #!/bin/sh + +-# Festival shared script +- +-extend() { +- var="$1" +- extra="$2" +- eval "val=\$$var" +- +- if [ -n "$val" ] +- then +- val="$extra:$val" +- else +- val="$extra" +- fi +- eval "$var='$val'" +- eval "export $var" +- } +- +-extend __LDVAR__ "__EST__/lib:__LDPATH__" +- + exec __MAIN__/__PROGRAM__ "$@" + + exit 0 +Index: festival/src/scripts/shared_setup_prl +=================================================================== +--- festival.orig/src/scripts/shared_setup_prl ++++ festival/src/scripts/shared_setup_prl +@@ -1,10 +1,2 @@ + +-if (defined($ENV{LD_LIBRARY_PATH})) +- { +- $ENV{LD_LIBRARY_PATH} = "__TOP__/lib:__LDPATH__:$ENV{LD_LIBRARY_PATH}"; +- } +-else +- { +- $ENV{LD_LIBRARY_PATH} = "__TOP__/lib"; +- } + +Index: festival/src/scripts/shared_setup_sh +=================================================================== +--- festival.orig/src/scripts/shared_setup_sh ++++ festival/src/scripts/shared_setup_sh +@@ -1,20 +1,2 @@ + +-# festival shared setup +- +-extend() { +- var="$1" +- extra="$2" +- eval "val=\$$var" +- +- if [ -n "$val" ] +- then +- val="$extra:$val" +- else +- val="$extra" +- fi +- eval "$var='$val'" +- eval "export $var" +- } +- +-extend LD_LIBRARY_PATH "__EST__/lib:__LDPATH__" + diff --git a/packaging/festival-safe-temp-file.patch b/packaging/festival-safe-temp-file.patch new file mode 100644 index 0000000..1fc899d --- /dev/null +++ b/packaging/festival-safe-temp-file.patch @@ -0,0 +1,27 @@ +Index: festival/src/scripts/festival_server.sh +=================================================================== +--- festival.orig/src/scripts/festival_server.sh ++++ festival/src/scripts/festival_server.sh +@@ -210,14 +210,19 @@ trap "handle_term" 0 + + if $show + then +- create_server_startup $port $server_log /tmp/$$ 3>/dev/null ++ tmpfile=`mktemp -q` ++ if test $? -ne 0; then ++ echo "Error while getting configuration." ++ exit 1 ++ fi ++ create_server_startup $port $server_log "$tmpfile" 3>/dev/null + fl=false + while read l + do + if $fl ; then echo $l ; fi + if [ "$l" = ";---" ] ; then fl=true ; fi +- done ++.I sound.wav ++ ++ ++.SH DESCRIPTION ++ ++This script is part of the festival text-to-speech system. ++It is a wrapper for festival's Scheme code for easy usage in TTS ++scripts. ++ ++.SH OPTIONS +--- festival/doc/text2wave.options ++++ festival/doc/text2wave.options +@@ -0,0 +1,47 @@ ++.\" ++.\".SH OPTIONS ++.\" -mode Explicit tts mode. ++.\" -o ofile File to save waveform (default is stdout). ++.\" -otype Output waveform type: ulaw, snd, aiff, riff, nist etc. ++.\" (default is riff) ++.\" -F Output frequency. ++.\" -scale Volume factor ++.\" -eval File or lisp s-expression to be evaluated before ++.\" synthesis. ++ ++.TP ++.B \-mode ++.I string ++.br ++Explicit tts mode. ++.TP ++.B \-o ++.I ofile ++.br ++File to save waveform to. ++.br ++The default is ++.B stdout. ++.TP ++.B \-otype ++.I string ++.br ++Output waveform type: ulaw, snd, aiff, riff, nist etc. ++.br ++The default is ++.B riff. ++.TP ++.B \-f ++.I integer ++.br ++Output frequency. ++.TP ++.B \-scale ++.I float ++.br ++Volume factor. ++.TP ++.B \-eval ++.I "string" ++.br ++File or lisp s-expression to be evaluated before synthesis. +--- festival/doc/text2wave.tail ++++ festival/doc/text2wave.tail +@@ -0,0 +1,26 @@ ++ ++.SH BUGS ++More than you can imagine. ++ ++A manual with much detail (though not complete) is available ++in distributed as part of the system and is also accessible at ++.br ++http://www.cstr.ed.ac.uk/projects/festival/manual/ ++ ++Although we cannot guarantee the time required to fix bugs, we ++would appreciated it if they were reported to ++.br ++festival-bug@cstr.ed.ac.uk ++ ++.SH AUTHOR ++Alan W Black, Richard Caley and Paul Taylor ++.br ++(C) Centre for Speech Technology Research, 1996-1998 ++.br ++University of Edinburgh ++.br ++80 South Bridge ++.br ++Edinburgh EH1 1HN ++.br ++http://www.cstr.ed.ac.uk/projects/festival.html diff --git a/packaging/festival-use-pacat.patch b/packaging/festival-use-pacat.patch new file mode 100644 index 0000000..5c357df --- /dev/null +++ b/packaging/festival-use-pacat.patch @@ -0,0 +1,14 @@ +diff -up festival/lib/init.scm.use-pacat festival/lib/init.scm +--- festival/lib/init.scm.use-pacat 2008-10-27 21:35:08.000000000 -0400 ++++ festival/lib/init.scm 2008-10-27 21:41:08.000000000 -0400 +@@ -140,6 +140,10 @@ + (require 'token) + (require 'tts) + ++;;; Default to using pulseaudio (bug 467531) ++(Parameter.def 'Audio_Command "pacat --channels=1 --rate=$SR $FILE -n Festival --stream-name=Speech") ++(Parameter.set 'Audio_Method 'Audio_Command) ++ + ;;; + ;;; Local site initialization, if the file exists load it + ;;; diff --git a/packaging/festival.changes b/packaging/festival.changes new file mode 100644 index 0000000..551db9d --- /dev/null +++ b/packaging/festival.changes @@ -0,0 +1,3 @@ +* Fri Aug 31 21:11:28 UTC 2012 - jimmy.huang@intel.com +- Initial import to Tizen. + diff --git a/packaging/festival.spec b/packaging/festival.spec new file mode 100644 index 0000000..5ce48d7 --- /dev/null +++ b/packaging/festival.spec @@ -0,0 +1,155 @@ +Name: festival +Version: 2.1 +Release: 1 +Group: System/Libraries +License: MIT and GPL+ and TCL +Url: http://www.cstr.ed.ac.uk/projects/festival/ +Summary: A free speech synthesis and text-to-speech system +Source0: http://www.cstr.ed.ac.uk/downloads/festival/2.1/festival-%{version}-release.tar.gz +Source1: http://www.cstr.ed.ac.uk/downloads/festival/2.1/speech_tools-%{version}-release.tar.gz +Source2: http://www.cstr.ed.ac.uk/downloads/festival/2.1/festlex_CMU.tar.gz +Source3: http://www.cstr.ed.ac.uk/downloads/festival/2.1/festvox_kallpc16k.tar.gz +Source4: http://www.cstr.ed.ac.uk/downloads/festival/2.1/festlex_POSLEX.tar.gz +Patch0: festival-1.95-examples.patch +Patch1: festival-text2wave-manpage.patch +Patch2: festival-1.95-libdir.patch +Patch3: festival-1.95-audsp.patch +Patch4: festival-1.96-chroot.patch +Patch5: festival-no-LD_LIBRARY_PATH-extension.patch +Patch6: festival-safe-temp-file.patch +# Use pulseaudio +Patch7: festival-use-pacat.patch +Patch101: speech_tools-undefined-operation.patch +Patch102: speech_tools-1.2.95-config.patch +Patch103: speech_tools-no-LD_LIBRARY_PATH-extension.patch +Patch104: speech_tools-gcc47.patch +BuildRequires: pkgconfig(ncurses) + +%description +Festival is a general multi-lingual speech synthesis system developed +at CSTR. It offers a full text to speech system with various APIs, as +well as an environment for development and research of speech synthesis +techniques. It is written in C++ with a Scheme-based command interpreter +for general control. + +%package devel +Summary: Development Package for Festival +License: MIT +Requires: %{name} = %{version} + +%description devel +Files needed for developing software that uses Festival. + +%prep +%setup -q -b 1 -b 2 -b 3 -b 4 -q -n festival +%patch0 -p1 +%patch1 -p1 +%patch2 +%patch3 +%patch4 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 -b .use-pacat +cd ../speech_tools +%patch101 -p1 +%patch102 +%patch103 -p1 +%patch104 -p1 + +%build +# festival +./configure --prefix=%_prefix \ + --libdir=%_libdir \ + --datadir=%_datadir/festival \ + --sysconfdir=%_sysconfdir +# speech tools +cd ../speech_tools +./configure --prefix=%_prefix \ + --libdir=%_libdir \ + --datadir=%_datadir/festival \ + --sysconfdir=%_sysconfdir +make CC="gcc -fPIC $RPM_OPT_FLAGS" CXX="g++ $RPM_OPT_FLAGS -fPIC -Wno-non-template-friend -ffriend-injection -fno-strict-aliasing" +cd ../festival +make CC="gcc -fPIC $RPM_OPT_FLAGS" CXX="g++ $RPM_OPT_FLAGS -fPIC -Wno-non-template-friend -ffriend-injection -fno-strict-aliasing" +make doc + +%install +%make_install +cd ../speech_tools +%make_install +cd ../festival +# install binarys +install -D bin/text2wave $RPM_BUILD_ROOT%_bindir/text2wave +install -m 755 bin/festival* $RPM_BUILD_ROOT%_bindir/ +install -m 755 examples/saytime $RPM_BUILD_ROOT%_bindir/ +# install manpages +install -D -m 644 doc/festival.1 $RPM_BUILD_ROOT%_mandir/man1/festival.1 +install -m 644 doc/festival_client.1 $RPM_BUILD_ROOT%_mandir/man1/ +install -m 644 doc/text2wave.1 $RPM_BUILD_ROOT%_mandir/man1/ +# install configs +install -D lib/festival.scm $RPM_BUILD_ROOT%_sysconfdir/festival.scm +# install dictionarys +install -D lib/dicts/cmu/cmudict-0.4.out $RPM_BUILD_ROOT%_datadir/%name/dicts/cmu/cmudict-0.4.out +install -m 644 lib/dicts/cmu/*.scm $RPM_BUILD_ROOT%_datadir/%name/dicts/cmu/ +install -m 644 lib/dicts/wsj.wp39.poslexR $RPM_BUILD_ROOT%_datadir/%name/dicts/ +install -m 644 lib/dicts/wsj.wp39.tri.ngrambin $RPM_BUILD_ROOT%_datadir/%name/dicts/ +# install voices +mkdir -p $RPM_BUILD_ROOT/usr/share/festival/voices/english/kal_diphone/festvox +mkdir -p $RPM_BUILD_ROOT/usr/share/festival/voices/english/kal_diphone/group +cp lib/voices/english/kal_diphone/group/* $RPM_BUILD_ROOT/usr/share/festival/voices/english/kal_diphone/group/ +cp lib/voices/english/kal_diphone/festvox/*.scm $RPM_BUILD_ROOT/usr/share/festival/voices/english/kal_diphone/festvox +# install data +cp lib/*.scm $RPM_BUILD_ROOT/usr/share/festival/ +cp lib/*.ngrambin $RPM_BUILD_ROOT/usr/share/festival/ +cp lib/*.gram $RPM_BUILD_ROOT/usr/share/festival/ +cp lib/*.el $RPM_BUILD_ROOT/usr/share/festival/ +install -D lib/etc/unknown_Linux/audsp $RPM_BUILD_ROOT/usr/lib/festival/audsp +# install libs +install -D src/lib/libFestival.a $RPM_BUILD_ROOT/%_libdir/libFestival.a +# install includes +mkdir -p $RPM_BUILD_ROOT%_includedir/ +install -m 644 src/include/*.h $RPM_BUILD_ROOT%_includedir/ +cd ../speech_tools +# install includes +mkdir -p $RPM_BUILD_ROOT%_includedir/instantiate +mkdir -p $RPM_BUILD_ROOT%_includedir/ling_class +mkdir -p $RPM_BUILD_ROOT%_includedir/rxp +mkdir -p $RPM_BUILD_ROOT%_includedir/sigpr +mkdir -p $RPM_BUILD_ROOT%_includedir/unix +install -m 644 include/*h $RPM_BUILD_ROOT%_includedir +install -m 644 include/instantiate/*h $RPM_BUILD_ROOT%_includedir/instantiate +install -m 644 include/ling_class/*h $RPM_BUILD_ROOT%_includedir/ling_class +install -m 644 include/rxp/*h $RPM_BUILD_ROOT%_includedir/rxp +install -m 644 include/sigpr/*h $RPM_BUILD_ROOT%_includedir/sigpr +install -m 644 include/unix/*h $RPM_BUILD_ROOT%_includedir/unix +# install libs +install -m 644 lib/lib*.a $RPM_BUILD_ROOT%_libdir +# install init script +# install -m 755 -D %{S:6} $RPM_BUILD_ROOT/etc/init.d/%name +# install -d $RPM_BUILD_ROOT%_sbindir +# ln -sf ../../etc/init.d/%name $RPM_BUILD_ROOT/usr/sbin/rc%name +# installl sysconfig file +#install -m 644 -D %{S:5} $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.%name + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%doc COPYING README INSTALL examples/*.text examples/ex1.* examples/*.scm examples/*.dtd +%_sysconfdir/festival.scm +#%_sysconfdir/init.d/%name +%_bindir/festival +%_bindir/festival_client +%_bindir/festival_server +%_bindir/festival_server_control +%_bindir/text2wave +%_bindir/saytime +%_prefix/lib/festival +%_datadir/festival +%_mandir/man1/* + +%files devel +%defattr(-,root,root) +%_includedir/* +%_libdir/lib*.a diff --git a/packaging/festlex_CMU.tar.gz b/packaging/festlex_CMU.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..077035cd2c148bca44174d12fc58ab22022cc504 GIT binary patch literal 1925748 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%0D&6_cHz9Z<-Nb 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

    1IG*bMgJG=?g!i-_wxi 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… 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

    F=(z+o||(s+Y)o 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μ1cNIl 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%0ARgo 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

    3(7v?uWl6v??{^zw0VK0NKV+D}LzoZ9 zsDmckDG!GpljIr2dOWm!^3c}FWBbsC&2)|Ha*zBJ#@UUzP);P;fkL41BJy>HoVil5 z%X-k3=D|txDuDF5N4ZwZP_;ymJwsKQ^*Fg_MWEWaJ~q>;HY>zW82}C%Ct-Y$0)B`K zIS&$*C(gS3+t+S+3WuR7hak@%jJqdZ>*vY*oCmo;)`5Js?Xu@87iF*1`3j?)wwY(u%obUtX1oZU(MwHJ$w@m<40b?$nDLklXI(up-GIS1b zKt9#r(Sf2zCyX9FNa$aia#|($D6I?=94r?Ad77q@jVSAp0|9KUIj#KfcpPkK1P2Pw zn8bPeL6x6;SIP$SDiSR$BtvJxhMzJ3)1oqDrEgxo~d8TlrZ{!5gRG7&r-fG!S4vEY(5&wc`(lYo7V5eJ@oLwA2%= zrWOVUx(Mg$)2xIE-18(U?HVqZV}eX>BPGzMuAB6Kan98R&1at0{h2FuYE*~X>0^%v z)6I?k&=-t2B_x#EaODE-yZ~fLD(Dv95nhBM7I@3SuLbB9V1!E*4z<6C6{oFu1IjhO ztqvh0cG_CaJS+4ooGIr0rw6u#g#`w0t0aj_cR%Wl zm55W4nQ(ZGBqG(6C^h0lFlr`fS;gxHVfF>gB3O;7eW0eA-p7ONeHvPm!-iK0f5TUw z9cigP?3sWUe`PHrY?u#~(7i;PL!f5aVf3>al^Mrm`!K;bBik0;bG3Dwxr|C>`hMO> zac<_eHEW_VGSfv?MOWyDUJ7^?Xi}Q_H%eUPSwm^7hCv$8WIGS&=89CD@WNK<%g^eg zz5Hx1>}urrK#NEf!P3uOnk~ZA4FFjKht3?Bd2<31Q*Jm!$Xe#?GA$s9s2||G>X9n) zs%Mm}q`>NjMlmg6Itu%&jNUAmj3V!eR#R*9(Hj=YFz~Y+fmw{etVTd)7e6o(P$?fi zy{J9eB6elNDw@7x`PIMsDaiSGf`a)_o*P}7Y=^Voxv_6-XnXfJytnf*-`_%$eFKsF zD5LPBTt!Q+SWspqrgswtY4+k>=3!(FKbN27PEyDSKU)w1w91T3tv`!31&nt zHDpZ1lANeCKqyD)0a0~e`72%UdX-E;zp;O-%tXElVU}4?izep&oIKeuOd{vIMT%&? zV4cOY!B;t|&Sb8))QU&PuX=QR5Z+8EYxaM*Soq_Ik=BOW;Mf`uIXB7&+iDeG(mjg)}qarD3@_};#Q>N6hHjShpBR#DUaWsi@a@n5AY?>#GeG)080~K>S z4*9jS`0gnMczW>EHR>8+XeM!^DJML{_de@R(!-q`^P1+#Aq+!D)1z!-37iB!YXHB_ zq1d05jfIA3IC*s`&h&ATD^UtY_7nClkgeJ>6oy&C>IbcS)Ws*~g*;Njk4#-Kze@(-Hgw)T zSvcD&U-(J#4>9&0)x-c@_9EAj5sFp7AA<`*q?%}AX2dB2?XbGBlZq!rYq1#Zg4(b{oEk=N5`hKJcXjn)SfIGUrpWF>Cts!e4U;Vj^~8DO0ODd#8XsrbleQ2 z+})>U+EzQQY^k#JcolR~Mrh@8Qdh$F_sfO7$#Y0K0e=7ap|}JwW5d!3hwXw_zysN~ z=ta<$sS|Vzz&yw+uP`Z{4Iw6RvYsNOfQ11x2|gv*lzleHHD5p+k>xL|^Ra++CoQP^ zzzDPFxH2ruBKnhm-{j%mA`eU!BaN&jP5IIcD;a8mnY;95)}da7E~(4yLFpx_eD5Ht zbKy1Iyaf?nFM~$Z(6NIqm(rYDxGbjYMY!RvY$mO;iG3lc*7tPmx5_;mT{{kB*?2x7 z2neA|GKLPC*M8D1dDRbTCWxbkRh=xY;%sT{rEhiRXF-QmpZTc7$%A}04^lxLG$&|9 z76!3TTe(tUPwK349-Ee=9_aA@JGXwpKll zTS5AYwf_KmcC(zm9`#Hwg7g)sDuZhNalqD1V5*V4Zr6F*g!FFD`g8(7rMwY!EAe-v*tzT1SqtZ;dF<5C^us*f&dxkZ?R)80}GXk!159{l3BD?Vd3Q6!=%~pz7 z+j?>O*8Qc`XXAi?sIOE^06wOhoim_SF`rgugyAU;l}RH6Q*4R1;tk!!9So{}Q&|cD z`~K&?{LJAiMu)GM9^WT5e`vuxh*wFh2~RwEB_BmWtbC6?BRSP-4C+{uqYIqKrWawM zCJjiIXfu3?tz{JEFKqi^(9q}D|H6@nF!Rzn2>gX&R(ZG0>2I$+t1$oENwa7QU3Wwz-xN%Akge;dKuNv$w7)=q&+ zEbu|xnUD3^tAqF@)t5XpHY=shjS$M1J5UbQ2mmFvQe=ImqRg%1HopaA9Mj2jW!!YZ zrZJs1K+S}X`)2Za2{EhRxo&%>Xt>ij0O_(2> z=;?2m9>8hSHC~I*^Mg{M!bcqf2F2W!IqN}u?3X_#V5U=5F{jPc0B{wPUEhvJ4GQwB$b zctS#sm^{ZabcA)#uR?fYI46tEG|RbwfoVQ-aci>zSJ9U&9#yk}81pHId!ROwxRXq5 zs}Eak*az{z=ftnFsy~6f}>Zsh^@o5&{EFb(tcWDj`zPlACPPo5MAgSbu z)_#XYD7lx8_4O#;b2{NpaqLcUld!iPG0pL9>JSjzzDOOQZ@numsVsl{7<9ce4aHhb zz&GbItUtw7^%;@o90_wdVeLn-Y{UmNX@Y>}y>tV;w3{46w=#hG_dk4?U;J?-47 za@`f`hZ96s2%V%7>n_m=?vU%x}O&QV|qSw33L5&T$@nKomJ>rw<-JrVk!`nuKlUE21e` zZ*&uU1JFuK)74B3FkRfl{iN-MlaG_7CrwA7OH(I9w0RTJVjoiAB6>u{HE~pvlW%W0 zGAx}8rLH4uZ<{D+$ySE?@+0DK zg>p`7V5jx3hbcK~iII~rA&!=RCxh2u_{ho{rIqE>u2pPUos)fqUhY;;Xhd`MO$jrpZ|40Ld4d!culLXJRAtuu?bz{7<)RszEYIm>G@Tx+^m7JFu zN^!#BRD-m~epECQ-SWb)gM`G-R2g{)Qw#09#~^dfP-;R?{~n$Vz&BZQ5oXVEh4}{( zb#w)io{lJ?J~A#?gQ!Iw@)9$pCWPi=lhwFS z0z_a2;pRLrYuA9(W?9*-;SVox0bVk#bZQ1sF`SfjyyLn5F-_rJRDRXQYI^B2ma)fLvf-&Z{Op=#>DxfVhg~w z^Ypa=SP4Qm!1Ch(nNJt)L}~tQIQxATpQ|gDr>>g1R;p|&H1jrCL99(gdpOb{^XufZ zWqoSXJghREVnqB}nG<*iDWd2WQbb(akZZ=E<`V(~N6MuUOCcI@f8bVf$W)0@^YSL< zVnB3qh~QbRnStcJ(_r@E#X@SBIQxDs zhZ0~;cjoU!&8|2cho2l#QM>boo3@sgkCwQZF*OP&~Xu z*$Sv;A8r_S>v5B0W^`%1fSrSUq9}ioT`C6TdRK@GJQEk5oKDF^96aYt6DkNCiDv|KR*KnA2 zuxE)Wn&Jw4!+nc~8Ud@_9==3^kT2W;2eK+109eOQixB7F%Gs2F{!PU1@^g<0(Np5M zEeNnpL}Bc36)BQ1pULzoGtSh`tuzg1i9I~!Vg`|PHYNcu?8f!bK~;nM-GEpX0yH`2 zH^=~NzDlN*(;K`igkM|FAa-ARoX+~hn{SWNAA=A1H^db^Js_S@E3;&+%vgK5fz0=D z^7e6}domeO8X&Hu7bZ5dHy=N%h+hjNOi~qzxHSzBqYyAM2i-aa!0qHDlJSi)BhZAA z8`FzUtUZnQPW5!RcEfCI{h(D?U!y zGABAa$y~wnlj)n+-|zA>FCO3U$?u82_zg`Js$xu3P#E8CAbZ$*PM8@1VcU?x^Z5R(v(ht}uT7x93Xhl}O-83jNEngm?YcGf2@SRr+l&HLrXT@^u@bEM)KG6oO0(^y4MD+ZX9VagNcoNqgY z8hX*Z$_;nG4E-iiDUB=|g$LAhwq0HK8^7ABu*5maDmUH2^l%lnQuSk({V>`?b3H8h z+!NjtM)*T=HNrcQ5VxS`mzb2V(u`b!$Bh!8*DnCMZ?>QZ#5iWVGVB#8;lB5^};diqPE4D6xlU=>ok#FNxj=$Bb4{^+_X3S@@dK=nPe zd!_Q?l9F%1%%ASUv7Ku8h3@SGHFdW}bMNUehoS4HnRx#tBH|OW!Eb;9!|w9%D>cHm zwSE3|l-ZsWT;{}fhlr(^fS|(fba5avth`alb$jsEkh%<}p59x7eHRsC05*PH1Y!s5 zChH61%HNc>Rc;@=n&NS7NxVyL-lUnU(xG9fIxRfna0XYNnbPq><3@;}Eq6-{i9M|I!Li~eT$l2pK;05^P?amp(Bmw2S{z*)IQ z=JV%_u&rrh8xzMW*|j8m+SVcit7TjXi>hf&wM?jn`6O(n1L4%#?~(=Xm$0&=3un+= zT|fs(P6>xwAfM??>|KBVipk#e&h-Fq(qeUK3tpCz7d$6gSHAE@ZGtRca<{mM7z-Yx z{P~r)M-bt%^0R_tO6@})C3;)?#mRv@QJm_UVyzb95CC z2?3B}UIUV{XxFBR)4zCp+^iC8V|mCdVMUSyP#V&NBza!x=_2enHn7>_+BBtV*0gyA zZL^B?1GC|I;-xV}E3lJNx?xHb9GwFsHr$94yY2wDCs+tE4M5!UVf#iF#{isPAE3n8 z09VWg|{=!q41nkZ_Rt`E~8io>T2#4QimAB>`SB|qU6tN##&YeWr{VRq9 zY-2aYn~!mHN3TMhUb#mq z1}d7nmtaoMTB(`SVjDpI#&JG}YU1VnKa1 zP7Zm#q6ziLHu9PCI>^DULv1m7qOiasonA;^MIgvJw5&6xZ&IS9H_9$Zx1}dk?G*CHL9fzfWQ!^_G}Pmu%25Ow=aG^su&Vq zT6f>R{vCR5x5!{~WwzV~<=!h8vC5QpRtDqdoB)}ZRv&yLV3`M{fn^FZ97nQH{ zH`!LV$+x4M*jExuz5e8eKz#c8qnURAI*pixL4T7@^n}8;DO0OdR3J)8z*aur0Z5$Xus`dcthIkK*H*<&Bu*E# zMasOZ+oW}p8%wI zxs_yh_-S=4jW|)^b_%T0v&qbL2yN!C3q{^%jU~s@#(CWs$^4Nh$)Bm+ok?|Pl2=r> zoG6WkP#&-&jK14sjb_Q@&Tx)!l&`7+W!9?ceiuvn9R>I<4Do7tH`0(#;(}L#)j& z4z*4g(Tjqj9yCL*V~zwJgq`40dTPx=cD`qQRpL9Ih7}B7@X07~!6(6VD>IJvl16#$ z#N8C*&#FEHfd-F2bLMra6=m9h72gNQbbf- zsH-l04vne$44z}3s zuGC6ydkavS*?gVg__^cXVTycuxFAq%gIwFQh}4X*j?t@}hMp($MC)|L)lv32_kSQ? zTl6v@i%4}yuR$JUy09Msbf*|ikw`9mzRP=W7z1fUzo1LU=Eg`GK4(y@*61={se>#CrM0 z>Id@>WxXX}>VY>-5~kHJxcqO&p;K{vA*X<}J=MttoLSf(KSlo} z<_A?qHK#)k3~lzXhJ+3#XRKZkIGg}+71Adx;%vnOUMKCU5LE@3k^0ORHx2)?Wi~dT#<>7%KQ*#IY3b=N@*y} zEEDw$88h}|8L?7!Ni?kzT_(%31wKUx^zLg`v#?7Ea=y4Wc?FUuf>l=_lf3na_$;zc zbf!#UdA4lDQL=K(vRn4BS$4@NZ?jQ3T$&u+&NnrkW9FqV?yqd(Mhqf?J+0tdxv^ndHVvOk1aJggTYI z%CRx*B()GuI4xy`T=-533W`a{CEFk~L`bRQ&4W|X48rjd0E%~M!$#b5>iS5*y$eRn za5_hDP9zqf488~Xl(p|ug5nRRuyF6IfAo<9f<5HFu|8{1!?X_g^!25BU}L7FKT-dz z0<7B1=*pV+*wG6fxh-iELXUZP^st&&3p|vAJQ$nz$OczIL&DAjwRF3oyP65OWamFM zVcD7uZi8h2f=8}27Wd8>nE@}R`S$(K52F?x^tRKoY^(mhFSkhM9^ik*K07_@YI9V`uU-^{t~I_~+NJVsp$_@m_yGEE|LP=#A_o1h(wh}htC1$#?H4^_F#UDX z-thJJ0(xGZ! zXmnnl$$Vn|-)1PQbqb%%?ZAgP>G{or@D-kyMFCETX!?}2Eg;Cg)JwsO(w@7^Ws=op z$tYETB^D9c7MpReKBM_Ice2(}+f@**g+NE)A?7Bnk@X-vp)?Qv%MOqiTQ{))M3BgO zv+DG~4X*=>daF5gAkX`7RV}+hQ?4jtnT+x^ca%;iLtqjfi2DXpAw%xyZ%80}hN{wb zrDqZ&|E~G*CP%3Gb&5kH?Lh1A*6$rV=({4PcN^}6(zRq*UKKphb?}Zs0jABwH{vu~ zg~K<%@K6MCa4a%+hZ*IF8^Mrs$b@nD8G`F@{MHyZDUS@9u9D}4G7HLFDJ*3%mYJn& zS_GiXg2~86XUgeRzYU@?pjb(&V|UZdyoqMsq{!Wne~V~P>BI81z37@=3?KA&Kz-Kz z4&M6CVD|~@1a^LXMDuJ|BzI~vNmm3?)fLMil5=H*O3oEh^1!9Bl#VCZ=<(Lrp9<9V zQ9W|FmO676JzR?zE)P-dn8xI5D!Z%%w4adlUEDGwR&1OP?72uR-50;1mH^R)jHYxn zt#RxYGCQeAwLSt)DfVdcSKcg2uQTtLsZ(@}(mfy;z?vbJ7$E7D&|NiA#(W0YbOHnK zq{kV_NwFXFvApPxEy2EM2p*up$T_Yny2>F~k98TS`YZpT*Y?0nt=`KR&;uuRT#Zfl zM76eu`Q<7=FYh(v`&wbDy;szW>-iwAQbbk|kM&>2cpc^zYDR!&DO$?`^A8g6&wRJ! z(#t^0UcI@KmP0WZ?)3O~BL1T1zYow|3*?=}(I?=M?YN8aQ-%rHBZibcuAYXK{Ro$) zW=ck#iKR_ODBe+qJItL`Cb}*2!+s)tX$xMSw`G{@b;Z^0`y;GbZeSwNOV3xu^=f?% zz@9JDd!(9l^&BgZrB+23d;~OFPJ>QoJ_Q0BY!8`QADZwz;DA!nBhH6BXr_R)0-Mnh zU2u(-&Fq=>(EB#6jVkZKDp|2oIcf2n=b$TT05Q-afMYK|U%u(OU6Ouv)fRAHYJ^=n zh3zY5)Agq#*7}`6sv1X1MjKOPL^(Q@&K2}1 z?#T;WtnSGRoqJ-$Ab`y8YL4%e9CQwGN0c0Nrs$2ihHV4_GkW`jY-V52277>=ySb5O z+*jdL+SKjb01~4Es5&Yn`QUuHO-$hyGw~~0M zfb5_&R&Wo$pp!2pBAGOx6qhWk$In;VRLfU94uBQp+@pcaRfyE`lwsvdya|x}J--}A zZF#)3xhr>+tzLT6`=F&=mh5xbQhku&fL>KK$F{WAbk%nKf5KQiK+>5PQNo`$3~fda z7s+P}q+ZgBHaw^=MXa(o&@(G}0P9Q{25xkIx&hjI6XY_C1Iy*~;uz=yu&Qsb^zC)~ zOeZR=T*GiGb#yE+ft5ZCPIuMG&N^AKgK=;a6`$!86+aKxZvHr7uC%51Lc;Wx!`dJE z$Lvcuw3F;j>Bb~>nJ=)51Ci3WWE_v{C5*;Rjp<#ckLtN@=Jo(JiW9hE~iK%}l(>F&7zv(H8Sh8e?5mD+GPI4U#=@3%&4$C&+*s$3bxoNot`0 zAIBi%aTujMN^u;U4|5tsBXZG*Yce7Memyz_8yXekd zsI#=;!&BK|r-J5B{hfl*=W_83N={r9lfrv4vM#=f0h~j#umn2I;b~%$n(+K^K6PFZ z#zJ0kEa-nl$H83rs|4tVtNCBWQ;IL~fQBtZu8iUD)IwA){GHVKN=Cs6OZS&oo1@e$ zU8aq|o(Mdxd*&*Y%8=nO2gprJ>$}lLTq;bwWQ)k=d$u#Z5SskfL+8StQ%$hOlm2G zZwj{oaDtRX$oU`aDT)>|V)5R@Z0cyd}FYP`mGe4Dd-z6XKKewnAGlB>R|{CMJi)Kv$iVjg{r}F39&nxOb{UclJN}_co+J+=(iA zdB>&J10+N5$WVDcSOB$u{(Mj&(C;?M6GVVqD`r!O8XdurPaN7F#c<>MeE=v!azMD<5yI`}W0Q!;9N8{Ff@`qz#>c@- z;T1Y)5m%|+#h~cH$MC0Sc=kZyLGP4BAv723tF5OQ==;^v4BUqHh#gEFhe;j|m>|Jm z^KB|fvr|Eu+h_zJ`;a!DP_8fKK zF*+!NqLCPG{k3y!{shc59gW%w6bu>vh=k4_qwSqBJ`3H++U|45F-8HHvv#Z%sB3#y z;!{kc2v8R&3RG7HSg07~e+S!q+vJ&(sg#f)S9;-1O^yro8+BS>U`*uU-=<?9)^>N(MTzviUL*v8K4r4$RIlq~ zGTk?ybtJlc>BS@G7Os9@#-(J$3Uw$zrRY}Dx!r-dHOKc>0rH&3;M(o!|Ik2xPN|#1 ziQTYKE2WL0S}FDEtkTBKpOeP<0%}ZgdUEJfZfD(xdBA0Fw#|p1_`79Lmpn*AN6kTg zH=2!~nm!hvejHp8sER7PGH}ug0QK@gZ;3iB9v<^`Na`6bMP|W1!xxdQ%X#$rRvYP6 z(l#0y*XTE{$p=96swUjwjtMbrBnf*7T<#Q!g>SkLhs&(kq+ti-Ihi13-6q}p)_D%$5uU|oJPtg>N1>2nM zq+R5qldtsD$x(Ba(&@U(mv?$WCq|rz*K<6mXKnQ?&H{q)T3SJM76+JEQ~}3J>#jnj zpV~>W?XqRqDkF|%%pX3Ki3qhh<6Pz$C3jy51rgN|sCROW{Noi3gH_4Ki ze2!+sQ%e=G^(jKg^2h4@f9idvXo}p76@~DW+t2!0x5-j;#z?{fLh|bQ_rf=fFRdpq z`{-X_jixz7?{630|Twk#C!SG9TX714V8)%rpi zlT>Jvdo20}YwuFzW4okhXg}M0?)@ocXb+We@$WK#;Q(Ak(Gr-j9~SXT&{D`xmE@gc z91ErlLY9L2fBzKbL_P9lIi-_aZ)sWJBxu z61tms_81|$1p!kBTkczOjKClImTP|txU^k5^VR4;d@dmFQNBbMQW@PwT?iYzEdx8y zQiHlA?T!V)-a8Gp$>7NTkKJ!}l!^I*)z6qoTbDH{oCmx#xe%qA$6d}YCu6CTL*Oy= zW|!BCIP_+hS3O2`#bZ}@ek!I;Myo>q$8w3cGRH}+hPPIfQ$t%VA-vy=u{ z-%ZE}Xr8{CP(a*W*YLNppLKU~C}~xBum{}Ja{zob3I2*NfO7lmv$)NgUh}x+TEwAx z{`E^9wtpe@(#bfbu)5@%6P2&8p|YFCm0^FH4(+3y1_ClXe5`SAU_-4uh}?zYoei_XyXw2jHtst zK@gs&LIB?OpPO#fqgOs^O@P}?tsb@JS%~F~@<=y`E44Ix2ESS)=WoukTq)8IiUiIG zPnQkqsY$)kqo}oKa;*cs4Ab0e8-wE;4v4Oz6dzuKR!3sKs z)~&T=at?1KX!RQZfIs17=uZACInMLx+YWMI|yMEkYy>KVd4W`xOBY|d1rC$g2QxeUDB7D<9* z@J*S&!t$M+Ts0gl8b0xbP}3CUb0FlZ1ey{uVJjMmOQgp15JgsG;XD+}7jt>RJf+)$ zp60l1PXR{&5O%~;W0JtIS_aPHppiw+JakjQ7}8#6(IQ5I=I7e+ynq1yZM{r`q*{FE zXA_#VDp3rkNt8OgtK0%p1cN7weN8M4=IPoWT6EH%2qwWOzG#0HX*2Y~+24vIo7uBB!%y=i!b zL9y1#K*MeIV2I!9h!m`ERl^EI+5GY?J6zc3v8JbZZZLpS9*Q71dTA%@CX-FDRtQ8I zW(4P^3n0qwn_tQerU9q;jo`Ovv&&rupO6Pmr?pP9*5S01hdPutM^OghiwNBmvl6f# zY1Mza_i)PRVBJUj!p@AOW9qr7Oh&T3NeI&?=>Rj__;G3JUF*!uU1J?S%6E2 zMtB4+DeY<%HH^!Sn0KWN=7G8WBi)8`oCjGp2iD=qdPX`tVb3V}!2*No9EPGqn2T{# z1wzJags}0tfrY)}iNdzcRIrQ#x)pZX)*d7{uG+JI5A>Vg+L>Nr%8iMhptxl1+6{gH zV2@G(Wsed7v;0^J*P8iLb|l41P}08J%+F;;qb=|uDqHH!(Tm3sLGK+Wh;3tPyWMco0+gyzgb;bM5oDO1 z?prtRTQqK*6l9F4wHYHjkU`Lc5gj`P#U7rBYE&j&DH~a4wdYkXoVaEZF*9E>@h}#O zgd*XfQlw{Cj3| zAj8Lh87G?uKxm@D$9W^r;KRHJL{1+zoIg!0pvxQc)AsU?l0#r_Mk}^jky{Y3PUS+ zsSTHJ)8SisAr*#5vE=W-=sJKX4@t?tW8fq>-R5}JZ@*+;2k@1cuMWa-hWN014aPa> z$9U5HoOnOrt3ISuF2Q)P{MHwIiFOv5N+*uy3qs^#W2O-sGxg}1&Xt5&PYm-wejc~f zB}VTHqv;R^ZPLv~v&ww!KLg~UVK`SQmV&uRfwh$)hraF^4hr9Ghiyj^rU3@bE5z)Kn-iTKE%K3yXTjp+IG~2@9R~ zXf0yg4CudyTfwRduAINjXgXyah45!oe+I+ud!YVq2GS%AU_GFW#x5Q3-JCXdWadWj zX;VhQUbSqOGiEb9kh#`MX!k8H13pjX* zBlh$PaVwsz8GTh3JOXf)thi$SQ4cZx3X=kve2=LBM{PXF_sB+1Cam$3KFT5vEv~alj=DS$WHHy;U){gH#We zX7WMr*fJ;>Z5?>Do;6nGH;qU+I+l)D0z@h!i)lwaWbAr8z>AYqZ7dh(X!|oNf14F+;%NnZVdl`&(b5LsX}&3nc)FU&noRf9DjCZRg>zO zK8kCWIFJtXXI|s$z&y20AKeYLroVzduzvj>CcXM&07XD_dbjf(Z*?f8=HW_4^E0z# z%6g<0{ZuaxlZWndvk;*dGRqRMVM_fKkA`mM+CA7k5L4AW3SEA$dReZjhcy+qr^?Ak zQCglpsV1g4Ee!TBS3N)flbsmU)T}jCP@@_$m9H={6D!b4JjlEokLKNw-N7*aS4>Y0 zRaKEY5K^G9Iwet8I!z0`A64_5bcy8ZSdgwmgIma{Ne?>HmB1>e*;UQm0s)3k+bTKm z-w8O1q67@8mNmgoancRigG{V5MrN-q6y%wOkb}3AcIr*3Or> zGx~;hc$jvQ6kKJ;P46{sywkYpdP?beSl^wH%$)oC4L0Vy8J51Bfu+cYbjTH_*dnc0 zIFCPw(w(}H>Nx2AFur;@d*TzJDN1@A@jh!PG+EW2LLyTfMIXQC~+-XIi6n;c93*TyiCM+%00k5TB z08c=$zZIwx;V7ZJ(0PoIDGhE6f3WxKAgB70gJWQGzjR9XB$z`;v&W=n6Uc4nv^RLjuik z4AruRSn@T*0;kQO1T+cV8bpGN5e;P;x*E#J>7I(Tnze@j<>tg+)e^aqwCeSrR{vG8 z0qbUaI%oQ~l`aRK_5thkk-9}IJ=SMPf894w>%zx}gOW(3*m5L1ai zxYwe)>(qTUBkmvkS4MFRIHINz(0Clm2w8l2KD+kd{rQNH%T0oi_}T8(^6Tm+=?^Gf zWX;|`zQtS1{r)A= z$k?lCIJ~dPe^nW+_fkR=P|RLIpfHR|j09lThf!8uLo)y1eYQ%4SwY`!N@gHu@PW`i za93$RT<|^+^j=lPh-SKm7=^Ggs>^KB>`#xFfW2=iVk&ouW2O!eZg_H4#VJ}~uZGZs z6MzvRji3ylForNw*ElHg&Z05j$SykJ)Lre=%8RdQ9dy|chk;9OSdV$HbW{p8{|Z7* zDod}hj$@q^b1GZhc-b0;)6v^oI0KUwlp9UsxaEKwK5|Ju> zb87S~xx%4~a&@Hbp3~7aPDa-_?U5Bb%mbmD@+&`qif#Em?Btg95r+3WMbNeE4_{Q- zUbz%*y8}@9h5<=F;sdQE%{ThHCXtD#hLlvG6cZKx;^;1-2TWp~<$TUGIIA?pRn}*Z zYK#t=Pi}I%iehr<*a0sv7^gM0RDo`lw!OpaC#Inxg?@C}oO7bzYipAE&(IuO+fyv# z#0*m_4ErpdY0SN3TNR830Il%>Uc}r!xowyFH4Z@>4Eor<%FSAY61NYKQm2=id&x0S zF$kPMsr0v;=HQ35 z-2!g_ge=#Q+w=m!X1}`2O~7Kd^jkrYg`W^;y4%Yp=r@o%+fV8XJ^2mT#_hzt6nm35 zt$&d+5CF9S zA|W4QXmX0U5rE~UIu?dv9QiQEE8Z3g$$UpRHk<)@G=`#&D>j{`hA6(@g#};*rW-D0 zVBL1#_8BgG#o&c5z3Ihi5_Zgk_54$_U>$_voMMQCev|z=7%q4vs;~pHsN#t`+!EYB zrH|Pu?uY_Zc8-eCxBhlWrqWTior5xbAX!PPti&uMyCU*lAdqPTu+NfQ`nhs9>sI`r z2zTK#UeVTm!VI;au=vSAeH4A6obF#G`&YUC8=3xfqW`lr|1!&eBgemow5pQTD7i>i z=LL*|RuYU?RF8VKF$Li$ZvI)XSQ7#-TIyTk5hGjU#CWx@Q0?ZMgSq^|FSAJP?c*?L zrCA5O2^XIrz^If1q4%Au*mv&Aa;mMj+tTo6RE>Wi{F`m`&=Dc6 z9q=FGs7Ez-!GZr{#htn%Jk2*-yQ_jj;#ulMCb_ZUGO(4r?LaQOh)lPvyKMcP^&JN( z?`&4d>%KcW<0uGvXF~n?bXjpM$#uttd2Ktfr0tM6g-h`^;OW_w<@!lp+^5Kq_mm0+ zmB~};`KrjD?S<+ozJ*_!g{DMv@;Qqyks0*-xZtqK4!?il!#atU?C@%9{}p*V(v#5n z(|@n?_81hxXEp2~%Ifd9%^H<2C?iOJtz2V%SKKZVwWaUIVx1L+^LG7JS)6Xgty?ja*`b1Vx+!tMj4&2cT?Wj?hnd+=qhSS zN`RPuYvqJQCT^H)d3%Wjl$jYXPTZI@g6Y7A951-NGXzYLe6UzBFChRuj=;4Of_E*B4^JfF z^BIn=GE+IsJ75O9 z$Cf}CWFc#lVHUYaW7=RLxwlBglng-`aJMD2mJtE3QWEg?gduC*{R7~p=r<30lUx|{n3$k`W8z1OZ8W+X<1&Ng6B-1I$$$?@` z7BQ^A7UA7vRKB2FyL@*_|1ROtU(~r0Q3;)-z=8)4pBnMdsVAzUR|t3vfQjw6loT%; zj0qyw)SNi)&8TKo0`{OZbs2XHe?LT~I;m@8=PeNBWLSe;GX6mxC?h9d)y0aeVAbzh zl@%;Iu;Zk90AQG}3B8`+e{ds1}*%c?)1A#6XPwSkB2CjEHeH>bciIPmtENgDF8KA35fV(V4P z5nCu-e(R99$i_sROLPN0f$SNIDr;#I+@g8NMQHO>S5YSPVUKQp8sOZ5hHj{E686b9 zp)X<8dLXCT6q+)t=2}2aUs`u=t&sz=wo<~-3RA@cU;hZ)o>O;FQt08e2)YrV~--%4Q-u~Cb|>ycB2Sbz{fBL;Q06c{{Xfbl%UL; z2yadW|f#fo`{Dq&_#{=@5F7K8W_?xad=cAl}KCHb}n@7Orlm}P$JG)moEe?;Vc5%{oiH~07iL1rc2*rM zwjnb3^8iRY?OiF##frVNqvC)a88Ee+v@gPFh?Q)#;xw(3zFv2jgu^U73oef9H6?19 zvC~d=+Et2d4;c&xSsYu&m#6=TGfR(~oZ9ySRCwrPf!Aj^f!}&jkG9I%xTA0A3T^IK z(G*Udf;x7-xwkTzePDi3ZaWg6WnZ<^(!Twv%lY10Nvg~^h{A^3@-qrB77?YZvC?MS z`+Xkh@WunvX`wj4Nmy3Xq1t$@w^I+ln~vfu4MtcVH0w4&vl#Vnx`$Gd4-%y(pEmd! z=<8yyRDM=2{JxT;j00C++Oy7r^g2BcdY$k2-ltmT&2G8B?2Kz1^I&7&O$~#9cgHrZ zuU}+B_bBbcbj7a(ynerDwKt3lTH!9H_>5Y=QgBZ?)qB65Le&OZk)fdz_WPu+`Ff01 z2wRA&psj_1?3>^Sj?x*&LM3$YAW9lghBK1b>P{i%1UI+?tz&pVa8N|hLVDfk6V6E2*>So*!u32(vxi)bF@}*Iq1>?V6tRYtr+8}5k3)lDaG+MY z*qy%8axM%$D)^$lX~>3+AjOW94Gzp@fCaWyNI!@)1FmY1wH{q=LNXQ zfg5iIpns_ln5MbJ_Wvxg>47T@tXe5x|6i>6|F&JIm5RTmM35D$Cm)9l4gJ)S3XT1$ z?@plDPr8-3i5^7wQAFGXhAz!#kZ>9d{nF{07UsjIrU#C}zf1};r;{0PrideGPr7 z8nQQQfmKy4=6$6omv5B0=(3Za>Vi2?PsE#H`54j~4W>Ju|@#rg-yGUyU{Q5M2|Le`!9$q||aJ zq;6pkUq!$-mW~xn1VvwgsO$h5*&>AgGTgjIysrEjzX4hjUvVGci>;x9~;lI=&oc(usC{Y_peBgWm+N zaCpEppk7Mb<%6X9QY^T>54z~?B7v~^CTAMuCX|4HwS)u zFw5>nQH5{f5}a1~mWzMzW0WDx4rw2Kp9!J8h$LSjo5-{_YKqs&@^Ha z`PjddD7Lo$KRIpwtNotEN!m+Bt`ye9|qf_NsBNTrNxU>WqjL<{4{%hczz&z?0=1bKQ)bI@F z%IJnqL@Rq7(6egfY3E_A&-IQ`%mWv(cZ$f#s~j0Ee@6p!lP<@MsjI$nW*O}xw->2# z_$<@|lw2lAWwQs#HfK=j{ki3AkJ-tmZGZ8k0i#3)EA>w~*F8vI-Ay{5?U-I5y;Yb} zJ$#ESAhaJaUzHRL z1L6g?iqY71)%}pr!&Jyqo*>7X;<`xYlwGAXzUfqIu*Vc7J^T6%xfiNHIpuw`d~0Qp zLsEu<9$hhw=T^+%Bws)^xbupgnn*%hIn5_xk8@fo#T~`LJ@q+><9p%q?=225HmV0@RKMSHDXSUb%+$%9W^K?UZug`eUe$+_I+F!k z{pUUL^tJ5`Nc1BW(1lOaz0BU!aXKG#OmGf6@s$Hfl4sF)W7E@LiVodpLn5726r#9X zoyfEjM$pU)0Rht^B7{E&7vA^MSJA_e_njP8JRwpc=q&nDr^sm_r&D0OErK01V;G74{Rq{^k5E!IW#Y0+}nb^4E(wb3mph z;twK}ue;AKGC=+Kr5_LWBIajMbEu6RKe?+TSXGS)*pSxdvGAmh$4@?QJ1sqy?s0pN zattWl&`aM>Uksw@^oVY1`S6AJe){ReYZ_G80!pH{>y%x*=3yr}3{bV(s#w}|MR;SE zQ}Og%NGzZoFjD^3zE$BH>Em>7Ky185d>6=8Z5aw}`(P&xMz0MfD0+y#uIK(9*USaOda5GBcPQHPw1l|}X~No9#WKVh1#os-r=NWbv2;$GkJO?0yx=T_ zs5XV1i%F(HJ5e}N>D-z`-vk+^2&^6C#F6h;TR{;);82{iRY~7}thL-^*r$)5y zjND~Z+@Yj$9-+rV9yCo(e!|sHNQvOa$yozB-)UKdmRrngt*B0Q%Tcd5vp68CW^^L8 zID&XJa36c|{zQ{qa8+A~n|6uHY=6s5fur**4`_TrAR05omGBJW+IwywEqS>PP-A3# zeN~Se;ni#dyHb3`W!>3)&>?$dpEAf`8~y>Zh}2dgV;9Tt##ZW9Qx2Q$Dw>))|H=s=BiMOk*6>@ zw^4QhD2uo-^Hcptd6(l5pZU&Ea`@8+r(M3v5 zElHh>C82xEA{tf;E>eDwG&@NQT`6xu29Qje$X`}jB?7{7hH?I{z5o9mfIL4;K z?e{^GJt3kLP2B2koYf>cOp>PgCt>hEP;*$6VdxecN zR%|dPR$gqa*6cz1;?*JDZT;f);ed&B92Ezyfrt~{fr5;72`VxxBy}st-hG9L(M=d0 z-GEXID6qslyamAs~F$vWDc9DrhXZ$2nlB&&>o+z64aaubW`#)~MXGOsn&mOP2c z5MF&yn5%T`d{Dm+ea-?N5Z`H6h<5vd7VK|myr*`|0E+hg2i7WF8JxFV*MK5dM6%0w zv8&qoX`MiSiFtQHZXN)q=KPIV;UU73N|=S4;x?r%Zz%#k5AIHPW9o_h@q4#_i;jo` zlU?16+0`RGX1~%Zu|Ja^X$Cs)2>coRH6^JPTLKTBU(M`XpR^5k{`Q1EZNMw2jAXtKi+FqOuN{IEapQ(Kaf96nis_ zS$yp6@8l7RP%m0{j?CYAqrcC zXhu{IyH(*VtOPin6*|&(>qNegF1c+ufIi`*^#nj%n-W?s=!mui)piPES;k@kPJHwi z@IuxyTm>ZxeC4M5Q75`l3Q6Ioo32V-#vY*mLio$`uOA|0UjKNh<2AIa{&1-D5?0!a z9!{br4%~5a`jfc$kA@ejr|oUhCaN|KM8sL9`$) znI7gW#K7-xlKsjdd~>0Js;bnipmsj%el-k*1M*`X|5Aw@$PV6O3i0oSUgG0xP+lmJ{9(a7boI&bJAe-Y%F)fWMQCCF0siT` zyJ~l($gh-L+ddi|m-6!<2*8Aq-sX!`)W#9;8Nq5LYp(xTK0DK>>vzgC zO&otUKl)8=R3C)jrZZAS9!8;_aySv?m$ z$F+B%o2cwo2ps2@sG+qOk3i2OXHZs}G-@zfb0g<^h-}_exAJ>9u!E)bcOKq^9+dJ%)EglZ!|ow`swU9O!S_KTc4ewy(<)z-l{l2O3`SqJ#+OI; za7AAAYqZTT=_35Py)0AGg9F!Mu@4^-ImJ^EF^#B1Pe?gc2ud=xipy>aU0N+ZUccCP z;hED}(u3YCJ{cUPTw=1z&xL9r*rLn3e<}|Ntf;UQ-4CU!K6y!G5zU2UmqFrD z=*C(=C`BwUs(I9^jfHqW4F_$NY86-}OP4lMs*FhER2ln9TbmLg2V0x%!WL0Eb3c$O)8{Hgg;Z(DCK84U>cR&$$*0G8??F#g29IfV!K7gPY;n@ixBA8 zgkkvnp(2n0)ZlTMlE7>aotq3-ktVyDJLUtqZ4N3VUGZ$3Yb^Ic#q*~~g}gEceG`&7 z$8hXx1?<;RAb>G}JoFk+6lR3j2I5^2Pem?0SVZqBTHcevwo3FMmU(3{Yj@$PONuX$ zZG(=d--fq#K}PiE?m)FFDpa8)Rul-*(UFSVIfFTE6B)ic3AK?5j|dQhlp$3V0;t)D zk$KV3XKP!ZCFn_|91j}MtiYoGw(?+d_;OLLi~Rg%Wk0{+nY`%Bh7pqj`e0tNXr^$Tr7p`{D;%|sf3L!z4&fucaR6^z*Gv8B!rZ_J zivz{eG(OT+sZUAWYEc$$H&%k+a!-Qb$&>>;md+OcTKV9SVt&M`suuGQDfJ1%GVg)p zCIw_V+(oEu;og7{W8^sd+X2Bu50Q6pO~TV3LxcW6`uu7kcoo|D96XG3JOdQRyJm;u zUEiA+(+KpJu7?g{%_mdDN*9_{c8I<3aXDSX#rqR+&-N|^>8UI)o*%TiQ$Zj$n(Y4b zB_1RKRWMaV`fV-Wi}v_Q9UWSko?^GE$~P)yOM5~9(2mef^W62i7xDfOJZTk>6XC-B zVsWfswJVhqTOSDJn0=F*5pBG}s6uQ9eON2DXmvJND|cO%7;uo$o~Qsm)3H`;hAoeo z@>&RAg{52+5rE6RwJ%w`GS!{+&2@?tu3}ZdcGG~a>H@W06Pq=>EFD8oGhr0nAw}yZ zC41y|Jm}~cj?(0kG;w_U?u_t`xOfO(>M}UMxhhJ9y!*S$a+F=xztG!VMQ)KH;puYH zU06RK5cH)IM!8P|SO#TX>Jm~%IwIkEqpH{nEgwsqv{t%O-wj=Y;{ART>*~+aBk>kW z>ivFcdZa;+a0wB9ebbNmR>kZ4{P)^$&xI0B`?_(7#FiIcOn%|TOrLI9!yeN;M=p{P1WLoC|efo zBLl^43sEEsMLNq)k6f93~-$b0ot4A2rT$95eK{sB-#HC35A!)*C`x>5MjB#%}+JeYLbsJ>)$g z=acnvnYNXAck@dmzfyhR%Ej}jOVb0AS=^($SRdh7PYOkWF zAdRK;P?Z$CI&}PwtD~P1w0;aAL=y;+P_+drt414mNBD#Bn2?01%&?^^%&@DijtQs3XxDv9M@ zsVA?h@Jhuu(+hfard>N$JXzyhyOjp%ib8m0t?}PjexJEA6qBnEeNm$kpR2=ty$-!7 zS=xRTizRf+h8|S1Y1ob# zd5O!b+bEiwe{S#RCNRTL!%aPI0As3UEGERW@@qPq3sYPBO~Mj~-`Qlru1^@2p2;|e zr};x+p2%zYdFX{8^_64<2|5f(U4UBTfHtE8Z9qNgG0n3S;CD!q4!l?eFIMVKO;wPo z-#F_7V3rk#e54+RHdp!z+FaARed0nrgU-})yy(g2Jg}W?n}r4ZpdWjpO>yWe1s&H0 zRKI$y=Y|Neh~}TI7~D5@i}%T{{EV|UuDGzno1Cc9QI(^lj*^T|nIoq3yNroDj2p4X zbJ4H?`T4K!U$t7ff<$VK@=@QJ#kR4x*=tj_$y;p z^rzzk^8kX4Ku)f>7Wwk@q0x;MywM3|H1AfDH;F?@ss5 z)OSrh#%kVH##=izdSFRy4FC)BZc}kH)t76ndG3suGJ*w&trP)iXPyZ z_MpEKGSox{fi5?Zp_UsxJ{NGWQ&h%$3AV4J4fG^OI|L>QiJOM=-b^GgAdOJ`Cb~;2+2jRUOY5A6 zb_L*Yf&+-0zNIScw)`G$gAZ!oo?kuJA>1Q#(>oGyuYbYSE8sX}d;#3!?#j&_+ka1Q z%DRfwD^mo*x^$Cj{ssdFvwQ>n^uc^N?2=Jz4U-avxjfS@J+?Zg;1sB4RaXYdePA_j zU`P*GtEy3a5CVMI2&%DU0k<|Rs=Di$*-EJZhXB)9s#f8#Je^#-1*pzy~>?8@Inx8P(ddWxPo~bz&N}Ej9@zfqO$q8Fm zPDK5@a2_ZrwgWt`7Z9gw>pZm7mIJafC(~<|SiSr{6I)!Z4VXTZ{nsUPro&~mn$0zC z?}R?AJfratex9XcjU&ba;;J-W6n&DgNh>^$5*qLG$~^nW+@-3EDb>ha@o$u?X_j(_ z&@`KVG!tIWWqLLN;{Ke(c$lgeXZfV4x0tdZ=Kow7g}Z2iL3NP4FH5{g;g?ZT_f#0MY5zD@ zdqWUxrM};-ue|94dX1+c*tRb%N?(O)q(=%OH0BL1B7il6_YgeFDX)w4DcqH{a%WRT zvY}LNozjYyoj&%tnVJ{6RN%P~1G%9cPH?JB38yBkqbaM#iF{nU9UHzEJA#_r?M-@< z#uyM?F%NNyGN<=QRse`VsQ?+uRvv+Gx%G-#kk0WFP^t?=)(gu7DEyREyd9@8mI0RcbK5(hS zzjXD*noRWR5pRWlVjP#RPLzen#DgeenU)mDg^Swa;{;VS(~^Q1 zLu@2RG%a6Z>Mj)cwtP*xP2|Nm5VPph7kT>+0Gfcq?^FjHfCtLy4}l@;0k**&hyqx? zX32aCguo;(3@GzwpWJEnQiI=ZUkNEcd zgTurJ*!2vee$0sQfJMgV1<22ssfn2&K5mi0ri%zST`rQ2M`sJ~ahLM*tmbX~Q- zuW}H_2Qn;k&Wo8oE)Fjjo`J&Mx}fZcUEEToVX%k63$K+HK+Y^>W0=sr6p+(}CX0`= zxvHrfW=mX&{u9o~ql8jiFRF06k1sbcZ*p|cuW!hm=Fx8?zUHhz*fLfj*0xAm&P{uaZ?qSRJj`S<wlrjMdNN$rJu#8vu1SLWr3M*J78x7O4W_~oK&byy!P5VRihO1N%v`XEh;b`YH^ z*^(D!2;_Bym4lpDtCXL`0jh7{R&p6189=S-R)QquNHVf8FD{53R!}l?+hMJSD*`jabYDY130o^{sNx>EmmUt&eRnfk1o0ih@8k@q^Z$Tu!V{38 z+mpNihC;^Eao2kUs%?-d+UNjH__drA3R3FR2Qdf`s_YT73@gNZ=NBGJ9zwKmj66Ly ze0pqTh+BS?vCuJq*OWN%LVk3-&KG7rQWUjV@Qqj!46Fv`OEl%H5W34-(tJb9#i;{v z9Tb9gG6w__IpwBi50E@qjc6%Qj0TbVQXj9BUbU;QM0raWy-c2LTl6YjU$lNgx61&s zbEmRyhE{9}fL+@gp8$PtE)@6?_+ugH!(0a02^&0*wgUJp)TIrPLE3Li=p(Ydm@ zykDf+Jg+Y8i$q3prLd!yU%|=O%Ym-N23?LtUwR<_v^~rDvZH^5As%E5aU`!x5T#^xs@=i2nV_F z04KkvVU{xg9T*O3@_Slu!j)?BrM4@Fq6X|N85I*wD6AB`B5Zs!DUe7LsK8Cr2;B52 zw~Ny`^DEn+hj#SoPpDcYDd;#bSEbJX6DH4Ax{O$bh}u zUbAY@_18whK<2tn$~g49=QzSx-LC6`V{IdsDUhMbC&`$EjCDD4z|3aZB(qwWlzSJf zp=r3kXv$2lKk&MyN34wru~zD}MZN-E-B?wzEk<|-3=dOH8i+O6GAC=!9-5Qb2`MT? zMrI}c6pCUvG7Elasb|&Zu82+!}1@{sLDpye83M8ZBz*$g}V1EZR%*B>+d^AtA1$s&o&L^EG2? zXBNd7(U?ui(IVt%(O)ULW!Zl$F27$sy=v1L@9`MDXw#CtLdHP?z^4bJC3BT22P05+ zQdns+2+5$;vkr2wR@x-2dZWUwzJM4MGisvQ0Fg71BxYrE_jjWIA@jCjGAUzeMYV>F zt%}V<8WLLal1fosh{QJpjn;tUH|ywaN6{(iA~Tu&Zp9)sKJyNZVDw#- z{5vpwMn(PygoykP9qUFq)(uA_gq~sCyQj;A zo#HS&z_phC8C9!MdsS4dW{|z032!h#O6?`q?xa^d+YeTL=%+6U`5?9Oacf}ELVz7} zrT22eLr!xmpBc#<;w)hX!KFB@o6cbONS>|zV*u*e(NZ2v~&9v#QRdl~r z9)7kH5AxPBR>e4a)X;EPTCt#-$!R?`HPfbe?8ki}*{C2qBm`1>WBpsB!L_AIfT_cq zoB?}_+W@f+%%v} zE31q)78NU3UR(L%^G<6jMLQmtn|3BTvJ`YJY)EroW?1m15eeAljcVCYPj*~ zGZiR$3PUfQcFOI!+l?3bL{F}Yb88jenTjnl@x6Be}-H#7ltlMdqUa7AqX^?ewe*4Qd<;f!BOk@ahH4~hAIR9pBpV^fk{cW) zY@Q166o74$0)P((UOS@{Vg3ADP8Y}}a1f11>=zMvsU-n=t6_cPu<|;Rm5^07kIgnu z)@JrgC~CjFeq z7|v1;(2a;b{W7RB!orf`wA;AJR;0}eT&%X+EHm|{H0F3mFrpfAnQzmTHp$^B!*cIr zV=)-hlY5qvyEt0&kV(wzi~;$%>+{`+Yn|_Uv{Dv#tt{@6LwBk~7^@bps#zI?D*HV& zo0}cI+*lcnXJt%>y~{DG!58*_JL{xsXW0{N`$657Mp@N)S4om>Fh^t*6&ZF`#!z7d zl_$y>j0uOW)}VMWagd!Xj#~jt$&d8PWV>{-?F+Ylk>PL(@x$De4J?gw!wi>5<1o6k zCGYA*QWYo0QDW9#E*FU!ay{sJRF|8?ttRV?h&Qw`Mhh301LJ64_&cGx93XEibemQ; z_~vy|ce%86nbIZr0bU&-{eD!kZVP9$N*@fnLjUI?o9K(YT5aqg0PHv54;w&f1()}! zx8Uiy1N?Cq4g0KgVD8kT==fJut2kE2{;YE+-6Pnj?7PVZHJ4;S{5JZUE zWkmJ|`bPk3q4L4uHVk)hKg7j#l~iU1+H+)?>&I*nD|MbLbugX0vf>0;e#jQevy&y! z5)E`&n6C{V5VXcK1g&wA(y43-oxE({<28GFh6w3U?_ioW$XY~Das}01jN*8q!bou@ zT(iF9Z^9~@xC&4;xlz|5HMJXA5xdb$*U?Fgp&L6+3lT}kJc&?rm(J3@D`IT|RsdYv zh{C*WqML*+o^BWFc@o2e)`^hT7*vi)vk#CIRbuzXE}nSpyvzi3^G$5PolGw6!ln#( zC|$h5x$91}lpAC*Dm2NtUq9$H$C=+w_%a>&GM!u*#g})H70;zNiKP@<9I@jXw80v*<2~abh)6Ml1XJN4Z}h>Cv>&OqK`ygk?_uj0UZ$iY1W$Iu zM*!%7NDlEgK;EdwIou1{*iRbrTL4h@w%-N9^0)UCjTM_?a9HuyRQ^(?;nMNMoWchM z#V69L_JdT~%F7$6d9)4VT2Qt`_1PC*~Ot4lKYi)3Mx z?MBhHdwmZw(~4qS)$N!{`SI$^PWM{4IP<7*$POpJ(`L2M?YH5A}ry zmw&fMotG`G2neD3wT33(ZV}(W#D-$2;xcQ-vn`K@SK5uwThSPb*Z0PiM zwnqsA?m;e>hY|k%N7_gy`V;w>f9u3S#}ga<99TU9x1PhPUVq+*aw|Veoq1!8`MkX( zxd`Hu5}p;sSLzn2pGs5c$XG5go=T4OE(%{%UhGkS9`g;;ZEbmnQ?oezrOQd)`H|Bc zizpu2?&ja{t`a9KfAvB#X)Sv7n-x?vwmf;%rHiTe8d{Axee2+*9#T_}kiEv?XUs_o z$=9b$!mslTg|B)0RBlr*Cq!Audib@FGWkt!ntSrb13=pU_35dE*QXZ*gj=I@#tGF% zo1&N7K2SLtHPd-MM??0FPYcDuFM40-&9Rla`YhUSX|#%DSno}y6@E7r z&iih*MX>gslvDOkzu)rmrHj|afL*=6D~+E^yQO+?F?7|*8zMaO&)0GbE54}dOP7CT z(8`cC|6av@s#jNr4lVv^WQ9EV>vMkvIUYKf-FU>n09I7exAlDsLiG?S@PC(DwtAd$8gLcttRM5>(Gv#;5nU6JN{;klAh&MJz{P{{=0@k9et!=vI^WpZgDPh0H>m~xjGYm5u$KA#9g|M(gA)i1Gj zPMDYQ#Vg0ui;_K+L~jpn+lJ{XNLM1FIsM`n6c6f45TSoJ^a7;IL4{`%H?>qai?-lO zJdvwSY_)jicAWWez=I}GNt5Ny+4?)T&r+`ss%%OM)#4V}p#cJ_5man1o!ew;5v&Q5 z373F_LKN2xUM0YW-1Y}hvfDDltvzASzklJ!Psnc8E;?1xQOWlYRde9;>ko%L4|F{f z!w!c3eD;B@EGooGI0@;6c^X{T>Mh z{XP?_W8~&nb9iSID!JFe+2Vx^1Fe z(mb4Lvj15AKFMa^v3cj6vf4tK+sbeTg%e>_Asytn4lxRix4csUkMt*J^tL=<$L-v+k2WtqrOveh8VH; zrfy8vwLXoLbX`mmd`%IDxXWDdQIZU$eV#|SLAEoiIag6r8&meCHR~@R3Qc~Y5@y+Z z?5*5}pfSVQesx(ZoAWM|uk9uZzO#F*VBoEcQiFIbBcarX)MFWgSajk|cWCU|NkHM9 z&(sS#BMo`Y)+<%WDup*BfT_}Z(2e}q4X;WC#Qg-4PjUvIy?22{A)RLDj06QWsE^?q z<>|HwsI2SfRvk0dVrbcjN{3=hJm#<_g(s>n*Fw=RbwD>YU_HBGSN6}q@7=szUxHY2 z%g)6=T-rXMaD+L<_08Rv;!rV2zABpzb<&|+}!6*f;dm-?m8*XZJJo6{oJn%YLF7*1j2o-o^gm=4XZyo4Oh0i-y4vtb` z(b#u;{6k6DyJm3z8C~qqfR|Px_K8_=-h65RJQ<*o{ANHXAXnVAgvmNWHG5S~G<(7} zn@WM?5lB8{i6lEH!rKDS9(9jy&u$!OG1FtA=8(uzVt7sk>`biO^f(i%*!Ks5wQ8)4 zg4HKNKd_&cv%w4{80d{ySfYn|*(EOu)tz@k6w9(iN`_4r`vDA6ve`3b(Ix+lP!_ab zCcat%oz6Tf+A3WBIE?nvRLhploWTyQr4X)$dCb&WTP?R+>2ll~ALQm(IWbo5bgW!+ ztPVV_A^gQ|C-C}blH}cc-`;- zb)BTONmUGd?In$xZ(_={%U0nj?& zm1Z!+FRV8;uw~NCFTKvrc;RMPmrm*UC2p)T;?ve_?W7koZo$!q=|L3B(u9~zOd)YI zc)+I%+KOnMzV${aTn<7B-Xu@q6PxPl_C(8lyVT?sLSNPkJ_oEGxl%=CY_~fufX%(`trok`;yb}k#P$Vw6Eo-0&~j17`0zF(C&J?N#xpO zL%AK&2WXX3EG%U$U6+YOyfAYhM6k@tr%kJsp*S%i9mH9|gBJj)jgx-g`~_--wsv{P zY@OB^HsygTIzvs=GD+RQMh@Sp8c^I_^Rpld2Vl{yca5{h1l3k2f!Xx(MYO}N6hLpZ#~wyx zivxdy=N(rx*YIOGmOj_!Cas(vqvfk?slg~bkk9R$QStV#V%JgRwD<8&pe)j0E;FHJ}dtyE*oJP`mC8 z=UuRPp43|p(>wsZ`MiE&tt4UT!~GPh7>$vYezm90M(S@9X~H_1yZe&K*p<-e1emiCOb%9r&0ru&uP zwXH9PCDwdbf{}57-`wN_L9-yVxhpUf1&`fcs(T)})e5iUK$mYqW}YF(u#~#4rn`?Q zrI`iSUn$XQ71aoCaQ0db!HBmBE;moQ0IK;~YSw*hl|wFuvW@X9odN9Bi}8F_n`xW3 zYonhry5PT&yBV;JPBNPM=!>8_mj?x;(G%L9!=0r(S`?4T zzR&oqW_GnE{L`*hvnS?5_6u(~31;TpH-8q;EOW2N6t2P6Qd08uq%83^6}HWiU3GMj z17|b6bYz5ZcC6U&#gLf3?OLhb4Lv!L*Z+;_{sSyr2XxRlAg&EEoxE-E@&tXV?uY_J zj;QZa%6m)t^}xFAxi)Ha;od0$9kuRv#06Qes7VW}5yED!xM_keAfRt{lNUh3H%Fl2 z(YF)|wEE1PIWVnuX1CcYTD+c&%Zej2wFek^e@ZOd_O)K-sb%ii=pYSh0iJUlHrM@~8d@Q~ zcYR~e`sT!ig^0w{QL&)wFLMD&V!Bu0r3!2{PSmuJmeL$ukA=gnJ@)+r$HXV7+ZdG{di#vDxHFNn@ zmtQN@2r9_m)$EX}ERs!l@2iX}-@r6*N1q^0V^GiYJ=qh;Hmfhid^qJxQ^y;v#L;9S z$(>e$v#A6{(w1h_Q4*&P23wda;2!J>(^@4mZ6jfEWE03huE=St6~y&v`@=y6wnr* z!z#4rhray0gMgPV+KY#gSN+jb$1e_11$1%Nz{8S+$~k~M!nFVn=z7f@f1@?#A>v|l z>wT#Kp9m6lVb?SSiN};zvG;Km&uXnF2BZS=6s=JN1}7C#hiR=+ye#FSO*?}NmMLY$ zQdkGao)e_~ZAYQ8?YJp~pg-}BWQ9EC0NWAYL`lFWn*~;?9v*tjdZGIM{VPMV@^I3Q zbvt2CTRu4Fmx=&@HH1fogz`%7VWmfgP;PvIv6DN!k}W-*G<}I88clRHX1|;qG$-|| z6-Ua(zK5rLo89IUH_9UMa8PsNSHY=^yA1deCDuCglf&($Z=0&`tvn+D=ipcs#|v|H<11 zITgh`{GdH;x430+9o;Sq?)>oniz~-YFtrX=-+0+QWbIan?1bUKN-M9xQQVWK#!$Gr zS@@gI$!7?E%W%2ZssT{+5=11S%*iMgTYeutHP1>fCg0GvD(XtbT-l!*=46jbpSZRi57ouD>0^yi8o157%)?^6_f;Sy%M+w5c^;$|*Mg!I z)$Z^dcw3?d7;G2^u#OR=rGASG@Rwob;B0F~C^*(Uxj@`=HG^d$Y^a`A@t_!Lc$lrwm9lKhmBo;br(ZO}G%iy0tYYtH3)bjp-mr3H)$Y$6gjTpr*W z2uB$6)d^YIlB^7ES=r1oi=^Q`Sr(4}2BxzA>bv~TZ?opT>_Ko;pqN3P^0ix9cM`xi zaV#4w_{Jg1w?U!f-IyDoUJVTP!Rb%tDX<;77y6RaF8EY@wzAr#bQ)1QwI9P=h_6)K z+qz2uZ16r=q{A(esk?MDrEo|wLgDz?OE7py4=`SVipU~z2X$Iq$MkrVorCv*r=T`|-y&H@Hg?hU|-n_vN}deOz#-~qGtI%Vyx=5K(`$jFcMZShsU zB_GZa;d^tp!esw1CsXS3t<4#}xWGd?^^;4A$$(ETU)}r=U0qTJ51%mxzQ25#P6G{o z^~)$ZSxWX5>guu_-__h(Qo8jA*1B{?%2c{p#n1pj|pMi#TsTNkec!T!`qq>t&lo4{{s=Ny4fo z$f~Et`fZL1`8seEAjd_(@XbZ_`F|HK1-EwF`h3ME@9R(g+`Wc#QNsfSjrfmY_ml+CUNN3#@aD^!hI;^CC`@L*2N<+UA|yLgvSo6>COn~ysOTrCHO+%W)ZOzz z-quD#fQr{Zprv)xJm`ncNOGm9%AsDBE9t8Sp9X4q2B}HsBaF&HOFbM!)^`fpn!ct^ zvWM@sOb2@7-7&8SE}HRgi7r1R~c`5CAa(mmDrtB=6%ek8aERz+BfiRQfHIT;IQ(3f>QJo$@gynDJC5!-vmsQT;|@fbFQ8jR2H3ajlnDhy(jlIQ*vYOU(F$ktgfY834HrP=Ga2!PW%S)a#)#7%h8%KKAC~Un7yCbE`YqI_MYnvuC7HxTA;oR8AO_TXI5L zK>gci`%a+1wR{j|=lU9DaFFGrYIE5zR7kICfT-Y!9w)91sM3PD^Gg%TD&Wb7)iONf zF!gDxJO6^*brZjJjO{7NxTqGrVu$SY-pfPBzzt|_hV@EB(*mB>nl=nE8K0Y~4OA%N3uYQS!yuBL*SHK?Iyl(JFZ z!>zO@U$xLA4`pcmACwH~%q&n~=31^h69#WO2UxQvtf&RBKvoLAq28x|o3_%$CHy-F zU^BuI6Cm5~x{%V9z&f;*EVq_Pj96Axr>Gf?rC6=Q^QPt#Z1)0L?N;Q5bDkyh>$qsX z3!d*E*Uk^>>!(pzI^#&3e@93MSGWsSEfxzd7mK!w#BeU#o@*$p^b&IW705l@>6L?i zk4JlSq3Xb@d3fgrw{}7%#2eQgj#0ZQpOUN?__p87w;G#1#Z`S5*bf6}o$2lhk+XMX zl$5a|U`|`)jxBO0g{%6n=%u1ad@!G0WIcr${SxNWLWd4x3Sz0=q-9w78PR%s)$==x z`XY7bBDCkS41!*Td0C`nEF=(tE?!Yi2)s2BakdGw2zk-8SOO3&;^nS*az~zsB|mp@ z6Yu%R5rjDtBOY?O2Bg zMkmE~dA0w*2qlVE86i?-y$)hu5E7pwv##Myuh&mR3D?i&oZk1`h(q5O?0ibPGea&&7wUee(-%6PSYej87L~WXH zT21RL&xcp;{h2s(&i9cWXg|7rEEGRa0)Eggmyx`}ubgxHCOpHdRSwQI zoQT0DB^w908#(@b#;2MQl2El%x8vEz)Zr(AybWh6QgA zeu=K8wqGe0b35#)?)_HC6zJCZli-TRWd4xBf4bj!>eS!Gq`t$9zTagC7a1CNGCyD8 zL=w$U(|v!-G;BjXc@AXTpqD8x5}8e7eYXs!(GNMpCXq9&R>Q|s2H(&q4FwZL z2u^6z%gfp9r#HQ9e`!1WFZ1@xgcSI4g#N2}z~S51i7UU7Gr>&%@d6N)E~+@g82}1j z=0k4}BAv+`)OKt|FM#$OS^JCLtdxAHc7?8g)YL>J;wAv*R}&&?l8q@1*ywqX$dP#8 zf?onTkRYmg4wXJ{laYe_#OrDYV(u0-S5v%l$5$SFhL#E1l%~b6nWrNtmy-Rd%)o8u z&7+s5;6Oo-q>*Ro2F}vW_V!8EyLo6d<(=KuN#Eo$_Qu0OX%eP(nuOzLkyOG_S5A^B z90YkOjW3TLfbCPg4^jHT)Zrs_l2qI++Y5Vxe+NFW(zTbln}plNhIFVHBVz}==9aFe z{elp8%Xed9E#g{?#|-jIXxU=w8b1Zf470*=z<@0)4=Gekmi6h6gagjTw=TsU2p_!F zd%H%~7&o*j)D&vAlLXefLGao}{|I$cgr-=N#+lN&oG_n=;n zU4rljJ5HcCITcjwgg3_DE|(s}#^WU(C%+{=CAT!Vp`i=nr6s}(?m=w~LKLDaH(e*^ zIFsFZXQaT<+b0vQbAz`!VafFS@Tydnn> z3}V>*(USOHIuH`3c|dOGNa!cUV>NE7Pdi;i+@F8=2BOa?aoHJQ$_=QxUEb|*zl-xb zo01Si!>tn?v}COu^i9)iV;@2;NC}J3ibwgG(omFQkcJ{*>|T7Kd)WjXUR?H6+aOooyx;P4_f2+G zy{cYR59pQuhS|vnk!G?*{_|OUafenc%em`naA33)zcPgg0}w6)P=*?Obx`W_lZA#$ zS3qERaKVJ#|Lgxa`_e?Wb)4C)WC_WVWJ|Vmt-&o)cI4GRaYhv=pM38}-##%)96%5R zK@h}eg9CaHMwWs@_8W&61DU~jBm=-y5os_SMj^x;Ip{L&>KG?0v_hUtCxBRA$EGE6 z?r{5sqH1lS))w}q2_YxKf#H!W#owG1t?K(*7AL{QwwK{P3EIaHhm0D;1I406yLzEG zVa<1N8KQRR#Lhy3vu<~wW!&mT=8O!cfGfzdvGstyj_5PwzfK{-gv|)Cn@k9?kvss> zQb~vj$5~z_N{|@}F^ew5U?G^SuYe#>$m5n-_bRNS3a43^fnw}7mcg>@AJlhO5v{k} zPB>7d?Qfc5`ws&OcS**WmqUnT&sF52CneRB{O}+zO75nxrxy|@PQ|Om%va|7Ts}UC ztSRQQ6Y+Fz!Tbx}rF9ssFcPS!jQPsaHp|5aLT3`aEi|Q4;K0%$l&sFA*rcncAWApd zZESQc|Mj$899_m@U6;kW!~sY_6t=%01~4IBsQ6}GMrrM*!V!?W`J;8f>`eyQ&=oX! z+0i>n%cL?OD~LrP=C-XU4>A>Pf#~mHR`F03!iD9?$bj(!AaW3nF`?o^>hl92;s8<^ z4-p#VF+4n6%J*4s?&8j%EFkM}14)p=DgrO)IEXH!FLw_Qz^tSIQVKeROs7*IArnKM z=LRYYy^)=LR_b{|Ju;}PAmq3_^}r$Ee9ZCuwG6vB@bjo~c~=^G`4z&cWOF@M>#YJt zc{T2EmuFLGfgCTAy^7SF3SaX_NS{$!S&o&d^bz`|bhZ%(`W~Q%0tN!Y;1lAO&MONJ zk}D+~Bv*2%sd-dd9O8Q(*zyBf8WKalByRGn zH2KmH?NUUzyFNx7eINBG?dPs-XyjY*J^KWFOdk6LI%;|T`L>PJwwrVtc>wI43q+{k zuG7r@0PkGp!0_tTz++pbe*)1D~LSo0j3j z{|&wZ?GtJTSmFMkzZ`O5JsQgMs5yBZF;uCO^cLfj7`B=_+00jHzL6*1zZdUD>;K$L_a#EAlHOzZ9UcA|PQEE&}pi7R~av7sbqSw(L~q^%0s= z8Zk)A#_69+CZH1OV?w3e{{f8rK}-zyNZ8z?W~&gnk;XK0D@*W~XH(8rQ3&nDa$rXmQukns zVu^vfcmbrx$W)dW7f(U36#MRJinZ4s`AT~_iedEmB z#oGwu09(U=FomW+mpfUx6Dp3crLp*X9{h!l^x_pbp*{`-cE3P!*AI+Qh}7og0tbuB z8`Gb8`taey!U79JS~)TdA9nSR8nKg$K<=kRmhN5}v{q$93Y!m^e#VDO>;r%RbIjT7O(-- zs4Gr56oR!1OjN_wnL=sQr-oM8g`NG2boMXo>|fB2xv;Z;`9t>Hffy=9&}2}q^yLrl z9~Sn0H)L@wrT&H!j|ty%R=yvqfpvHmq+gtmN<}kO1V-v7bwW4w@!d zFd@BuR`1)jEKIiN|>Lcv`i|}|H5)H6wZ;2BIkjXdsd;}-!5)QeidKFvaFup z$_Qx-2~E)^zR4p2w26ucG{xT9TGIe!;l$8gn1XL!oHHAC=!H-%8?M-555DoPy3xDp zP3@|i+OB%LF0e7%-hbi|h7kzbwFXd=-wn>4*{G=eGjzp&o=GiHa`#o0xt57~HDv;- z#QqPyYu$4iJO(ygnHJA2d*E;d zT#BrRL;w!Bo&Z+@f}EatKZodksCR;-DTO@gpVMJuHYexug8VG)$GKTc?$|lMp3)|& z>C3V)r>GaXZp>wiKjV4zoHPEr9NmA?kMHv1Qht#5j%SYyLH= zhq)V!fR^~?`4G!O2;%t3q~S^=p>YoKG6Udu%(gQl%-G>Nm33>TwZn3flv zVs2;KV!@}#(l9R~3|Uwa$Il%Rqz*gC(l{ve#OOuXcS3_4KMO%$-f$Q5AU?WI1}g=? zBVKFHrquy_@;hUre=Jp4-v`JL;*%)&lG>bq#t-K5fqYXfZ|xQtuOD+wF z9(eMx^ z1Nazbfy*MH5^+^zxeUzuJdPKdAV~W?$JS^6(*Zn|iw=R#5!SrL-q@j_G#{op zOJ~m_pFI$sLHGMer3)^&NQs@uaysJdNYkQ4C0th9g95E=rQ6pL+X___OVZZjgA_}9 z={f>jgz9N8)Rz{-uDz6OM1>B?h&+bdkT9hc%ce1nP>}8AYdhLznu*@Zl!^|qa!bY5 z*VBLCR9oI1N{F(C!r^NCyy%XDYK$fuN$zR@>GN6e3Qquma%;N>Ns+J~4yqOVDK9J{ z;px)e8b~1&$`7yJ%0xm3a8*J9S5TL>mpPpSqVHwE#L|+&YC&O%x5Mt<8cMHym02P8 z8v-H7il4hU81RTswT@1*{0C!3yi10KWY^^Zc{MaeV_0GW$X#-1>I1nkcG7R|%Sho4 z56SjXOW6o=Hg@lml5V;z9%E2q;2O(S6$jZO?=n@smp+(4o?yaEOGOwbUjqswEo`k^ zaN6a~Qq~Bwu3fl^OKITR{YOOc8pF~upR>Ri8L1FxazpI^GtUi!IZPaeTlSI6GyP!@ za~Zw3=@1~Q9X&JzqAUYM^xNey#?Um47TYHy zzFBMVEYVV&XG_<%NN6+R^mi@`Rc9x)dls{~P*;{hY14J>Lw){$0$l7LB9g}dtt@O~ZykD)6voi(1E#8#Q9H#t%_Hg`&Rv$S)__ih*|MCVKKZ zyxJ=f^^IJ2x{>RiHy*@id?O$aBQ{txc9ov3!2CP3X60psed>#N7%UZ$hiHX(jX;d~ z&a-OoRyh>W{{(F`ssXw0t14a=3@=wD@(22dW#@7Yu?$AoHZJ!O4V3p!mgGlJiS2pg zZhO)f$C^QaOpzN8N4gf0u!^KXEiOJv}nBf9ATIQa=9%s1C(RKElq+nR(IUH-OI9fZ&<5~2Hr`! zWa8W9ewR)s*ZMoS_m}&fxOfLHIx>F`kueLr1C}co1+`LtnQM1oO8Rje8u|!d>{`$P z`3pYYI_B0}@~c)MT()fdGXQcM(ARy9{dlso@4qfPJu*E1jAm-un#%=UGzm5)iwwhD zSe<|}ffoV9accSav{-q{yHj41uW=#x1@BB|sF zSw>>@C|M2n#tSuDZ1N^?CVvX?qc%EYbn(b16bbH6Jhtnn)?Ld9Eq0`gPKW2)<;Bl;X1h6Qe z13Fix(=DFQW-BiOyK13*%F-qLQT_ux<8Q>^n>GVQp?8`)H<`Nzu|~9XtF_X{bYx6l zS2pQ+8>m$s_u(j4q)FO0qw>u0i**4~X^k?5$Cj7K?@Z3rhC zLcOzwEWQU~nRF=&XyR4+0}~`Fo&p*w>KX!KJgCC$^_NT@ztrYNkz1GRVbv4+li$sh zgKsV_NzPqMWy-8p>~jaM7YhYm`)SZ~{ICbY10F3QwZ_iSqOi?0SlvXEaAoS$)F^3C zi1aTQ2=e!^nwr%b*4U*os;Rt(#GMp}jaw=bOIe;gZXF(V;41IQI_TT&t7-%H4hiUb z7(d&;o5AX$ZJ&(Q41HrJjf8yrb4&v>=-t>8BpS&hctHye71CSg&lZL4asc1^&jo#5 z{<NT*ljeaY)sLzXNBQncE&Bkti?hGCq`c zd&oN@3!PPr`R7JSN+Gps+ZGNr%hr@U9Hm$#5keluK^Giy=Zan7IPmdQ=zHHoQL|iJ z18T+@J8o)w;17PY^p2IbB-)}j*nf)!EbrlD_GD$S$UC1Q5xiIC^4{m-PWdXk^cPIn zXRnkadh|xU{^9CZS%r8FvV4+I9HQg)jSJgFI|BT@ZW89RlZpwq-z9_1!Cs8anBsPM z&2+gb3wNDxH#VtYpoFj)u^6h~U%V^LqXkUb*i%Oa*Myf;M7(0A_kTpuA4L@vyEh+~ znOYxibnJ5ICZ61r^fOM&4{e+q$PFA`>uF@>l4ZU&qsBa<(1&!vCSy@0%!1N4t2hx2 z)N6Wep&W_Q@ojNRp`(W!JhKeWNK~l_@a?vSQXwAXWvmr1b)v_ZGf?5z0UIinWlf(X zc*Y~CIsc3r3mx-x4w;w8`QAVlEnjPV-|X$jC|7%5R@6-a7w?c|l%a}B2Zx3mD1FfL zaL6`Wei4)8Q<{JCKu)7nUe=~EDM#RDsci1Xk$OWfBsk2mh1!fjmHgC~^RK`p6$I zk}g-*K*#0vK&&#%EMefi#{~ihb1~UMbYyNO(y#q6awXUBqRl93=}s8bsa|#^(T$_e zii25R9TmJF1yOE61k}4yi8R0$xwvfP0d++AGW#B*dwFGDi}#5K%&)oej^{|4K*x&yS!Nzlq$&;cUuKraxwSQ#_v+>7M> zH_-1~y4*<~0BJ54gu!Yasud4;b7*l9e9R7b;XWXKhVb-}8<2ypnt{sMBe=sOcUfjN zNRUO0h?Y5`e{ZB*9RhtqX3lDM%rHOTZHxpEiu*vg&9#Q?l9#o~Jp0|qO<=gEIE|kT zTv`s0XHF$58||Rm%8X4|ne=FJ;f^A>IUrYHF}xO=05V-pz&t9LV&ghUd*>#Fa{d$L zC~=^+C?*koV`a9=3$cp~-wgCJxsBG?@LH9FsQF2A(>%M5bze#sQZyg>auW(Yxl3!s zA$q`AI7W97nySU`UjwxGttxucEPZRW^`@3c*QKncAb1waIe3^?EVjFELtf9Nrg8BN z<>MO=@??=tzwpRWo@?N-3p7+Y!e1B2c`Dy_{;)JeitbyAtPIB4-W-gxKroJ=7rDcE zljjR-c?=AfQ3D&C8G{=&zr&P?^2lV1{uX&)vS4p=eRD$ukbCN*=-m?t&-63mGn!jR zZ8JCsru>daOzBfTUOIqq;u&ys-swP#h%HZ`O|Finn+YJF#KyV zcI_l1e#c{$5}32t4ml+fZ7k0Q&k@41kmT;!({4vP%pK8aYHpg?yVI6^ZLTWHRRpcC zP5V*g7*8(B7(q;a8X`(ia61O>u0|<(9vtir7OI*4m2}Au6@;+zqUMTvWsoQ+ybL_ZB>LY z(>XR-?mrIl4h)P>`i66k%)NG~v?4lUN=*ZgSPQ)zM!9oN0NTE+(!?*I-?Ex{sPrj@ zsmdfg2ll^#fN=hU&-JE~W+*`kE3ubF1^P@3$vV5U8UPP-&*2 zQ`3`S+qzEr`-w^ze*ny?gc-;~!_#=qN6U|bQj;AIIS<570Lxl=mM?K0fUoUb%(J7Z zu)O1AHU(AB)v&H`V=w3#;i+7W8e-CsMvXE9#zD>I^q@)}O|!|X@e$)KgM_d|wwcht z|IHhvj>F~qiP z!kd8>pm*i0Xux^quK{ znsl*oDrCxCVS7kk;U0CrY%5}I-p}P=U;$tugu~04LSm?2 z?f?z5LRtP&l_TXKLp3Y@el8%K$tw00m!nPQM~H4?=^zWoQGvAW09U#_8) zelAr(Y95tAe-OmfFj&V=((|)?y&Fn~W5Wf;;+Ay~TZiP~`kXLgL*4R*NA?!^nwq1v z<#&0o^Tw<-8@Nl}=(FGGQ0UDEEt~W^@W*#7I4{Bnp(RRb?6I?+nJ8D!?M^KCPpVgW zx+X6iAHQR+r#EI#*zT|}ifYrG-NefNh8w2a|^WZO{@0C)}~kipv9PLtqmE1i-Thu>Tvyd^KEblVCy zHsj8@?DV!DcGlZEbu;g#rs!R=0)!{JYsfq+>81uK?UY-FjkXLj;niF4R3^aAsb@1! zElxS9rngr&G%%bm-x~0>yyyx5gz~;{L-fi&izTx6PbNZe|te)rlU}fA01H zoGYkVkYzxTK)`0*;~>UU0E35LAf+Y}xK={sW&_KTC4mAFFqm!*`0w0sNNMp1Y!p-} z808D;@;UiN2u=E~*2~l==;=}!Y|y3wROgyJCW^RTZdwRx!db;reQ{oT`UKishnI#} z9uje9_%+Z`*o*x8uVt3^JKU_xPS^x_{-p{+EI@cfF}Db-|QWDLonOBJ8x3=wMn#u7T!YgsrMhS1>U@9!(4k0R3o0Z zzp>n0CVf;s5JBpB1=ulfLRN?nD!R-5?69CNQ3R5x?c!xfNAvfn5^cus=JNYl-iHsm ztHc@VXCX>mTm(3GStK6}ySsi_@(Pu%2_B9D08ps#qWjP%5%Y3_N@HmWjiz|$)|Xp1P>(`yH*QW6l; zrFfXMWB?}mrV%3ffCK0z$+pNah&8*vN(96K88kqaFf^JjSU1QEhpTsVgaY`+p~I>% z#F|FdR|baw9voW5+i(UTdXxf)hUuZIdth~sv16fqfNT7~ED9hy{C#Xb`=i48;`&<~ z*3nsbT6{Rq=fRBO{P0@dfmBUwv5{@ND}ZQa%VSpBpyr+5?Fu?8@fP^oc606f(sHG8 zTdBfYT!S*b3{I;iPb-MHK6UD8QU@^$uMax#`@qeeX5kD>Txg(M7y*_t+05D^)y5R& zzeO9ihPnM;?{}QQ@&i>KD-b|`;VWM@lP?yek9c{bkA6#~>%JJ7C89aNnk_sjQ!UvN z>ZMUW@jk$K(!`2G{w(n>LWG;s%8Ob_z_a=hsV$!Z=8S~#3ngcw(LAA*4s1aMwybnu zI(KBq^km3%WIF@^*bd!I(EY3Kh0>jq&cB*i#bnWgbd_s-_Cz+t7&L`?UNdCU#!#;q ztQ#>sH|fSLDwOkYZVgYY8_c8Itz$LdBblWtxZMUz_S7x5S`6ZW+E{0VqQoJ<0pmG) zD>LP$=gEzy$E_mCHzmI}tAzIk$1)D0TPud)&fHF(X-5LP+7a()SKqmXxnVtwM;AgD zCqd;#O-1eY-GhidEzSK%W0^&+XLe*h4DP`MN!&5H?}1=5G?zN?Vp+bK)j}-H%!9hJ zMo5=Ve;3dlcMMHVW+-OcFtg?n`>A2pwTK%2>sqiQ_i*X8M6|BWs8&%}C~*6<2-fhl z%VRt>YJ^L5Q}gU)L|;K1(kYVY97ue}BmpmUX=;T~hN#IT{|+)(gfY&6%)&`oEkZ6Q z&7=w0G>!6Bkbp?xovIyD-8pBhd~h~>E_*s1YudFLxwGK~DSyx>m2`mfHX=M>8=h(b zi*=gR_Lgd2+|brX)?dvnNX<>j%W2m-LR>stzv__bqs8wd1n^W%%>3OfziL|A&(6`J z1Wd;mFx_XiNPp*21fLzsoWn{_=R=#S-neT0W!2xZXS^iMVCEh4rdpwe-r0KNEi@id zeWc1D^df*(7J*q`P&trSnJ6Iv9|4#_yrc>}JhysOVa!^!+nZy+f+*wCTy%4N`pq3) zAM)60-`Z;L+Uv0%J}cmB$`kmMSb6^%vGNXf#;(d;H>XPvA!(gl0_V1^>`5~(u-R?1 z-FvIl!5puyTd5WbnkOy5g;=+G#6{PtwL*PIO-c<#5N#n3tlDA4{2yXpb)Yt^)Sr#{ zGf5$Y^lD5gO}`vd;L0524`kQFCwdK0-{69hK2&={_1%cW96qZJ8+;{34ikt<{JT&u`=##aI?6P#H4Ci)`bpD5ZqATlW0rVR*9McmkL~eYZPrcl z49LTllNqI-zbWu)|K$gY8OxcJ!&idEbNB2!_R!Dau9Ek0``aP~Uu7j&M05MBty53O zXo*=_$`dZEEiB;SgId?{3n`S(%7W|gYl--9uv(#lMRoBp;ay~a)e18BezHee?F5+9 zJ#py}@X(q`kfE@gcyL{%3cS*&dK3iPxB04^+Ms>1Y=$v7OYCfHJv z)iwzHM{`$EOJG&c>QDprl5<_TYt^nC3$t)7(3Urmp`~~2V@?>++Pm7Z%_&^1fcj(<|h!bQvN{a@~_8$C~=3m`mq5@IyaT`|i9 zuvLS8up+uyw87$r^uTGGKKQ+4TgR<3pZH*Hp6i>D(rWoYv+Qe8KC>2a$yxT}!7@%G0SksJFkELDovWsiDT`Ef^Tk>!-zktLISqG|>Q)B`>$(rmUOBG-b z=N+=W2d?7pFHr6AKR#KmyH#8I5dFFMJOd)Fjr%~46AaR87%S_-D_oArsPFy#sL+5J z!&aWGeV>JLTepE7yH6iXzr96AB9PUqK$ZqQmEwF#zCV?ce#&o6zv%XuUfxS^u-7oF zUb)~j>5mO4U0Z||seH1Z?p7$MHM^88%FY4PE`2zgHO&MAojqRGH1+Fb<yEfy(coL-r=QQQHKEB*G?HY=GQ%}0A=o)Lk~Qkl?KJMbx&+r0PDIXTDF2+ z4dD1c$Q){8AgtR#e&S_iT{Y>hW|3_Do0@y;~gE%@-wUt0KOMzy#8fa!K zfo4{z9I%Y6T7v|KZ2w+*7AF66gEvGoY`7iEN5x*TQKdV7R>fp--zlw-zL6&p2aw02 zz$8d(H&GlaIjci^*Z{R^2VfzH!VY#*-d`J{LbkVTzg0qwXWv#Ij}zc9a0b+0sh04b zC~S=#8l&Jc+W!Ha2-tD|iYA#lzNzAKTQZW(Ln&RKifF=m2!YGRx3JOsVxFj97dwF6 zNddUpgpQ7d%06m!99E3UC@M`J;DN|DDRpKVQ0r4Jo_>vD1Z%ct9={*4{4PBarv* zq;{o&#KhXQ^??$!%S@LAV6ta=A9WGD58YWAd6iKicR0VW0O$v*d#;>FC&Cpksp$+;iehje`Q4+d*6|aio@MdD?Zf z>krh@YDa&|O#KP+mMQ5S40|`^dmf^9IIIH?>jB{28|Xc|w@N3z?;{-DsE={cJTU!X zX{wEp-w3}YJ8flWGh#bueJ#fRlGl43=zMF_p{+CsTd5=CU;yKwllSa=+;b*yfr7&0 zFQch{4yNv|5cU>spO&f7K`5ViuJ@n}jgkl0gLU6aZn;lwp^Wq)+}r5d0iE&z5f{JG zGn#LpB)jf4-jU${^ zIRK<65t#5S;#j7k$7&^*?j97_rMWU6=9tIrfhgulh6&!x@CdcQy-UofLv@vITw>N6 zD{(7pLyp{wC^h@$%3jf7N8Dc}sC>wrzcSYLX?1mZ(2_Kp2T!$HeI4O z09-($zpdWCW!>l= z?C{>TM~{s%d**cKx|O(2&q9NlmOSoR86y)D_siYe`|e?F%q)Z+f$26NeSZ+ucor>y?8Qk5JG~w#dDCk$VryI1ftkDwJYn_c!zIuRGnBc0cX;)R2{qT4gm@lya+=RE*_0 zAbM@Eyf!!t&%Xo`bI)o_(Ht+O6QxJ@{8lMmD)kYsiE<}GZt%UK!tTX+c@Wn@ovz%= zeF@O4ceS?ztJB2}q9;2cXb|swP2d!G-YFP@@O|d}o%exvsci4d0CBc%zAqUj*fp4yfiFCWpZxXC4KK6iiuGJrPqv`r^FyIKC=;XG7S57R8KGG4Ktq zRaT3ujVq0*u~m#kl(P5kAc_NBM%gh}LN}aUzCI}DB%b?O+y+)0Q=#Cv?Q{;-onB+@ zhFSFib}|E=p!sjh30gNWhqC++Z`L30L>k%CF&0Y0Bq5-qx^Y4VGGdLn}8l*s))isyt)=&iCxxFKe! z*v{xD_S+eymvbbu1kP%l(C;!Y7e4R|QMwmwlp04aX5(PX6uT)j1;ko*aOI#gtli44 z%g`P7J~;vNgftJ<{s#SkhF1<#D2kEb+{WbR2_TQ9Iu0HR5ZF3#SWtkV(y+W{i*TII zHY_(52FTK-dxyB9r_{27u!ZtN;XF3BFC_hKPai7=!%d>j&OGs~JZp8w(Ao`_8(H;* zSr#;5huKeU^4NUPg5^ATVADfI*^=HcjoY&G+`(Xt4TCkhjc&3pdpZWoN}r-C{1bO# zO*lUYc&ToJ#reiU^Uuw<_P)E5ue4@^ER8GQcF8~Y%cc^EMaPlwsqAB;PYd08lh*6u zg8A}>p7P}lE?b`h$WvdBFm*`QR0jw*bUh8Y2k25D5cj|=-x~|Ah(@>|hL*l-GvTXw zG_=F2>I}J$MZ((yMxLUcp0#y|1^wy~;-7*CP^a3OU|IR#MN7P1Ily6+Jd!#n9q(Ro z5b$6qoO6@~Vdz@5$^x@a)Bg;e_Q&7h%R5(mhl(eju2Uwl%i&ol-E7x|P1P9poUXv+ znV{rAHjlPp;X)Od>lCLatjvRgi`4I&jHn>oV}oixfANRokAh+@h$_0Na^CFfnxG@! zPo)QEHt2)PU^rY5$O}TOk(Yx(`yq`W{nQ*wOvQ9!L-&IG(aA&5h}_W$q)&I7{Dx%V zO1{F|dix1{ePvqS6<4 z`qBfWUd&O1a= zhWj!O0QnssN(7;G&&a*d2$UWfA9@BJSNFwE7y0BD$JV<04foiFySeDjd?1&~@Lw~& zSiA4>I@3#Ncyt>JuK;_xiNv-*@oPIrfg*~QjiZ)&3KjFd23spco+{E^VZJ8p$hr*t zo&`qObQ6*C!aniNPGsmhh*!m$2?LKjhAWO3d9r%oMo9D#7R@k(GCsrums6nN$i!x7 z>6Ee(CeaXWL}CW7VH$q|oU?OcF_R=dX8@z&pc@`x#q0@p{6qFy6$l?mdI%gz4wIp? zdXF*ktp32%`1B!07~5z8F?iB3OneCAQFsV5U?Q*`6M?C!6ZhzVfOw3$2D%x^}ty8!$;x_)-$JPZg~BnbPPANRe5Umm-2t&&=(JVW|l=LX@e) zRhkT2l)19i;_NX8Xk99d`4w(#2_DqiBwC{qdPE2(^zcy17$~6fM0L=pLiy(9*4kX~ z_s$yH=VlNp=|J$@OAyiFSt(U1G32R@Ze_V(%^Wf!Jgga`+94WXY^SDeIBV|Yl+?%E z87Bjzh9^Pt-tftTASf(2FtAH&lZ!5hY+r9mpK}Ij2=rTVb zYR}!*_uP0{HlV~{A7niYz)0=xz&)z62ZSlWk&Wr&tR)ObQS>43T{=Dw&@%FjFzF6z z(FEL%+zPe95{A9CiiG(xR^I+_*kYFG;36qDlf!JBD8;$?on1EPoS1B3hdsL|H|T}vagGC0hjZ1*_% zM87^iOi(!qN`&SDGheRF2L+n8fH!?x;S zaKFGGF&4_qA4&OJ(2cje@&183!Q`~g7l<=lu3WV#6fWA}hvW^-2pB(ytD_`hKPx9= zdg{ibP%3ZG#CN{=5t^mt-nNCp@&Z@E7EI9?=+ghRv<42uLY7>rp6`Q%@sjr6LOyhd zxC8xEtTBY#XYdveL^$#bqq2)+$C$gqjRQ=YIe^`h1k0PCWDzy-DKVTf;K6r=Ju}5z zIyf{50&wvwMIL6f(927r2gOqDCCmMCS6bi>qk89--wTCDQ@Xg89*fOCPpU$&HkMw^ zg+xL5687yv`P~=T|1D^0!*gTnGIn^;{;zlHlawM7? zismw*7TvPs7Ztip-wJr*)Cy1k;^bQR`|`CViY*k~GfO>tG1p##v@%Uf$?{T6dC7w5 zY;enOeS%-|0PZzZB0qT&<+bOjZ9UpjFR+{UNu3HsO+T3)YB^Q)$AZ_?7Cf(t0HiIa zh!TaNX|#y&Fiiiv$N@Lqb)@Xj&F?sy9$}FXV4ioP26`yP6H#NEeo+R3_w`CHoBuiv z_%**iJve$6^H`oYF3EWoj-sB$ATZ~QHy7OeB%Weg4u?Y}pG^{}aJGyN_^rjKZOKIHf>a)ZMZJantsnQJ4Gnw!j3SnZeDoIUbyg@ z&zY!Np1QVB%>Oo|{*JCwQ)XR25#t078K_p)vZC4^FB^tzXmrofB`)XfkthMLxcHYA zf|6J>W?@qZ{49&LoO0JnLl$#UHPX+rY^WgLf6Bp%qsekNPn3hWjeqImQ7T`uanO@+ z5HIVY#A$yNK*t;pp?VLR6~|XyrO;n8$&CZ`ORdzHcu)>kK zCM}Ka$wrbSv1$1f40?7G=GvF09pKp10&8S@YC{h5Qy!2(HBxE`N7qGww`Y55JC-df zkExV{SH=#Q#uQn2zVSVtK!3w~Jaj`F6xL?cEE6jGAUHF@e{Hnpr z>P-j^Uvh<)^K$V4@?Jhbeh_y>6y3P6rYWVOf1YF2w~JEB(m(IW%S(6Ic|Oxb5uGPx z;wzi5x^I0{FA4YInRPr)-!Nx{1Las2N8=jkp^F1Ts;6M`TnM0%d7fcloNn!BP+V?f zhOk+H*!L6ijQ83Dq_3UGE9V<4&kUeWbnI`L3x)QNTP5aaqtq<{BZR{_;qmVKmLo0R zev?!*(B|@=+_6O-9CC+%*LzcU>H}1lX|zKOj*z#G?GkyEeNgog=XQF;xuJ`{FE0MA zAJsLVF&kZ5&%%*AIWv~AK_33bvmEwkAGoA}>9AVdUgx!I-(G7=)xy8M>Ey#YkRf~(;x*L`|=+1?W zo#>n%o%o&@^g+EK)0eom6=pm={*)>eqtQ_^Fs~UY8Q6isux@wMFhjohZB|PsXvY~} zhR$@sPFA1Ix%!;dq9>k;I;gtS@P@@U4@zCkc#(UXm$zzf@ic6+7Ln2uyyF_Fpe^|Q zo(Pd%gN+`zi4c>?Rd#WvmGh14_GDj*3_jbQJjcs--#;{L@n!e(LBdC9LV%b2mV0ap zMQcRbz-{L9Xms%pVUt-szbwtJ??)gTdn|gs9lC$Nytv z-6+l^oKqu)>&TRVpUw<`N+Cuuv1|8RLLbL|OQAzp;lpbK_04{v77W6IKd5+Gm>|ES zazP{Sv%j0`rviTYE@dC!fkVr&wDVoF9?i9X%Yba>9&^toKv=esgX+&Rg!jqHte(x^ z=#!01C}+?42JzOk&0S>ia%Tf=3`r0w#KFeqzh*5W`%W)IC+j7yBWspm|IxLP*{t(N zf4#3WoXB>$_5KT~1OPAefdj7a2D?-8sqw#mad5za@5bfdO1_Unvx;jP@5qjLttIA8 z7p(bD!GDV+>jF5oi^y^8VBy-wAGxtTU>4rs3po3W-r(CrEbCiFNo)tluh5?KjQ68B zI}T9$ANSEOJOmMX3_)3yZT{^~4Qm;7XISS$$lLf}LBZ*U-MMA=Prq!stdErJS=!2} zRbo53$u!c5E-SGICnpWD@&A34uE4J{gY`R4hES;hS#c*4-X~SC_7s^J-u#i?1c$uIY?cXmi_zf)Hn1LD>RK|+h0}F=4gm;+h$%_)_4O4 zR+e>EE71B&y#l*6GCm~e;3DM4LY}J-0%9rK)z;W1^oJAb@F5d$?2#~oj61`4Xd0}YpV&fM5-(n~ZvhXPsy7+u$av25C`HnYQ z&!Y#&dh*S|WuT2ZoPKRrT>V>6KB9kO|Kl9n@&ToC#n5JeNPHEZz|O4iW_fJi zMJGn-_(7K*=iu75Jt1aYMlbzK+o1`B)#3yLEthVU0vZ&AAqnkP=%*_Ldg(6BH$Wax z^9F>eLbAf>cWWowr;OHhXa-j0L4i9&{2i^N?L&hLH4vD zV9}9DSbQgL`4oigz)!4()ITMks~qqZ7SzP+71=OwQwH6XpNI9|#ucoTu)?8gJ0Lp) zGRcBixM7EbzD>sah`fL9ciPmL!bb>0q>O-pYBafY38EBJek4ieJra849KsHhd^s$( zFNVE~(ZS6>Gv%IKwFX_1HcJHS`S55bUA`;hb zw?-W9H~vY?MUutL_NQt>fFP|-BnsUjv&-70Nv=)R1APjTLAA^&F|ZZ-uTbXzWL+7Vf6A94NY3C zZK`M=QBj6CK13iho}Rf|hY2O6>>ZU;>bnMj@G=+YCB z=~;IV;D8Oqmq~I^1-C=P*^)mna&i=q1<<;DR7D~Bx%5-4n<23xZXgF@v0(7+ws!FC zO;X28vx#R2LfFVfcpwjiypwkZ_=ht7{(x95G;@r~G|SuA61^=H(fyQGL3R>y#t1-R z@Ywc^I08wScrSM>FkMb51I4X;)IqGWr$L;ugD}06dRvB(Sa%D#Wd&qq=G^2Jc@Npg zPGOdE>ULn@xy0}sNzt)F*hY9Pk%3~4$k#bVrmsvUhL_)^g-yn&qiz#-MI6@q^wksX z*rKgEftBrm+(5B~bmSF$^(o(Z&`=X}RX)KIa9kDdAr)e1CIgzl$8b5PPV>9mopZ>A z^ufsb0Meg@%H(W2sB*C=+0nq__BhpOe;pztrUnf6A=)cpX|*)oJSxJr$r#oGg2H_U zHF`9p>2P+28;v5D(}9w)J@M*kBMw46!d4NvAt*ArcQbeqeXyT=FUJ8^IA02Wgup2= zIJ11^RV14#<#Y|v1se{c(bU2K`R1tpSgs?ffrHro4)a;(A&punSSq;L!j#@qKuDqY zq{C;(E$$G!9MAqvO#$p|;?4Yk^(LcU!Wj8;!bDwBgXdlw{QXmYN45QtyTgO}9xU0T z(My|UiIV4t)H&!L8*H;e->iJ_#FJ(Eo0#||ofZnKEdb3IWEr#rE1U}4QWU83V z2kX2YAL6@>O0?^RaJob48g$UmPqPy20~~R21%)5MuNgS%&lD0r>e~#l{_HV&GmENB zUY?0v+4M<2N%=T8e7vm9+{%Y`nrQ5-RX=9LFaIa}m*Okn^RfxNwJmMGFUeml)ch!; zMSOWFc4Zs+`;ouB5&4!0?!_+=o)F36#jmvdkAv`_rx6f0d=CI^%SW{Wl~)v6NZFM8R;J@Pfbm=kLIe81{d0v1wiDn* z2O(pO^D63ICbtbtm$La~u%1MEW!xIK!of@yXQ`#apHjIe?1- zl~J26hNwvdC!Al>Z#NAy`pc$Y>AA~#UqC$6t@I7vy%LuL#zJ2ey$HA?LjX)c z;Bmgs(c9I5MgdjJtH7}#vm#&ieiTgiy?4u9)0cet`~a+^t73NEe4W5ScqG^rCodeR z>jv9=8}2K@T1sIO6Di| z1l~5ED2ch@!4@1mhA~lFXflC?JRU3Gl58T1G)O=b9GK zIsjgVFCa0wW-Z_-*z=$(iiv||MGMPySpepl+aT(HE?U~3F~^-PptshuPw&A5ZM)XE zx@zt+YcpF-Gj4Fu>Nj*LL@i4-25|Z!Vs_%Egm5(pBMVx%^YM_)N=T(3$bfR7Ms0G1 z_pFuCm9VN%01KX|7M8|ooeSC)JXDe117Q39JqwQ97CoQ5Pk}@g+f$y$daCfA9p(|u z?`Kr$V@8nJKhZK+v2=0zwu+FvJri@mYX|S01fyyFRg!e(z5jY|W_YXE*@yQO%l;eA z<{b6}38=Btn6XeHI3v?hC2;s#UkQ9$rS*A=u^J*a;p?M;wmbxjA2RY~%_(*gd8AM$ zx#3%9h*=JiP=4c@MQ5Em3^bB=2i94|QOUw}l$DWm$TOaQ9I&Ub60fU_+1_&AfKftr z{ytIoHWgfSa^(FR8G~BZN>IycX9byo{vm3XMYsp`OT4FekVfSHR`PTlM58~qJHjD4I&EMmI@)v`kc$~!zZ2;<7M9j$DUh^?k(^UeHRDR)W~ zZi$qK%r-X?1MBU|n*gx26rZZOp~2*l5(>pB>C}b>arSNT`vn)z82Zb@Q!*&m4nb}`CfuS_gEV>|ek>3@jgu`vNry>K) zNkK{(v{^_p8DNxR^1!&4ds`4&hssZfCtMFRpw!X3-1AsTPkR@K*?)peJ|uxr6Duj( zuY){Mh`1FG6&$LDDfJDVJdE>fs~p9JLpwvby>hGk%vpq4H#Di)B)7 z1_gVhpDmRJYw3p#@=sybN93XoB=LmA_8IsX`vZrdN*X@Mmygm|pQ^_C?7Esl{HW`1 zHhPip{@dr%am=`ln-Afs@F+ZgN+~%k)QV?f7ED@r%qMhQ%p*r#i7chs(@o`jP#^BC zAJQM6iud62S!e_^M_$dkH~l90|BCloLR3=k&Y&Xr-HcZ5#8VO*EBE8?X03o$0tp}V zTY8@lLd$oeX5mA3^kv-D*D0TcFfR}2EKG+4lx>i2izRv$%RM(REoSbBGfY7ziT}ZC1?3}YUVQmXXv+L8UG+$xrh|fT zi?^_`e8$V}$#=Q$@yq?E&$1#pzW9smis)40(%Vk%2GjMVJiQjv3`95O4*f13xco1j zXQX~U&CnSp8tIikAlsx7LXMx=UdIw5dBv%`rk~4&!9?+LZw0-r0;FN@U}X)f;L{d8v*JXM(#%PF_ygo*KWM{$d9yBR|>VSVn{mqna7UbbMRawJPM&Zq1^EITl)Quzu)ukdEO;TnRbC(oMagh z)?@?7v!3onoXi^t*MVEQ#AS^NRHM>CXRxTtsW0Eo9P~D|g(IwOG zcU_9l{|TjxmClTrIuFG$1cjt0Pi%&Yy4+m4KrL(A7~yj(z4C`=A@2-0;QU7wF08+? z+{d!2;c%dkuA_{~s`}~ZqoAYs76=NlLv}SBuub?>Bs=7mF~R-~*Y(x*PgJeT)Y?ng z`knLBgwSmv$Ac7~zwzm)OQ8;3jV=eMoJE6ZJOsTeJ3?xPdsRXU`5#1hP?h9m%u}0- z9mpTYnwIu029bzP2y6?>(;hU0E-$kH+>&CHaj&JYkqK^3tr9ap|!!3#k4S z))$;e_aShY8LTIp1X|v;iaUj-I4Ak`0H3ym%rx{4YBcw9yc9NQWmuW@j%q68ET}Sr z697b~tOArE5(f~M6*5BJRB)JL^g|(Y>G5~gjUB8N1%Zoz11fgFNmRfno`}f7fKWm* zf_PL~BQx$rNDcEBAht5fQ_*{6lxN+d8CrAzv}n%a(B6SmzfB=EZ$)&@yaKSz?WQ52 zp|=csFO``XQo!VSNbOARYstP9nxs|VI3|@3-_5SSb=77LwP%(7P;|>9-O4d+x$3T3 zH55oGH;qy0>iviQpLX`W}kx7MRvYpzB3DnBz)1?#_dG@rop&Vc57Tr>S zbV3cV4NAGyGI{KVd(VZ4txh}YCelQ2)hupd7Pn)C?;~)2UMvGs>0}HL zHGCARcc4r;WX&iebzm#t$K@ty3GW8!kyVR#Z2nuKcyEduL*4 z`z=RUM9$qrXhpBqm0SLuXD}3sViL$wOm5mTLA&HOfQ#vO)Ka;6r9f^lB0ttYvv#=Q zEf5dM?plS3F53fT8DcX<)nG;GyjQx3jS?ATNrdmT2;WO__oh`wyPtP$JcXGvP}xWK za5f^O>CUovC#tEDv&`I^RneQ@+2wVR?XH^8q!fN>i0;}VzmqY3rxoxtc+cB51<-M})PGmh-ispO#|B(MUO z@qyuk{a?%eDjCN%YU2%X^5b6Q@_iuP63<#I3ereXH6G8VRC-QLSX9o9{9Q72g|ZIq z^}1_smb*S;%Zr8p{J1Ip{v)w0>M^SXNP72PmR61b+XuY28KesmMTo5LneQRnp~;it zOs(9j8euMEB^rWh_l6bu9Td3(*c!k}Kt&(?VSRA#&f2fJeAi6AtKIS)cFXtsFq^vQ zX7Rc6B90p2KJq><-XST>7}a)LUo-KzjlH>d_T=90@?EQpqDQR`9IL4`a|->ZehkoGOgT4Z=K(4F1owRM zL4bF^`I85)r*@{s^)uq<{5v&T5aUOjYGd?rM{bvtoE4^^t$y1gjh&hm{?~5kDI9?{K!%?doWB z;3-@_?bMgzBg3>$q3ui)BZO)+lBEVM?{`#+b~hSy)$!JY(0d-aPBmbNrAy*GOvu#o zJ6AK6!l&gm*lW*pANeQlLMG(r6j(M62l5Tb9RB)d1G(nIY1iZvMp72)2;B znM;t}I9u9ymX^6``z!c`12u+Kla2G_!J;mm^kzqXprSe>Yrun&1yus+-^bZbMnHACHBrE$)R!y-kU_ z^-D|fSC162x4iM}ha5|3&W=jWFm_+lb-si zkhAMxyr{T_(VyWLi5j)LZX|cz=mUJ3*4AO}g7_~N0BsRJoxme{66lkXOMx7&Gg83L zcv(ySeSum1UhM%WH2@h_xPIBzYLgQEs^W0Q7_lKFYrHPgg;5W=*Bh_c2jP#@z!_E zYT0jfD{tw_C~=P;_^{K1OGv>Wk>4Uv6-vIz-HN@+J;@m$#a6LX5^@AT%X5g zWB1|+2~Zv8LZBtC((huKjl4`Rm1SDBxDZ$|k${Zdxc%2COQA_GT<>zYw0;NPxsW`l zE<<8epr}>#TC$~E^-%e^2^jBAO*84#lSz}$07~|RmaQnWk=5Dg4nj0j%2^1o=bx0# z|5e)@nnX{bcx)=>5JXll+|@yyCyg=Y8LO&-B)wkD%*7~i2KR(V$bemmfymthX)1&0 zH?0QJO^OLcCqabR900}rw|Gj$WAM}|V&tjQ$Wd0HS76^ROt)#!b4Y%+ROXnIuspw{ zJ9dxqmudH^u*;`vBdSq0v_z`=mhLOH1(GLWvx*2*%LncRCLwCRK5-xZtks3}RGYIRNXK1{7CKv{Mtv*dCk}G+ z7&PK{OzQKHOu2M4nf`_+HhMLuChaSpXcOuoS|B1wviUOd5}jWDz$(=a&%tmL=Rqvs z0_J-zOWdna!4kF0DW!>Wek^9~)J@dMyPHFVe`)_Z@LnO{2C-jusC&J*^00u1Ej5gg z%gef$6G#yueW6m1_4co0?SYj#Gcv2b=~CgU;Hh$;PUt?J+GQcNIK^}L3}N*>68ljnBp8E)2S9!(O&-)9|(B%1g}T%0%-$ zLrtN=S|E zROEt$LPwfrNS=6S>-4c2*Op>It}WISv+ZC?8DTN%hU}z{Lnd{UfXkacM_~H5$${%% zS{?I1@wq`^(D!LOsf`KKzqk48gr2%pD;~LFcZka1t1D3s$G+Z)uatR^@<2@~wS)+~ zaLCGFseOaT)%9bC@!sVNu_p`&V$_{wYyHZROc zhnxo9a3*LhwwGwF0<|gaaJJLaJ)MC|w_5-!UsnNxziXO!=P*e&X&nU`>L(3so zDpCdNVNtiD#~0vayB+GV9xBzvR6g{l1bw*l}atilu`OK%{vpf}_^`ZDohvIYdMvrPL<4w-h zStpB#xRNYl)`2-Q1?J3^EH>%9S|0n%$4>U2U=@%cUppq7Oj7f6cIku!YkWeY3Pdi_ zv(8C0V^*U1s9 z#EBr312y1jV}^zNxuQ4~Oc-#RaK{8xwKxwGEV_=3d1|1`faCr)c~w84tGb#Vph1z8 zYw8ioOE`hy7$bgCX|nu6G<)ML0s-qhtD*YsCqNu>-L0ZH~9O zFdvCS;uQl~9Nsbz&!!@76o8t%$IIhjpgOGDQ{^PvU>iDUy@66956q>RD?%A?aZ0!c zFZmPRvgVJB_((OV+W62>quQ?&mW=20ufJ9SqI){bX7(9wq&0e=w#o?I{B$dWR37OS zpu2dAGlD8@N>BEccJ(Unj>GjmJRReKi+lCHqS5+3zI@iA#XPsewW%nD!5>Gse?0;D ztW6357V|8?D}y58a)9Co6^_ssf;0Y`YLDeNl`j8KixJ?uE(~a`4~H}DMjyy3&bS2J zsp*>LFDaTjE2#VLWvxtMS7Au!RVFWI%L|H9R`}@FYd>_Xq3!73eOA@A9#zh zaEJG6N*|8hrKw4cXHH5L_!02BUYGMoxpKn;&~iM+s-%u2pDH6=MX4(H(5%)E<*$tp zX?C~TWh+o+_($GY<;Sf>QOm-cw}1-Im5a9j*z~F4@Z#AA>&pw(bGvYyvggzLkC<4? zR-0AL`wz^e=b$q=I@~iHVu|urmA^H-zzut(R-I7=kUXPOJ|OA-If$HpZw~3Zat6Kw z!p8yuBC~sXP^F&q>WOF!-fYT1yyO&dwG#Q#(*a%Bl|9SU^9iDbA%I9CjIFaQr5r@| zy}O#S3NdC6K-K1K#KFvcFRz+4^7bp_3n#*R9c*=4t@!rO9!UA7RGG{1kE~cS_nUl}fn7i?0C?EmEjQ=PH`Xko$H;{L2mT zuNTB;wS&kjQqATgi%&2AV!>zG$g-dk-#}=QBkMH~7LR))pNK7>lI{vvb60BbUb>(H z5od^})Jf0umuz>^*Tm=)-m$4N^&vNfDA^jfN(s1AUMTY zdct1JEp^DwrTnKmMM;FzmQw5>)nW!T)=GCwFkIPq@;+0q8+TkV9+l&VY_B3mAC*(N z3^i13%>*`u%!|VvE$@e7>K)$l4v<U4dEvlR{}$i;s1tIths74rKaScurQo?yqk zmoD>}?@(b~y|TTeSA6F1%NY#4S!aNpW9Y+Q*@7BIkQI-GpM35r-lF`VR4GJf4rfz> z&5b(ddsFpr%fYT}0%75pwS_Hddg6IsAhkd-ONiqP9-R4Z z4b7u(gGzZIWRl8xQ3Jk+4{JU9Eqhk6j64JkBL`B+trKp@>2V}W*4lC2T078N8_O5V zBU0Whhn36oAdjz6yf=dHMrD+oV~(QC15=9*p36HOk`<*JSey1uly_} zV3b~opt3G+%Eti9%S(^&OOEebsi(JSLnTf?UWS~%IWazZW`1DaeN+mDIj4n6^INVh zIc?mtp{?T6f1Q@xr@k5X#KC#$1f@@(qO>@9pMCQo-RxdojOY){*NA0P+;5g65+>D? zb2&X>+wdIK>Fe_sWNv$o%b?mnx}~+WNtuFAFb1ECOK~9(e-A*gD|{~O1f$coXa2oA zC5&9J81#cYSIDy49)utG3i7`_*+Zr&12N&oEG8dLgq2cN| zrIo|f)(ZnJnSyED0uf@h4hUMn36t%tRX_i^Qbv~b!Y1DeY0p+l)m8w79S&knFlD4J zoqF7LjVawwhA+bjOd{^JW(OzQe?7E+V28Q{qhsBHPa8R_X8vn`7Oev=vvfx|btcK$cODqs zot9p1Tq{qvt-taMYFQn$6crm`7#F*8WMx5#$jSq?)L0N=*s;>jM^u`^zB<55 zjdOAQ1nQ;de+nyn0gJnu4s7We+X1I#IMtBbg8WfojBZk<&24I%a3fY zc%{_=IKQPp#r&0W(8%(X;8ubvYzs%wl4o;8kF*sd)j^daY0>mt+ghDaomNH|EO27;fX;Iu^iB{d$=2elKdq@0@44&(_=A}Zoa zl3KMHT44qhWMyG*D+_ze7b5{_smz*iCZrq?3hszV4DAT0O4ShtReNYfo&{FO^jK-; z2o3xf^+vn72!g$w1KG-~p5a!*+CF_w{K}ko{z^&i3wW*0h?VAqxvtISQd^TujvBq- zx@3CDv7X?;Bl!earQ-=FIl*c-A?1XQ&? zu*(de~1Lk^6rm>9~yxNmhn<@OIu7L$X|oL4w=UWW->Wxrz^Mdqlr z@>B^<&tWCM%FuHoR0rJTEbX`WBui?Ag(%{6_|)2wnfc#Rkp!_f{BL9WE)K6&rBSnr zd^9hmfc&mfo@%UG*OmhG#sMNVR+a8*#XaXkTfeZhJhTqSNT;g0Wi?CDP!dzP?4Frl z8l@&4wQc=ltXLEeJXcsBHM8SEX2)Y~Dm#)#P@AwZd91@3k{%kv?647*YgC)*Y*vh% zoh6XNF_|cS)Cv&ds8+hACJ=>%+TM{C&e$n;2P7zU0No0G$b8`bw`m!QeR>mA57&tL zbkyPs*62YuuVK`E3)#*;F@~aav(_{a@3A7@bg#o>^hC_5ilL8-UL{BW((kQ6)WQRa ziVlEsR>{<-s~WjHXq6$u(V7~ojvs=hBVIsuD0@g(w2HjwY6d{o>ItI05#Xc zRC7H{dg92~z;)8gX1PprQ0=GkIb82p`K{g5nEek_gm)Ap=!X3|Fg4|raHONADif&x zwQcHD*``jlX*QAS^dPt6&snPYQaalqgaI}`{3zr553kU5ECc|0RcEuqlRrox(<|V9HyvDnOxBT;UM9cp$WQekSkyTyf;iZBwYtmA=|VU9=~;F@!XTsyN~+hO$i&V(q# z^Z>ebmEB!Jx_xJlPhqcgkD^}kGN=hWhbNH}L~RqqqP*xg6Y=E#095w>F@%)lSoxl^ z%jv14OOVvimpkJtM!NXkJ;NRMf|wh%(TNwlWlx`)_wus&`mDGg@oxG0#6-l=T_BYn z<{^*G1=HhM5ly;|eqi)L!ZW#HC8*Nisc{QpSV&!m4rNjbCsjvCm#(TAU(zb zR3O@u@`MDat9DBYZ{*Vq*S_Mhi8-?#e5UuTaZz%x<`{pnQ~ZBhchUZcxJkHxBBM~G z>}^~5_Js`3SvejbcRc?bRKtm{O6?phMir<`63M;S3dmT~5`qqGEWQfe$giP4s~!(A z66>HHmV*e#a{%Q>q(h>0(B4F_i4K5zmN%L=WArP3D8_*CPT=D6HEA9NiO7cmqT=dksrk(dn} zrl;!U3kLxJhg_?6EjNFKw1Mxx(1k4hxVo;@sa^W9JS*Qn3t6U=af||GiqRu!-4;|W zcJTq9RiY~HPzNKa`SLdKK~%BaYdWnEy{*_$#m+HTwMZGbM!0HQNqpTmnkbYoT?WX2 z5~ODOOVvAnpi)8+n6C$(uap!#-ziy5#lZ&24;?};XJO+cmNe7TGuRo&FJT{0y^%g} zU>KOb;+pXpZDHK{nvH+J(9Cx)wdx^+2S@m|YKh6!ou5fsWq}Bi@_ty*pSIKCM2t{P zqlUTYerlG&2Zi=i?KXqP8iNg_x;s#{IsJiI zz0qS-tKXam>3eYr*<5&4Vzyssro0+$Q}{$(#jwzpNvS|{>ji9hRanIcZH~Xl8h4nc z62X^n*@Fb7YJaH2w*XZ`m7!v^0#YeG2`x6A16S6+48}#!q0b981*T*hLP=iwT#M+n z;qVS738@t#r}Rr}pBLJPuiA0ttKwmJS40$FIbCa7hIC9##gOi(sSZ*cJ7j1N(Ex2g zlD|Z|hl(sOKT2-oAM2qu97i79(^*D7s8Gmz>h=N2w`o*50fPwz46G92z`ZH!@6fw4 z#oyk5%d$uN>%6AXXr}?SWHyRORNHVexX2rUP+5OGL|%KctnIFSq3D-`u036mK2SWF zuEpAM)KO8zT=ak+5vu}}sp#ng&&KG?l85ddxSzoUNEan9L^y=4HCXnUQw2vvUbAfF z6(f4X=zu7VcqLnj6+!-%Cpm2DZ3j`hfetacmTgoEHXnEd!slWEx5w| z&hAg;h>2gS%)S`gSLD4{0^eU3HQRcB$SWAw>-V8NNccW&-$8Xgad{6pO*jQv6B^`q zRkOr&sw(M<)f$fUn;rFtkag$IKrBB*pUxY|>tmIfhX*0H@&vB^r60kytCmBEZg2o4 z4HVzNQ%Q)+na;Egr-MnF&t+uzU0`zsG8gi>_AF(vEk2o!6Fc#D3OgDC>qyUCQ8ZMZdmy(|9(cewZ7P5oH zeVK7dI}oZ#GcTh7H120GP@o6cXkb=8Po*)Qs4<>T5_k`BD?$*- z-d@_hzgtGN9&p@_Ml5Vd1L#N8O8k)u9YUDj#YeM2?&PT83r*=JLyq0eu=30sCr28< zYV_YbiyO?wh_hTw@?K|Hch&{gL2!t%8ScXe+Ru;7Cjc?mkUz%vgcqtsPFMZte!V!H{-cESMgAIvNr683}=~v94Dp;-jS1tyVWohykm7(l`K3#VeGo~(M-=8Fl30Ea#;2O)z7g8C>ab6xpPMYt|)Hz zAd!W0;(|+_vWLVj=UC|_Kd@}QzhX8_S-D|I83WaH@!fzd$aKX5I@$Nn35f7kN3Sq5 zY62*TT{15;AztdR=0!&}FMdVh1;L!Jak%ms@GDwR*B%aoUn=W%0t$qhNqEKoRhcL- zNtSDcE4h4?WcT$8?iM%z^yY6sc$EfyaW_vIT~>ISx~Ld+m4Pah$8Five>Vf3sJ^{z zP*Sxy03ALBh%DJ-%n2wD@4MkkA@6V`n&=nuoh*JYNuHB;SM5hf7H6(h*|s2*?~^UV z`*FdE;rBon2xobpZ7bdnHo40qmv2nX;%SnViUZL1huU2{V0ZC;Fds_v>ibdK)cp}u z?v5M6Oy<8DtfnhG$&1f8UQU%phM-pn~FmD+Ewa z_G0g4Wj8FDT<GMs85zCd_9+jXT8)h2wCH z7dkL9Rj7nKGsHHmQPL9}c@}>?aNI4AJ1TDsqIGl(q21pD4|}ld^02?vJjB@8y~5&< zax=5{^ECpN->2bcX&fC>=oE-FP8{w8m4@weGMpb?GazFBSl++U%n~MRn_Nm)4tq)yHo!FoENT16@U#c#Y&kajppb zD{)$kA`qqN!)q3biaHCXbV8r8+U!F8x8~Lc5GVHm`PUxps>NABeSVPr%aU%bxi3Tb zi8OMrS%*ft@e8f{UsnQt1xxa7pldE2=D_pU_>ya+Y?8YM?XqG21CaoZ{#TJ3kyWdc z2k%|s%<+2zPwj=o=6*T>!c-xm_zOBhJmwPj*)5<{Q5lwWfdk@$1{o+*pB%8GWt~yY zzXl$Z(yj}f-2~Lb`#$p-&H-yz*n9=p3d0ydnjabH=X6GMDvws22|4myA|@{Tr;M32UrT_rb8c&m1MmEtT=#Z!2^|90n@<;gene0 z;{r$}?8q>Sj2k;86r-GY?N}LUc^%h7_F5T*590s_vAK{E2bDmzs$}4i$IX={3q>C> zN}f{Y_!eMlELAf42s~-pEEs>lDnpoXG?e2~g)V;pv}t95j?M$561`wzdyg;`shx7* zr0nZ77+ag(lb;DDh5eKPdG{oY;>#%(6@x<6>T>j8T=9wiwPE)W&NyRzg$(2Ge;u6eRJFsNRppvw$i> z@L@4H4EVLuD2tbBJ#ei^XB>N!&^Lz>dgwcz(Bbf45MBg!LfI&?&>}aOtApQz!z{gz zXgh?+lQEOwW_qB{vVuF2|LY}nL}D&ho-4sw(n0FJ(N?C3u3*$gCKpzY+!s)|7}F8S zpnXPFd?_0CN8uV+FNn?5t&q_)d>_I$Cy|1woHzRKuIlxHF$8LghX?|2S)Wy4nDb8o zZFgP^Jha8--~eJ6ZNl9^Kn|G77v^D*GA!cQp2$GR%ICpm+16{VnI`tgAh^bVA7=3f z2g0sfwG}DH0k+~*Z}JNtBk|C^-nESQCVFa;!4!KUEf3|hJ0;K*dX|mk3n{+kP@@yK7(;Zt2K( zgiDR5k3FWZ2ZmbMrirW$cd77fi z6ZH`Ha%_hh5AZrv_bs;)dISC?EmHS2kBy_+eqAa#k&cFko0pdYebMdR6Au8_x@PL*sBvd-1pgI?KNQeMtMiV2jn4n z?e9+e4g>Tp?@<`f0Ui{*u4un)}a9Cw3dT#8ll`@%h+3UwD2j0=>e-rx%?0?63aAkgpw!!n!>ZsaCC z9PlXai4&f}LH1$61+VU+6wL(${xGKB-0!u7wjA`Kb~im$WgXn~EEQ_j3&uYxt--eN6rr|^ ztT^Kf@vT67AN$9s%$xKU-KSvG+D>V;|2~z-p+ZQSa!L zaj?R~O~~z{IJEx?x1tl9U@6*VbYjRhlDa+%PX1u{QGHZ`{Oxf`^}NxcDi(t zj;w3%G`8uIoulXt%YQvaUOH5(AZ;P`%UzMbO4_X`)d#26Ve@cSXY7h z4XK|b61pl}5g|v`?UHl-Kxlx-ig5tc@cq}*_}xcdv;XTU(xSaryA+(Pr8~nHK^RnD z)8p)-!`zS-Tk*r$^S>OR{&;@c(qnIbV<0WO^yX1U92lmEVGoPpHj~7H@*y-`KUs3daT6k6Rd;x zh15BPzv-(0F!$M!kb4E!oW1+7&!q0;o3AdvTZcEFZsO46c4LzkjxHVfR@qJ5Vua=` zInYFHw{B&%cT2msS%8#sys5j;9#=&HpkC0-1@WG$(yE%LF!#|SR+-N?FrOV@*MK5i zx0~8e;`F@TDoqA4`>_o_H9@V$H(HE;Y@=nW%@qA5NTnS#Sv1Wme^~@z8OkA+P~Z}~ zS;Yrg*}c*GwtHNT<)x$pxN=GNm~$M;qj{PQ&BKD+41XW@|K$Sc0UIlg84GnlrS?07 zl*AKrDIxbx`JeAN#SR2oA-TTFtFr;UtGeAc{9NgQojG0f-6P9Qc6_HYw5|;Aofi3f z{=GXT)J8FP^*->2vbm#*pXJ0W2Zn|64ioOKtwLSK+%Q5iL`}FmOt^c+g1T!9>P}(V z9)-sR_gzjv&-z`k1C71(<3Nq;gMpuR$2|wbq~DdY2N~??W$6eg_bFP9@ddF=)s@o2S2N4empYQ1dmpbFUqajx`TnPWpco^VKF z@H%d4hv?K==@D-22HO7BF_r;og&w$-qIoyvnz(^y;s8JjxIGzda?X)iQ@cca;r zcLPt0WQ4h+uuOoh7yw;cgOmy6K^PlRP_X9uBNO_)OEz!(O63Td(Ga}y4j5{5=055TMkVCDgsIgM!o z6$4;aYwAp^>fHVW=+2txR(1Xscr$lOUHB=CI%C!oZ6pcO6RCaYFUE>oE<(v4}7=$oh>9~ zK^wItp?CjwzSB9J?T9R;F!Z|*N?&-ORM#ndXy9bDRS5cyG6p=wgH=ql$V67KLVq6W zb6y+83!Bm|_^T4Xi8ETUXbt+NeNuS@t{XmFoyaBI{YQQ_cZi-y>|Xq@m;S}a*RZ3< z)YzTxs>eti8*^JFi^4>Yx;M z7L7W%Yoy?=@xo`y$v;;LQSl84G8c>vh#FH!B_dl!wVBe*msL5V$LvH(yIAvT!L-W2v_w}<+Xz7^9(9<*$WF7dt+q|nwyKzqF}siQPU?VFxZD0(nYBh^ zKAEU*D<%@39)QVuP@AeK7jf^D91l{CRdo4?KAZ8z0pr2pG```c;o<#QHEZOF5ZZbH^;EEN89&68a*)g5HQQYT8ZJ} zECLlD?lP~FXdHxQ~L444e|qE9>VdRQbC11(F1Ba_IP%lP)L7=; z$vNCOHrHX{Bj~W)hNnXfA^9c=U~%B%7qd$7f#1wj%~Vs0Wd}3rV_9epi?>Ad|lbPdoa3k>14fDh8dY<1D<{>0N!0%1kWH6WUx69@ zF+}q3Ws6}_f?Hbg!>IbaCzWAM(fbbpR7{_6X`VPpdz51`X~QS%?F69meIwp2JTTS9 zVnbCVa0Q}9e!`KTD$|#)hda#BoK!W36}5v(YsSS?H!luwZL)=;%XFL2*O6fC?Kp5+ zLPX0JPLDU{0IV`PU&q#{Xg^QKMcSik#l&ePimOhKPfYGr=7_PKt=OAWUQfW)wO;$jhshdYV5#?G2$95o$Lo}8JGKB2R2bjL9RI!%@MxPK^4yMky}}RROF4Gd~;yB z=<7boFe>p2(?zxKA{*2;yrr6AX4@nL6N||tMP%w`mHRKUQzihMhG|)!eVwgSJjc2r zdzB_6+heNi9VWeZaIi`fBMuvRD7gF3RGRqwHU27@1B(ee4d&T*yl0xC%j@<_<`|1u z-T+QPb4D!KXp=fCnBcTvQoFth_I;DisOkVRSYWCoK+TxEmQ3TKAtfGQ8r9`ZUxtXI zna*Z1o9%+oD#0wY@!s%-fhk&(=|aF<&|lSo+8xNf!BpED=$(Os>50S%YdoqV)|Ffc z4yv@2JT5r^YN42vxi|ehi~e;QIUGJN2}rk~h_k znXk&liRL7m<4~rh-REWkS7s>QxiMRRmO01$1o{A{!DLR zp87)`AbKvN=+-m?k(?jj;e5D3Up%=}W%;5t zt7erjM6Jehx5u08vc<0Kuz7#&uB3MCWJ#A&WwN(PTLig~le;c+BUix?tCrWmS^2DeCz9L9|We_Z0hkxqQzxL?=*rC7wR_fpXQ@86_#8gCYMZWC+)V4}Fq7-*ImjRsg z;{f%rckk0Faj+mov%6laAqRJ`PRxoR`tyr|CVdT@NNu4tt@ z--`B#68<;$%f^qk%xpu?!@bS|xKul{k8KA38V9}$1Psie1!;$Bc;=L#_n95*NYlK+ zCE!sx2+AN@P#%zu0+F8rIw?&QQ!6F&{h?TTr$igG%KoLgr2s@#k_W4SJ|vjwfMC{} zd%g*va&A&3m4zPJeP#%8AeM;1npL9;q2~RXE8edF)${t|ZBbBNbEkw4)%n~h&-=_? z_nB_TR9T@_J(8dGdH6)RQAfiw_FE15N6-{e#xZ$-wx)t73i@h{7Cyf2S8e6YTgQuRZjhkwS@ga2y{8} z^QXH`ruHe%uz4-3(>gE&CSA>dBrA&Ub6eJAl0>M+pSh>&2l@hwPKK+ zfz|vYTjW4ktF-4DA}acDix{w~K!Gj5pBeM0RocT_E_2(y!`5&a9n0GdX$YisWI3 ztjd+>V(=-Wz+6d9J9A#znV&&FL9t(KCRgrk7tY-8ATB5Etw3~Zuv=AWx}r4Mk1iz3 zicU*2Q(79h9Y_;H9U0T*!1+@d;SUTi=eHN#Bd2L{nLZm8M(`|&RWry^z-G+U34`EJ zmRHcHINFur3r~DFB|tAQ>`xW)|AdhLr#irU!U5h>vFi!UdMb1A2?pcyjAhU6l%NWf z#r@Qt9~)#F+m9&5zkU3ANSo?U1qJ{3(Pm#DzKRVM=87QiVE;$D!PbVa_N+n2v;x3J zP=a`IkwBc+zhkIyLOvvtR}3gKFBcBVD^o_w1tl-bLcFuS0@l_P2;KXE52Mb-=*Z(0JeX6rV48j|t9w zxt$yqOunysiNb}6@>dF4UpYtBs`j&MEk~7unHorR1I~I^PJF*!hASj~3XpiOMx10t zpkj1Hi5dr8S`j?FiI?jt{RVxU>2smu0xetnSHfP)TJ6;{U9@~5JEZ)jV##fnUd`0!T{$ahU?mn(?8*wFF zx~iY=;> zEVA4+n8tI+D-b60Tss-(6;Lko&!0?hA+Bi+JIEHJ102dWusCI)w~?|QmLHtMCGfWJ z`RE#A4&))}+Tml0zhg989ut3HsPg*GlxTkK*mt$E?`rLo#lFTy%k{&d;Ev&%w(07g z;elOlixQ4tQ{GUab?*UQ`SQS!@w=Ek#If}cGwZgY@stszjJsM{?zpnxP0aNV-NRhz z%IX?Zm1R0x<`~?&s(FmFxZ-h(1z@g+>I-5yHzMqj)Is5}qy zwW|S&YN9CHS`qxr=oB-bd;~^A{xX7fb!rJ$r;Lsh;Im(s7DG|PO}H*6cy1vSwR{6Q zLw}?rxYmhR;t5W14!Tz{gmG-2&Mg?Unf?x$1r+r4?v_Eh)=@iTJRF}9y zHkE$4m_Q@@w3q>|1m=60CI;k{NZWN%Eh^(#nJ6gwL@vLxGMMo*mqkRq7#z4RtSS%t zU^nLcN}Tk}dg!8%O^$iVxRx0_W471RH;&htO?By}SZAISfDG7AT*ERZA)-;!vwBc$FWEEInTIn(rD0 zy;eulb&PUvxax2LSkzszP?Wk#b|63ej76*!u1c@VPwpXYXh6I9;9%tz|1fUbUzGeU zU;bU6EOJj=EKZVbuY3VP5IFobBtUKpfWt#qu#i+l88Tx9M_jUwr891YIS_PU$1`Dd zf#tfUKE%U(u*#ugvpFt7Ao8kD3-L(o0I2tR)ls~6$}NFC&49GvH@{}+pT9aPL@bjCHp)>Zc(NRVn*{nr@v4hQV3&Q-87NA(pi z1z9RuqY%HU-kOT=@90X%_j%#6{?Q5-);I6K6ip$gRvt}*x75~{x~|+(Tk+U&74Oun zd`z_dp(DqD_zALM+uVVlP*w)>C9Ua=*OE19#Xyr4Qv$B$y#0O6wR*I#;$1bps-(wS zFu!5ysn1>n)zU@p1mV9!@Sk%zzIuKuPC^r1PT|Vh^e<#A=v7 zAfzhpB`fe_X|QSw5Fk^m|s!az`j zqr-!|zXJgGIUJjt$AaUw1YxXoPLOL;Xz=R5!f}UDNibvz3}Xg1r)fNmk`+S&!bzD0 z1|9VWlI6(sI37kN0WiPh@em=2j@k>pjNAh%MD+d> zTBePvwlJJts) zn-~~Au2y>Xb+$_U_Z*FuzKzlf4SjMHMCo9Y)fRu{vSRjp)|uJj)6z8Qy{3ow?z7*| zx%nxt7UjBVO~`A3n*lX%Lzo3smxI+gC+#oFI%$=cfHIR??EMF|TE;E3BL_tA&d;o#~KOhu2 zQy^c!!mnCvKb)|mS2Yw3tKeps-O_g0(6mV37r?7i0imy8n*eBK>p4ViNuwDyh9L&5 zYz$wpMDD4Qyg=IZ`sXA&OCU- zV3v>baK7Oc8v!Ww4?omD>H(EA@Sy7gMl9k~Sl{Pt0b8shhku)EKQ3;m>eyh2w@Ds8 zwjqZN$xYC#KJa&rB>vc`L$k^a|ea^lhs0-JukEHGX6 z6q{HEU~iG$=HHv0D6(LP4u#La{j<|+nL8e^YO-Z&?jOE2lYgZ*H*!hbZ_#5^VLQqE zJ|ZzOf5-KolfdnCM4;$IEWdXr1bV3IlYgfVOd(L8ASGlJ4wCyh`B%E?|{pX+(lS4n8UvUWT*`J(2QL}PjodY z&@{DSXeNc25=rWtNVAzHEzl;Pz8AA|Xx<;d&KiPr5kyBT3S}2yl*gdx@T*xytT&9M5F^K|Z&7WC* zEuTxtjZQ><%gTRFr$58>x;+u|5N;<=HZ^)4#4E8l|BiPT^OxBOfbD^BpC7-=d6++( zGWjaq0g>K_;Ew?l`s5PELY`|aD`Y%X3W$y}>NwoapfX3Vkb9xhhH+3;fKM<$?kAXg z2B|@Q&iXU*V*g<|AIaQA!>3-0FnAb3Bwi|y& znb+ijR9{khZ8P36<$W7(QQb@G`=M=FctGu(JbZrq-atn2Xc_&E4ynSU0|Fja)8 z@cgy&q2e!Cf$(`594wCQ;JHDYkKo+@> z;qX&Pc2yY@Q-mkk8Svs^WdWsV`!g^VTgC1}0rKI?|SRf5+}m zrVmwm`F{UORz}(#wdMV2riOU60;q1jEQkF(F*0}+yjA6m=xijoPfVrUVtw5CWwC%! ztNi^wR4V^1D^Di8sNH{Km+#;3C#u2VGzk#h;sByHtDTwWE^nr;u)q%d(D576 zDPwIbK>Wh%4eX5rF)CGki+*6)dJi+FIKhM4xU1DJAz{tC_oI5j6^|$)gxfckn0V2` zfHYsAqLB`)p?_sOzC-bYywadJ$jASzDnu&50O@omIXEFf73U;Ya?XKu2V@k3Lw#+& zdfpW*?|YB=vhw@mrFfzizL^Pb=cOls=4Ua zKX}``QLdFiD{Wa%HWj+)>#nEa&eO1_roXQdBk$ktICyGjb*Isrk#_+yBM)Z?B&b5R zt6r*|G6J8^eZy=L9);l@!+(w3Q@c9;>qCxg0bp@RklY>*T2DY_SOd(Q=KW&Mt}QIR2kpro`FCPP;eld+?78kX_V>Xyv}lUr12F)#b+}js z+Ino(f#hI}RyR1G9Bw(sl|7&b;x5oZMf`kGM-e;j-_bCQ+&A{*1B{Pw(49Mv9)$72 z^h>5d>|`X$*vVnkUQK%5`G7#KB?*}`WUC;AS{N}SPqhp+#(8+#Mv=szw%z%MoqIb{ zf9&{ufx!QS)r}}%`Osv>E9PP8g^L0Ie}LbWLp$_4Zdz8^6o=Jphz52YZN8VCXYPTY znzdfGcyGhuXjva|V^evYTb89C=N|B-?F5D@*OL-MnvqI*XM+YGlu;Nu-6t{i+QDA? zdVliK3%}5vK=?xU0aNoFs^W&^-<3IqsdpWM9r+5O3|+xw*4$$e4K@})$K8gz9=@AD z3zA!;1NW%mf@ebD4yje+mc%s=*u7I0%E&g#==RPP%@}vXq#*Au!TWmC;B<}FUE5#N zS)9YG&OmqX=wvB?!q$65C*M&g|LarF13Yycih2m;Sz$deoz4uh)Qw6dmomqS;*uw6 z<3FrvW22ZP*WB@P{7*UH$Cz0N(k(}@s_>GSCMsoC6~aHXxW0aXb}t+_bg*iC)YgAR z%N^_-SJ=U4JHeO`?N@U`&IkR*vM{nLOP|AUdj8aAk2=i+)iQSfz*f_D!&Kve@z+d` zk)8zDHq{}Bu1e8`Z>nqTo0n!;pCXumca#r4Lq$G#C##h?vB#{WrBQ?C7ChMNAot}| zBAVZ_#>&)o%);r-2X1)WHtN$hI%^y8IrzfwOt0u;cn5Xh=bbY~a(U970pkPTG0XD! z$aK}pGRe$g;4X?BC0T3=0&u&lwY-YO_xTbKUg-0%<*oYuiRVA1`)1JQ9VC#87}ZP4 zALn3|0Wr*O;($quFI`tB4hI#;_pFB> z#cR@>Eyq$L>?tAb$Kc+fRcrYZ*K*TfHblYi3%Hg>clTE{)bz5YeBmP%7CitGSrLQ} z3Br$Zp!$}3WmTYt8+jS3!S~1b=GXyHTrXb6(QdQW(Kg2dmO_+#!TwstO{+Rk`n*eA z3Ez*hN7E$Djj0)%orfSkDA(;Wzixz@Dl~cY6O{G|xwh`oDAhGZ^W-pLGiV z1IsRP!u#}LV@x;dhnX8!UhZp0wQ8jyoqZUpWA4a-)}j1JTTQ7x=el2R7loe0`u zW+hf$lW{aLMG^K&c z)2kKZ4)5_gfD#CNJ;A>Q%mQ`?p}MPyjnAYF_)Ji%y z&fi3owl1^Sy3EUekPyw^4RhC9cbOI~z#5J7uli!f!~=^5zp2FBb$Wa#G?$(M8ua5s zgadvXZFreH*($qqr}A-^PLHglGD=deVXkQl(iB>FsG&+KGFPlt3E<5-0INPEo#T=? zlKU>96`u)SM%Y$N8Hx;<^?awv&U-oWxXCc{CX9$`h-_(``m#_OWsthXvnv~cS(jYC zuFPcG9xq=mz|izf)Ae~-W>(Nof0ayD{(Pv&w`V#PFQDbH8`J!CllK{eNBv{TVj@4! z+Vbp92{YF&y6wov_K7ugd@nC2K^O~sWn@{ep4vfz?vdw{<1L?JS~;rXl=S|)mr*Kx z83kFjZiMzNOqQHot}Ett$u&G&xP?Z1aiTW~a;Lenc`8@+ zbx^0FC9`8W4_#Gk4JN1@RvlTy`6-8!?8C#C6uAct?{*}zy4$fXebHioj3$W{7fp`Y z(-`%BkONOKkwzH|$o87A9~brMGJx=~26Lqojl+oX0_vd)#<}Qf%`$zwq#)X*Mb4W* z60&b~=7sCmz`oO5lAffKrQEQ{N^jmw>fGNd4IGc)t(!`UKbCK5hNOmo#Vq{@viw5S`?P!zopUI}wm zhl2*M^BHx0(x_{AhO~HY8{0t!I>deod9%mxra|Oj8jRYc8wk}k91$dI9r@G^Q>P8) z+02}U+{B0X;H}??G+&{GM^ClrnrMN@W!J+7#kOE%`cx*lBP0;HBEwsvBJ~H2zXJCM zWlbx9yePW-V+!GBWrvA^*OEa;6*M#d#AEeTHqFoYMWqAklRSM$ zaFeLo=E~-d)tMGl#A80kIw)Gz`hzKN^%WFP-UDL=mG{2knbaag4x=G*jvoj$$s;7s z;ee@^BdlK!J3&d1au-}_p*}F`Nc;*(r3cQo%?3<qtDL66<)e)OKRI^rjQSm&< zY9APRzzzi8Y6<7ar3LJX0NcvyfC&tjupG!B!x-3sCRqQ`A+d_BFA}_0{+$nMUZ6Z* zESRs%v9A}LRLXHcn&nYOa82V(8*S z0J=vNa*YYL3esY2F2#Ltl;jGhN$@N3XexHp1P0XH2;PLJh9XyluFCuVrNM(_r+DBP zd1>xQz31Ph^Uzb^EA*NNI$kbvAQ>oF zme2l5H5F;nURXq!krV4n`Wa3T7N4q8+#NjVvm$5pa!{oPh-7(PVIfuLt1b#|xm-ZK zHu16F(rQRWkm-W@)8{bOO@0peE)cp1Y56P{c(O6}Ag^kk+}7w>0B4(xhm2NWV#BCcD~gI@a9~S%%yot%b@w~-;%y~eKcj%qDD}f9?KP} zNugZ3msIRA5%vB%F1JaQUi*{J$xRuY?I<1BzHdfM)8bKmjBgcYvBzSb*@At8xwOy* zDBwWe4#Z};;RnR$nCLUe*v3|x7rh(UI%B(btYbrJrv_5Xg)auxOp5pnF#Dxos|&V6 zcVl>XFyodmkCQ=rG)h}Mg3qTY440qn7~8dmn`4-`Tns&a`#-@sc|yT+4uyp-!#8jj z+*7NCg+wyCENdAlbp+;=qw}N1-Hoq(Jqx;;5ugz$GBqGZsNzS_e$2XvSr%az#V`=% zO&KV{?7425L&d|mv}`@L!puLY^8DX@+zL(^I zHB3z!w#5`lu4oqkC;1KU{{=vy=x^~$wrKuC?~;Q&Yc)hiwya8*B#p}U&Z3zzF$h4t z2-zAX;Q#d`;~t|6den+i3zGmE!+k4JMWrp!2HaAnAKj{?nP?qe5Q`J3Tn<~h z8-IS2pWkk?rq6&FJEn_?>d5MQTKx{pAWf108l}U+V|X)rs~GX!%`nJhl4Vln?#ceY zyL033vfVv#b}oeOgrYiutv?&&hv{U5fZT(Y-~b1M1czCOL`Iv1^=cle@tn||QRqfl zcq>yz^c)!L(iO_vDFGE6q;VsDD`>@`kzAz*=%YFT=fEDJnkCImw&C;m%%r!)b4yF7 zrUFcad0=Nta6TsblfQn-ub+CNJ$b4 zPwf;I;YmCYkQe$ujO6u#sMw`@bxOUwP`A7~%XIPJ%ff!aQZ||6NkVU&%BhKpNNU~N zrP(yd<&ym^QQtJLoG@~R+-?mK%GAE8#x1qR-N3OFF*5EeK>8C*pFv%%HcGtVV3aN+ zw~DU&JE&qB6trG+eIfG-!c_O9W8!vGNyOEXbi1Kp;xS;Cc*M^T%4nKE9X%K3u-#CF z?!Os!Qs!PObN`nz)tpDYbGtp8ZBURWi}S$JEG84BOl)FqMd{(bsU7nT$3)qR%x@Zz z8bWceDJ&uGxoZLyY>EQ_Ear^}z;HRLILB|!D^MxWSKI&Q0_8$pfMOx1{ZpDmclO=E zQz(vXs`RX}9fB>`d)mnhX5LXpl%j-=aF|^c6)-|P?%MBkC*5!-8zk?e?wyvckX?u5 zOKt7$(3`Hhx2bF)zS@NMvr)OT@M7(ltt-$)G_M2jzU3}A@ps;E=89|FVa~9DCogL) zbUNiGf2D+N=2M*lDxx(*)NE+X4EDl(?QRMZ=3H6=?}q95V~FbtJt=#rgQ|IGVDCp4 z&l1GKSZ&O$M0hu*=a0jCB-!S<3Uf^#bU*kPogt2gK@F;ab4X<0tyN-IRw z1JT&?B|fLD_CWM|=2F@9*`MqodS#|b&EAieiD^K3brb;#ox*lCod&b~{>_x{ zYyGWsc3FALo^9qLb#hhAETyEB%dYNOEd$<9TvXn*Wib4@;+smPB_Y(${gnf+mJxmb zVeUlV|L=_HdF}BS_jgyMdE|*ElYAZ2ceSFotmvX9jnCsLrp$QZ4IgIuTt3}#&wx4iYUk2BUD=u(lWWtltz(? zp?FX$gU2tRERYG6%kPvP9x2blf*CwTB?6!p0eL9k^J_MGk8i@YKV3A_@5W zw_x3Yt*{^<%j|VHx`ZL2l&IdrtBg^n4<l`9S+yVLGuQ0K^zc1+sCtyaZm^Rd6EAkG3E?Z z_&Mm2P_5C^3KEhzgjPN}-f0~8sgK+k?}RS+f}e)+`4mmSO!_-;L~R8kvmg z=8CA!m~1X#m4b)>PC&80n|c{e8lWg}-mT4{?*ZAJ7TWbxsPfL$vh{jsMZ~&rb03C~ zQ`E@*Q;M2pRDNL;hi=tVgV*fQnTnd>(NJulyDLYWj<|q~l$)(U(6Tyk)pp57{UFH7 zUxne1ql!F|hhyV7RMk()x>Z!mPwP*00SXavQbTbxF*Sw{8Pu{es(@q2#O(n8zM}l& zS}+b1@A>PnDoE0mM36L4?k$NyCd};L9F;ZhL4C((4h86M$_t-j_@b(X^CwCRAD?{t z;$Hir-gIdBdBa0WZf^INW*;BuHdLEn1YMoMlpNnM5ZV_E$-v9tS0rsxh@T(}(~I-> zAbv9>N|TpLOJaHpsH!6KjZg5>NSUsJ1o_!jIO$>oIq9SW|BI4_x9n2m1yw5{*E#TE z94M{69jcWGWwFJ@zt3rhJgzdSm$y>$_`Y676_Kw54XZS<3*0-_+H?OuXujP=lvXuq zpL~gBI?!wL1&fCgBe_|!W93KLpK2bxiA{$|?a4|F+LoGvQBe?T$1+Ljn|OmcmC>2* zl}-QT&z!K1L3^4e_EwLRzRBfaY>Q9-+XlUbntVD^$VPBLDN}laa<24cqzh1;Fqns)@{YLZrv>-4NNnnz$&O7Ts{_erKzMxRAhNaYO5`yR_UYZ3P_JO zajD`{4?M^o^+OseZT7NI8oVksW8ntRs6Fn&Ut+7u%w~0#%`fSA(WQK<>eYtWUDOWt z^S#E>?nBH9h6Te35%OENicdd-*k}QF(#D zR!m~>VZC((`xw_n==Hl>@d)vEC~5rz2Z>6EgaGZ=b*Z~mT`Eg&USw$Xh|NKjF}tg~ z?PGjwQ>;0A7fc6(jeP zU$6pjRoZK^UK8~X3Hqm|#uVtVhc>;`_@wg%V=K1+QtqRy%|34(RyaoQgj}^g)zwYm z$c9aGkS|k+OB7RcRkV`x_aNu9KVP8ZLq7BS9<203tkR?+Gvh-cpA6u*hbhHUCd6eW zAKVmQkIR6KUAep!_pQ>xPg zd4-%30rv=ZSPMpJ^eL<~eYq%ppq8o9#D_;s+`yJ`Z6RG3CVI2?+Tk&_g9vzPA4kyn^Fik3n;}=mC)M()d5=E;~IeIbG8J-qqYM*um<>5$lpQ)P~4q%xaUw6r_sZqD(66gWq>w&8A0x7t0U@KCQup|{kxSoV!dPIOdAvTdH5 z5*(lLvX`^`5Cc7plFU3Lj5lrtW(7>`peMD1jxepLG7u63Ir!RHz7m$)S)E7+cwlWs zw^_KoI(6@cBR-~R1C%<^#hEZ0bmK55)W8M<_yL%T@I)91ks4Dup1YP~JPezL>(Dmj zrVbg{V=$>OOFdXE`~?dz^QFw(`eE!W`{~l#a=p?d1D@Pvy@tnk2W+pFC>Z0O?qN(g z>2c23slb%NKs7PUs;W?osB2=56+(^gV<9UR<}Rvby&Pan?utn_@O7AIKn6>1h>t+X zX8O+-c3q^;!mBIM4Q=E%!v`m2N^+j+3JL34`N={r2G9po!Tzmu*#Y_3b1rohM(Hv> z>W~M3mV3Q{(SZ!@d%EmG6(j#JpxmFA$g+$#-QTSlE2H--yu|m2H&fpr3h^@-)GuFl zv8_11p^VA`Td!LPn|ZniWos-k@f8f<$!EV;zQOuUeu&jZ7O32sRf zomQEACLhz6w{0iaHs(g%y`97HMbVry@4@7Ao(I+NiGrtp0MybQ+gW-+4yxf2TFE;9 zdLJ`SzTWr9z(s?K#+ciUPEA7~&DN*a2mollA@k69>^Erc#YqZ-xof!5FqdYPs$zyf z(z%kcA|m7{vPDt$DPOPd%q282k8L>>aMZjANjj`T4pjw7h?MUhUd3|63tX&9bgy>) z0Lq-g%7}G4-X18x2kg)t5L5jKVDndSVQ;&44JIBEbSQPU8&I%kaj*sEYhQ31$c+cW z={!Tl7zglLp{G8Lgd}qPN5yiTR=Oar*k{`@IG!@_eR^=Y>NO=IDpZ<5)%fM#MI5 zjA=rY_aFb?+>V?CD}cnTU-E5f&)NK7i=dZ8llkiyKvNdew=eBij4`FGA`*&@JW+Z3j$sUyxc=Kp7v|Pj88@e^d{LTiz{{BHV5l&+{EJ z%cBHJXS%Dp~w6tZ}gZV?NA zQMtqCP*HZ zMLHBiA%*mYH#`G11i%Ot7GS!u1(+8$$mZgjQ{-Q!b8(bg{+&xMS)rDjVNxExI~I4( zzjsK;M+1Bj-+#q{LB|f~1qtQ?s&VkOi6$I`nyDvS=nGGqHelGmF8O;{^)~xa%++E9EMO5fQ-(~h2 zs?8Jvu}>byE@n{Vp6OiWuN~)%MS7l!a2MZGP%T4TO`yvWvua!^zmityYD|_NuS%ByY<4GA-SwB|G;28^6utIvPe1G(S=JLET^KY4QEK<*k zx%G_p-kcp!(ja=O^j=R$@b$b^OsiZZl%#WuKPk8PbKu?yHmV)f6W6OJAEP|;I{H-k zRP)oi0%1-dMJ{SNOA8FbfE-p`MJQN{*!>?WR~!2$DhW>co9ETD;qUS;0G z9d2P}(kTc^U9UYi z`cX)5WyTY)P|4|QE^DjCPmsPm(6V;@vhii(HAUN&z0BJEXNFq$c8G9aJGy?Dh6V2+ z!X*tobSguYc(Ipn+N^gi29S)6*0l&IdS@M&D!Mb=H+Th4PB& zM?|Hl&q8t;PWWWU9LAi1$_P7{g~R8>%};h@2t}9h<6i4Fej;0piTQ(M1N}RBZ156B zfQ)<|wASQ{gi9s+TyZ^Ib*@j1uxiqT$iZSkuXwWT2Xg|OYn_%^Gkz-PSQ4m2XM%$o z52>^%l$8g2+CCbyi3@D2>UpkVZZvCW(6}?@HYgBzcldz)RL-SZ6<$7ZD3y^m!bm9Q zOING%LX~#)O63LlRps0hII@5b>@bdMOy(TrSa^Q%m+5QBbfLd3Sa1gwbd+@BsGh|UzCT?)eT z18*z!6md7TLI2ROSJ(KozzfAUZ?&E~ZCyJ4!w~H??XW{6__`dn`m<^U$Aj4?A{7H9 zw6J@54SaI278kIPv*nFIUuL?XEN~|o+t(EjH?!eY=yQwVB_0yB4~R&FY70PuarIw^ zi&h(aAm>r4P<0%4z|^#F%2mNto=+7sN*zymoK_${YDfmsIow{ET^WdzY#k~VX9`)$ zLc7wX?YwyrT-H-eOt5uX^;n7Bu%;G@-ecs9wO^iHJV>==+3>P#+$$hPR}m6?_kW-= z$_^2cJ?4d2O;@qm=#o|dVLUPdLpbv9GEt8&^hQG$`y91VW4sqm*fa-hdFutohwZ-q z$dNPM+O$KBL92MXRWhma(xtP`1puCzNf;wf8zZVxltDN70kqAa&6X50JW6DRFJhjW zTcdT3LI3M&dboNX#ZjKHtfn&i3{5+Xt4?zwFe-*0iiYZkj_+T8qR1DFI#)1s zu3+?2goY2=jXrxY%KdL@XAh=+_F(8dVW}3VGPH%X^gyY~k zGY>of(xNxZqhTowsc?!2ACR{O{f(~ow?ICJYsZawN`u%V)IbCXitTf-jd}yw#A9@; z3}TNTzn~GQt{cQg*m^K}{OIG{*J?PPQOEd^^}ayu_=W;1{r^$|vg9bEW3iLH41P=g zLd|ik5pFz$kE(6VmE;N-mVf_2&zfdXs!i-vjZqug3IGH)mt92}{8Rei%XJ)~?ET)!c z#MJVP97sNQkJTB8;AJXdh(r2);M3QEtM3LCGy(rF#3Zb-&zhj9~e~6w9 ztaNJlg65NW^{#}e^$5FB;dmL6tT&BEFp?D z5mTDMS0nL8id6;V78oV9R}$Vcp;kH=roJP0{OPZd%~uqme6pz=eeSAtnABYdl{3>t zy;*9jga;*M0VT0kqmC(4lXjK%J*XVO*4ckCvqYY(pVLwK&~CuykrvVA#TB#RLzqs) z9E&Cz>_G z1%^ljEAxOLp9H2b2~*g=G1bX7lV}D2iRDQU_V%P8-xBw><(o|43EtLYMDlVRX<E#hFYB&3wOgf`#dlGQ!FZ=>J>`sncK>%<_( zo+maVKvlT{%LP|iAJEMB$J||eHU5uuY%XQs2RT9m;;npDnAokM>jPWZB4X(uAPVUQ zZ_z=0Lo%!I{Tq^5MUdiRL_uN0tx}k?b8Zs!suku?FDMK$sN_0D29*E;lUty&>Fr>L ziqm7Y`bx_M0C{lAsSu4rSyQ5Yc_eU=bxNI}A5+f45Fu4)Cof^X z=slJUZ42N=FNb8zjU2@k5>o%Qzs;BzsW+RF;>h@oZ*>##x-K^&KT_~e z1}WPZCiPownaj4?^ze?wyWJJ4Fs|MIxty-bWc9I_9*$@#L-5J;nUbPANIHbH5DEY0 z)x7AFgJdgI(60^yGtnpGrS0$=PH9syf?I3`m5#8mcz=5qmF}h5M>_G%=7FenU2UCL?#IVrHz*iS^z@6}Gn0$aBfb@_@RN>c&OW{qjlm+QWf61Gj5mF3C z-gAxeyOn98KlA`sc4XKB*cH7D&!}um^3c3_eu&92byW2PT13BzM46A@EX?wn%G*@7 z5u)Sf#Ated-PydAl%a%Kb_808q<T?XG5v?{E4+UEQtv3p z^(hAd?p^)Y6@C^h#IVwZV@dZBGkp5!JDJ^c=ZEFhRM|%^AQ5IFB*yRZ{=6f|=Z*H0 zhu!xVtiQ{iO~}}gwYkU`>u}Xh-oIFzw{Z44UcaN9=doE^ce$rQRQoGE(^+hdwd)&M zS8|1A@+_%c$*Q^z7x@@v@U(>|1J{I*o0T<&512%J&DhJK4`!3-=X@Pj*@Zv;{JIFm zy3EX{Ia4|)y<~?*M7T-ZoIwC zca8aUa$mM)9Gkns`8*c>fFQwUgyc~>D4m?;kr>48o-v5%Bu$#G?|4HXPOFU)#a+_R z7c_VsNt(PKU~2%I0V)}q3{7(Mp9az0-&aD2 zJ!&~a$?mRJaWt6Jg0HZ_OI*!0jWxz#xP=3$YDQVb%zlK6jQQIxtK8S7O5{cK?Odj= zba6vf*nfjuTgF00@7-zFAlxN4y&AEtv*gZ za65y_@U_xgTF&nuh1@;V*Zprw2!WvjwPMCf{~cna{@**6-;|j;GxM%Q{J)-Lyw%g7 zRTH6AN&8w>bS*w@8b_@t+!lT1o(>B{J2$-cws0Z*K&aJOAvRk9^x0IJTl?1KyrCQ+hIwJeRbS7ukcDR61d)Z0jWRrZh{FRu=A|-w#vM(4F26*7awxs{G6KL<5m_=E=FSjU z3OzzCueX}-^}s6SenUBP2yMG~P)FhF2X^6Y9Nc3%0IGMUkW}1x0GvdK`!6_tI)71% zpgz9X6;q1n%*~yT9dGdn33QeNvNcr)y1NEndZbq3|1%3n5RwGk)s8Sl4Q{B8-_+te zyknIBCrB4IN`2E!g0nEft-B;1hBfU}0*l^@^^0(8IgN}E@G2m zomzFpoIl8?E7L)j(9h#PM{0rEy5CWTbNnjzO__;z zG!qYm(yVu0Rqy?m73w~)B^+i?o`OHMec`h2!dAa8l|Y<(yj&ogsKhk$z?(j}w%`4w zuJ8iTEO3h&h?qiHgz`tAk|&8Qa=CS6aD=K$SrzW=zKy`6tzKQK2JQUxBR><7ez%kr zSXem&QVtz=gV#RChU-Pq0F>wb`M7R@5o9V&J4KWBTo)WDzr7z zyIH!C1Hy+>+@&9Ra1XjF+@Np|5c@rPt%q`kzj5;A@&?m3YWMI+4&qV!cSqXgjF;`_ zQnnvUxpoXlLpipCayMUcIG^itAI_d?hWI?LCnUC<0LhjI%$di)xOwtPt zitI8guK=F*ZeN;Z&S#nFE}Qz$L>IE$|Bi+ii&37PAN1j)xo6^4Y{5R`&aG?6)E@w= z9hGt}j7BM$VmyzERwyo+pQ2)lx&w7zwJx##-Q7-3MO$g8rG_eF2k*cffd6fS?v3?N z96-vH1F8nCtb!xN)H3m<$5BMsu>dClh3*CUgU%iF1_8h0u68a<&jIQ*NZf*V2zY`) z*7S>?UkGTWt20_MEI?&yFjaKg7(U<=r9I;pVUL#C>cG}L6jWnVU zyv4rGAv4*#N98DiVsi|M=oqA(U#0A3UPFr7dW^C63q;8~mfR zVQPFRN~Xr&@U3;g*U!({)FiL3}d&*gl=jF zXzPf=@Qd0YPx^4yq09;DBQcepH8H`5m}wV%$dr*NJecq=;y@5C%h*^O7mJDet%m0+`5K4BntJ0DOZbf~m=Ub*gLeC_T!LtGSr^6>d6S9NXJ{|0z zP!&ub+}p~Ff_r~n9@-v|3Id{Lw`r(!OHk`-qAhfnlX0!6!6BVb-SW-skNB#l3G*kQ z2#0ZK*m6(k@Px5=7(2n+AMx@oYWzxR(X-FWYzW`6A*jEDJUr#I%J^2l6RaCgSvTrM zWT;(Bn$j{W@0xBChbv4npZ7M6OqFWw%mA6#pG=>rLs6!yxhbDs*wH z7?UjY(lmEl@?#IXs&=$79B_)(aBfbkyvK8hP|9OEx9URQ91NwuqTaP*Em=UK;RlRE zN(3&)ltkcpiMG$;;IZ$H?jIxk4Hm)7#^_u~9WQ!l&Hdw(%^R;nc?EKB@bMiwzcN(! zlo4%yf)@_o8=l1h4vOeNS?(sDDrh4*6(a!pXgk-1XWR+Q<4I`Ii^{#v(hs?!&-Znx zHZ?FuHh3L)qY{D5UljOzm4#9h&OE_N1k9`i2xz<=46jRQwbQZ_2gU=S`M+F zy$`b-tj!J>VPU~g;WIOY&CELNcc!4<*=h;r-I&L;?657caP-c$ zG7J`np;{P}u~07M*+=S#Ibc_O@*@_qf?t1TPqKKs+7YXwWs`8Z^LEL5?XM5u37c+S zm}9H}UvP{$+cyW<&ptt0iLsyU=cI|Biu`{X#(j!=dj513$^Yp2_8I;Or%&{S!gwkN zQQEaURoojqp1D0~zmvby8xeQ|aTBE;yOZ?e6`rsA6J9Av#1?67{#}k<*vbm+x?-SK zp^ILu7y~abpMrpSDj+abSB$9+Fc3JhHyi@ZjCDk6?g*WPdm8z3S32iD!&D$b96aJD zNY^r;bO5G$Ac~#O3JNEXi?UfYqnXDe1dQkMlYJr|<#xp6wOMIk@`%jbo>{g>JDT7! zoj|1$ zT|yzL;d7tj02*evJiJ|HY>X%NnPT}fTS&{Sh%oQy+x(?%h)|U9L2KzjP3yC3m{$7)Mcx?|uq0GyL?rL8@~7 z%HRsqbJH_{&1zFTM@Aou<2@Sl;C>YfGYfe2U^Cai?vCHENC4PC8s0z}v41qYf20bO zIm+Co*Lo@lz6yoo!EMXGHyrl~>HZyH<$A?9;%fo5&+)Z@U1B5y4BL`ajh0yP?ZEpq zBh&I7fFIebLVyjE?}{#Rk{*a}4YW+lEwc@aJMJQl?P`cloZ}g_6Q#EeHhq%=Z*cgW z_eyy4mM{yr<*ks+Lg~q>A#lpidGiZGwq;cN;sS!U)KLPVcF(3_mFv)MG7f0)($IYg z5VofmxerPu(VWk2Pg&-4#=~A^JoFfD{k3Not3&CmZ}EjI!^j#?UFNkeb2p1j1PY0< zoZ#E>FW~-QH~9GOeob%m-C!1*`*#yK&3;1s2U}kwDG4UFxJZRu1qZB|KTHZ8{+3i z0r(lAlzieU>U#T8TFCx__dB*%1NWtV$4r~4vNuKezvJ(JvDC8q|JCOR?utL|?f)uY z+k;%5fB9XeKBWq1@J*(OtY#G`fy;^gJBWG7+_dd@d1}WiKRdEEj6tPPhfd(To1VB3oz^Zi0!J_-@4G@YpFqb z;|KMk%LjlqU)qr*a&OvB<63!wyf>rsZ@?q9`=7EBhXg@F8}7}di=0Yv^E?3kw}=AG z&0>KoZl(Pq=A`Sq6!`su&+YCx>q;vC`V}#ObN{Kl9~M9C&OQnZ)p1UFley3awJLYQG z+qGfpS|t6T&bCG`XD$w7s*q0sSnih#fG>N20BKJ!QeYgAgynZeqKF(&cTGk^9n0aa zOoE!P*gPE$^apQ`i$2SXc?S}Vl@L|9Qq_YR^q9ZA^m);MY|=RLwOKDbg97Mxe3WpF zt_=RBGIIJOF_KF+c2~Qy{z>133@d)V`LHhQ_@SYXaLexcLBM}bSWeF^M(`QO5}J86b!cOY_Jnk(QX{Tao&p08 zj*KTfxrq>0!I7t4mE#A`%Bt)?cx$~KrcrqKdo5VA)aOljn^epjvyHc^LJ1E-HooOI zRxd8~Nb}t5U)eqe{rIjFyC!}&HI=5N?^cYXb>D1t!4$IcmpV{}@)7;VErL%3F{87z zcXNZ#@bXGt?hd-C14YKIpW8#ZoT zu$f%%U-SXKlPW&>9X~0Db7kOwn=57+$X`4#iLHkoo44W0t5AZcJj*%cZY*C8^KGnHSkDry=pP2r7MA;# zHzDCY=vrSM$7aFSIhIbVy3)q-or|aLZ0)lgO)XtN7zaSETfDe*+t zhkJGFuq}r(F*YGNadd7daW>jWO5bT4$ps|2y6WR&Q%yWF{+oL1EVS+=zxi8bblm%k zmG$W#h^TkMRy(0aBXhoQsFgQ4(R$tj-Jqj=Z5wkt+rB)NL5=U8?az4ui{25RM^X84 zdsBcQ%n4W?S$zPqQl@}nvGVTr-~-U&#b>^|9pJE~06cCfo(p%qECbKw+As653s*D1 zA3THsZS%Y?U#)}Lxog4djF!1j#SSeusiCdDf~cPmX}&=V%NDKrDsZj&miEvTT7h>_0O~c6e@3-yT7%v=QMFM z@I;lAx1N=*qk)pdzycR_cpod$F}IfllK{4jgDf4)wtoP$zR?=5m%2d4DWhm z1qNKk0ngiY#LEdD;2&iV0A80*8~o}QVoDz0RG018?R1bulAFF7l|>}K3nD+l6#P3V zTSz?NQMkJ{e_3U((bSR;Fzzc!XWFgPG2)Kr@%o%a1mNsuT%P=`H|dkPV`TY5I(yHh!yYgtwGhoa=-t&W(_Teozn?#0D7<%{4V0J4P&Nw*C4~lH)@A8~ zvDPH6ju;ORbApM|k%~wMT)Fo{+3^p}b#V_R44L#h3gnWr z?Uz<(wD}Itr#AkB?Rv%He`mZqA-(oc{x!d85xMfnFWF|yT!qX4S?Z9q<~q#lwBs+; z@tZh4h(+G=(LjOa-Cip1E^5r-Q0X@N90`x*wbWVq3NEvVn~WU6=6BvkmpgTX6s6^pSrwX&eSUYg#e7SU?oGW{P9w)c-$RdWh;i_zp z?#7`h+C0jRkplE;RxJ^)yfG7uN>85n^Vj%OlaDjwsce%hl!G>RpG-{K_SuK8eG+7C z9zu)73khL%lzN*rpB|Qi^6}wtxhx`PCZ7&N)XZ=Zi-TL1FR+gmnE4b`iu#L97CVgL zl2vCQW{YRI6gOUIWAWm7n$g6}C)K&sl(p%H35cs7gFZ;X6k#P^H-LaM+jCuR-3-kR zp_81uq z%sU{)_R>+4c4&>Y~o0PsF0RG*{Rbbv-1?21(kxbnomy!-!02fRyeE^YB*{pSx zhdi$gbQ5o_z!~KL8YYH896uHviyHW#Jes%E7cnUE5npRdv;6?B3l-w;=;Y<&I$THU zLa_{USGX6@_Hu|Z^it%O^Eq@_HrKJqK8gg$%XAoF;ikx+*zcbdAxwB7JMk$T{s5%t z_{^W;?v<~+C6o>>^H`LVf7zzQxgGhIzG?->;;d+;J(ypjK7Q^OA~$+CqW#ywiQ9K0RjQB<+QP!iXOkoH7SH(1erx5!a$j%=KLD-UPnkn{KA}xuoL+X!3JVC@1N&asP)8M^zy#Z}Brc;4OXeAHX7` zKWP3+of5zJp$^s-?yIen5hPt3b`q286kd=Mx}hfO&$Bm2(!=E6$mafT z2t+oT+p((@kOpN$BT^?27+RX(k~h+dZH4u-jAtAvC-!0R7nyzEldTA$3W_Vw6)Quj z99S;y!Za#6dBLR}F?l3Bs=}mzDjC88vdXan&3s$NFMMBS%?DxiE%Q*LOP@guaoyGd zfGIRA#kX#~d|q;BH>!BUiudt!=nfKFX%r_obnCGXmp-WER9SzO_XiFXShQ=B_7445 zT~Ds7oA~G!f4a$uEH(hQLE1YvX~N#h^AN7-M4RO@b4ynkBGo`;Q4a6T+8Eds-n}Uw zM#2dFewWf3pGg|ZD@m?Yxr@D*fH~I*h?e_*oPCSh+bquQt$dfzUXl}&nEE(?lR8(w z%~@K)dHe5YW;$)OggFQygb@14CVkD~qR$O7dA=tSgXsC)bf}gqK+7EW&m0TF3A2~^{eS-QFJ)HJ6OKU2wj9wru3-`hq)`1t0*yE<#tRYi}6~Ck1`;{SOvtVA{t}0 z=0m_TRx6v+b?&U{im;%z$m6*h_Bq<3b!Vh}?NUGYZlN2}XL;7W%sP+YO|6jJ+M%-_ zQY){#R8cfT&s-wuM`ni&0};8Cv^-SJm0lOFCF%H_E?o}`^H?vWHwL4hgcN)InQ0?m z(~=g#lQm)xSKpFmz9mhEsR;I;Zf4?fq}XLu)$gB^*kQ@@S0+s6DG z^?QxXJv6GGs@1sB?g@FJ&s`H&9lmw#(}aDg)lOZl{yTW&Rnuog?n=<=f-rGHm5^~^ z4(Rc}dO=y!^*O;OI&{^3ojP)W9b_zA;3Z0DV#lcyxm0?Ri0u?aQdmyYZDpn3>Li|2 zM=ZOX*qpsEq9?@+uL#LsXZ8fyKk)5Cv0x|Vst5E}vIu%opC|j$Gyi%{M5Ed2IF*MB zALT}3?yVX@7<*(GN~D5M?B2@;=c{y{ysVPmv7`D)D|_DsN)0hpN_`aZL_QuI=WWMC z`=b{|%kO6=^2mr|{*@0`4MUh(0yn8=H?h9Z2R9cZggS|8gPutcg`+4l9Y3>B2C{$V zRY9P=!jbQ5ZZpLDby0oYpnYfS=I(xof%r3|V8G~|V2+N$=hP2;HQ3lQwZ;BIuFtKJ zcD$|mc*;@8BM@w)fOzi8;x1XJ1G~cI zNO3$FD@)EqB)m$PT^mic|Itk50p<*9%=AfmwY?(yFHkOn5ihh7#aj-h64*e4{6&^^ zxn@D>%N$?oWMw}FrWc>9Ig^t~$1Fp>hEX_H^Q|dV#1s5$N0Gpf$iep2yheOeeXijo z=%}h&3_6~=Qkh*_65vPLW zc2Ycr`BT*aHI^a+o9G-5IxXTsYXb*PoXTVWg^9NXW{zkKn>&?dx^7WrqOuTJFTX@F z{bk8Lg(+~taABq^`)V^_IxXkjEB9iqWZQfgSq<)l_TLx^R1hh&(0TctGnz4f%XfMT6ptK z^*x9{^jGxM4kiyA#xbg|8=f?M6BRp3#A+bp2V%@)DSYjj^C`aN_lw1Q%r~<>C%r;J zCY_`mq$53YX#<~h6FlE`QL&ikv{Y<2Pukw{jx)3_y50IJ#(=Nd3#Bt=Mnfnfp` zkYX`#+%5_zR2NX-@}$^xX=AxUPf)q4xuzly@Yhw-nF9CF)m$O#9E!NB3NU+To;to5 zOw~6uPcTo3Lu;nWPYu75sAUB>clUkbTd=HzVr(*f7rVk63)2|Pi+prV*ChYaFF$#x z&*oMY7Eta2RKLIMa#AfJ>-$tN;f9hxId1R~_--1bdc;M5qPRmK;O;{{bLQ@Vc~+f0 z*OnXflp4|I9IVSL22y=ye! zi;s}4C-ZvK0K_xYh{4$xZ@yL69GiWC;R8cn%jF?48IGo=z_XQxKCPM5Ab(sUL9pI= z^0#VjT(d|Ag*sWPkHa%5<;hjaHGoJK{$EFSaRuK0fG0heIP6ax)C|pB!p3j2k*;?w znSpM4i7lkJ@?KH`ckb}aFG{u@pC=r4SO4TkVkHQW$=bef zL2II`i0!bM$X!@B5+2g4hra96yg8c9iu)P=+k?iB@RfXDR&=IAcV2qd3$t}?UKs$) z8Qaxv#_I+aZ%y3W!yY44>L!xOFC?Xtob9}Hp4W+Ke3WGHd?GK3_rgM>glFp6o5?Ve z?384kB=WvK`APCzdZy0$b?LRxM+-g8p11CPR_~PoTTT+i$V>jjmJ>n|GR%om0$ck% z5cMfX78&0HnfNIGHjAs;kXR4Hb%Wh4lUnsFM|{*1IVxF;h~!xL~0g^*@I;+-y8 zJ9elY@luvZ{mI~1D<NLP$8U+^)e!byc4A3NYOZk<;_#{PI*Mf>zNcFMj+kbbQIK> zlL>~CGNZBa0Iyx8?)QdJ#mpo^s3KT&K?U>n_rkTh{g-3Y=y0jNi6Z1yCviurN3|N= z*Rehq)(hpku;t>n7Xc4wh_=Gk?K59r8CKfV-EiNHa?1ENh7RsUdNivy@#*QoEPCKnVl~eNV zo&v8-u=0H}r%(9hWSgkm!1=sr8EMa~&-J-I(X#8PHO=h02oZ{|z3iJpu(X^gKA)I5 zE>E7bVG0q>##uz+Yfe$ZCuV72TZLgwzxIorBvc+TFjz%;sNnNoa_3)Vat$ZoiGMZ5 zG(9MZW9s$>bO=lR8O{Zf zv>%RQ#JL&4wM&(u2b85D5uQoRBSOx5A+tkZV$+*vf#% zna1!;Wlt(uKdcj_-IH-IflD{OIj}YP3jWt+cL!dv-R2+i|L8dfx|akC^u5X^+(n~F z|7YlBy9w5(43H8T7ixN_kdU&O1PZbhvJo^|i5#SnJo^Ewd?V>WWk8J}IjS1NfaF{$ z9+aGL4XLb1kV@T}b=3Ty&@Y=2wQj4}K*aE|o+9LD0tC9BU%RR^%1}h3#w&BUOmO*% zf=IO+UYV(J1It6j*;#JD2gbIc5Xvd`No{`d_zmBq*<{PcJfG4yiV`+iegWurIu0&| z*t+zpwNJ?@gHxzA*K&mkd$Y+^`*tWeZs)V8#^hdG{;;*-5A#5@e=?AmJpm?qzv5V*H(Xh3%ayenbc-gKzgQr6_2A6opgW|QWX*1Us{Z8)A|;N86MXfr|`nnAP31?;=1KxT**7u&4bs- z+nhxWH(&&}ypgtHBCNJy-o`57SUVALQY}h4I~<;SQ&^oD`yyoaT_4U!2r1X^>JVYb zhMy;6(cH;!(QLqzHoeYmmqpiJ%rHYj##{|yXMY8VK zR{Crh7}~%0jkE07S9m%au_+5}Mj+DD3isii~5u=91+);V7pu{b1)cPEFqqs+{ig?Yaj)iI#V@gWVeK8lBh2Q zfu&KWGMK8m(3C0lp6F>`Vjy!eDVy7A52rzGzbKkrkN3}0C~<(6(oEZA8o~PLdG>R& z#0PgNw>fg4vZdpjnT~4~c2ObWnZHip9bl)gr86DjU)q>ulf#lt5E~gf3Q4c!co6Kk z@@JU@2G|Ssa|_#$zNFtgbG1J}*%}{fbsUR-Sm0I347`3$@?`1N|MvFC$3)EOfR2xR zWRhc(<2~PE>;p$*?CD1wfE$C);C%FZac-O@N&nx)jf0ct72XweC^mg~kmEP_e=2?w z^A?xCdQQ&|!{MMizF3wWQAFH&~Z$kwq3UTX?#d-0Mp@iYh&^ zh0__)B=wsd0*MN4(K_X4QcJc>O4JG0)v7k#R0rb5&H^_LiZOJJiqwAku zSj%j7-dR}Ok~CoGhB2d@mj*GL|NfVsp1bpD9N{m~e8g(meT#A0pTaaU@`GSwG8ff4hR56K)Szb zx-K`Pu&&Xf$pCt*WqB3}zIX6@)fD$`@)HLoa7>{wbk;Coymw2l>>br=%7)ih6QnBE zdm|Jgf2nygpE!6*7s}D)9HrzA{>ij8n&S)K8m-vQWzh-oAEVZ(!NQH(%$2#(q!u@} zEpUsbRZea_pA6=XNu-vN4B6Isgm}?3WPnyhHk__kd}YEGM%f#{h#g^;t5z*kTSwqk z@eMb5<*PdQrld~64HKy)_(NyvM`i6P!+io$at%4w|ZDDr+ml9cj{(eq%1+=V@3I@iZ2Hks_MH&^zfjfJa z{Nz%dn8Ug>3Ml=ndnJT2+O5?0lX3PMNL?Ngj@?_qj=`A!ESJPy^_Tz;#(9f_j&$O} z$~TyJ{jXc=NXINvFWa& zmNZyM=WcM-C3EB_>zRnyb|XGebu0B$eLU<{VWM^XDc^*__7o6lg&6dX4YeF*k;dGk ztS0TB9PT`zh^|Hh&3|q)80!MNfs0lvew0=&2VUSWZZ{PWWh-qlz|h3h=?y{W>+v-N+Jgevt)3H&?2HW_dq5CF6_;^xA(ucmJ~q;lsCv3+eZ+$8HQh7jj=enu{dYwCCMA zj8)8b@0?B*#l|KxiTwpKL2vo1g(4V?GIsfb)s+)F7b5HXHx{58m$?I%at$eB-vud( zEGR~j!yyNo9nUro`_81~4kb1xCVr-0FlsmrYwQ5}l_09aP;BkkozNQw9sKOG=EBK; zU(YVouMSTJ#$ux#jieZXt*HwF*Of}hJY33hOEX`N>3M;yEl;z<;YeUzLmBa$Pzsml z0+T#){mxwUT1sVT)Dc;*epdZ&_j?-dbF0m>*-uT~fTTyQwqBya?N0fFC#pCGx&OTu za9oUJ+^f`q{e_%O-wZH1!nEmovu{&vH|F>!d_F+Ar7xDt`h{yq&AGm?n@AQ|T63Lq zkoGtqDPV*udJ;a9->o;li(2D@_)?1&`=ivAub31f`|7Ra>i>m});TkZb*IV5He8vx zIqJY#zqp!SCPz&ReD;K1+KsE()|N{uux)bllkvhOg$&G=%3Q*WBe*QEG@Mw12NvqY zD7{R;*zSpzuc^&Q#?2Uh1vogB%&&Am*KwR!(Fqb1m@yjPAE^Ga?r-B60?+j7*k#@& zsbu3(i=0xg~!NF!Hw%uG2YhNfr$3rdM@JPXj|1g&9q zD?(yQN7(kc!O3B;3v!MUlR^6pFYYb*Ea%p2LSW$ac>b5Og5Fy7@EohC3Ht=uSx2-O zJ6b-ti1rEYHRj#h^xwz_Zl7$FFsuga9@1PAvJ_g82s7iFMZs#;^GK+g;rOK7_`1@Uz}$l1 zN`$`9c@kZVogA$6>V}p@dN`O`6A{H8PNB%?5nk9Caj)(|zWTcUaOnzQca3!wC;ggz z+7U?aW`sjfL552&XNF(2)0Xder-*9mfWP3~C`HnbDuW|Yie!TIS4mtfjQTiE99p#;Se1e9uzyG{Do@6y@|S@E zqFDrcbuz+y@&O@m`4}^XOLir%6Jb36+hhx$C5DxJc5Mr6L~}!9E7ovM5G0$-GnLUmXx}8Op2dcQ(=WQ*HtH~H$uO3 z2$Oq_p1xuM*84vmg$8BEhfCVMU1Olc*0ygQG<%>pY0gO4{AVn#9vn<$K(>}H$NKST zoFwLq%J_J7!3%3UzztUQsTTBrL@aq^$pTu~Y>4NpkLPMFbeV%yrnyEHB&&*TO@$+% zOE40f4$lQcref98rFB-5MFveF7+cv0FX)re-|}$J=2S{R(j-nxr^n>|4R1M*>LE5#2)*UG<1_**Ko!T*bzmX*0_@swJp!`)^=PFhN1 z#cq|sG9^_0rmlKrjUM=0DY|O`A7O8`TfyGpDD2J2+o-yp?BUV}bHbXP3X}vom-Vn}y!|^|tEd&{GSy-iiq`?bo z-8xAdARn)gb$7)l*lPLhr`S%Gv-x6MvxYYnLc<5zTLFtpG=NE^BOJw{;%#HAu}YJ; zCZ`KzAzn1;+=;Ne`ZPXigUBj2m@mEH8Xk}C;mU1apJ+@ahGjNWcVS$Hz!pMAX^DX^ zjvyM=aRi}toUmy2a4`FL8_Kr8`(2vx6;{po{f>F#!Uzl{Dbhl}+?XX5*;AaTWARnc z@!I7D+l++yav~uhw-!nERr~a8wPh*^VI!o~3XdUeI8p6>nTqvo0o-abLHqyvFcz_U zVhoOAFU#hmK0O<|Hwq;q-_Yu{MgAS-MmgmfWd;;SE)+>7T?9`*psOlN_)Gs+BhPnX z`da&IF54OtUOTigDr;+y+Pu)yera#6Bkckjc}7SfTJg|jqVKN)? z7+#$+cpnwM@X9al2qC(3TSFfmZ{2^Lns0u(BdpI-Tq6{w9R{Nw4|x%ONXKu8R5DY7 z|MO8c;naCo@a!x!9U1})cLGID+!PV6d$p}AOMD;CI_}_cG{<8jju2IN{K`jAbqQ zU)Z(bTLC4Z$EO&V8WY>ew*)*#!_1G;^KP5@fd$2faX^)D^NHAuG&j%acyYTR{=2%qtzN!!suAir0j2Zmvi&!-5~TaxD$8ZW$KV9ST;pTwep9kze9KGYcbo( zSJo2f4ScH+T}{vBE*M&JMi_Y0gLCgChjSFZy%+Mx%qtBh@i`;owCnexzqjmRt>EjM zeJ>fwpo#1#tgjWJw2>m8rhj9is+c|6G~3K=w}_j;>+=Z7p$hgt`i^#H zQU6Dl#xPP(#-lTG`~OIR=jZ@6q|CFR}C&6^h)6U8`x6l3wx+#ReNN+L?Q;t zAfm*>;z954LrO2K(Ugl3Z%NyimoJ#cQ)U4xC$#Fn zg$s`nlRJXQq*fxt_rXGZJ)j{t7~=czhL;fPlBH~7Fxg<=lkQ5rD~wLBGE=QR50E^?VK@)aKEO^?2yXiThiRBo1Et)3Bfn#-RcPO!Q+YmUSZw3nt4~_m{L3!hr$CY^w;idhS|+m%~nL)b-4!rDxWSz7eTgBNT14 zVsmn&nH&0GCS*)Bln^`x>hhSn8D(P%T|ZL<3PgfbAvi%&0y2t^{0W`KPUw+b4YORP z1HK_C`L!%5CXoY^im^|~q+%zR+$!ca$PLy*q#`U>ifDHnS9+7U_*ik4fUY_ir`FWc z=u^9+LTc+qM^P=V2H8_$37$lp++%9lPgB!^nwoae)V7SKwrMn78Ap@)+ur^Zj_+Hb zz~2&##4JSvqxl|X$LA=f(K(tJVm-yS2A_h-@auM8>SkYRY2?*{tMvKxM$SJb?dw|r zYJ8R_o605FuW6lf7|2QcJ6!;gcErt;r}3|3p7p(2BxjTI7|j59*GG3QY_nGd$iN{*1l*a zcd$m}5bI>*XlVb87o#pXME5s00D|koS;VfBG#$2{CxdhsBy>+fxC~_wS%w1as@IuO zy_$v*laYMZd+6UUNIooAU$0-bcj42CVKONdY5_V0SqLLAnx7+sE$g&Cah7DTui{cq zG<<{sk$-1|7)8dIrMXt;y&AFm@yK`30b~zkP~nl#+=po-YY&JB-LueqaIi-*?ffC${C zkp&eNa5z8<#ff;XJ`FtWoH#pjLr{Q zkwv(r!%E|;bx^l-LV}_JEYmWcgWrh`T@)QM2fq$|Vt0ilM_c=-Pk;p&?hkalt0MkX5D8Z<5jlc@Nm?;ftAvY5Farsa zO+mcG#IXGO(sSrQ47+-3;5nFX#(|B?dx7Xv`b1a6qsEkqoPKR;PPj_F(ZGm=$mgQL zeO{ru>`d_R^$)!XM#ZY^iAT7J|WIwKSZ|!snB~}`{tM4p+aRK;r?oEq9ur- zSyDh1CF0)^N3r*16^9y=dN`|m@{`7=P$F~8++OI~C;>PKV8t4fS-+l5>aYX7&ms48 zRov?&I?v`r_{=01}WCvlpBs?mO76+&gpC${fyk{~s$vtQXc$7rRKt@4# zve&pI7%e2hFn8S3>_2q<3x)c{h5CJ}aV6CFTPpIQyJ_AZNmy=F_yS6J78nvcBC-f= z&3UBDAh3aKitqFVEFT^58Bvc`=!gfm9^h%Yt%vTSR6-YZRP0F3Lrfb|m*o?LQe03> zavQ0R+ewa_DUQD-H$EAp0H}<16xHnOf|MN|c<`2l;Hhrcz|iQ|3a67Kpj*Ai;j|02 z6kvib)zFP8;rowI3EdRbisO~_=tgA$UMm~$;2{}O)N2R{`xi|V>tQEo@>bPYST zGE$LoN5`y^>yz*R6Ym5!>u94MFhK$kQT(x60o{F(O*Bdh~mW6LIDhN80MdeGdx!5SYu!L!F5!Y--(}NQ6_WJv*7adDiD#~S0)GY$d)JtT6wGddihKU^FzC?y`=XwTT zjR(Ht6Yy{kH0}uE-I(JS(?<#3EIro#7pNq!90fYYJ)54!LFP+$F@ z9ZwSe@JwregcJV{_t>8R3`t7}y7BiYID*b7COEs?i2GasLt`I)Vvmc@7KFb5)a9HKz90i-Brl}hjJSN#mGInl|Z>jmCO|t(SZxe34#}NA-avo;TA0;qJG7DsaKJ^$d zxN_Oq-UzkQXG!@bU_H^RA4(luscavh+;j%?9t#NwqCzp?VRfA$=iQuDVWzJ> z@TbFD&T}wJZ^cZhAx>59=Ji_(SGavJ=gS2NzR1;)b?;=7es5-V!4k+;wHKYcPARZN((wyX^p;f;` zu)HzVeDN@X3GsF6`?| zq$jK(ws#Lu+=~}1Hy<)q^bP|PL3nkoSDtA#UK9&PGJz5?jKGU3aBB-HT7KRYO}XPo z;~>#vH2qG5!b&Z`Q1ZW{XC+gf$6a^pieZ>OVCplWzYk#augw>~$xGiyPG8717ksOcUArz)c}L&`RCe`C6EYFbZR|4QzU-{EyMX7X9)=V7&{81$B;=kgAscLGXY#4E_;tr+ko zUgB%L0o`CLO!&$)8<6G`J~q7u(6y8OS-;d@K96qYa-13DlmwQNRD#yO^$uu$G`(dl zSY;sbtu3c!72^04@+9j=B+~ce&B;rtV*Ztjr#(T*2afA|du0s>K-v99_PJp%DdfT| zr?XoBV)WL`D~%df6x)HNHMDY0vT3M$)p}lPdHkhe;CIF5YxM zE;1h!u9m1Y*oc5ZtYCROlmMD<*+ZmYddalaJN1cBhQ0VMj$wdKs7yJS?LVxRF^iP} zIvX#XS75EI+r{N2n+~b`+W$zqn;idRy{C!WeA&@d5MWqwft(aBd#riugU1)eCFQ|l zjI7U5D<)i5lGIv?6Iw&$vOQtDT$bYPkwY#@>-1_QNXrbbR0Y1?M;>9u3J!)x5n}LK z`C00!=)Xc;wc(Lr&PhbfwoM)a5)^YU1gsRrt$h#}(PH9n&7;5!#xCA24g&*z#dT|I z90w+(RCEkXy?%+~sw#Xt6~Na}TVeF3Q-=9jbRP;vH*yHr%O_k5zQaXOzTHa2IkVxC zc>Ut5XOZ1UclQAyr3iQT0VaDZ?wje?T2hvF*G$GzHZ^IFxAUmgZ-_K(-`FbCG(oju ze9=S^tub_0-nYupY{AqX56>jJJ5{B2c0l1A$tW^IA`XXz0QraI*kmY<%`}O7P8AH7 zoC^G^9^!&i;J8AQ8q0+P*YAL7_CMrG_DEb_aE14fZc&&zjI8eLxg;z3rlwR%PQH%1 zPMoS-SrkrnQh4a~LF->kbj@yiGB0%k_Fs^E2?=;SS!*y5F$x@w85K?D)|B!bD;gE- z6IA+jV^RkNKoO1E7L`O#QLU*_bqQ_LBHSst-E?sdIJsM=uXpg>dS(y?repz;@QhMo zYn6zg>P75G6O!*teHzp@(8X6v7_cdA(If?6Q`%g0T=g8@oQD~18MY;uxxOvQ^eh*W z8Cis6Mh>xJH+a~ZT^aH5k!#+lBV4nH_DElrf!!2JX`~7NQjq_-l`NcT1{Xq79*ktLhLWu>OR|X_o}+9iTmBFw=}FUw;-d^GlnLL-r2#njG)-*MDnYIf zXKAQ--jo-^i=7XJ)3q&vud4%_nSlR>wgfrLt#*25MwoUH+|YUno})ydFC$Y^T{ReE z6iuU&nAhcs|ATx@g2kR@gFz7T;ph^-R7pQh@So2+8^K}&qR#WC^% z{FExRc`AT!2u`3>5g8a9 zl?+8Yj{H^=I{MPDG?24bB57t`_eDO~Xmi4e??bH*a zS_2Sn9-OeX(WGZgNnSy4njF0xPkNplKvSzI!y4^j4*NLa=;D!p{TC!%KN7sr;tID6 zi;E3_nII>Qc2~7>(iVm<6+#m>^1w0$wW^9JqrbKohT14xt}1@`&6h0?$6y6I?93iG z!Mku#X7tf8Wt~D%p=p{=>K*55tROuQ3#hqOj6d-`<#(>Y3Bzu(SD5Xd60p&wlQ@Y; zSbQXiq2)6{m5V-}N?X|d&5T#ir`9sS7QFg48>r0trID2NLm2(d)Tvo%|F4mG@FSk4 znQY^0vdO?9U+5$Kf{*lNj+WRl28Rq&ORniNMQBAAPDqXcU(1^r%MTDEcVlgUn%+QE z)+fBZl!nRc`jkp+tY~_uISW0m_sOWt12@ICNA)$Zy*<RUQ}HY66uGANbW8=mlK<9vPxZ#Ky7W;~MMdW=q)z{)=A7yd+jAGqf8? z7(R^Qsx2AL!B?G4ipO5JZH1qB9Cq33VgQ(<#fg`F8dw~T){Lgpc)1*@JC01l`&2$I zJx_(u@)&nFBqWec$Y`k=>>T7l^{obgp3Z4=e@2Q z8>Ei!@+#IVpVm&#^UTUW64mUk>}WGlg+Z?^Xk?eySgORDTgUI~CfF@*SDs`cGB>;r zouP&ujz;8LAb$ts{w9JcU)zdBMr{ns=7}~JVB!$)IMugsHfD8em~6v;ibzgaShM6j)?hxvTdztm*avRM_#lbVfjiO7_QooIb5Y5^CsGp*#*`*dE!M}j^C1&%q9OLL~GJA;H`qf3){zlTusx8rwkWifT4ih*o%q= zUOMadNhSrSk~1~(fd@Wg@W8LEPv$pnSWT~3Qo0K7(-Tlk*Y#@i`!NjF${fKvPc~JFLaxuK*`rnDe>!z-xj%OG#8YRIzHwqx< zFJQ4xBf7cp@HD}=?3|1Z4{^SU_8&e@7CBHnO0|e&JTS{eEcL;%TqIme+!7F1yho=U zdgLqI4HWseiA$Rk0>q0a8L7De>v65Al%GEAIkc@6G8ol?=V*6B#D5sHJ>|+9j368* z!#XS1)NAR;yeo<9n1b`1t%>@``x|y{5#eH2Oj{kEUZri(MogPrt>1j^Jf^+f=rDC@ zbNA(9OYn#(ry84ra|fuJVd;^vI2*r2sQXgZmoiHuXe5^M44;qpJePL-h%dx+TT8-o z`t1jWu6t{>ex?htWVO~U`;57{#gm>cixYd&GXimt8Ilh0pSIy9vcM&1bAmzAww|+G z*jtww*%I4V9;V5r4j;OT=oI@vn=myFGz*gK*(cRKnmBJ{JQ(iP7Ud}=+CxE})IN$+ zr^w(XVvGy~ubYmBsRZ6~=tW0lFzbu;-Yz-Ztmn9^HpWZ%qK)f)zu03=G;fI5Xih7p zD9T*k$+mGR58(DU3YrzZH~ky2-+PX07rV2J1t)awo{JLiPq}=Yuj1v)m`*Gn@>t4j zTK%7sfQ=lfTC=oZqkoNY7~M5@)!FqGPj`T&DL(Nft*AXnKg|kHV-ol;tGnuXI`M*| z3CIC2^8ZPmnvCp&%q=5}v;IOGGB7r+EXs(T9GQNqY4?|_E6;WzF~J|$kd%wTr(y9P zb{f)+Lp4KlP@zjC@?7*-C?V!82di`z??n)<-{SR%!qFBl#==A_Jh;%*J;;SRXx3M5 zsF{Wb3Wkf(99jViCy#UO9paokJh(GV9G5*_d1ROW{nC9SU+3nvZ(2BW%DMt$vrg)M z;c}hnQFzPm8bg|N%g0b7nqX1$VE!3Sd~xxm#O{7&14dD88-9&5FMO;#qU709!SUf( zu8q;}6^U$emI}UbOSk#WMzBQlv#nqWQiwQKyei}u7cNplYqne$L3LUw=>VxH*9;Eem4C5f+tuw9R*^;G6dS?soY&8XM zOWuKo+-*~L3P9UP3tqmOlB?nC+c3{>WmF{M!)$B2T7LDL7z~0c z`PukuBMI2{zDIOC5^pNA!rBt+CNC8w&)raBwT|G)4ERPQM8&fOKfEx#w*(;D?$_Lhgqq^Q&dtOTRPm6pul>ocL#IpSOP zDPzFNbaD2B0ZzuO&vuMn7}}?(&H5BcP9U1KNibew24T}4s36i3B0guKn;!Hzwx?qT@0dd7ubZMd4d3W`;dSq{jrITXmblcbAQkFojKis*rw))Ve(;Frt&gk1k**U!`l>QdaQf7vj z$CvGxJi0wSDjcWB?n4h-OQuP+Aw%_Q*8K%_eziB9FR{^lspdiZ3-^j1*OLDPq&?uF z?T<$&|9ZQxG8TL4WN4p3WCmF3UJyr38QRg*nT7geF1eb{m{LGX)^h>26aX9F%H3`z zeqU^cUl@9Q%}qN>H^Njs$HBu?J?=sf4m@-T*p|inN@*GOfh9M+4Frx=Zk{aVsxVC$ z(d}L-a4h~xI3t4)&XeQY2Wa7Id-wkOZ{?91@5{r;_r+o4dwr>vz`uhn@#50%BUqYO z2TDFDrdL8jpD$<*Y#G6&+}ar;Vq{>kA{xkKMbVG0$8#wEF?m%~&z%T1@6we$7G$o) z%RCk67^rb=b8hWH0=RXJEyaFJ;`5DrYcuS2J+3jy{fFoF4nxo9k}9@ao-rN@_1rQ^ za9s8T9@`qYT7e3j%W@96L2G}g%6Z}w8#LqtyHdA$tW*XsWD?D{PK^W@DUdU63h*2* zap2hlaIn!2Eb?|BV<7=d5iTx;b95Qe#@(HG%cUm>967iLvo3O^B7~35x*O@~t+(gN zg17$lm(oPdVn9L4l`d~WM=n{H%oa~uTXK^)h1`e_g5Vg`GxT1#>Dn>Y`7TP=4zfPk z&he8zq{NnAK2PV(6Je8SDYB{Cdc5)E=!J_le59uyR@2R$d1~qX&ADiTvpB`WFYtl6 z5h$Gaj+)YfF!%)5jhnF9V7F=iz$HGjp=dR^T;*C@C!wK6>$|@E#P&|6^Ir32uNA*J zAI#RSuLNl_{0wGCtfuqU?~WQQFlF9wV7^eXW1@n;^ru@!I6#e(YUR6`*`?L z-^Qp@VDIHrVmnEXkZNYnK`#u4M_w66HTy1}s9-oUAUnQNQGpcHnwt>?vb0-ic|_<3 zdVjZ#Qv?R3HE3K^H$r*n`oEM!_)%Bhg&z~^DerTXO`C0 zSA(X3-IpHKf9MjviHRujnBvmhy999SiNuBPBucl7Y+DB;+j@24mhLOrmqWed@ajPP zU+fKCPwrcED)}B{nxHE70b{Q~rBxo*MiB(cdxkJ+e|1wZ4p`eKUhRPRLlDF71_ZaQ zuawnFZd)@Pdo1F!!OJ%jiAT0cFv;f0orGZHb0%O)Nl+(Izyns1k!RWRE_c&1fo zmg-bwFbp)$kCD{Z?O4aHA|SlM@L>#BHD?MeAdepkCg7_=Yaf^i(hkMjL=$__+h0P$ zH=^^cqu}_gI4j1>09{VyaKy-F@QG^(lo9jHn`1X4ymHwV3#tKvX5|1c(8*JQ@l(pwnA+>)y2j`AHk``E)G^a`dfLGQ~7uIPz<; zbGj)Ca_2DZENfj%06_2}6t}`57&oJ@I$dPH_6&=M{L%LiM+(@2%A zBo)^~>w%=mER;Uuq}oKUQ_CPeei!Rm;^nsCC>MTmUIQvShS&keqoJm*^>7hi55F(e}QtTZb6q!-LW zTdJQgkn_FyB`)|G$3bioth0J{yzwd8<5@qn@EYd2Em*gOuqZ*R-(1SUkf+89d+8Y~ z-L?Ux>lc0>FxSlg(YW~M;nh=F!NE=?7MaJ@83Z^wf!1ZU+u$=tih72VjGR}6wMu+H zf7R3!`^PWhsi=}zrhXct+znPgc%e~KKQej8VX)rkov04S&(-mBj+dJh(YiBP`AtLl z{7o4Y#}ac{#{LAY7oghQcgMf}t`&QCi=>rtes|c*Z`RfH=3Ls%Zym{+euTR@3Ua1z zEal$DNIW@4IHOJjzHRHNT{&l*qWWO(SZx-{XU>kzve3INU6)Hl$AU0IPR88T|KlOa zBh$o&_Hd0mF&*90r&~mY)XnP%Z2v7e=TKK9{X~M(BVR{i-VPt9(!dl^32`iq>J;}d zg;9M0K`v$ReWb^|n;A04c#I(n$DD!x6Q3<@`yW&~1jvv||4-XCpjN|TCsqn>U`)E; z;s4IZ&neO5+_AST6EWDkR*o(;CjX`uUJ{AY_P4e82>3VFCngpi(vxzN8rif28ntxr0lJQuua&dRK+bVsL^PC>g*#HXYZTz9A$~%zhyjWKK_?CaQ(hiVZwHrg z&`gOLl<1SJtZa7|W4(&~ajrh2sD74HZ+hJMt+^bYHIys2u7LGEvt}@-L7oW2^btYB3K=!>p1tx>q?71MfjU^g|`i*u#OI%<2sLbcT8LO-dZ# zRRL|sNTyTn-@3&Kzm~2XE&JJ)pHEARQ)thQyR-Ex-q6{DoZ0fd>89?q9@9Co$&Dg2 zcZ4|CPG%;Osu?s+!hPy+;x6Zx;~7L>U`m22kr_Zn+HwKXO;;eQ(IRp>F0sUH^n${D9`eC8K)`=nkF*g#%>N(aFf(DDNeEz5Ub8C(H}Y-0RIv`J?z zESDIJ%hsW9BYLuE@?K-)ia4>uUBtBe{)megb za)=%Dj%)RfEBiRoIe6!tmB&BJ&p23-%(gP}DC{yDk9iUEJ8Od%*&WuqvblAyk_#{J z(2E&{xY8ogTf>C-l$^QNZ&obzj(JjFQ_4kh^xDU`!Zgyf82$QCCHH^2YUs-HKtW%%7!o|5~JKYVecU15YWa`MhhRrYiOKq4=wP2Cj zZa=NJy739MUHv>ds-b6DC;LL;#x?iKxm5BoNXud(-%l%Vbqp}_Fj1G0G~Gn@1z5WO z$-)fpc}CB|L?@tC+<{=3=isECQ;?k|#k)jvz6w)Yua=uKPn;x+?}Sq$JPT^5`P2w% z7){YW9nXLgscHks%Ow2-EPo8mScU%iozPwq0GXd7p=djD9K>nu737e=y%pKGC!Qbbb zG*!TYbRw;T>!9@L3(nI@Gu50|q@bVOjk#sdeQ@Y>ANvnm^0Dck>s7#+^IvK`@u@|7C z#63)R9Hq+9H|^T`EGjFk79_}pL{;NdepCx%(A74x6SR&rOYzUtZ#eP&Vz8dn1HY9i zX@R>friLVN>98KDnKed@S*l<$)Ep#QapUY|F%(Koc1vhU`ru zP^g88?@R)U`+OOUn)ngBE^REIjtN=?qK*Df$Vp*z-x)h{dz&y_v=>qok=FOz=#612 zR3t~-?5`N_W|n*pHliRZ$1_(w6;P(ZI+|EXYCKFL36>clWQ(oIgx z&A7{#lhM^ggak-(5JrgT^n|G+ccQL7x$#f>d>ni|o?{{i zzS_o<1*)h6#$JKSICWhTw@Z5>n@ur#H%=D#-4wrc^5Q>yU0+)6P9E#^l`7-F9vvq=<;K z*Y}zh+h-<0lqzA@KB**7>7L&W^Ui%kGwmUNL4*ZPqFdJyfIC^{ol#hg z($D*6XOk`5gRf&vTbEkpsJU5#KwLM~r)!R!3Ugv+Xu!}DNJnqpE)>)?P@yPAqbCxU zMW668skIW(E5~-fa>*SFzl&gdUGS&k=<&ZJcc@1Ku~(Qp;3ta8OGP>AKXcp}<-i%` ze5xU$gmR9vs)-!m89Ce+Ipn9T_TGtR#3Z~4!Q4;xq5R5bYRr=ODMUU|?*p5pC;b3w zsj3>8C=%1Q_GBgH9#k_3a8}?ag-1f<-m6}-2h(VCKngNd;&8J(i zK0`P1VrdAe`;6=R{1XttbbF_zAk|}Mn(gem{e7X=UUbj-Dnt9~?lk;A9p{zjv|r2- zOmkhnxUPPc0PsS-GdD|2wh*4zBP#NQQTc=q4671fk6zqby`O49t;(9CtD2M^@@gQu zGCN+(G4`s%`05;wxK0P#4c(y_qmcQ>!>Uh_NoAy;k@*82f|mcMB*?@7}4QS-@?ogY!X zkk2g^p(RwDplq#n{hpPTXHmqlan*o)^I+~bwcOt99FHF7zEur2?ZUTN$mv^)7Q`im zw_s%@ly3aXoW zrz_V~;+1pX`KjMN%H7m+eX-XQK4BN)(z)!Dyxx)xwhs$oj3wr;{cqRG^ee0JSlZRs z&im}(g7;esVrYKCCHRg(=`f4-IVAtuVa5!>05i`keNQxiO`T7ZQ}EI*H^2cDl)dN@DIbY)oW3! zPDPAM=~I>B2w2~BqNGGfQ(h$f!&g)uBS#D0q3CAl@lQ~T)%+yNofF3VbJ+p>i6?*e zf$RcK`cPhq&YbZ~Ez^B02pcq;^h0sF29Rrm90v{jQ~9_#J$#lh7bOi)l=_FV){9DI zNk38JMZb+5c1!*ISUhHgn08NrY^|WHd>_LDP|)+efI$0RwwjKmHDEL@A>dr281fY- z>(J%gc|C!NmQbrYLd2H>qyUC)p6TR^m|;jKlXVtmsQ4tsR)H^*tA6*WMQQbwirQr4 z+T=dg6SabvSP?ZigaX(Y)N|wlnWFvnn0D;Hdq$@R82 z+sVdlwNm?dEAf`j*GAqg)Jc)s+@*Q)Mvc1CMV^eshXB;lgjnclHod;!cG@$4iKNk5 z9Zd{v=d2o#Vo9u0#MWw`-KAopN@V>js3c7E1pKd@#(YxogfcZm>75+Ibgp`+oY3#q z0{g#uw(=QBKxrg7nDpu(E25_}dnvSp-58Ci4+!ErfIbx=7r8ebkP~px7}AW=@1Hbi z@8UH&>3iKhWUWJY62DRx@!5rb*mMWd>()I0(2RNzAN8N^iR%vS@#hn5)MpW%=Mzmz;6y8u z57twwX(sbUe6H{7?}?r%y#gvYPsHcmiOzmA8S@BHY=V^H2bi);`JIhrM`K7lbp#3Z zuJJ;&$XUJyW#+0Pmt~a6`yjB zC-fZIEKc*{P7Csm7UYm@G}sRYH0X+K>NfU-)A^qoH5>~uc!&);}QJOn_=khiedzM0$3rrclh_aWkGJ9sG6AEf7WTb}B z&_bgaz$&1fmiMPwTuCGJR?XWOX!5lA9 zRsgl*BYl07?~B@1%AopfH%PZb06aj$zY1F2$U1qkxS|0^%(sPjhmS&x9^$HePSim4 z2`MMUsl0K&yL630YiXt*V45yz>FDW@E}d;@{M7oLGcKlFCp@XKX`u8M(k1o-{J-48vd!c@Vg=P?#~uHMgu+lWox&L{uN|u^oFmuPC%A%D*Ijf9lDiY@T>)wgpmXR@XDsojSPuH z{Jf~yX}I&9Kt#TO%NgB}D?#!U|fr6|^j?R2Fn;UsmUEYOx5G zKQzd!7EwaX0^N=WmeJ~fRmf#ccpAujTeYOLrfeWrF~=I#%n4dsB{AVy;rzaWXi2V< z7}hzvRZ#2rk{VOl>#Na4oe!VF@4aE}&VsMMD zu|mKt=|QoDU-(AB1DN+CV`A_CTyM*GVPT|$!meIwD^O8$hOIrp1V%{@-eTuY0A|`$ z+zE=N{@fW>$)1MO(i8O4hupwU^x{h%gIHCIfK+?9c8B}O%DR+hAY=9#`&=;b`CK0Q z?4iQ0q_)v+`Ht+IW^Dc4o9nMH;bQrH89a{gr^tpKNGziHrHdPFXD#12b<01)K5Ao2 z!A7%#X3lEOd@9VgN~wU5a1kLnhc#KuH;W(39sa+ai}G0W1_WXr)qDa~&2MtbR(x`n z&@3Cre7Z#t-;dD#w^viFl>g?|*oncorHm=DMi;JT)4}hx)ux*@KY>sw$IzV8eN|;` zZmYtAZe$Z@{01EXaciCtJ(JJ0+osZKdT#XQ4LPxUjk=R5k#8J0m0-atX&}>XM-k-8<(m78PU;89K{XLF*Iw!7$%XRr_+w%Iostsq(>z=< zrbe57Vvds}FBO16VTSI?4R@aS0*Ev-3BrPFlAt^s)GHh4w(;e9q~a6VxkgiK-E{GK zq`GPL1#TvHS-y&yY|PPP4cH8@$X=?pf9P=|ABgB#fq{5wEbGO|LIJ&K+;D)1Sr0{w z4LUJLLk=<_)%hL)ok=e(TK=NTviYntJzEJ|%;YiU$19iaZDu}qXgOQGG#r^VGZHEX zD~?=kb3RzHQ|nJdX5JIZ&FjZ>Q(^c5^g>9x*zGFD4jUouQPvNUsQ%#C6d2`tRnlK(p^#Vou zs-pTrJG(2l(5RjLQX*iuKEJ#a5U!gqI;meZi{6kw6jD=@dk!y+ThJG5!e6TaZ$-Yl z#V7llb#ML=PKslUM_$|Bw{-#Oxy49b0^kd1h45wcjUraQu^Qn;h_64jJPB{#SdCR~ zwH9P8j~jRY=O3v!9KWkD9GxA!)6*b5q_pX>pRi;LJ2~zO4?!#woP)(arjzQ9ZiJ3z ztlOddGg%7Hn%?P=+MfBekNL|{?a??;rhz8M)p^$O<$UKbD{#?ssRQ^5m(cBOqkO!( zX%z7`alj$M|MTNI^??ohr~Hm*JD(z)pO1+759=1$m!A;a?!(enuU{2<84S{AIrZWn z)lDmNc%(zPEFh7tRTDx-G6JWgi6g2x;@U6*T3B6k^AtOh=1!uMcI!6h^MdeQ;1VNU zwsb+IEHla<_3ktzB^H=siwR6!RfcwprXs3-Iz3eUbdWz`<*6D!%BW`_YO>jlE|n?f zV5uU10%v_66gx)^(3x!NrUJfh=+CYBp~8z^MMtybsvfkRYm}jNUA=L=;X0+5+X?&q zoaIcX4Cr)JH%?7aT#DK~MdGr0YemBjstF{>zyci&!>io!WQYRWdd;VWWM>d>)M-))&hzr<*E?|#`D7Y3oOrR=;fgED1 zVSROUH}p5<#UM7kViBnryRXJ$`bM4T4Yy|B=kj zf7Hw|bN*R_j1c?wB+|%J?=hOeEv+yNacG4hs`>k8<`q4UGhI8O{9Nc4YiYToG=%L% z7Kf!b(BU~oEmvug&01u$mXRG3mhaGW!V{#iq@2NKA&`G6M^>s7g*E%y{;M7pwnZfv z?2WpLom5n{Eb>PM3#$ci6hLgF*dl6!ort#*9T_ta9;~8=_|Q=+s=pG2WyPpsB@bTQ z2kQvF#VYMAhDbojav}yxYWC^!tP=5$Qo4NW62pz(NH@IiMMX*tteBke?M4Lw@M94| za!S3NMYDD(4n4(=)e~cp$W@F}9-(#fM}8mZk}a7R9oc_mWd8+PmWm9v-@rAAW?>Kl zB{_K2k2buH__it0<#886Jq9OC4Bf^DW@{7!fFDXQ-3?8EaHzvBd7P+8oSf2lQDtr` zJNYoblIN@|anZ`KtC*(lbi5}BD6EPKKV5s$;AShDm$yRpd0ib-IoXM7Q~Vb#Y-%;K zQk$p8q!Z4im>eJv^=(mlt`%WJ<4ZI1*Lj>cEskgKq{bik9*H1O=E?Pj`JK+BIbvN9 z(^$<6SDA+0X;em>3z9nO`>?h;t|q8EK_f4`2p&sELZ2!1G(Iy8`q2WyHW9T4Mgg#e zbO_$sD&|WoS*S~Q&4(aUbHmUlRT6?fsNymFOg>`7iM%rFIr--198NQEE=VcD@j34z z!t9=WI{dEuTm;Im^x(TrurhJJO2;W4KTC%}y8w!C&bG>^i;ZbDoog`C^xTTj_IhPl z8Qep%YFGvG@&T%CkgFit-F6e(BbZ+)#4;bnlyUe!L5Hr<@Q}qmW7z3;eUGbj9=(tf zYhFWZPwJOupVq+$Lw9~Tvsyu`q!~>#Jk3@7C^SMgpo{gfb*v?4LEZ{^m*n9$p&#GA?U3dQMYh_}cB4Wf@wLkCeb;E!p6=B{19uIz z_|#nJj)3enihTKNXYJsk{ZKy_)FOY{-ByDF?eg8w(hAmHF*k4REH|Jpzzxh5;Jl;C z;5Viem_Z5(IQs=y)U6YrSmbVSJOd$APk-imbJ{>Ri_$dzm(3&sdpo zKg2SpdAjIJ(uYp$cO18>PK1zNC-=M&)~-s5@!c{Rum|UxZG{4j+W;qqXMKs7YN?j8L^+>Aq48IdW@{Xl9%vkv z@6?bZvn)V*q8_Jsp@2A>^n{&T6o{sZk6g4qf7f(Hh-H#zNfN@gA*6UKi?OU2hiBju zUtMX&T2G$y&mi3O{6^1eDQ=u0ab*X8_2y_yu#s@EL(#KFNR=AD^=ZVU>!33;Xo{*zgx?;4fx0}NIJvS;REMsp-pjv*nKp-qm@g9l^d|jsN1zCyzil^JH z+@yzZ6WcSyO49(+h*&OB?0PLrUmH=SB^Gb+@#JbJz)5;(=fSUyh<4l|#D2~1-PU2d zV=CA-=J>goOGbd@1!p{p-5LiV*UpEF6edD;+Yz1a@zBEmIQ*mKN6|pep>)= zW#e(Sh58hLAZPKoua?W>m~ti5aoi`oQ9DL6lI-Kx`!RKmVIp1FYu>-)c=)8LFT}OT zQM{6TS~g_v)5B+E<)!8yd!9xoG1cX6rH+r4IX+f!A?M3rq@C;pGOEBl4(tFduCmWc zqS-is+wtzf1hX9^m|elVhyXT+o`OH~4lNm~Nz-C8(*>ZVk|{mz z2fJU4&M)z&M-_WKe8GSoglBzmD$ zvCYn^L*OBo-^TC$ACNeeuaS0b45&oHf?9v?+<>cX%-u9_{@!5n0EiMiF$>-jCib)^ zAK$1~8G1blZw`yrSzN9bdiLo7vXNNCDyzVgoOqDgdkG3VoxXxx>thZ+=T^+55K+`5 z4zRZ<46OV8@sCMSExKgHBrOw>N8xKrASsZ&CU=4r8Ju#3$6S(C{T|EnT!$N z>aTRGf6|zmTn{l>*$x?*9g}nkQls6?Zi1*h9F@n?Xz)YIaRELkiVG9jiUd zlLaMOVf?dB+)O&s(qGgyS`=gXy$3@17?NiO{s{1ePMY{M;pTAW5T8s7t={% z$BHokh#xKnjKTt_!8Gans@S7uU40X|4$7qI$w4e8-?pkn2@{g;5hwlPwp;zuE4Zvm zIYoYkD6$7>&xE>~b=HJy2vTi>Tsw5qEOT6`--80=7Z~De_2kB9k{h2NZShGAMd><+ z^AgM#x;%87Q^1ffshd(s65(+Jh_wZ>E)xomAU#64^(#%!NKSIk-{Andt_&xM_(4mkU9P}3VVb24 zwAeO@`LoGGw{_c~nDo2pyZZo6osa`d)%!&rG)xUlO&{VRO9N3`;sL~ym9FE%X3T?h ztDurV7mL(9lUpj5!^=3ZK=D*`CH+wUCw-M7(1)RhaIPWZS(cIFqAe5!vKgR%^4%B? z)++*iyXr>8ES(q|nzDL5t&^@tgyn{zIT{~Hvh~Y$KXx$-cA4>!lKW&{eA)N zUkW565o%NuK%BG(uWsnfN1<-R4`eW4Y>I{`BI+?bnR0m4IIOvl&?jM4>x;~+{Xk|SS_6#s zPzbPa*nzR_9Wuu2Vx{LbU*dz?goJ*q7G0sNTBlJb1eQCxtx(Js#reXaP7s?cW8(^9xR|VkEETCIC>n1UkiBj_9zC|x8$+}4xr?#=O z*|$c&zfGws^X3qGA@>1~XH1uNh-tc$cVCX+qF|4{tUFI!bn@?SLZ$8Z3;R?FU?|Mcgr_X-Me;G`QQsrs$X=%zkG`A((^e%R?V_adp%)6!M?5%Wv?%d zAFf^c(zsORWQ|2IUs~22EWwxNS;k-Kebb`uPr!=RjnU%Okb3je4LJVcQKTJ@B3<7T zr%mN|T>j|x^gY1`t0cbJz8(0u3orl3I`Ux0X~&h%^Z?r|I^_6Lcc|v)9y@&R!M=Es z(bf3Kx}>z@tC#io;zB*Hy`Tr*bRNIN#`9o_qf%Fu9x=Ly&WdqGd4?arTdL$W*N9!| zLRaRQ^FizML(R_*PhQ#mj_43@xMV0XBKu8G9mdt)iheJ{9&nBYYZ7F* zmP?%j9)x+eM2Uykd+s(0{B+;8_d;3J`t!Qy zAK81;@sdIxPCs%l;`O9F%xY0HjlYPi5xuN_LTI#206b|#$sY0q6hO@*K*_d2FP)_v z3pw_ma4hG?E-wFMafcb3@lP1yqQ!jl%hK&IiDLjve9)zo%p$hCat(rz`xd?EM2|2{ zMD4nOu~(qdK~EkVPEZ6P)K}x$#{Lw=loEL8n(wuz2wmF;T;}Sjgr|{2;zQ16Rwfqn zKG*9R=kFR8eCGey;Th!=1)hjP-PuZjs#;pvQ>*aXb~zrNT4Ej~z5Z$2Que$j>}X&z zahh~}bf7jc+%@`Do!9#x?d;BL^e2a7TQb@ItSH-L{T|hg=G=`J*ls+IalgLfw$n4} zou5%(xkA2pLiR~F+FfWJ66=wyr%It<`^5keMMOiJS-c*%VBO22L`z%SqvT7gUCd5{ zWuw&3)mHARGLB&CUU&~@@L;5Shy!bn6a+wZ2`s3ub8w=e*tI^amt`M!2Q8u5yR=_- zAx8(b1U%r=Dr2wDr|pwiT=_BgJ{_`_d1}o!)cJGTP!K@hMwEFx-&TpJ%{JMxTm$0iC1_m0j1maNK z;ZfZPPy-G8+810Zsu8%Lmdfm#Sp4Xqh-=>|ta~1p4U-1a8{GkAGeEzFtu&e1^ z>+;>s^8zLe8QZ6rGs}|?>T~FD>ySS~Izkwpa8+<$q&e8CEzjp3LCmsWo^Nd$J@-tn z64aj4RQcCa`AUY>YAGwHqp(E`09|7ijad@7U(C~m_#C{4^@ceVf-iex#cU$6L9ECI zW#M{M4*;?bTj*8w*rGoJ)j6Y_>V<08x_%n5$$dl_PEMs8Cxx!3E|a zEv3Y+hM%Zmo%)uLk2x{%1OqVd15H4S-*pS$~GH{<~q;!${M>6 z$ny&GB%pS$F}*e(KlH%Cwg&~0Ur6g2u=T-$tRG!ba)}yW`^F3@Us+v)TDs1WAj-YC zvkG+onVjrAtlM*C&?ZDQkG@g>-@;cTy^1 zsZ_Ss4e91EU+@gu3unxyQY}3MO zE4t7IMmDD}Dq9&-65#>r>zZti04|zR*C>Mz+QrPA4XI{Np?}4R7b%+$n}3fw*bTF7 z;$$?0C|X9BQ3DgK{C+efGSMvVYuJN*yMIxTnQS&~=n2GO0j^LwL8>zeqLPLhbyNXH z0%~{on50$_m;%{HOx#uTQJ32TZK$gCbYOci~?v>qE-R7>sdRvsl$zp%Ln~g%3L*`j&$H-flqooqzb$IZ*TQ)9WHId)|{;~RgU{Bue2KPG=bDz&?nmzl<37T@Yd<0Rg? zsl;WBN%eNbmlPl+Mu;HlqI*Khu_yV&l!+Q>gipV;GbKw!D&6->ev#7D*pHDc8&Uc4 z&(u>uN-fLXi7?&7zZ7>PrG$Dalj!+m=669%tdnnHw~_hpPytK6eIHmSB(ul=4qZ3W zHrBHFWC!y6yJ19VN+!7!y?@I!u z)|>~g2ER|5@ZnE+=Cayvd3rp3r#z$OD@kM5L&x^yt34O9zWh7^3mK|L+z)9oVx(ekY(@-XCFme$vcL^-1oBG*(%+^aoa;bfe`*1Hp2#kKMDIxke4U_L&SyeXn3l z?->(We0FBiu0HRZ%kZ_G$}u?Ade83N(HZp&b$i#kKlyz5GnC&aS&yj@58$FLP)9fO z-g*{GaVB5Z*itG!&+0d1_H5YLUsxKJb-fDnF~M z-?^Hk^&FU0BbDrPcbe(_c>k&+!%~ z?TITm9}UfgX(~T=pdcp_4Rg|GM$EPZ2+mS|R#(6Cx=}5nmk-cNADC`ldA}tQt~yv7 zIun?8;UrQ8*MWlb#BP6DClTRt=d-vHBGxHth7@Rw0UHZ&=vZs&8x>>sN3+3ZbCzUR zB~&(D&!uE%kh~)8r8h=BuWkiUOf(o?A|)L+u6%aK_eOKqk8XWwVy*=9$K@LlWPKcW zr2!VVyR~WKep)nGa}UWjO|AdbJ$7zyPsQEf3TBc5I~C&Geb!YLF~^NZoiG!q`H8Ce z3HAw7^}+<=u;_7pQ6)8{Ys}gE9`CXg4%Y#g9y*?Y8`St#2x$CHIZ&z~lmR_FrRB5A z`gD6tO4~+Jk96U+%y`%(l#W$kzr~=IO4dC#@gPC!5wY6)x~VoSdH!-xv}gD>K%h{l zs+$z;ZI#U;+TE~vQjI@7*VWYMsa(P{YYgr?!>>~C81>M*Tgcnm4qUBbAy{!5bXB%y`m5Q>-?DUiVff*_2s@=Tw zg12nnYekWb`B>IB7hIwSS2FKL6ta=>+zfr~vO;e8O=&8y6Z=AujtRd|%cn|Eiq+K3 zk~&u^js#V1Q+EJW)jp$hGE|k#$&=bpSFyFX;5Qp76pa5;T*LUEreQ7VX>!3KIYLf9 z<1xCaqFBdhTpDO}UjTfS(rNCn17_X@^jt6(F^3RC+8XQ3ibG`4VKYs8W1vc1SXGp) z${emvQpZ*X@w=0b7AdPvsy#PGcgB&OMWtunhYQ_TM8pC+i-}l$2YtralSb?lx)`os zyKDnmS!x^%YOyt3Q>0y6s1sQ1HCz_!lCP_B-~@1t+>m-#RNnpp^|hy4eig7B9N~Sj zALe|VUSiB&G2}Y|xR_?y1Y?z0sq<;4?t+*MqH5{QV8zXJo}NUe$Y-%Ho56ZxqCekY z3eHibWb%FJ9BA)3#xr=MjHvNh4dH*hE-Idw<-ZiHh7w6_)g*hQG*&G@RKy54sU0>Z zNE2y~T5PL?GM&QZE%ky{q_7vuEY%t8s+oNU4b2(M%vq1!M_mp6hxUlZM(cw#TI13= zi$!xrH8O(|nT268Hw}}3JN^MTD)=6wqBCSh2l{+5lTeRyQJz~}PKZB^$O-wVX=;F& zr*4+(7Oq}a4v0RT5Q;Bl}(8?Y|aU#cqeSC2_tl@`o=2$5Y$JdHFzJ4d+2tQ zv@IAPrxd+)AbIZhVG+JfE${Cyu!?< znSw)`t&{}e?a9qpI2YNnEcAGw%Q+u<;@VrN!@QU()N8&_*J431Z_3h*5-}Dcc(3RP zEc}>8C0`Zuc`VGO8!xVNpYDm^t47>o4FiRITE&EU35E68ojoHCus}q5&be#~5Uk^c zAHgg=YOp07hSZs`fIKZllrG$Ui@M2CxE12llJ|oN;(2xf&28=|OUI_|fU&)(I8}$Ma7I%=em@^)07D zaw5EOPBegphNPlAK5|X?ur+}QQ&C>)VD%2i@+-ZQT$JI;9H4NW^CTN0D=RV@QYBDKHWb{AiS4%3yhD{vZKG|aLhA#*_IEw++*WKVDVy&vw(@g_JxFT@vf&PcS6rbimG0bR75MjeWFb+^IirtA~9))~Y=EnRA z#y`f^K;5Z%aPFHv`rbhO;UQh7dpx*kntWDS5P#@aBiH=TK*z#>hmE;_4UJX_2h-VC zQUHw))S}lB;trC(`!^dP(_s_>F(6MO?o-m02iT^ZK(cenm9;Fm?ZoI7hWD$JO>&i} z1ixc#sre}qLh;-b0rP2mqD&ui1KZ8SaLA?7t<~$^0I9sp)mzOT4=!QD{E_Cy59ZP% ziH$QkLp{-DRC3<0_C3i;CcdPXf8LsjS(uJ^Xrt zhpbLx3$yZaY%5?ij$*y>c2ZFaieUFBJ7K~mezlGAFJg7{-Pp8FVm|$m+c82-Qbl7SV8T)@gOQy@dQSozg~e-k zdFI%DHT-ncU%8KO+hjFl`RUH5{5%08tq`6$0~O;pEMLpNT}-iXEz6P)w^!XT=y&(j z*b%;e-{BumR>%n+s7oSjQe%eLcR5;PUJ5(R+F*|Ii(!g$p^%aI4e#7-k&E-^9wHlR&)WC`x8r7a#Ez% zzpnxl_2v~*|5h=D7Y!p!4A*9)^wi0%p zt-%mbTl=^O7nD_g?u0;9(oG86tx^|BT`CoaiVT!hw{D*sWrr1MuCQ;))T%}ag!gOh zG*a1`V>O&(TYf+B1mMW9@n}qBHj96nfOh>>c?UFC2nyFq$9n9fQx9)UkWepBjunTW zcf0~>nUxkzNb#OD4NwGIs1-BMEFL^sW*1q9G5~FwP~!qs7S4u399iORPYeD|8*}Jo z>PIY>b^d&QT(bC3=7DtGI&urtg+HSMyE1!+692p_POF9D&ZYgvr@2e@(Fdo+;10Iq##3n-Ty9}<<-q!JtUL>}JlPX(WE)zH4`JfxP zt?C9e+#6kTd})nF(IsgsJsE09Ssu#qq3(7frruIab?%DM{ z*0RfYnMpL7vrw5LoaZ9B3Sx~wp+M6BM%PmH>N>m68Y&d?>{2iEiLxkW31-<4T&N$R z6S+oo2lOf_@xb|ApE(*kh{Yh?^nn$}@u(J07xxidUP<`Hz<|YAB7&vSL>ViZ`(bF> z_LJjWu{2gU6(3e7a`Jk@v1rRmYZSz0&__%|+%uASP~?86(MCS|PKh+yX*v|Yt!L>_ zcCOUl{MyD2G(urvCo9i*us(ag%x3{me?JSOUg*euIW3;XOeEB<%4cf@$qcIh0by)1oOY$b}ft{|MD_J{tI#X9V zQ+JTacS|BaQ)e`MG{sLbL-PgRkQXiGX8E?+A5Q~O;C1Ryx<=ye4#`x41Eo$uM)@Mf%EAj5&a{R9Z zm6zjB=uRu>RYw5s1JrJj1@eQ;cW1k?RY99VNofVo)oO0_ixtTL-qfhUUeshO< zA_UTx+!Po`|DlmozRy2wU_9Bj=%v>K!ofN0C(XC~BEnL@3)Gs7(8otNt9-VtSR6?N`}GuNRKP*{?iqkP!mcO87y zi4vfIbpdi!d7f&3N*e7f&`J-xYZA9p_0h0X1L#K#2UG%yB_O$*l+XCc6W)z%2x-#8 zs3Hih=cm9_ee{ro(buyNfj;6eS@jl*$@0~IK>PYq{tPYctJrMMzuiEG(fw|q8X(iA zt1G3dzNk(0V5CR+SzZ0ktMH%|cwBKkX|8~zoO!YUk692>C0GqWWwf?NRqQNR^Gk#@ zQxa9{YJv|<>{Bp4l?%Sa#^u{e!O}w}Vzn~@`PrgB3%~;TQz;Oy#RK_Hz?W)Wbm`JT zhi1dglNLcEjP2F!{GFtDCX6h}bHIHW%0+=vUeb9{1zfM8YMGG8dxD((m9pnT{ZjD8 zNL%?CnzGTRkOzebwGQfr^00wCY{+gar5lx?rc1g7MK3F82=Y^^y{;;&u70P4^fEvt z^1idQ?|xXR)jzD%%3Uf%r>@sSb+wGEuWPJ&L76XF=1WgNq>B9`+FDs3-Ts0V?-BM9 zwEV|IKq`?Zug$&lgy8%?1Fh2Yf(aL2mcP=I4?(Vj`m{jIax(C$Oy%e6yt-yu9USk+7Fk%P0&b%dOPhUwtrtwNK5ru;9zM`3akCHU~A! z5rA7H{cVBPkFV4xE>wK@w5Gm86|6PxGgSHyU*_31i|!~PGl0_V)mTr{dcCk}el768 z^jb=D%{`Z&HCG*RGo6K8FYK5$tNfw|^tZK0^EQ$eepCCJlT7(p(Th?#U0=xuWR)9L z_EIU_KSyHUPa@O6$wnpPWofpgBi<4JU5N&XwK+Vb>WPOcN9xEX+|+kK zuiiv8^@5vj2q%TP*Q59i0|U)sOTe_u2~ZM1@`I^qY&3#=p}qXE43YWu)1t&Y)i%gw zdQVe#y?Rdn*7UP!_>GvTxPC<89)tFb%ph4Y^1M3W4~>-$S1ArEFyHI~PnM6ZV6fJ0;39Ljg&nGy&$I{n}pN) z#A=50+?6i%OZO)1Zy>IOhz+d5w||`=?{)2g{tkzOeSv%#J1n}C`%_>2&{fN@qP6Z3 zA?*~i$4Dm32-*q(d!+92CflJpVNr%2AeC`lLMAJ;u`Sxze%Ir66;v{e7EEnH{_3n? zSvb`ISvXI!oG0Kyoy1ca6Au+S5uy%`*8!XFX!GH|`b1Xk=_O?5#Y%n&H41d`hzO&% z_d+v&3@9b&%)}dP0B7!PoY_-E4LWswL^}F*dFI22Q8e?RM_?f_B(wlf)z3`Xv&@Ty zpAdig{s|EpHiAIU&hxrhfYHccHKTOROtxm05G&JJUKcfQ0N4tlLrS%AX!1s66GObQ zA>2Ufc*;h_QZ{BfX%e{=nW>LTYw$i8_bBRJy!@Uh*+<4M#1q;kC1>NZv*F7;Gv@3$ zF>+KlKCav5U(RUsV|eiFFYy!71!{LFdb=|2HpVDBt3F=aYhvIU4%wI~TXabY`yrPohErcQ#T z2l*4_L$;hH9w+^+bPY#b5kW%E5=gc;-L7+VvKq>hV}LzNm?3k`!a5)M9Gid;v@Ec9JiDy&sDzr>KZ&LYQDny zMr(TBn*KnAkuk+qIZ=)Np9u9Q^3R<*HEJ=@8c0d;Rpg?gE`;cUOb0BCEUQ|kEQ|8L4{5g11O zQrEf@gq%SqiN3y-^EtA+XeZ_nqq@>O=W1!Jp0IYp73qj+U6PJa*>RtC*I6_y7wO$z zaFELgI}~R}Hs6cbqC!g26CtX}Yv=a+sJjIxpGzQ9b!>ASRWpuk2(FLaS%WB+n-fX ztN8PYL4JP@SCj!m1G|vifW$H@=3N8!_kxtdw%vJEH+Cks4IQjwkDOp6BXBD49oB|6 z%ElD0-+$o@-RKz*Eea_4v4u^2$RX;f0;S+q)dX= z(G0^rAfuV$j*6t|oXF+o*A<3g4j%)-Wi0(+q}I0j{T7+bGVvuM?EtJDuiLC0Q0YO>MbNYH_r9P-OUhO=46OVGzRqXx z0<)9Z+=koJg4-+*2B>6UX=*(lnEf@N+br5C{N_PBY-K(YlW!6Cyk(akU#)6o z%d;$i&}^#zqse^^74olnbh@JA|N5$E-VxNFX_}h*%hR>W2rHD^peMb5ViRIaa78@3 z)}&?8ug1Le1bz7muAS12*9or9-3@iAn0lo$P@qFBHHQC7;cvftqKvL48!EKv2+Eg9de;l+%=d+&wsZ*WkJ?2#8 z6I?VVJP-+i1vPhre-XPPu^Nt7L->^v0>3Cn0TcyK4U{3QQ-tdPQUjd`kxIL~W?Bsi z`^F{B1|?8$;5ZoR60CI+AYdt)+;gQXK@Z_X1h6y;SP0!9y*4nAt?pF=@}G^NvK6WY ztS(KSJa(cg(fALETPko;xWwOw6t(n+^vwQ4&+J=+p7*h*Ko2|LZ@M&5qmAh*5NB!z zGLds??f{h^=q!i>Zu7eQre-MwWs*yz5J)bL*V%3qdv>Ru36RRI;1O}mt>M<4SG-(o zRSt6)J04sO-r3Tx4plDGC=N9N)dQZ`A_D|(>1wOS?gV*~9JVDls3R+d@!S0k)d%MA8nL z%2r`W4-3e7K}0AJ4RF?`ywqP=YV|nqeL%fZITboqirQ~4G@q!KXYc(Ti zg;(0Wk7%I1dAH?XyR$=ikN!$|W~%7D=^j6JI^E^7i0b^?ZKWRSbayh;tY;A0#uTAE z?yKSVw#JlcH!EY3wxX-wSN!AUqZc=(j$wsy3^z}z$RBvUiOuh0qNZcHrf3Tp@@}xG z++%?p8+Fg^Ng6UjB=0tszz-RYe7auW4i{$XMWTz(LhFl^#6c~aYkDD2zf9@>d_p!sl%7i zy$iNbHGg>_Dx1ENAFKzabYm$u-XkVi{8Xs6gW@gWozI(hxY2D%SDH(s(veGQGDXIEiQ_K#Xz3o%y;1vOz9QirpU-zr_@IPg%9xm=eqqUx^ zK@aX(Ov$j$N-yrV3f%bX0 zm=^2)l9XQhb|ZS~toE(`4g^w*lXwW?uR@%Vv(BoMO4F^y5SX1>R1raM-i0Fe80i}R zHB;oGNq`$GFMAJ2$zN*CZk&}=fuxIXYp=TfuWVXh$5G#Tw$ZTf{f{LZrQ2h&Ek1v~ zbx2B&jd6%=V@fOUBef+0#8r|3Qf;3nV%g;C_(^9b#em7YPQav}gA<>a(uFztDS8wX zQ6W)Ap<_jI<9N&Z{41Xp^#YgfFBp1t^*b=oCB>5skZYs*UMu81DA7u4>D-eJo!j%y zrMX8$;WOO1@7Xp@_e-|{JsJWV0f>etND&?nl9kLTUfIRJm-#ORZlXgoigawmVfPVW z?M4s%zf|(XUX`2tinQn}XpzoE;V3P1oEBzkR(k!&3W8iUOOKp|=QK7!ar7lkTUH%C z+bBm2+aqhml>@(Bu4R6k<1)XEZs&y2-*Ufb_3di;Np(QWLPYQW6Wc>yBz4j3CO;!w zlrup>Ai5-|=?1i0rF6Dqy)~uOz14`+-_pKlel-vhtZ43|m$ynayKNNdj`4pf`&$sc zr+&?rqAzl_=x;e#w0~&vDd_0i_b|BH43}WEk8GB;E5o@6cFOt@ydTE>g442{7aYk6I^Dp9O<}} z9L#8TFsBcGpcJU=s%*S=E>4s@@N!S>iEr*G)kl7x0M1VJ57}SzKV*M7F(hUweyS>C z^q$o2k|kSNvIED0$Vs3T&pe#&@I!aK7@cf7G;=PZ|L~-02UHTNqSYJ7Z$^GV<*A+q zt1b)Ivt#q>mrUQKA;VV_0w1P&;oPMze1UxO;3RLEGHzFYhd9ET-a+c0flt=lqwK1P zuRUHA(SKxmxTCpvjvf2LSXYY?>PXjTzFFi2jw^~%-dd9jC3 ze9G}dFNV}{aDFb3)o(DbMB!*D$>mk}RhVb|DnY&T+!MAw8H>RgRY(ecTJ3~fw z1NR5(sqe5teGT0{$qK7OH!o99^=u+nO*{2FD3zF?qv)22xzo#{!)uN;rYX|F_?ez7 zFg|H@p7cUVrjrXL9V8(v38SNa@G9P}K#OqS@?g^_~^LE<~kv;)N)W>v8ZaNeCykHmC0rFp1uv zeSy2piS07EVLpKTT!~0E38%&wAG~(@q3zJuEkmvz6G07ZNLdtdr8`Vl5W~beQ{%^?+H4b!t%W>bxT%b z(ceP;+-Is0H6J$zNDHCKTKUG(?@)m zoD9RsMIPw+#?9-QJVfV-u>SI7DVil)xu8pcs(~FIVI-hd`T$Qru)oG{Mi2yB-2x8Q z5`rW1HzA+jpiheZmyd(JA$kE<^_i!*4hZ=j{teUUYQsNcTD^@J-7F_(K&ZI2fvRSk z2cU9KU#pn=fc?TYW;5Howdh!fk=B44*hQd4^Jue_!EWYD)(rlps^(@nhHwx!U(B%Y zHJas^0U1}ix#6OkaaEdG#rz~{w3~m(0fMeDCmB1AblOa#q$_idp!EP){c=*JPer)z z-(N)uG#E#pboT1U3=atgfNdj4A&wq&G#+QtEcZ~X$Hw|`6Fm)dlFr((E)x0Nl%79d3urr_SSE`=_>bJK_T&-B@g{CwYZu|0i1`)C z7w#SSK$i64O&9 z#WSJc#Yy-1Sv_`#q8XwO$ZJ2c_K$Qjn^e;HfxrTPVXTjl;N_$8w}6MN&t z^6T6LYQjJM3ZP8$BM?`^VAU!ZXrJHpf`bvcGFft{I#9@xhX$K zPJpdyaf!3*^pY}VgK0X^TP+^TlA;wTWJ2>mwCn?p+cQu55@#2oe(X|wa6Joa%L_>G zIuqxL^f;rhc|lh*&k1zWak#^!ayHVVFu;?+T6%rNNRWV_fgmg|AT49605KwLevh)> zpa3yl$eJ(;p%`fsr|u2CFxB*EdXbh56R2qw`+~4;mX%AWCeTb5d#k0>-*;C_Crb{i z5G%aH!+<8J0U^{M>Y*+gfDb(`;ZIZP;xw+2o>23|ex-U-CF56!+_21b#QLaoVFA^V zU8MQPOp-;THO`o==y=RkccL(ea$%yg>E-@b?D`Y*DsN?(ln6o6k?M!VgD>iy8 zYHG2vvn2q(Wn)Yy`^?v!v{*g(;vpA>oKm5z32-UD?36{GJk3+z(Ix>%R*B7XJFO_J zmL29SR?bKNif!;S6by*gNcP5Oe{{Ly%1A~6uO*8utgTD4JV;ke$p|MhJi(I;M-TA(b?0xyX$2 z2+agxTmwRreV!<`cZ?|hOsmI;ny~3RVurpEj-7u>A$S6QkkJui6k?~gV-yU{u5ai~ zwUZ*6Vp&u65rl9IM?tk{ku7WF`Lgu4WQO{CGDB@Th`hwORL$ zI2Yp;1fRV@k?tgSlau~FWhh6rUnZgp6rOY`W_4o;mjVitGo|csB0Ez8^C!Ltn9G!v zy72@G%=f%=`YNNHCtS7eH>vRdrEx#kqqrS~<&ZddGet+41DIRLfAkdY4r zZFqofBkEA&rjnbAG@FU&_Y2{%7*%Si$K)i>k~&u^IIEa9##%TNtm?;Fg^V>ZfkmeZ z^O#uSQbDqn)FPP{eNdKJ0w;Z*6~9!G(iKp7vU0@vU^m<;O=pU2h}XpF@>3{TKS_nV z8U%E4@Y`$BeS*#tE1VpVZcy9L{nL#g)znttb;~t#`~nhjxVi4xy}7?EW;=-i1#gP{ zqi0!8e&T4RNDR}5YAiXki(q%pXdS0O|fy5kDl zUCc&zs`&w{6f+(TzY7TD+cD{NDBXfA>n2lHdLW{JioL?c6*3}5h=?t6PO9%bigc)) zes`m4z~1phz2GJUv9_a{#UzTFCs8Dj4+V(+lW+WL_mlKFqwsV)@0QEKwg-vPG`vlh z!U;k7biV)&Z^HDEg9g{APl&t@7EyZO7sFm^;`Uxjo>YEk-M*f>I9xJnR!}a6zY*H=aSY0>rh0pttQYw+!$}i8v>krFJ7nkiA z^d13!$WdfmQ-i8ZL@FHz%}?Sf#0&dpNC#ca4g2Su#Eu++AITLKcAqsR-5(yHoT`v| zYU;>NYeEXmjysif9$A*A?zS()ML4Bwd35_Zb-i_lr0bnhHo}rjdCS13qBZe);ZIz! zJ{d7AP)w=FV1QyWMbn!gu~>2wWMVJyO)0G}CC^asTqz1a$~o6X6ioZ>vMpp)Oq6FK zT{E4#B0-F&faIGSj>A?dqBR?Bji=Lad;+2S0-8Q%qM|-g(`TaQ&PkC48z^+{P!J6? z%|Z!9imifS_*4px5SMOyU8WVC%~_o#p&wK7r82W*q8H63Y8y}8&SloSy_n4If=r1P zXtq)WpXHpI%ibIJYaX*S3R!3|FEOKDl>F8#tx1S@`43W>Ox?kYC_i&S5VK0%IDN?a zsL;v9v`Q~jDk~x5ZKW6_k?N}Zh{cYiSe9!llNtBY0MJfVP_gne?+-2dLm`<^NbcmR z<_;=8{S(64Os1@2s+wexoz&wY+w$OT0hQcgXKF#FL{J5y#TvpMpR$YHgw1RiSNtfU7H6f)x=)1ic^GLQp&v35sxks|s9RKh@a}j6kz&ES` zrn({N~-isaCtUksK=Wy*38?4MUCtQ-{MMsSbb;R?c?E1P?TN+%MYO77i+NV`@RGC(xgTa=lb)j@d@_|ARIg<-61*Z3-lI_+b0S$@`GT= zd4(k!@Mj>@#+RPNITtW!GA3LKGQjT%YoHXH`xwju)T#;3dRCcc|DiK>3OA!3k5+jh z=#1qq^ysMteS%MQf;&zH2;crH-=i1_PHog?+SGG%ZM_4k6mn;Zc74N1^0YG5$XQwS7)k7zeZhQuSH=8=y?*$W&XvL_MAP}TpS&n^aG5JZ49Js4rx3xW#3HxtgzDw?E61$UxqDchPeQw=du*PRxx~fI?yLwrsX?&(+n=E%5 zZUt5>(>TNy-}$D0@COxnN!S(3H8F*d2bOK(gun>w1CGEBJBuB57W)$_@GJxc)2rAr z`%_HNCo6K`WtQJzoTXX6Ke0bbZ;TykjFFn|`+Nh=xllHwlqq@Az7V1RJK6t>7{9ut z?+cDPF+#Z0oNO+4D?7T5?_YxAr zgzzoMbU(QN#pzQja9r&JkLAUEnNbbCxG!^Nf%S36MI%dQ`Z8hIKCtHrXRYp>tm|s& ziF%ae{8DK|EnN-sW7!-}!o}~m`m-u02ItRLzpL`QI_U2c5Qwd@uu3WN@%nbm!XL&7 zB&W)RDC87*;WF&`M6OZ$v*aQZD^JzqJTImfk6^IMi|E_oqEV&M_l*|50eQs`1AN8sZ+sGAn z?c8~HE~xeOnB1kb%QVr=#Id`CC&q3oIs8rZpv`V6%BVJ);Hdz%IEr8q9{U5!hqAQ5 z1i%*@osOgF!jnN*5UxU6LJCPem>@pN?`_f6%II=l6-hCL|4aZgpGDDIT=3q=^F38}G{^6~qIu z6u%moRYU<1r<(u01GaoFu~3IwC6cOa%r8tJ;5Jw^Q*#>B+)16(m+x3qJRjc8_MFLF zKx~@JrKh>NAB66**iwsi;M2DZlVd*@0dpKq#??8{YC$A=LY^dfB4h(((vQxu<#oVV z@`Z*LH;aGQoH3csg7O#r0_{<)s+AaxT{Rll8!`2PaBu<{k(HWJ>l@6d^)_`oS+pW| zNPl0n%1U<m~3VWb{=;$Xb&`V!H*<<~kcSc!WS90NFDWSKuz8BlE^Y?yz zFTmIb>wKvgB6AVpDvioada9Yq%u3(wEHxvRd<57QqKLi6><%H-N8kZiLgDTCIQI2- zE+ReaupWk=Q`L9*Qa!cvDm$5NE42~HBkaq1vEy0G8#574UYJ?dkyo}1??k3s_(&D8 ztIw}h(|eai*7W3O;{H8<=3lPA^D*CQJGP6G=x(w;e6rMcn3wDq%@j_kKdX_|iKU`k zsta{t4%CytMW|}s)m?qb!OV!C>MQ+Akq2^C?L~LJBv;9@?(I$N`8&}IZ$fy}a>|dS z)@(|=L28M(zUe&oG(OAUG+87Cu!VAcPvpMGLbH@|1oPw2T&CS$m}&)o06yL!i42W8 zkXvNH!B;E~znnwwiCSop$ZRyKTj{QPee*I)iGNw0h!*=xvkw+(zD$x)WCY3EkZprrDz*2Pn7jKsUOXVJJOS$u0EY+%2*s?$9gYc?ooWqYfbLW~3{*SpoKSxr zcs+(f;GIzC>PeyI{va#QZo0MG=RTqgdL_PIdoS~J?a0L;f2AhRgG9bjDviKi{fpnk z_nfGTZIn;YDEPCIJc&m~@BSn}7akz&_zj?y#Cr!^`FWBbmj;P zfcj+0q`rK8lHJ3W=k;btXj?SSXa?$&t|gspE30jn$)#dDR=F!F8CH_#C(=kSA5&+T z-~RSrxocKSKPG-&+U56%@?ilx2wiWV4(nOv=nf(>QV}7?iGC@{mgxC=$9skbAO%RM1Ewz_ei8yFgJB^%5xMx&kVsY|~a_FQSTX}uNaQ(Vxk@yb$f#h&2Q z7r(qV3>XM`g0yXX&ld75x^!lp$|tI&&84r#rMr8KQ_Y}9VzP=DaZ7Z{U5M3vXiC&w zpH}DCC^9aOiVm~3h@;I0G08u#yHV@}YE1X$SDU`k&kZm#^@(V|Lj+B0*@9yig z@?!c3@3?FCgpLTSZorc|b4}luhqp39ivq&^NLt7WfU-THyOoAA^ihpZh0Va2G2m8y9{DhpqtR7uS1g;lBur2k6>IOLl;qNXn-$!a^Rx6ZErhwj z`eB$cq*#8m^i(mWvtXnZ!^$EZ)hv6>&qGkWG3$`WERFB5nz#YA$iT>d_z<|V>s$F7 z?U6`19nLTAn56k3iOb~td4h%ff$e%c*dz+31)D$*>>63bs(L^K9iGW%U7!xkl6>;z z_gR(x6PE5LWBaC!QJqsg{4l3WWtiBzvr(tA2WJDspwi~*>RgwW21p)ItY25KVS-IcG-S*E`UDK9x2AkU zaH|+9e4o_m+B&Q<~_+`5ZefLskA`6xky?&tK%O~77(Q~xagISU##}u z7yAKq7S&e+4X6*_dRFOJLB##hK$h?U^l|x_rQ%sjir6A0^mWxhE{%4pp|d6@;W2dL zV2$dO(|5L2|5YNg%J6Gy9Uj~|q!H3%W|ltHS$72u@U;%|VVoe_NsO&cJ^^CWdmVnhPB*B} ztq{~T1$MbpdV+VX2y7;`4u4+6rrRp$Rfwiuq0Xo8T&)-TA>82eZT+M`uqTp-x?n7K zi{$I7q;2#fX!Xz!L!o2Usf{AtU~LE3G&c3YGJ+}*f4ZceW8q5$TOE8Uoq@mZ(~ zQtO9j@2Ebo_=cl;hV_kH&GfWZ4GpcKVLG}(sHUFTI!RHQp`6_tD1XFNB0<;rMzU2# z_vMXds$6IFr9sNv7cIzPI?xF^BZiV-i!jsM+kyPR3g)Ld{eA3GO${s4oD5r1+Zi+( zYszXgcGk*Xo$!!Fh(Pk}FqE*G($nA#qlrC_9gB>PlDgQFD?{v>_lOP?zd(^@&z@*efh~v&lYs!mwu&jCGBEHmX(|x3t{K3!#sb{)3zNd~%U< zaPazD*eNd}eR~9%bHgLb{hi;oG|B3#+HcYB14<#kluLd2>?y_Ub6^5KPSPpC0c)#- z^;bnKq9UXMD|9KD9V>CnN4{u=^#!m2b5{~idLjx&a?KODFdcru(8d3xgO!^A#m@Dq zIv1yLMwN#iLKqcMJa(U)n8nGt?Px65y0{fJOVFKFwKyYmPfEUNE95j~Z{313F6XOF zVHm{Gw7kVWWl63SGzdrvfmmv(*+-}t7Fx1=v>?}Ft3Xs~UT^frvR&oA<9I`sZYWmG zh~yi31jeYQC@Zy^GJ;u7tG14;Ki>5aGsQZ(0ui?nc^GG94xVz)cBxdu*=W_sb3Hq~ zd$E$4xRc%S%D+@TvfLFX)Pfdu!9sQ5E_L8a5`abWr%)V{9QhtGe+6-4q^n8N_)*cK0m<_c- zGBCJLDb9gxko&`I?G(%A^>OzG{^5;zh_?wOc1wQLLf4W`eQ4XXzG&(jQbtNqUd4j% zEs98P>gxANPL+vJe<0&zY>L^Y8X!s?Seo5BEIE-U4boz1Y9f>qt)$lJO`ougE1QpoZrRrSd}bli!}VWjtF=@raTJH0 ztpY#s3DI{fLY0k9M%|zaw?e>r6EBXTVNsP@EB`$*!|)idw6IC?p>Op&U6jixd@S#$5}7CtCsPOW0Xkj?%{U7ssX%;?*Xp*i6t`GQ`!zRlbCLU*#Netz&H0<+OKO?)|9 z$=6UI8j4}7iTN_m=v|6Pv`l_+{+7w>aHuJ-@@ay@V`M)8$)lAKg=9-H#OYMU4>iQH$nTWP^c|jN%+KjSYjdOj& zYn`GWH)F>s(eEkBWhnu-{y|8&C4g15a+}v70)be zxdB6G(D+q4#?^r_7y-%YQdGhCwWi`^+cwX(1MWcF+QPlza}%xf)X*qp$OfOpQ=0tVm_VMIOP0E%@MFNPFC0fdGhQT+%(k>{t4}-* zMxilQAQk0jTtu-)tr$Bpat=tY5O6Lz()$k18!gLd;psATp6q6!$ly` z98OK>q05-*s>oCIkFBpyuqR-51j^T|PIGjRoyeRYV^$<$>_ib%&QBBR03*c)BT3P8 z`zH>=T|$@B1;w4F$h*U4n^VB|_iy?|16l7$o>sq>w5*l=2CY0x&%OkE0FCe+r)Ba2 z@{tz9`WXF*do~vcZfbE+&VuYP=EGskhZD!_8NyqMLd`_lL5NT>a3Hd_R10T7TmBuG z0gfF%d)eofVio+lF@>|iVxylXy3s%igG@d@@Y?rcLe(~(V_p4?b9%!uJ&jh5WlMP%!h{Nessrc1GIspa4uc9E zZ>?)IRs_86Y#>_FmDr%`V)ejQWtMBAUs!D{I_NH{k3fZKsE2 z9UPYJ5bP6AscL7Pbbd(4{9U_Qcc9io*qv_M-n`gX$B%kmbenV%eNsN!y{~u@m2MtW z#ht(dpt}-@2>YB@2R9jC|B;+Vo-DpxLf;wa`ilekmgcKwZU>as01>Li`ugoq8NpXK z$*!C#@jmc1_LaOV1J+_{R(6ur^$+!EF*^0V9y-iZ`{Pg`SX~)~g&AmQowF|tn140m z0AC$04lj1VdD2B!|0Q$f1+nJzt)TU#zSK?`+fhe&zCZ65=#DXi9KRyjt)=3+82_dm$u`fCAqeJ(q}=R8GUDVxrzA^ zsby}uhv*#A9p7nh`X*tar+1u6Bc8N*@$vCWGC*U^dtzTd3kB=-to0hWpp>8elQhGG zA{NAe53vAM$^xHVGDR=YkV5&xSMhkn*I2?&B#X;7Vb@vWvPp;j(d6vMq~}hv)-c^D zI(4L-IuhMw@;daUWG*o(T``3+piLL&Ei@1$mR0(4!qygh1=~v%yODN{>G+gg$wy}R z`dkPdHj+)8S@a<%vwMh{A8IvUe|*LnPf6b^Mqi!G^iQE~g0@wf_-G|AI7gRC!Jb%X zeHPgf3$thp4H3zJQsITGb;UN)hQ5#{SwEBLswFJ6q-xFZ=~ck+!T@pimen@=E_M}pr!TM?a*}sF~seE z1+hq3Q|x3We7pTp!EZJEh|d?A1CpzhhOtB2mJoZ=pL4|kVFXt)X_w- zW$#U&ipn5;FoZDX-`L25&zSP_!s@A#=~K#9U{Y!@DHW{j8di37yU`JfkL`R4@hk1d z_Xdg1U(+*6U<#$z%CUPwF>Ewu^>gBykY{jE7JGmy06Kp=YI3s7n5ciqH>HBrR5{fT z-T1&S*L?wbQ9JEe3PDXsqU!ahZ$ihFpKn@}d!sIk6C!p=S&R87JgzgqTvoal^q$kF z27n*-oTvvFB1cIYRwPJ2vGtWAKEZlMv!o3s9aqsyK__MwWiY|N+`ya^!MQL_3-zuo z;z3R(J@LbQRvy(D0~(@Z=+jHJ7%Dp2$`W`1gAlHmc!#6pSXvlJ7Lkx4G$z4gaHwq| zIq?C%E^yn1YfxUIN7+tK4V2KzO(kF%>RYR+Xoj?&AI1Y7ob}kGvib<fyFB7%G;>jt_x8*WHV~RXp0#H}s#&&aQvz&Dmuq!p{Ae&6qglvVzuJu& z^j^pXQ1zY`O{1(9IX{Gi)v~-=4tcYMte=h1c!trap1>b$K0S65IZ??YTF!@G1-BZ_ z)I&XtD;Ke{Xz{ZT@J{Vx+rHRo9&)6DweyY{{sTMEkSC>(Kzh{ zp^@4rVAD#pKHk?MwY}~iCwN_@i58G(jX zST}%FEZjMzTE*Rmi}G4urVD+*D43;|XD;!e_0ev^gF>1Z;*^UZoEuhPa9;C3Xb-^& z1pUN!A#9n)y@eLbync1uEY?E~4`ODm#*Y;7{D^t*VdL@<#edkr6UlfIy;QeCSlxiM z5Z9EIz=|%gQsx~!XoaF~+^Tr97jVo9>s-9a2Xxy4lpa~tD2f_TDmHOi9?{@jQFf38ot`u+IzM6}L>r|YmE zvtFLqt}}dVE(9EZLcyV=`+#-6ED}eu^fg;!`F+@vh~ATsK8gEI)nfu`;KVGb{HJh?&*${19Q5iOV z9M#dI+?5~Y*0dvL<=#4S3UyKx$|%gTI7QuK?fG&dTzKGo- z>&%_Gr}7hdg=+Cot9<(M6m5Nj=$7B%*yjBk4sBLy4wSbB&3+%ac^01&q_?e4%!q(W zQ8-!B=9SJ94-=CrZ;5bH?RUQPchP%5*Z#c+MIZLGOwsSKAn&k-?1D;YSkF?mAIdz* zK0^wFg!vy6BB}5qSpg6HE9H0DHdw^=%i;L<&>!Ys>BwespDrmg5avP{*6D*pAHEkC ztxv&Sm%xK=fP^(-d)R&EUY7_kw5{`7t6qG-`#_K1bwIvN)_pq_v!v&JeMQOml4cgF z6UyUD2A)Fdq)Rc_KnylqEdqwG7duz2LshN&w#gch??XeP!Bmm%dnM*L#-6k zd?X#5r_7zfM%m=IkFhSblz)!q+5a!$Dm!~!p;n%Bj)mNBxwz)H9UrCWaiku+-C6#i zn<;OW#xsyV)XT6t@5c2{yGtdxup?&f>10o&n*F2D!%E|c%^`d!#o2s(cQ_v3ePhQ{ zI`y9X%Dy=^x8m+_3wI;yrrcxD!?C3dpt+HU)gA64EhbnnA2p*OMR9A5=I5{RSIo>RuKPUfcg!G@-55Aol;c-9Q(%xsYKK#AI)T$14$?UFL`iVYL`!2_8nYaKg zbvM1kcfc*a{f0T3Z>=OlCyd`9yy3@he#qzXKRWFUSD(Mh7qM1|!R!U9#&EM9lN ziQI)ZnY(bOkJ{#nmx@slj3f}i6LJ^qM2CC2?0ud#+GD6h3>m^LCl4Ec`j&i)wlS9a zr()z#5|^5%H{QGz)9u9Jn3ISsPlZe>xAq)Akwh2L3b|SsJtraJM~+JN`e=FXJI5UQ)U@c>viWh zq>gmz<$Dhz!`L+wvSggU(+vFsb8H2oe5tl^4}SNL{rU%Z6c&~*3MihWc;`?3itnUS-_T9S(oCb zZO5oql8@a($UBa?47xDzCtvpg(z)#XAy!YP53%kKdg-YPI~H#V=PEuPN|0*<=mC9n zSa2fC;WL!SMd?m+Z)A~&ex&-HIa7A1`c!`Af=4RlU-9%YB)WGX2kB8cJLD`%g#$C4 zLj&Ng%od_OLFoJl@woMO-e4;Kp6DdCR+lBRV<+D`n>rm%o#85b{7#;@Je67b(a~Q^ z1@yPv`n%qsZ6t4UAYx88$b(UT!sxqLFTvs^m^&$8o*W?@1b z$Q`_LMg7B6p-&T*T}$SVUPdZ&`tOrihd@71u=AqJE43AKyQ{58p2v%fTOnYLH&W*} zZiJ_{|7M>)V2e)lkZ7OJ$;vH==*N8WOZ5B9R?zaUTc+M%S(sUf-aey;Bb!Mx?lxw& zZWE6@ak}sPy|jUy+3qvTp%gxbS!(xr1NN;D9!SYvvwi;GPM`h>)aZw*YbO_yEFBB_ zM~E@MbR-ln&aUu&NInES0gi857aA>cl8=i5e1eb+y5p*yXXOHEaA>mplZb46rSN_E zk}_i%#%-J^oLU-7&mGGdlV04aV+wDlC77X3G-lKs4YOtuUa)GOEG)_UfM?bx9UU7~ zxhWHQjb71KPUzZ1}a12QP&npd5NtG@{5wQFeZbr2L zNDHX?ZI<#W5$O%eoxU4;q@;w@kY*v~M@@K02is$)|B`^@OSdO_=nUVU#3QRA`)!LP z_^@^U@_^>XA;fwgp@}Wymz)ZFNNL^J@!v_&;~x#(KjycdY1_eM5BYJLrn;d)d%n1d z9WtEcrAPW-vZx1uGEE4b0yET_%}XpgDWR4>>#QD%0rQ;fYGDQ{L_$qdK>#)Ugv2Ed(9g(=2QI!ECpK z+ioA)^te<0V5>h@bNvIenH|H>RE)mUX)4D3-%~N}pG7$fB`y4t>xt3$vGgj-UxF|K za?qX-?{kMjr2EJx7pAaR7``bJXHFy8$X+Z_nWWlI6^Wfy_eLO%P1_5LJBXE~QX z7j4Tbb^NBsly71i#VjcG;QA;hn|aLNx}y&Oyi0f)djrFxz<7RV>)N$#XrF*ctA*k7 z3c3);A`5Lt8N6Bdl31CycC1@<((#pZ#evD3>%`g~qnK&C*DK*$x$v!3_>MX~!WHcF zD`?ZAK@R%7LcN5_f-51k@~9oAbA10X0-hX(9aQsFrE^TcGBFklv|O=?SfpT$dKx{f z*F!$CqDS@zapLNMx^Pd5>4D}gpWKHFZ$~Ll)7Q+>yNgFon3=Twv9bWDBW+>0r}bF- zl|fQSNv57w0i}mMNwRYYYN4l5Of*iC?HXin9I9Ug=dc>=1Md!~rT*r5e3&aDhIl<& z&WM9PjHa`hnQ0&!jJ96W93LW=f2NNu#0eT530W3*(xRfHkDd1waS0!%`Mv|q4pm7W zA7~u0-Hs15uF`TPYl@uW)R;;d+o|hHnujS}JN;xzIjWq9rt!b8{P!}RC#`HEfM>MG zWGNf3L#Y8Vq^JMLLori#t3Q|Q%;&Eiv?WQCr}SEJ9zT!!qFOy$brn5BOClgP0cw$zlPSr-Y>Tt|oU@k|G zm~VA`Co(>#c9qUu7pLUBCu(8+(rK$tCaaCIP(pn%_s#TWWH6dCs2Gsl2{AFFG9QygO0r-t5`58?YQX9pA7d zxFc}1Dp@ON{R^OtV2FAyX%?|EQ{k_F5U*j;;?S-c#KD@v}4!Sw7;H=`qo<^ zMc)=DUal*hEb#4oPxmC5t|#J6M62g=VVK!aVPgd>_W?U0-{fXG$S7*HsC*mY7b#2K z|F=V9Y2wrX5p+#jB@78go`DO1mDe`a;`o&wizUDbHBH4)B_FPi3nYIbaAKyMqNdz! z?_m|mvF-H}J2KbfhLd`nbIJ{^cE=OrfdiS27Fd#mX6o(?n8)DWExc#O@+fjaV3&+3 zMPlucd-oEhq!*=5FE$hQw zJ#>96K2sn6#kY9-f--=pI@9kJ9UqP8gs+a<1kzx&RaiXwSO9Flql@&Nc*pxNJrZY_ zin=QcjVR~Yp7^GQQl!6`sdHBc&`H@`bjvp4K6J|+wk)yowjwreVyWE1joO3$Mv#Vn z&UbTYM-K?8gym*-sA#IpEnRmVE7$;z4EUg_DWymv?<)4g)GbiL#KxH9fXsjy0a%B0 z+qobXbpT>vW3rMI7=g1?lB+stoi?y9Ov+U_Ho{wW)*kp>*lk^_{k7 z*G+N+`XEr{-6=Ba{^)sGI?0mVu;ja{2bilQ>?qPrClOT(HR0|ftVf)gnnH<6&7k`@ z(IYk@3vkrtp+AYlxQK!lR=^5WqGrRZda@f|Z1KL2*b`-%PMwyGAm5%;k9vF}xfD*s zijqN1ko#%zOX^IhSb7Yoy3xV#sd5@?$->*nw+y8$ZqMCU)Tv{#NIA+f3pcHhgxdO& z$F-kOTPy(p02-jI`u;UhnJC|&s3S9Kt zfJ$&^3jC_YaYMkVZo(Pql5O&-AnZJ*Rh*dij?V|T-cJ2KO}qTk8tx=_IfceVw{0ii zBKyR1)atK|UaOAw6LD=(@Bz<5-E#*dv9EjZarV@@=}!Y6wm^Nc@N-A>7oY5*e|yrq zo@gbtewf>%rA#%{tdE(m`x}<$k}|@>xW}}o!qNNZ(af^}0N+m!#w)A8dg~|D!_VY; zC1&!DT?+-!^|421K+nbfq_1>t^~tuVYZHl?jCvxzc2V|m{iI|or%LP_)Y{dPs6BJP zo%91bfVvubTylH1kLJ2?IN za;K~y6igd$^p_9sqiXV3e{e4a=*`9Fkit_)H*IkAeCORrP;G$i&z1<@((TmJ9mk|c zl$8(`8_zitO!c_rpq4uL?NQW8u(`@ z5HPPF>1e%-)T7()8X@szAo?ZlXL^uZErAODqDP9|Ftva~IXHcIBomyCve zs=*(V5EvHW7!cfw4P}_$g)F*o;+?oc4eBw|W1S{08>&`dsK;uL6+b~V=}GMQ2jb46 zuXNXNee5=V9D99YoX>2&5nB%TLH>qz4GaXrR6-EPh zYVan9`47Y0S$_+%I|l+0 zrn7#cqn_Y;cv9hiqOwd>F3KER zJD=PrD68(1>iv#JP6gW2fB_z}b3fB%nx!KDw`(%bDs)W7P@QW&=eMg_lPNfdRu|3s zR2DW+&+y?a7tbdil0MnSIM8hiP}a@oQ(*~}8#lC1ZrMMuN|Ek(x4r4~ zCRK;+L=lyJ>013x7?-X&GGrG&bl`~{s0JITA)~UZdoI*N@K(J!z|jUTScBO(M0bC- z9tZy2@Rc~FXB-{Rlwm8VT31kfH%yf;IU!KAl5~$h(0CSYW-76fI0v0unW>K>BAAaubB+Be zKU>A6=~Euxn(8f^iT$V-vf#(p6Vr=>?}Wr*adWBEt<#0IczAE(9nE9J7ua{Oln zZT4q~Vf=;8qh~$?3rlIAvW=Zv8|UQF>zca;TqK3JaTGp^qwo`D=w2tIOuofma1#yb zjIb&0Uus!1#Dv0$*9hWI&jm(|R2rE>U{px8mBRF7qH;}nf^;u1F|l!hytH})*R_c7(iRHn##ffL>*3)Oa39x4b7+oLdHA&0W9`TC-N+QOYz5Cfr13%g2;=xujB) zzKM8)DSPci(7~kH_A?#{x=QRCR8k}DlpUbHF(#b(7ifs*N}4+HgJarObo)|$JWcu= zP4SNb(MVPzwbS(Fv#ad?XvFm#)do=rt;DamRu$21n=3OHi@A2y+}-a3Sfg_a`4v1xuZL!^r_<)?2=F~Fs(3)h=94M=?ZbpDla7Qn1?Z+)6A@*lX!0xVW_R{ zK@d4tQFTOS7BSxalAki|LRb+F12ytK$YH$3-0`4;*v;w}gdBJn9Q)15HN?Wx=5wpv z{&wTbJN7A+J%}uyi4hI~07Wowod8cju)hW8-JG2CL|y`@ze0t^^bCuwu2@TPd<*<5 z1|T2gJ-BB<_b8L(bn>KvE}!!`SwX0a<}33Qb*1Nf9)agT8N)0k4|GkKqllpm87M}B zD6~|60Irw7y7P>{b_1Mfz*SRSqp>J#H{rNHVT}gIsKNr#oyFN%qvtIvO-o5-p)hhS&?#3^)6ikdnPOOlDYn+~cHXB8BoXWQQ()Lo2I`Vb(@$BVs%9 zeS)6#ikx-P5~MS4M5W41E8Hc`uuqyNWM|Xs!W^D2mg5;uqd~rAxyG^;c2=lHXkAe8 zQ<~@~+C?)vpRD886F^fEO2ujM(Y#y9sKW7QHm3VZ*TPs1v0&+Xbro|~k6@QZ9I1$F zeaaE~xzSKiNXXj&=YF#Y^^}DfVb!iIIC17K)!*Qr^5ky++Zb`Of}NP3A+n|-+;m=B zU00^@>IRf_uMLJuZ*;69R5^fbH|`-Y^TPv*g^Y){p$aiKYK(-e1GBffEk>NuUfCNx zCr}#zwnD(}AQUl6HP`j z6f1<-dOAG|3<$Q85=>QW+uD#69{ezG*Alp`*2yMs=_rq^!JBFHAlv_Yge;2RH$6dO znb=Z-O9E*X!|drzB5Fia@sbQ z<#OV&EQ$uP{6EURHO+CA=XNT42;Cz(k1Hm&+qb+1CzXu;7<1EFBB}cR)b1TEa}h!a zA;dwMjALT(-#dX>HRkl=%9Z879s3ujs!FYy;HKPiQQfuBO;#b1o@MtyR2wBKaJmFA zh?mQN-q7WIeX0x~tKKC&%h(l&ZbV7C=>gNqtr$as9MO|?X0E}tm;+E7ZaKhoH)NsP zA^72ou3(X@j z{(~CZ#RtUs_{GOM;-dazPX-Dxkl8Y$mDX1B zWP0eK{7l7oN&(}tp<7M#H=1f2pMDjPD@NWn=FZh=B`Pq1z-pe18H{u3O#R$I{umew{q4cZnD`%)2@6>+sTM4)VLO$onP4P(fD zDbKOkvQQPKKR8x@370K5X;D2)ug4`sz!qCmi@gx~df?|`Ahy$#*iPxlS}10&`2P+H zx~G?vu|w31&fx_@y%uw?P_y+%r*dFcT-n*WfG>5q>Sg(gY$XZH@}#s{N9wHmG8~EB z{r817*@0oR&10G;U{;L~%DQWtN%@0X2nIeddb5uUV8=xi0tOhTeog|w!I~!~X62O! zNgg}U5$$QHbEKOGLj2vIfaBxu1E>0hy^?QzP~-5qkBC-EyMx`WfF4@}zRD_!4qJpP zwbh3cy#E4&3OxSGF|`7(cKB))>9F=qX{&IdXC{{2IWRocc_-oZty2!5)GSwEgR7vx zq1EYm*r|!w?aDmp&J&_y9O&Ikmwc?Vz|f&Z1j!T41I0-eB1)uK@Str`b1$Mc!Knjh z6%R7b3Pz}1zM5_WB)ke4=ernaEi_*T(e1u-9wtN9J%pWbou0CMI&)&6qG4&+Bnfo| zK{XP)szyz4OLFNdQc4o4jOY&SXSx`6HbyE;4uXvUS~@yyT6fh~Ts?MEYj1Zt7GUx1 zwxLyeHpBiEDYjaQEtm?O1x*q$Ixy(~DkHs%uil7RV{6mzr6!Zsjumd}&PDW%aFjn!aOBXSFfU&_Wfnr9V&}tJS z)c@xNaAnsjyjY(frlv9;K@Atw%E6flwt*;|I5pv;sVQ%^E!t5eB@{1(!Nh{o>(iQ( z-q6Z+QEwGFZOlSUsrs?rc(I0^4c8%slqbl@{KzK5*eH@Xs~D>%YN8)wWhokIB^qm! zbL7c6I!KI~P!7_gE~6S*P-A*KgPQlv(ddV>(WQ3kSw2+mSfr|*BkUFz_J@j|EP88* z60)c*nUvl|xr?A-yonMO)6yf?ot5)YEb+Wk6us`eMU5}12mq&}h!|;4=^&FOy7e~! z`M5LEVJMX%I1puthFykue}!_jymBPBV4VHh>%i?V!1QkCT=!tRV_T&Y!{YcYG3$ee z_UB_^%d?lQ5WVoKb@#1{!C{0$2)p9htfL7a ziojL27%?^n^~eFN!vMjPKSGKEaEB$YoPn;-QL1wRYC&~9?>SW%tBOEgoU~q>g2*cc z-=JJ5Y2D(s;ieG50K63p546L%;`mTqgdez<{uo>>ier*fccr3e)A!_s{VB_SDgk`L zz;nCvP`-Exc?q$5`B)Lh+WsY?MPwUZYN%gwlwT^s;{^c=FI|r;d?@b{2>`rL~Gzw`N=IWxY{G$>0GFQBGs{N`^q(+O;EmINnH8@`gUk+;uZyQ)HyW%`6Ld z+w`F7ZvL)A72+glqqQjZ=37+t+}7PPDulG}Vw7)euU_T6ybYX1Cp?}_3i>v*4e5?E z)Us8}?G1h0=U{ipw~1aQy2W$evMQetQ>zOT z4&SDIRxlrnn&oF5xUTgHHF<#fjG)(UZhU{pN4pXtg`oq+R51zgMwQVqmiV3dTuL%5 zR#Ibv&?#l5j+W>+>2~AEk*CDgv@EY%%v~f#Y-+6tps}>`#N^i}B zLL5)fL+m8Ci&-E`NK>+-$U|h0d)85+RrD0xR>C|ter{#M<)Ja6@rx={EcZ!66%_`Hghxkmf8k`DYQ05uzS*Z;XhINrEI} zNjAe*>d$+Oe4&0b8r2ixL2^>^Gx4)vBIWEsnpi5*IbMM*ga9X=r}MD?i<>uBFwEM2 zGEe;0L7<8#!%Bo99&{lVNkHliv7#X?eDX+P8$>`z*5Ptnu??4tQXj*aT}q6_@J~8U zV?n3IuDqz*Fw;IKK;@0s1H(DJLZx^OZPTK}V#FrcrcAJHfGtdd$Uxp>y^=ZGbHj;ddnZT1sPDqV{!Ur_N)??0%sI#d`$xz^zHuT>5EHTa z=dHxXiXf{9tJZ1kfMwgRjI&j4q_7BW{E}aoyrv>8-VoF!n1a^>)L zTb5kwA0?wCiQ%1^dm5k2588KFSUV1Cr5WTI5z1GlnY8ADUaRmp^;8_EdhVp}D7V-_-es7rUeZ`F_CGh^< z_OQFRgC3}c2a3j`48izm-cbfn`I)M6gzA_pDCOgzDg`RPe~HGhrT6P-mX0cz%f`pj zIF^e~S&6EK7DsksT_KN!?96SPC3W5KAy}Jl{S@Y}n^k&uP0MNqImS>j4twJ*pUqzN z0-}kKe>Ow6kY*2YGtUCy!4hk}x*a4B%k8f;jP<6HLiLQId}`9#J%~zehY(89|KH3Z zbp?R#h+50hiWasoV8R$QUaVEIUHq;pMU@tZh017XF~5__41gH{e3C;|G`d7MzhNb> z;R&hK6E&)=ZsKX>aALWwQ2^n;^>ny7(&Q%*PQS2Bp3F%#WGW52&ofQJ{Q((G?M@ro z7py@)kJyV2kYAu9&=Hk*?NA|$sqC8J3cU_ljINoyykM@nxUS2D*6!U4ya%Cq5Xo*5y3Xmh~ zQR;w$MroiOA8#L!fwRO#&{ZhOkppl+luYUqd2S+U&U}TRZgkS z?QNxN;qjvuP?Z`ZOw@Y-4{oux5YTk2m^H`9OPbhYIJTJ_*i3GvPX!-YjA6)EHRLP4 zBy%8!Is`n3ZsnBQE}G$D&?$S4gWNfussedkOiw36dEK^taaF;2o6=f1OWerP!rqUv zuG{Lmo)=7ZYf^e-NcLyY9B~*y7g*D999@9%q!2hcq-?3e8s&ydMUJf`KUPYE5EqNb z8CyIS=+AoRw~9w=9=TU_Kgl=co|d6LZl4AShH26>dEo&BndZ;k*+u5!1KQGRxeq*= zcaruyX9g>f(kBmMRZ&nyRlHcTB0(f3$WGv0cuCeG@jKk<^r6^aAplF#C5H<_aCw*W z3Q9N2vHg)F_=wL5#dvCQJJ*Ac<$fY;FxMO$4joW#l57mv3@5dRC3yd`l}>>JY?sFx ztKdfqKezd3%;vmCJq>A`4-iBQuTq)M1$3yyr$%YD2+IyM#!xFE2IC+vmfqZZ>L_)2~~((~IsBh(+kI}hADA#dxS6M4$SDhtG`38_Z9oNz3Z z7cf1};`}^0!(w1L+A(KO=1SiD9003EPkTL^LGXqBZiL#KyZ|T{{s=7 zA^R2TyXK$y;`JlHZ;JP>_bZL5yt1-iKTjZe zf$%=|N+Wq9dKD|2V5c?^PdEkq#MMUdr0TYg&!#ij#-(>GA50W_Fw%>;2Za4zR~qWB z=SA)ci`)U=tfg1f6bC@vmksZmidQ%f6hH7RSj48o6^sWDp!osz;!fVH$6xKa+F9t4 z3;0r>B4g#{XUdMbmg_(h_=OH+Pq1v{c^c`|MLK9s`ljikZzsZ5Aw^Xz=;%opv5oc+ zR%DBE|l`;Df7j6>eB>@EM?;O}BtqY#c&g>dZ0 zTDlMbm#)pcsnx(8%(cX-l^ul#Ij)}q_5#Mf0f~khdDc;?EA&ZsbP`mq;@qjf3V_*w zOdvx-g?D<$PpmfbG^f^srP9U)+URNkCjqd95G}=fOaVGn>kAt#S?ddAG6cXvyIg}w zjo0L_au}s4s+W7)bC&n8zvW$f?n&wFz;X|pDNm;z`!Mno z?|WX8WBNcIt<<}!blh-; zEvRjkQ)nbsni;oM&`PvhT;a~5%7^934}5P1t59L!PdoX{>?^*x6Ido~lutyg@{C}A ztvDbcSrk_$qRJp@>^nJJ3X!t+B!^6qtrLT0Z-_f%%=0G<=5e}X`?m#RNK#9EgzZDP zitm1FKadyrPMiCzbnoN{s9+Nk4?*tvXZ>L0J)YixBE6edp`L$bu*4mXVl!eAWP|;e z=d^b|&ATIW%_rs>mHIl+!A`w<*U>svia9+;%^%U0#qAr*O;|v|V!zXI-W_SJI)l4M z55>^)=xlAJ#uK}1Y^`bXVXXr~F(dcWgHmEf4n!4D$X55Ph@E<`FVGz}lLr(x>374g z*xY&fzZ-hR<_?Sh-Ea+}^x*@^e4r`Dg+S8GIC3@Pef>M1a^2a-bRe{>iX3(Y#)Hhq zTnA)ms!f%(t&=+UxF?VQe-pBEV67ufpgU)3x?_^2yH3%R5V8i2QpgywfxTC9GG!cW z?>us1NsK^HAL~G)DwCky*9~HDPu(1zSrn{Xx3vZ-7S4So{a)T-yuTMzaWIrmgdUKg z{_$6CVjl8-Tk{>mUDAf^@pWvZM&3hz{kK(~-40mZMi(q_`azqsTnI*$Brjmz`9H4v zL}b~SgE~DcbjhIJG+09)GE?R%dh#lvC;!o}l>X!a$xj|Ss~`cGMaYSRJE zO?vob1AxgX3lic-x6R{6Z$m(Q?ORtx(GDe`@0jsY!ovzPN%#P#Rl?DbHv6+czli@S z7kXyhrycL(!~XE`MmgD@HjRCzkj{Xu=)>-VBeIXHaFT9ofWmo4A|&^1567-x2rYVi zbdx{s^sTfyA5S7aiOAFQsePs%MoKxLK<7MJAv{49;7fpIoA=$&>j7sBSR+%|em8EQ zXGmh8SlB7w0cSq|OKWKJHbNBO_uw=+21{iO2WgBbGT$5uGjcL8FagqUU$FLg1;H;o zKQHnmDdWIS+m<3BPw?bNT3%>Ld=eRi=gB(QQI6)#98ZoV!J1tq@XJeD5W zm%#_fUyuOuWfpqZ{FM`{i`IU)p!VYYQ6cyX02Jx_%J=iKT)u{hn?WY~YfypGp&YPj zUn{XpFhW|aK?cOB(`%n-*!Bln#2!Jr-ju&i#FD=DO%H3LJ$3UF>D6o;=Vkw+3^yLc zfq4mpMd^T6EABuqgytYVt7ZSicOqV5%av~*hEt1h4M(KsXupmIjWec}YtLQb>0R*G zUZq}?d(rqy;Z432U>fnN!f>u~xxq#{utScHLJ+G_OyA)I(K1ooKlA{(mIy>zPCP{R zG(wnv zCHtUrqe}O1YZRCad!hpa;jaM#k*}t~+H<{ElJ#p5^=rT0Zp`~@dKBh{gK%YTU5Q&) zHP%-e=c{~BRsfs?REu!3kU`vC&6ua;1eZ}hesUL{Sz5ati|qsfg}jqO?x|Lj3*!y| z(=!bsu)cO*Vz8Lg4nGD^0L%#{(jB5!*I zvg`xP+DNiCa@l!=#}CC$K+1D#YVdb44l=Q7ewzd6M$;3K*8p4qX5!u~xi>QdW@3Qc zQ&h@+^2eoB_+9>F!HzDXlM5>Ol&=(2y^nN4Op_v*#EQI-FfC=7S%@7Al+MDmpfD}c zyiCn6rlrBB2BQ4~{9GVrO(H}si{?V6@yGcqT(#Y{BAZ#X+>krwOn&AsD{5RtNhF>>eU zSH#@&?Vnt4`jmIBoJ}2&1wLKM?*h@Li(LnS~)IlCqYq$wx0F9a@`HWikqlO>t3%)r7r zS_&*I1*8}y!*AP|3AUOO<2&lI^z{z0eeZrV_n-C=y67Fv=Ulvp==pRh{NVU zkYb=in4*zUKH|+rgRwa$1@y(|*c?w^XcbKHH39+3vOsWl++}pDK)nP2-%b*su#YMN zekT=im(uBDREV7^NJTRBPV@aPoAM-*7^*w#fjjq987g;WsN9F83Xursh!x@`KO+MR zR1;ss9^u|PlsG&S>PwDS?&NB7pw^`Z5*+-3#r{vc`L`A73a+FyAF+gAfMoXGP*2X^ zdk|^a`jR=j4zh?{^8uD$6uWjH(^wOW-F#`O+J+KfVUF)M-#Dk02%%$gHim~5i zs5awNcTzC*`8r|-R$#K<+y0qud1?L%7Dp0@3tYGetqdnQsY90w>WDK`g1q78f~q=~ z&bEULoII&A9bf@SKh&k4sE|>{t{C**20EF0HCt z)M4v9i;R&aLn4tcR9kQ+7oVCWz4a|%-D#}?f(m3v>FrHiUn$a$7 z2t>FVd1un654~~=NK3U0QKGZ zr)gO&l}T&rr&;Fh`H%T{=wg04S1}*YRZRWt#ME8<=0@ziNp^nl(VDuC)>sI*4O?$C z6wMnKtoh{iG#?#^bYkoB&u=BunKxg&aVVPoAsD-dYYDmfPtF+gkWMi%XzuQ3&IIV8El=KHL|&<_0ScWysI*bKVH&GPd! z@wWoJ|6JI;)}%W_>>Es$#sgKW3kteoqw~+?^^jLLJXP^k`Xo-etpT#MACLzDp2F*J z^^pu}1;}|+=+X59&b!4c>FQMQ>w(0iHwlSpZw}aljR=oIEp~tg@`ePExcz^EXvdL2f6MZA zb%o*X5WVsOK9@M&MCFCujXZWWRBjqCd+rcA%u>lv1?toKQDh zszvrCfAuKvAh^SMVct7Cr#OqTyORv=mtYL=Kanq=(sQY``;0O*PkIPAd}OL02!kM? z+PAPQK_`$cA3%Z;bik))mCLeM9MjZ@j3)6+tB&YaRBQ9vA3auu`)B_fpQg@ zae`WrTPMV6pU_Xzi46*cOXWG+nMLiL;Lyqg_*I#V`HzncyE9cZHB;n?2B6xG#X?^N zys2kFn;`de$W?QIqpw+>i zyu;?i#zJf0Tulr^IafO{E3*cYoO;9$&0r-d1Oe`o25R5O%WsPWaWf05G2@6lbV$j0MfA*`-fWVAUE4U+m|GQS@1<8*QJgv2s`l{k4}h?D^d(#fYzpF zhJwTdeAU5GKCpo16;{DfjfQVlHJwD0NbQF&?yAGk32|4gd@-q^)-AiE3O_$xl|F#F z#C(qMnhF9u4IXb@@C)$f<_|s&3i(>QL1{dgamT7YOWWiOdJUeOpwZY&IX}Sk5b6U* z;OTSuju?M@G`v35AQ$3U9>axbkimtl3wLNTd6jP#f1hOWYP$z8 z2R8Yls!{7sCdl{T1L=uH9{~P1B1$3Z=0Ha`2VifJej_(pA1<>mg$(lB_h1?HpWOMq z&w(XF>dz~PF$LD+4{7xT0TX^EgY2%4bQ?uggmwqMp%#!Sg;Lnu7{D;5+dg+&U(umbX>~>_3%{qLUs>d%kUz= z0*l4~F*Z$%&yn%A!x<<;g_JlMKyh7_aGHUFW`-0Jq;R19L(8^waiM@9oANUUyNns} zq^im?K3t6D6H|D7>p=7qK0fx$K?4k26l_6&BeD}D^(__d;NE3K;7}i+r-I1N)(>Ka zmg<&@exM`QOsBfrp(BipksDg(O^dwwaC|h-m*T7XZMoq}UtHlEKjK72f8=oO&ENHHv-;J`l&2PjFr%rMI5kDe(YB~uN{jI4B2GAH=-{zBD3 zTHua#3ilH&{^8Emz#@ghG-Kk*lMe4n7)X6c#*=iPbu;lIyQZ=uxbPjM|u7A4Q}|HRYw zVyGYVdONYP?`}{Xly=>&^!+Q|uieVrT^@MecH$oKs7y5X)4A+`x1XA4zWoG)edBfS zMzN*C?L}Jc7O!+<=2r7#96#&D!1g$FZ%%oS-xo~8^UU{1Qck2&JJ*2~ypK8>tTLf3 zU2Y%jn^trZpc)Vw3NFdPDqavPEK>9DXmgO3wtO+37H;c?Q3mcl|HK0WjH5Vkx_OQo z`0hO2`3+2?R6S7SpXLuRBf9^H!!eh0ZOJYX~mkk$Mh`&g0+n|}?=d9fJ(Gdt}9 zpFY$w_q!gHJ2tgg{lRd&;i^S)yRf!?>!WAqZHqKx^*n|!#aupndRfcqRmgPt2FcLLaqRB zhmD!aA~%!B&15S9MmF~AV>PRy74sr)HsZk990+kf#UgcJtNMp-|* zkZ15y%#-2v%f)eiGu7utO}9+q)<_Z$Dh$Xc|DPwaGM@F)InM)EFFV6$Ow8F7xFEX@2F$TG5Wk(ni0~UKi{bATPCnqc8<=$T<}fJlv`0byIhFP$=i^jtjO=a zamzqq?@SdZF?Hwk`@A4a(>E3WG@TSI9N@G-a1-pSwV!&C3Gj^AcBdXKmtkEnQshjg z&v#iCZbWVXA5~ytlcm*@dZ~G_mX;&K5-c~h<++`<^m%rl5M2t*@1>m-L|CUR{ZjB3 z+!Ex*8$Fc1QXWg=8e+BSWoG>Y@m)iNq^1c&Ovs(@8g;ubxg@01MtPlpfZhF;*dhB-DwJb-BT$ECo>(5Egq3cZWnh<}T&)JBi&AQfjM({mdJ)eoqnat1qQqX1lzIXE zv@~?Na)HC~gZ}>DcKK<&^b6*T2QN4$OScv>F<~YALBzB|B0a>p8&JBI^;=U%(X{9L zmaRl8X6xrV*R83rtO&x2Tl)p#M3$AMMA~vcb%&SQ{GGjQ%~f67Ue5fyn|#God}1_M zxM>!vM~3{W3s0*&mE6EKgM(G?pmXH`P^x#sqLfeN_}$}J{9T!U0>x%q4W)w|(2KV? z78)nTMr$urTTXY{78*s}mseR2BF{nj;Y)uh$R8#E7n*thQjs7p=*MeNWLd1{^-J^m z#hetGlMP-b6u-AP^~7~!wG)*4z;(j!#2#jqUONBT1Gebvu>)3aEI(y~+hHMR7DcSe zR2VDmZG0hOf8&E$d5OVn%qQfNwm#|gGFmEy2PmP+00kHeY|#BJENdqcM=YqlSf&_0 z*boF>7xtK`%Ac$?JYrHyov`Un0QW2mx9pdpTYO>54}7GX8DV?(DrDzs)i|i;&Awwr z%QH7Xo%*fsO;82<1qvI?8`gtfX_L&%ynb5cS6CE_1gs>#a%mK(a;b3rojyNcPYz@A zx>g)vtT&!4HymV7w>3Z+=o_c_JKB4rkfRgCx4`rHEPF8`+I&QdetNi?TDb{wYLQVQ z*>2Um$~|=Wm9S?Ik`_~k&m0(ZJtfD}t)W{Lw;0@;=_8Rv5Y!LDc0&QmRno#O57`eI zj}CF@X2_?U5XGl_W7`VzRp0cO@>t%EZOB@|Sg;{(fl&_!C0q{&!w<+N68Ivc|NiF)i%z z&-joaa7B>p*Fb~t3IU{YAWo2di^}TEUYZy6Yy@W=Z#go9{oBw_B7s)2H0@<1(6J?5 zYJAAee^+VWY^Yjoa>5m%uJD8o@jt8U1mYH?8&D#X2xh-F9 zdx1;Ws;g=*^1IrR`IK8Zu1t|k;3dQ2;7kLT3*?!CnF3_au}Fdyyp_gCD!XWYFPh`a zaH*hrKp0pr&%uxOIIov>bv=p6X-T$zt@>J%;c@4F&h8~4;LrM&b5V1=uPfG< zVTB=c=ps`RGv054jy(|F2X?fvcAry(9%P*e`qIao8~L2iwd-S{dfM}$yd+4@yEdq% z=rYAM$l(qDylD#;{7cWUNu?z{F{78?P*RO>8aN3ur>Ss#Jx|4f-MRr%Xu7my$2+y7 zgg&`Zo_+s%DDko~NUnSk3>xVW4C;mpzC<1(aIIv(;0E*-W(*be8gR?$VyrE~ShJwB z+2O`t?h@U)A2xNf)7N_+?&S-hC5X+03kzkY4C+YR)#Ifd>pq9t&%K#%jRUfM1Yd~f?i^4bxAuzonFcQ=&?We+>HmX_J=fw!2;$O>!?_saC) z!b(T_TMxP-muYYiw+i``!cBq(7SJAj15PC%aLk&44D#5{EJ^RB&+V#~Hf zzww8{b3q3srN$y~WqY~9)knW7;nm0e(zIe8`{ZY1OdkpJco#;hFC}TN-S8Ehly0sP zS-M}Z1eBM-cF42ok2dhxuYEMLYHEz0gr<(`4j9zqcOCjPibdRyyqO~g0EIoE1 z801ka?^rX=n;&Rhop|M*EFV;Sl*cC>sjGnR5acvl%6am=*#^AybuT%b#AOQJCs=t4;ni^@7WB? z`^C_dX&NhI$yqc<%%9zb%l)i@yf1@9Ea#?a;QyRlMEA`0A>cg^Vm_{Vd#Fc#P$vXML7*(j!=T>L3RQ~IYT8-*eLV12>Tjr3XbZJk z2o>>BKnJHRx0n+Kicrbp609UpYbCn6=t^|a3n#qV4_C4w`vgA1;iPA2zbuw2u*LBooCmh;OC zP-9%Pq;7i5G*`eW_i)NdP}Z^sw*njRPB<_=yM$(c4;QkO$LKSKoNNbd?Y8E|hXw-N z#H@hd-~jR;^38ks$&zvWgpmwh`5x5MSQbqF@5&vFR1x38_@=cq;WA6+hEf5J;c%^y ziQ2w*U5ao8Law3o8|F30+Ufa)gfBsAk<>~OWs8C5U!LZ-*>RqIt*MZf!05CDPsnfg z#Qb*h)|5EdeZs-+la3spckHV0VZBzBCHY(j;_BKrBGx73zfPa_X5S3O>13aMzs|F1 z2jOE4LDb-U6D3H27JuqPkebvOvr$-3X}qPa_eW}LyAh0Q9VyA83M{va6;iA1zU>;@C47+BWts=lKB(+oIi2+`hq6o{hDe6GbtzP;3^BL~7vb;u+k@HPRU)Frt1f#bfPA5@NKBc2}; z=yS%xq&(Di0=~qQz|cPWI1hRJ{0)oXL4u5JKZ3;oZR%ly8eZCJ;iIX_H}LKUpnZpv zO?I`;i4=ShRO^-68wTtElkO`=D)ETAdf)XPGNRSkC$t`Nx4vyd_LxWDW~$J02Z!Ow z{sVa=f1>j-Wl>2dZ25qbO@*{MxmPoxTm>V>$2Cx+z??Qrt={lSO+xq^DJ^q?mqbHf-m}FTNZQ*Hj=S z^y@(ER+X|sHoOCKUngCa_kD#MIs$qb;M$$XUi$yky*nBDAyNz;KO^TXa_(Xl{xF{D zNPw*(!g5@2_NRg@SwguWCo%O>gykPl@7g35`V+{B4RKTiR2*=);g^ytt>G)xsZ(RtNOZ(`5H@*0jYPd)BJ zZ;1$vqM*w1aT(l(D%U?DdoCVgF_wwH`+R_W{7m++5Xn(7L9k$ClXs*kK2DHSTuzA= z3Sx1|b9Fpqqav%%zePyjzKsh`z3{1I`MM3XTO9K_aEh`UkTGdv(6%xHU zqeDy3*T&Tl;mSnDQFF~Va$rE@?dZ0_Q(vWN|wJFVX zXi)mC`bNX?vw8PBMo5DX!Bf>62`R!xVE6$8&-N*^{6H)sTX2DhxZeR%Q?og2cpLPr zZi6E1S2%96+%KJU4jqpW2qQU=Ls#iom&qTQ`|m}>H`SJ&s6nQ zR{iEp#KEAibk09FON)Xy$H$ejC|2|BA3qD5=Hz_#Z67qF2K>ASjs0J!BXV^&I^}~% z6V^%;C->rHVgrYP73)r~^&7R3W^)CB=3_3|Qqu3d_V5ef<%{<(fDdqaF%Usi-et=6 z6eVOY{I(M2?Qdj!G3E!+uO#X-i0w^clitB?l|SJi;hN!#32!ImE*PdHVKe%d@hc|%&D zusR*s8)dA&o;ObAA&h@F<~cE&(^@hiO1Ch=MEl$@b7=uI1B8o;m{O2f19~wVuBQGw zW_0hfz%4~6S+0u#bX_<8SlkmDu9gmouHe|Y+8$Q$0O)D`zFM;0ujyDX0UVL@#AW|} zd?CCo^i9!)bioZGK`*>^12@gd5S0_q)e%|P+{!~1ee~CY(6xy5KJ<3znARUOKdr&r1mX>AV(iuwsCMCG9ED(+eTL@?DN z;@k#&VYo&g7H%bk5e@Ksa4?@}N8ZsZU#|TAwNGD2^A_xRj{b!x`wmtb(z{D@BiMLq ztXqMQX(qvr?f%4J^9-L5F~*kAD@B0X-dJjgVyX)AT7yOAf?RsF|jn;xKIn!<^s#}6;X z#PC>Vcx^@?*PXo00r~g~^?OvM$syuV`gXhC=~3nZp14M_7xLsMk)<2|pnrVlB>)tE znWGh1)Pl%`i0|d<6^Yo$WBuYO7jMkp5Tq)JD5%Y?3-c^wt@*02-qKbRHpQ+*3Yc z7+kPVe#dYab%(GoY%h#tFN`~T*u@Hrp5!EhZ{KM;C>LnVbgpe9P_@y3=XeHrwmwH*CXdndk2&`g-Ti0Ursr0~TYK#}Ev5qP zHr1^N?auIpvM@|<(eN^ncG`ax#JBGk(CfwhiEY32O%4ad1?jz7Qn{B9BfR!Q720yMc}<_7dZN!0l9 zG24S^H8IWW`Kw+PJVSd@@EKZ<*t-g3{hI;g3z_pQo4-ilXE?{2Rg?g|sCFW374Z@X zS4Fst0MBQDfag=b`<6;5!ZROJht68(IBWh0E^!T|f%{LL#6>R;jnTWSnRi$IT{$+| z=l{?jFq=vT=+1HkaVIiLRLDa1DipQPnAJWbqPUO@E5)%vgio6tbRKpe16_zZ{&oKE z%^k`N=k6=KXdQb1L;cd|Ixy^`iy-buMLk*|2tCKb$YNJ^rSZJM%~JUb1_Ijb2e?D7J_6bG&O%X>j%zVHMV-M+VjXn^7Zkqp`VZNw}dHAiq-Y-oB@HP_9PB8=ZTlYrJtOJztB= z(GbpJWPXN&KI?+!Ox%dS3+UkGg2epz%|U54Ltl;|C^jRQZVTnIbF0Layxclkz{#UmbUx}6}RgLd^O3L%hHdFetPKzdsIdLK?C4klmpnhPUW?=OG zWahTisWuZDrU=PWHvCC0>5@ExeLeA2Ihf}j#?d|*C+;76;KKZGV%anmSmI?ZewEQ6hGu!&tEJK}T{0A=9$>FMIC%iC>&8mFrE~M8 zReN#|;_dj-s>T<}I%z5G`xs9@3*2U14S2pLA{>}YJLrLsQDsZZ+iH)PfJwZ!4v1p# zEbT937Oq1JjJytgz&LPtIZtF{YgR>Hg(h2nkYgD;So!>a`%qzQdb&XJbz3V!xP=SF zMf_}|S@#0gSyL$|ET6KR$`DXFcRdB{m@w{lIcFV{ubKuqfjx zga=IAl?cHRF<*^ZdcVM_93bkRegr|K0chVNMIXPKif#^muaF43qoUc_kWsZ6BUXJQ)VpaXdI$cmE>Gz~NP`aHm zAUd2P-Kq-^7C^T*n*I>myG~mO2_o%-6E<9Mq6A>HB>s~Q#Du5o_VsUYafn~qpFgwk zNo5pLCnT~06K=JI#6ABEkN1VSsiL_(O0BnjkHUaq;cp7U+=udHSRHlKDffbNN+P7x zKd5qff=;9$Y8y=%BtB};(FOd-kb?H~WFP5uGc~`+$sG=pk zGU@5)eHm9RLnFx0N8iu5-zs0r6=jqw3PMUT+U|u(^u~XX`Fp*~vn8$eLB6bXfViZc z*(@-Qn-DRj{*d~}AV3j{wdDy)2=_}0bsgLbOB_+Se*Qu{G5QgY$oaZENiEEIq*gSeMn zSER+p?&*V1G?!>AHEy$W3J#xuGW}m#MaGH`=z{dOANYmihEa5mY^+Nc*3x8ng3%?H1Ct2iftL2luTi7AUW4(alatllrw_j9T zL1=vSjj0&;p0WP$O*#{4b9|&fl&6MYR2E6^q zUesN-o4(8DVf$3WH6iZ^0N>yM#TMUn&$n-^ACxb0z{K~{#j832)W1db88&Lnn2C!+v)QIs$OJEKrJ|6erquF9bLJIp zZY`Pq)CH6ZE}TY7-f!`%sv?UemBM{r`R5C@NOs(x&Kc@?NM`{JJ7C=KU|u1L&&DiB zh9%}@ruA%f9f|^sDm##fh)M@@(a)|w)te22s9 zc-nqjX2y$np&#M1wFf;0d!q&i;nvTr$~qq1*v#;%fajcGqKnt6nI_Lb5!`) zh&l+A$A9*vFZ|lRdgIr=Sc&wYMPBa&8Gp~e;*uylSch3oQsB-f7NuR_8g=PUycWJ> z)Q7YR2a&J(rHl!}7CKPRH<*OD^oPMto8C+BPxqhVRo4^8ez6lKof3|gM+d2l=u$vt zB_*ShQ^xs>{M-W*GxEz`sI2@MHc80zrmTs|+G;os>~T6>d@j&Q%uvHn2KW=WZ*Pi& zRJ9ShG*46}DO34r;`$GlxN?>6tmbr)6_vyxO*7Y1HpspZHkAh`KL1Y1fLz~EXybwF zM3A>XyI{IJk2~mew2_~P&jyz3!}C21^C51XBybC-&nPme3+VEWBnY zUl0=G->+^vHtnoCqB~^ETX-P{{eCEcrh*S?9q8OP!j~WMMaRT1Y8~cJiWvDEJ)|`M z3)g-dnG-1BSc6GmVWm&o!!siwT>F8s%WS8;z&En!zT${s{(dhs*r=!oDI^(6$cSBWRGkM}s zhel53YpvJ=KK5_TPB#y`^uxs6If0ixCNXFQS{o1%eT_*30L)f|i&wqLlsKUO$tSlX8OLo@#d0B*tJemK9u+o)QvbI~g`@U2@lh>`g|U zW=9|%X}cdMrc-Ah3Q=p3p#DPAH$BldM7*8pQrIuHtcCav2Mv0uWU^IB~?E6XKyDmJijG2R7yP zj_a?=eJ2;ZOnl!dVbvr-v~1T)2mQMIPLlwZgMInr-2QsuDMWbdQFu0Xe%2%*%0S;C zBa?5zJ@^-e#M}?SzqH)l#gF&=P5!Z^vf506+)ciV_ZW`+6g|CD_NLsRDf-5o0IKXw z_j>lGgtgUT`-0DU>K<~n+G^<#l5^+GP;1u1cdeIUEiqlD0mF3|5IRVxrBS*mUZA!3A?X{U#1G~ zwyskJ7tY;^oNl$k%AjtKb#pbyBOJ$zQMFRKMG^k%GFswy3KLAvYa1a7Y{Dgs6c_7O zx(;*?ULBEmOxvl&sg&Kgs1^D2W+PPO<;XyXqOt zDodbcP7M!#@S2;^56C!kUnhDNDZOgE(__~q8ssHmi-qTA{p!u~6GfnKyGeqM^*}~I zuBkTZ|2RR?)47&5xuQv@Rh;Fl4|$d|t#^?d*wgMYQZj%0EMmNtqjLYdMM7#7lox*z z$qUw!tzq>!Xpta}Z9H`&YF?yIqSe&gh{oR^cLd0{$6ZEA%^g5ea|Zy|g9`b;$TdDd zMgt-^*lQseid+3yt4W z25(``F2vd8kV{L5DLkx~AxzH<5W&sGKw2B2wa*2lF9d@_ASon+ed&bjxfjt>T)N?U z2n>xSSm7#Oo4c_z$x=r|ZtW&N9<+YRS5*Bde(?*cD_$=?KQ0%G*RMC_e#v8=<}ZXJ z98_stpVT&!hK5MeJo0q)t+0bnx~g zZl!pl-BVRV!)gePT-{2FFukI}O7RQM;6r=i6h0tkHRsZ)IV=(ZYu;mpbr8TTr3spc zW+w?e4fx!)eNt007;)MCxJn-HtDPv`{xXI5W-A7f>+M5a?*9;V3__y91jjglPa8G ztvm{o^_FRQF*tr!b`2NRG5<_ceU#<({y7CAr-u|WW>F<9PzI*e4Tz8$G#x3dm*HYI z)M1x!Fn#IcfxHlkvEGxhp|v!olovc0r7f5tGeS1*vDn|9bjL-=YhVY$ylJ1|g2g9` zZq`z$ABN~4ehtjtkPJlj>OgVNYarI?qt@q?Sf-&^+mp^55_eoY-7#Iy@0j+=P%P%4SJAl@jFze16WTurIK&N6X( zq{iMlQGhcyg$hf>ErWK3G(d*4$N+$2$OH0J9DPcTqA@59xywq{-dKUmYu!o+nP_PZ zI?;DtXfryjY;Qllec(S(OP7GlUN4SKudqJ`E66Irw(_2sZAOPTE3r6{@I0Znq?$6!CtwZh52Js*Q3>d-MGB+|ZX^bc=Ixm1!WeZ)(ZJ z_pYhdymR*)6xZ;F>9k@KAnC9#DCv6PDW0eHL1>9mI^CJuI`N0;-eCb*Mil4jL1vx* zk6a=rLKQ(yvvy$SmO&jZJgD?o_S&-2ha`+^3zzx>J)B^V8L?>yBw}A-1k!I`(CV-J z^M|dqxn5~wf0f&)liaV%)tTD5#}ZD@;e zjb>w+e%HpQ}4RLiPM z5JD?o?M!Vb-|m_y=Gs-h?^fC$sU6VL%F)p|gM5_jAZ|n~tT5oK!?Wy9ohANFvJ}3N+d>y6aUxoPL6mK<)Kd9gK?7TqpJg2-jJ|8jui4d_V?gvM7wZ*2YaD*{2lH1!B|YcnWftXTpG^hzl$b&YF^I= z@!-elA!4~gHUpWJ^J$ZnW#)i9e}W(fbKwhpx4<`~_>1~`W6bx5)$~G2)SI>-P+Li@ z*`ovV{2Y0)0k3KZOSXIbeP}K+#>NZ6Gag)ExQ$1yb!1?HKz@n+(~}NHrCgNjs>jcl zNoJ)#X{XMTS?O1q*uX;)gNL_!2zj%9S0wSaNFoYBJ^->OJ{C(J;(D??Q_}!>;JDJM z#z5CTG98!P`l-NZDqgT96V-`Iu5~ng7FNV;{OGTz?Wov_PR5~cW{L{2AO?lNtFbGc z%}@E~=GIK>`a-kdT(557kZylKv`qQJ{`g6rwiA1`V znwfCyr!)DP{yt_By8(>5D{xuj;U&cqb)Kp3`!VC_3%}be!YU)FT%%Y&YIqq=n2E1K zT!^vZDw({ae4xHn?b1IkQdylPi=ji`SsnMzv-!mIb!o_9cRus>-xBA%Xwq%HP=jv&iA?ZoeeqmSR!YF- zLD|U3uv9p)G`zeDvG5OzVXg7lJ1qrE%ORssHkeg?APeqzdW&y22vGDo%eC2mAh-S! zU35r5*|)ILy_Of*(0*KD$=#eA&(}IqlpbH}@W^KkmC5g|pM%!X0o)RATSz|g!S|vL zyx&_<2Zdww77Wo_jN1$&&a2SruHw2F?xE-(?sBujUApG78KRv|Fu8^vC_cMRx#bDA zR6&aX7tmDDX?%laG!2686dg*qTwb|0_E3@~rJHaBvkG?T7WIgq2P59CvWa#g{62NG_=W+2>xJzzZ?zz0-x^lSpOsG{Pt(~B%?pc&9X z+xvA>BYeKY<>%=FF#8@?W^JdvsSznQ90zLO$h8~0xcz~FU|-Zi&ZrYHJ?j`$XLP~^ zz?T56dR9<^cMlV(utZU|$o}B=R!@x}JmU4kgydTc0F~`Kz{5h`FNQam5PJ2`j)<`J z*x+FJT?Iz-Cs^^4L2T%r3_?cpM)iQqsPk}7UNA>{yvcj5$>S)ypL<+}>c3~Ey5*3c-;qiq`{FL!I6`(Mlx|?Rn4H~yK zpp!!b(-jk;oYh#DF}D4xS3uj-+Hj&~y+9-&#lM~(sG+hUz^ROsy~(7V33c}IuWX`g zu1ca$&zF%heZZEsqC^rhzr5IqPY$a>w=-E5vZ)7>!frBB-a7M8e=Ad|jMsT7^REQ@ zfMSM)d+ucgbMR<*!Zc6BsBv*L9N;<3rO0WzYd$<=LcjxZAB}Ko@O@4 zWMv5=y)*ENMIG>HG~!V%maV1rWr$W8czF82&JAZ8#-f*i;cPxQZ~oKuuPWIK&o@`mW$U*?A{_?2%fcwuQ72NpyOKPCwFv_odUba1#}J zX)IHdq_5c8+)%j}+i5Sh(g2iJES5eh)qE)K2Bcg5nRs<8qjDo&$u-pzt)`Zy+w^8FmVlZ05Nm zp1~cD)iEa=al#QN7E;5*s+W+IjoPSTN@qGal~)S`XInk5;3mF2E@977_gn@ zoCU|o31m(c;3`X`yHK~d@5!CAL#ujh#bI?~>i_oU0{QPk0Q5uLJF*4JQO*z8i`0*C z--k_ZP5+)G#N33ZN3)oEqWM6bRH=DY+0>Enxv44Ci_ssK182Wgtk63_rVa6S=Bf?O zusoNxFNKo9wA+RGk}S5ZB|@7ChC2oxdN_7jc|Q$DD3SUqG`Bu<;V-Y2gteAhc>u+EHSc`O15M# zWulM#y*TDM5SL0z%X6P6;s4ps3)uK-D!l#^V1{}Au5qeq@I)MzO7Fy-@R~%y<8}eHyepI5wLQ^m zg*`8jKvxq|hY(?7ZLyME`^tBr2?a6 zlYV=lD&!~*YlY{M&Z~yp?`|@BrBom#?T7d*Pv>!&ad)&WEEaNdFFfkGqm(o8P~jWL?$1wb^6^68O(^sTw;B2tcyyDS8Ev9J8|1-d8`ogG9m zEFn|=-%O%A-WF63@4DqB9?M(J7i>IuPY%IXmQI!Ag+Yrh_QECJy1q~+SbR$}bhOt# zQ#&|jb(q?M$rz3dqrE;GYPt^sY)l5ATFJ5|`Ee3}AC?s!`4Z?5yLfQy&RcUE?|(`Y z6whAMw{)11o$9V1D2$=x)?YGaBWJ;ZIhT}MM%Y!A0t!W4?8W$d&L^QWNjM%#r-sr| z6`*nGCU;Rc&fd&Gc_!R>Eagul)9i3>*y*crNcoWRVC|oeNp@+pJ<7Sn4mbB7(&fLmKxp&N(u#l3J!Vg}Qv+M`N6v9~I&A$W zT}H_4tpX$QtD(lXF?QyRq!hq;m}|4B*EIS{u_7k|s4P43fGD25!_pVv!;G|1WVF+__@8lBvpi4rK zCa%b5hp9gve<5F+CvV6!obCr;B0HR~TpkdZ+I-sN>6BL^L1eV_0b2;OF!@PjXy-m`&r6jQPAZ+wqDTmoOL*&0-zxG_)|J@*TwZncT_mcncxY1yQaAkD$t7 zt9oDt=?W-yoJ%pf0uJzfnCMh0r0JEXmHQi&^YIw#~lS zFATqp!Jl6-g{v5<`bpn@Gxgv9w<95Ucx%mjr{TUC`6}k#Coh3K`ro}jORRg3;wBjZ zHYm|7-P!Q)4QLj>%Ohebjr${s1VsDp_NgI>=0M*R!|x!_Omtw8?cN#I50)l-PVj#Q z{sloUv;RI2{7#poPXvxrg!IKVvELO$INbM#q@^FfD?i>Fx+HQxm-SaB%eMoX+S>sK zrmH~mw755%=kXplgGDOtbdn`==pRH*MJjd*2hpihw0llD7lKuViobLEm3ubPa$~4B z`R7K)@q~V^MVH*o<=D5vk=8v1&!MM9zMv3_X$z%!GR-fanci)xc`>#}HuT@hr5rkD z6~#==g-Z!(r>%f2+{_8xH3tSJUcrb`6vu?zz`F`Py{oXoy9zza1l>0fk0E#(WY9^^ zP~a(ve+r>hf=fxK?sz{f*Mth&KXOpPh_*79q)jCgE(L0#$Q@NqYwrY^+b5uJKJc`Lsi;|tY{jQjBtnihMLfC66y!a50a0Ne-K4Aam}s$yi_IGCT+U$gAa)66!DDBUmZj@KS6_d`c$*!mn0?`LW9p>9XVXA9b64>=>hb$Tggg-r zlFU<-sFbECpzK>%X_d6HbXC){Qbg|R0l@Uk34(cbYPs#i)A1CG&$s7tLRIvGgS=bb9mR)0-EkIe4iI2QQfpz?<1Zi648Nj&_Oh z-7`$L_u`xsFWTU|)XBuFdNT21clJxUvtQ)ShI9TGi1Ycq6za4d1sB$>_&IKirpQ}= z7RYBnS0uEW5>f#My2JN%=9DtL7#|hK>@Hm%rSqnS$q_lXUbKB9bQ>TYT72ntbRk z@~Q`JzGOo@h}#^NCIrcdxPo$k8lWkc9*8ToQ!uW26XW=KaoGI$D8Pc%nvK>WE4RZt zyf7e2*`Ni^sWOVQWWUh$9AHi_1N#DND4_4aSnaOJ>8l}N_`o`XC9V9y?at3n*LTmdp+Jt4?uD&!yNY^tSL9^ltnX{O|r zngJqn`a#}pMZWS}9UfeIpG!uoChJ;Se#P$#O#nG42lcBV*^0Lfqsce|6po9(quN^J zP0Iir$Qdfi{4Sgx)f^V1II>3;9=O=?fs5q&&&0mjTK=40xY+Ua3RT9Snn$uY!sE&( zKj2wqkC?cXxQ*WFkqmVuboWnKkn4X0*Z)pWRP_8r#Q~7lYbMU zo4Ci`5y@F|q0cg*MUv7_MxKTRa*=7%a(7znPCN31mV#(NP)Vej?9pUL?ryUHy zX8EE%-rd+`;+kEA{2YYQV0xzg+ysyDQV*m~-p!piOMc^US9>LytEbQR>yMu)6ePdP zaFE!3y5ib)9S5ePv2%6riuO@W78J@g=L0GS3I~q#QhJM_%K*0>CEeCdRh6#d9_8KA z<(2pqmYK@xn30`gVn^;{5e2Y!C}$~vWADtTZ%BmTrGUNbIIgLaaZNkD6wvca0ed%4 z=|%F7Pt|s$t8GU-aPNNuT&Xg_H%p)A9(q3;+CHA|&*E>3Zw)8>W8G#h>=6T?Q=vV} zEl4dUG}mNGOqzZ!gJ`zD`NtpB;d^a}15@^~1Fa=#H5fW{|9AsmMlA2c$g%MwM#p31 zY$(BI(x<>#ANKlohcKZ3JN55hg9k%TnVWX6Z`Q}RUdB;x#>J_{LFJv=X%gE^uWWu^ zh1f$&qZ70*^x?4K<@Lyvm))jAnm_rP9QTpdAy{{R?Ufig2}<<$XFigelTM4#@TYlb%%j<6B0kdH%mf;^19FiW2h}hL zgxY^{1B~l1Q30!Pe2r^mq}Iw9z4I1~&tqY^Qw`7P^K8nFp9~;j{7mGJk()dkyD9$+ z57s8L=&PhDI3Tq2=LD!b#-0Ibj6ZJzNVkpjXEW6lLG0IfoZ7^(wdbP+}3J(*dUiU3A>;J=2pX9*b}Wf=w5 zRe??*p6{CeObLPrY(Jy($j)Cf^GbvYV|g~8hRb|wVwofJz)~Qu;~(Tj(fdF0%wUF; ztfhLX!aQc7bD)A+L}Qi)uJ;LGPCQ=N;)DM$=1sxjl#7c$KX5#A3FhL~c`#hdEk>}r zFq?t(;T!Ia{-WS{YTOE&Z+gPsXtLgT$1{ihq*#tljP3(3O7rbKBlOpWdpm2LTQDp$ zKr=)1-?Be;KBI%gJf(RiX4uk@pEwAWD1M>ck+^Yo(CBD)DQU(8AkIiw zP?=N5biA&l2$yJvU1PR_He-9jWpnNz87}0~XPNP2^^(B_4n+e*#mO(}ta5=f;DF{A z3NCob`b1SQ;+mI-usD}0y8_x|(#wnrnH=TQS}iJwL@A8BTM96SM?3`nE(I}Fy8A79TPZ<` zOiQ-K0=~bc#VZpLK$j*CSiep@wrxpxS%z(>^al!>n{8B(IT{FgX14TNXvB@t0bGv% zmexAcYGiuz4sg0{7I{UFkBYM7^P>llD=gJ$*%L|)@*C~>4GkwWBgs=1qK<_qdv5S$ zhDa+i#!(#dx(VI!Oy9!f@2-#@Ka_9{!%&)_6~sSQ5EV&Naz@Ubaz|xf>b{g^G0btn z@8tu{R(1LnEc4~ht%)i?jN%3?zbz6-3jerfkWf^-9& zdDDIRmc$0*zEZ}|@NN;rfZc|L9sc5OjVIG?J|+Fc-TaM@ByaMz=zd$N4nevNa9(>OBmX9C@i#ZD{qJCfq&Sr{Kjcve9)rmIk^aI}Hjg$i zj{>Qb2UbcXN;S2ijUo_vvTS%twdJ2%YHOP*?>w%Uhb||oOH|=s^$h{vs!SHQ=M7+C z&%mt_28X<iRZ~`DbE!iQd~r=IF>pS|TU0*(Pb&c>aXvNtQx~6ldvm zyFwony^-|0(E7gkyRh)K7krt<%r+y(oTV2LGeTw}EfBbAyIb;wSqRg$WdG+S(n1)2 zAPI$NFY65F&3|G9QE-ij3aS~xcKfc{&$adxJ9SXy{@o7ULJm(G!v^F#3O;GUrDxU+ zd7mK4bIrm*p<&BqQUt0PkASXZ4o7%l!bnXWGhyIf;0k9)9#pBotz{-k9$F4!k--j#e8z$Kz;?HOVl>YrM{~)sNW)P02Xj>I z;Y3ze@?#U(=D{|)jd#^i0H=cB!w`jdklE$VgyZF4&V7)b7qci63{hU0GAdH83Xe(l zY#QDnuXA7S^=ARSze(1xKOjxKE~czkR{`_rIEQTJK%c(CC> zf>+Nu{7xL`K3%9S(C6C%Bj$;#!;>{F3R!Bzt6`7OD}>gG56SoXlC*xL^T(rI;Se*O zJ-+yY0bQ8gU!*|79jL_m*K44OBmBZL#xJ;n;%DFGqfw?neM$z!pCIuKT*-cZHCsna zP1iPs+vEwC7z0RLVto3maxKv}e9Q59ks9oYC+W`%KIoI__^QwIA`j7?Dfl}QTcov; zLJW`|#V5E=PhvK$pVE_Au8Tjx2bs!CeQAZg=Lf6>Bkv$zm|UV8Jazm?HoELY6H*pv zqEV(I7KXSYGRr*8HX%FXp5(jGpG5y7E$JsXn|yP?(e&iehG8C&>tp^|I`^{(rJ4Se zkrIJy6J_`ydvN3w4nm;V30pJepRu-livOHR(&bA1oUyby{Val`!`^ChOxt&h4CY(zx-Tua~DZ`NXFdZv>p+SxWDp6Nw(Wh_Y{CnGqXCG3_ z6CdPpQrb@y(wAIk^L7iC%_p8ZWsoamDSKtlCIxWe0@_Sym{Ry6&pr4vvsAt-ENSsY z*#zMyWuFUAa#fI3i$g+{wJjiwF36P3p3jw3E@(!t2Mn(J*RX1vvZsI2nk`oB4J+T$&$L3q z^AVmZf>i`vuIUG8urt*gQq>H}0-Pn*y}`=Kx5>kES+UK48eLH9wWRWG)Afk3;haCy z@o+N$3>|TvFyeWE3GUm0G=h~b$%AZ}Dmnw_08jECJ?$G^W7mn>RWdL>t;H#4Wr@=C zAK1zA9k725v)DYO!0aZyQxZ22Ps}j* z#0-N;iv8pcBAZv}^AtJ$RKnoG+47iwU-R$gDX;Y(v<^P$($Bqx-(TtXl8Y*oHHH0u z6pFc|BBk#v{$Akamd9Lzf|pEo$BfG}A|YH%@|gVgbMsXYCf!;(el^h6^0PsB7BWwp z@S8H!Cvg&=e#b3PAum*}=!(n-9QwhzfKSYmN|4)M4|r1R1a0`xt3kHA;cgAw?&2n% zMfTVlM<&B9o@Bl2qQA`rZ|YlM#!tN1ZKc&our5GLGvVSZl><0NZe*S4F>SU^6UM}? z)GRSWgLOnh{7KQ59zFTYX<0vsQcLo*q^wT3ID`eTJc~VnyIpl7(xE|_5u*cs_`rmH25Rs71Bl4S3bJPsMlTgO(fUL_vt@cBUIsQ(d>vv{axM|-5 zzc#l>Q4%;RaGx5+t$#scJw}zKFb@SNB<9a5So>8jtwnOsAkhi#5!=ujhHS#~a9|E8 zE|2($asSFDoh89c4!1SFya9?wA2jegzj zEYRbA11wiFOSS#qQX?*3SyP$DpH46Msh<`xVO*9`(>4-h<7=2jyvlo-01)DJAQqC* zkV>a0JuGh-Xo6SZqJ>2wV>+&0ta;^*Zfc&4PVs<818g`L;Moi{JPdJ4A<#0ha)MqP zk;o!`e=V!(B5==lIPUYc*+hQx0zQ?;6t}|&HlM%=+O5Qm?#v4Zkj-@KhM15&tdq-9 z_q-cIWy3yU#DozB`=v)&x%6VRdKmAlgyjvn6NN%~=_wW3iJ6)TW`fFQ*$0z-^0E(x z8e0gH?naroy{W8WOQCYTP-WSCrluPTVK`w9#ys8*EJ5=TW8Z)F7xv&w0_2+S+U#}le zM&S~K?gHC^VV%s#^8fr3#nS*MZ6lold8$}+3=DFu4xtlgHZi&C&|JztgPEE);f4HE zLYHagO_Anfi9Xp2?Tcf&YSGw_tLx~Wx;DB9`5^WQ+f++p%#~=(<|+_Z=uaZc3I-Mm zB#OiVxV4LUj)YDe2ktN|d+lv5-&HI5-oBuGQCT!QD{0#v{pp|zQX?Dt1eVBBO zoOI)4X2RkAe4LcYgc8AOcBF1iih~pJa2dLuHnodLIp-m~(H85;xITskrmYR`r7)&O z%-T^cEcU-z+5it_HB=YQ1YI&LA{+NyRxglDQIL9&3k>3L4f;?>L(p&g}Z z2MkWqGvS;nYfycgcah+#6j;G+8*_V3VQLAq$b*I`{o=ggpbr}ZP7x@8x!KrRwZttI zZOa!gDUSJdDlB=%AK0WS%RwE+YKgl@Tf%>kvp;OjwV=% zbdF?Op_l1?>l^OnHJniugi$^Ku@$`eX9Sqv*XWCbbE(V!_C`EPFBVYnbpLNREP4;z z4Q&mTvB?R(H8U@dTa*<6V$UcvVPk!~NsYX%ZL>HvX}9<|R5&1TsFSwU90R$|!=?I_ zN$2oOlmM`6%g3y>KYd-sc=OQ)%G(>ho#SR0ooU;8$VI2w=)VZ!@vkRry=e)IhV8cA z2dnqfTYR+c+?3&#`t5RM`)1on1KD0nm20}L*=QLK)_jMimtzI#P}#cXKG?nn2|?4v z_}DA+yI1pjpVw*Cb99bbK84`jhYMS<_jsf$%6kmnNithCg--4L3{xQw#be#%e$|9j zNFiu3uTUSnl&?{3hNby}MW+H=IEa_7n6~K}3%yMK&MvNJvafA3mB4j@jVrn=cGjr5 z5X~nl>R)iawyLGFadORS{zS+ACR?@9?m0u6GFuMRV0A5UaN9Od;;6|()Lxn!eI5>~ zZVB*akeIu%eSd_NQ=sz%P&@&Wq)AKzN%=5N29|ou$c--Ze zx;@mC!LHn;;B$hGt+WFUnUf`%2e?NqkUTKFiZn{B__y`}So6BX{M z=EUcjT>~#V?IQ{*>#NjmE9>m^yk`NJ8bBBd8%wkN9849HsD-;~>chtv ztkK3$#J148h6QwsR-cg56IN|Tz!hoV23_1Bb;zb>6?mN54Gu;kAm(Q--C~KBTaMN$ zfyG&?CpOXDx)|=QJ)eP;$7=0+Z3ydo`b`+$elel5Py6p%>!kmJcjoWWlSd7*CU_44JkE~Yy-l$Aoz)aWX^`ivWJUmvi{t%_M6fNQ0Rf3h5v z>CmCavlIT#j`lXNKy~Wq;9sv#4g!iif#E6PDT6$2WE#5y>8$k1|sUVe?2L;u3Ne4=3CUfy2|7z z%S6{PId^(smK2rS>G6d@6_>FP0P^HfWHtj%@?p3PO7=qTJs9Q_X5ZsP@7h|$c|-@J z1VS{1H;b_nVH9@5q&NV5UuxBtek?!I$!(Sp;5j>RBpn%cG&_Ti6~4+18(qJxK$>F} zsE)0T@o{-Qn8a6G<9O>DHhL}`Zxn%z;A-atTyzl)i#Qq;`=Xnge=wK2|H{30Pd0a& z3c<^AF92RbKt!jZQ93vV>`^5A0ln}NFlE6nptV*Vma|?i^*YxF9<_U{TuTTl0~NZN z8#jw)sl{snBCBFJF81_++OVXg)}?-rnpe2Y6Okre441nzk7p({5XQ6ZJ%Y081dRQw1hLd~keD%#S2DovGFKdO1+#%<7o`QWtr@MV0-0Owiz4z@wd`#aL51s(k3PQ}p zr8MOn18+s;0w&qksp)@&3{9n}=}u3Ep$AXQ#e<|eYe)bO%+mCgY8I%X#t$rJV?+^9 zKaT&<*%?z3o%tPl9|r_b$Q2_qsqL(QnZAK-=KEE&pzL#7+--pXodI@R`$F9^~t~zktD4xV_K! zzk2i~9OQOm?xZYH!lTho(D*zzCe>rH_wOg_vkX7)r(qIauQG`Ztqf!_nQ!sJaF}kz1DDXM)$W zCO;OJU=LiZo9XZ2^4n0fPBj= zo4!;cqA$uta$?BWFHqq0A4sv4dQ3|Nw1u=0NpyPRUQgKXi6VdGrgE4L`<2g}lLb2i zi0jBGQByCy!Y3-Oni(PYhOsenLwEwXrWm4Fs+r`mNeEk$?8%GOOE!C!|8!?5)&{_<;9^4|2bW1D0m(Mb4P$g z_dN_Xm&Bn4I{;Ncs=vYZ4YYLk*mH{)PE$8xBu-NvA@$h1(q~J&!;tmb@@O{Jt;-n# zN>9~z?CafVq67)~S!qq?TNZc*6amtj8`ceWLC-(YYe##?6Nhz0T=NG-dff&9rUD0+ zeT>Z7^3UeY?;IVKxl@mC8Z0#UJHBcIO|UZi%2RB?dh#DK_s{6zh2!B`Dd)$Yduo{n!FSI57WcE!;pLG8LtEh>(he< z$R6;o&jD}p94Y|u97==v9Lj&CLL%ZxxkNd<8TsnLJo;yLbOinjnJ@CVQO=6U4!%hJ zk8*`jn8&{ncSGXv`XArce*SrLS^M9zt}51H0Wb5v^^=6G8yQtmLfQggg)3wzYg-R< z6yk>B=IY^Y=ZBPX=3gII=J1_NI&;EVBvLdp4)VIKmc%gtz0wxtsn{iHu>3ph+@8C% z3HQ-I5S6o*@NQa(ovvrO7#q$lP)23s>tQK}UzU&qL8%-{qQ8)4!~e~hqefIixecaU zSK6bF{*a=Vd)3j9|8|U5a!PB=dRM6uQf!3G_%WKBk@@3FY2o=qn{gX8N|v#4i{*%o zhN-1c+YeXA)IOd_x(wTIggGBPOyqvu=~DDAg7(MvX{|oz(>SOq!AN>%M}j(P8%)Dd z?JGy#SNi)P>UM3Y$YNC(Ss2po2vts(J7u)YxN;-poEuk1cUsr;-nsmqlU3BU--+X7 zmk(Z;M!q9CLK1Ng_;jaxv@3Wp&sYXHUme{_aUo+oSDhuo)**#2`=ye%B+XTf8cX6f zq03#&$q6&_n&`HL%)FD&W7}Zbt*KPKoDI#wHTmqKb!b881Xfe>zg7ltYFa*>#;A3dT_G#i%vQm9U&}EPK5Epm36rHyUmNDvjgZYBu4GJk8>b-3!#D@RD?C!c;d~|o%A5D8 z2*~tu0(eDE7+jJM=ubt7oHB0!zpl#rZXE08oJuR*GO+oBm&)Wfz02h{!G-@b891EK zOzm)&%R)jt%j1F`v@Vd7_0*^Fc!pE6PVMdnOS7a+Zz>8~;EhLpG8YI)l%pm_$RRt8op!)0yQ6b|0ARoaB-E8Q1z z#f0K=sJ}(KJbY5=3Vr}^_W>>2g1L&*b7EQkhR834hT zUpE4V7aN5k`X8s|DD(aXOJGzMxJqo=WMhRqVH0~{Ci25f<9Z+DMtpr=RE5uVN5w>4 z$UpPV$O)XUC!Lpx6Hxe0sa;CZ#y?UtINq5?)_s-Cjt&}X;C&+cM)G_zAE)4?Ogy>f zKw#TS_Qb@mHcgaJ9Kst)-A<5|mD_w{jz#zYAjaoW2z7Z^kS$iUrp2EGzH1He% zi+xgQaMB}CP{>LHBKyBycq1r1FPu4mMES6s*sIgT^!o+#qeQO{0zms7%mL|8J?OLs zud?d$7ItoagXgHz#G9>B^amlwsL;I0oW*18iPmgc|{UZWfqwhI(V5NOk`TteH(1AjNv7ut_|y1u65a+Kfh7}vYbJ#=~+E8 zxIakZM@d^3(nm7HY2tX)Nrj_M>v~0m-~V1S)sbxmlX~5+6%i~Svz)A@+FN5;d~aYA z-+Df$p3cZ6z--6n7%lKWXF*%u8%y}cmj2~M@iwSzzLrDBBO-Qv=MQv7=_2ny%Ym8Z8z*U z^g-RZUpqf0FvZt5VBNj54RIGDa&IP0ZAuoa>24ZG|M=&GtU1c_0BqcdJ3Q1i-Ia9# zPUX8Y8}8Hrz0SrYCSiaOyv`j4T@Cr>_U0)f?UeYUUaD5pyG9fTZdfq9}Bb*yT zs7L*}4&D3`(|e(ZW5b#9n5oy5a{r`D)Tb-dWgO-1JW)A;rzfjz>k<>ss-3Gxx3$vp zLg5j#OcW3;5eaMSl_zu_f<@(HN(Gn2^TcqXm|WygJA_#lu{d=M6d#j5ZLgX zz)F=*nQ+O2w6d4Q6>Wb&YyHLOy%V)n2hF9x-XbQP5Prd{oSv@bgL0*N&{snlLb3#W zorff|!2Vd{uc~AvB(qT9l_)vZFNrv`*-#nC?Q}B9Y&R!bEhrI+LTT_Gjp!j>rdirS zn@p{?mfC@wqf1OxJ{E*7Mvm~%X`%7cqXVJ&VNmK#m2^EG6O72pZf?*Kg@Ie;0rYsA z->9e1J)EzqpI8}ZeSm60w_y)9NMsOo(}u|m7N5PkRuZg5E$hOfIre{??QJ>ZVE*Jp z4RTEMBo^aZzvj3YzA~6)nBP2D)TH`wLvqn~3}HIGy+4VW*qUUYX7y(rF z5zu0GdXPHYytqTNJw_eH0aTvHL{bW9VECuQO0*}unz6BgTx+{UG`V-oIh6}d) z58k2+3>{fv0Q?08d78NxzI`b;bX}D-f5o0&H=fN`FgdRq&)};Z!t171+iRS1t;DcV zbd9qYW{n5(1WdPdWyIQY-TCk(MrDEFN9%STE(%)4$lHbAo`~c!iG8wb$_pAWdA}n= z{ge@tba^s`0VG%gs zn}4L3w{rhdHljaeGb6-uFq8}bY)5u@6kJ7orRUirOr;=J9i7@Xy@OTcNm=-v$`N~Z zn2+I>Zfb7361^DAF1H~a8$C+MCe}<@$l8KY)_n${itp5Z4J@>7<-J4%2sv6O)|4GR zaeiQGL!+6r-teq1!)|hg?pEuJo*toHDXH>8=r`TSaM>ZdJ9Z;P_SrLD(Sb{$+txcz zl90u&WI{ebyjAIvzqib{UAg~g=xb$Q36*Yw<S}EDgdsW% z0jJaIX7Hb!%!7Qm<->{xw)$mJFXy+l!-(8GdE_48$|!_tz&Jed>!;Goac}^?=|TXP zF}`X&e;!6`-rz#qKtZzQtlS6#Z!y^eJFH4TqaYU{rI+=Vcy+uC z`E9DX+izsv4Yz%2cmwI%a|5C`Hy-gT`{P#@zfc>$Hx(80Aby7#Z7bjL z{79eu)I>cy!k70SIT)_I<7eyk<5yBk#BY9PBWzx^QUq0KFa9D`MGxC}S${&uy3e3u z9s>oIEHaAv9z6u2686qP{uG~C`ipnJp$I=&zvRqt>qAeDaEawRrX0?5mWnGG8)#AqdYBB(c-BH-`NKfoU_b|&wbb!%=3=zsLM=Z3S19+F@wiMRaqK`{J z(efi@z#psSC=@@_$gr#mN&U?xVi`Vsug*Y#sN|WhVtR-YE0z9ZQ4e7+JdS#5=xL#C z+$YuYaami2?+RJ$7E}{t>S- z;Y@o31X}FZeV8`Vu2pf$d(m-F2}KA6=C#?Gpwq9o6D4uu9_=F6^fPlhW?pf7gAN3#!<|J|qo zf8>lp0>s0(%V>q&{9n$Ycb_CfI}xA30Tuj~7dZY(U$7>xd{T6J`iOZ{`>0ZvTEgFa zCk7;b`I`^eZ*J01|O6v z?n)cpVM5$hJmwu^U}{lN1fgWY0aHyT?4fX9@%u#P#FJT_Jj_?MysrXKHVMtC$1v$w zrbkqxLe$6z@1zAT4t9FdsjP^yEWP}ZzZAc7!oT3i-$*HVd2g$VlzY|Pt}h*S^wQ?~ zs}g$mQXBA>V$Vx5=EbYr3;JJKeqQzE=fxJ#OSDzcvPHVWR`>Cj?x=dQto=U^x1(~`uiMQKD&!969J?0~@T)^tD%g|F(!Y109 zFEy3VdcSx!V{BW#c?ThF2WH)CnDS=D)?B2zkFCK|(XH_*!!)RkQ@=cnbs~QYy^2Gw z+_vj~@{DVPwCXWGa4BKbd>S)RrK{QMNozKpNd}Q+j&Ag*AU;C6K}h~7Vqvo&>smw* zn}if8-&o^sO5bnbQ4zN;!&nXlPPBZ-Cp~@mgsodmO_eBsi!eXW(Unm?k9O3$&^`_}Ozc`5IPFpxa%H$2?=>9DiK zd9q!Inn&^ihdwb8syy^L5K1+SS~*^3aq3$Z(SHn&K zPOWIv1*};wYXn!t|KB*oQj_{mu-(4pQ&~F>V6}2CkF{aWDt3^XQ4zr;xbzLHw+p-* z=@IfsI?kLDx+ifw%ahZ&O!WS%Sw>c02kcAlJP$C>eJgsVl)mFct zba@qq(TfKs%4ty<=*;54&Ga;@ht1Mcv|R?acBC)eleOkfk!q7b)pT9Lq2vyJJ$*OX zff<8dzk$r!2d_eVK)oJ`7`WXwZh?6e$rP{F$J-eTVc#A=Hufbw(hFv`zeU}=0fwkp z1dn><7*Yyb=mN*&m@!dUaK@_*DxK zkY_~}5he#+SC5rfrnR2ZYekV%P;4-V(bx(=vr1;5@&Ln@L8!>m!UPG{gw^XLLig-E znJo}DSx4ywxva`!Mf$dD-fzhL{c_Qa^Sb_m%Uh)+EJrgAM0U5s|&P**Ycfm%LP9E4Aq&7?l5IU_drO0Ng1u7g#2z_AKC-EwjORbp}%nqa7EC~da z;4$xpak86X!^+=6b%p9GUrTbWoziwd7gl6uDd1K4JhS1-rovSe+%d5OqS}sxi;%Dz z=_=jt%FAs4<9>E;`g?+T8Hk07sP};DS?kGCTTnY)U?oqguJ9D5SLe_8xEbjdBH^6o zWNt3@?11vL@8SeV=%N8S?M3LM7opS5E2Pz_4NnXw3y)^W9Ngafqm*)&x;hIKtJL&P zpJ21GN^x~Mt?q%-f`dY1^qNNREpDAMIRD|858RZ0J+@+4)Rs6x!0tS8^1V(CJ!7(8 z`~mM<^%rGRoxZ7z8-D}#LHtf{lHPn+HcjW3Q)N)gXUNUB{gIt`-w;*%yRM49ty)FK zyRk60jty4B3vRrv>|?jeq+tWJ1BJFugEGp}O;nsRm=z=|(El(8_KAC2pj_`enffNV zUjG9BSKC(_=gmAzzKm|wvrBe!Yp#kOj-LeNuC;JTH*hZ?n#Cy(bD5#L!Hl|Z)%i}G z54ey;5IMi|ivqy;!qAFb3vTx2O1_Ccy*D6@1ePgL!hoL-=Y7gT)LxD1P09n=LpcqV zBOd)O`Nd2LFNeodt8b-xL{lvVeWn9su+zB0+d(_ZithmWwkVfv0Yc3SAJpZV1!%2d zc#}GOQE);qy1s%dH=`~rl^{Kwyl8{_s0W#Xgd!bQjp4H16yN*wfXYqw->@hZ%2XfR zNgxI%gS)diQC!!U{P_5!CNYa3f2~Uu;(fQP922@myU{h;10eOcfRNcYRE}yhE`uOX zKt6}$Q~?23Ik3#YqD_W>yPh2J+8W6ypSGhw=#5c~_LfC(CaIWz373q@;V2)A4%4%8 zZad+mKQKRoWcuNB7Y9-h%Y=3!!mUuX76h&>&E=wecJYQv)`c*ARR$S}-w0}}wTtmx z;A*VQ(5&vng2kVU6U2stNkY4zMFyXR&yAwjFtjEQw^vY=+VwRocbQZm_anrpTA}FJO657C!Zy^Bzt;8c={J<~bJa&V zuuIH9Wf{P7X)kIc6@zqPt#S=7XU#VT=lf?dW?l&bNaQfzmhdU@#@n?d`s!KpZ+kqH6ZVyG=$+}br3h^ zY5zt1a?O0~7%%KmD<7aCT@=~zX+J&K4(ISTGwnJ}8}ZGmS# zRsqyLlw7l1Jp=M>BO$S(2hUAaq)vEd=M*Cg`6}>PCDLJ|fr<9_!j+5_CO4sKtMdnouY1aKsnY$ySL>coUECDP~}_ zwaDB9P>U=bt-3Uw;bFLwBeW<2eHt;+NyPZWdGxsRyAI)8`w#6j$6dFp>7`QIZ?}cmpztX$lWp-b!e%p(f!9mmq{5jI2NWd7I1b)PoSnEq$^J=bx`TkppPG>>=3*c z*bh9@DKmHcjS{^2XN9c z_H*zGLZJPOSG2@g_C2!_+GXL1`6&}S34Sph8*N1g| zZtrT%+2|gas z;q{RA9_Mb1B^Rk#Cw8g@z_kE48YTcTZ&y~MaM-Ytdse7u6(aTK zy6}hl!dvrtvC8y+<(2zwQ=Xx=kUr_d%_x1G^=`p9zQ+s3&^E|N2n(S2h)+b#y-w-& z51=~A@@#Gez2?dm-`9>G7eUs?x#5(lEMJ>8snDQ0j}$7ckkrM&6wf<@wA8`14 zF{`kCPmt;nUNAW@%91`HvJ7qB9RQdjR!5Foir%(5yjww3I|`+8v88BaYbv+U?P)!c$U;$;GDt#Eq9Dp>m_VG; z@Id;FDGqj`E_O#2hy}I`S$Dnqo+#(NG%G!l zdQg3pBQ8tX&ksW}%i2erc2{S62DV zs5L3@q|~TRkSPIy)82#%LN|{Uu&dm(uN1_RmkJV+cfuBZc_{(OP;!;fB&X-PzIlNI ze$bU)BpzX6ZOU8c$Xn+jmC8aP#8$8LGH0)Y;EB5?KJBSH|bos(bsvAZ+2B{Q&BL^!w3G zBG@K&kbc)gbZ5c%RN)PR|NECwhL1n!|I(Uozo4Ir7d9G`sH=`~9x$_j|>D*9EO=D#!N7 z`5bU6{#77RBi)U1CEUrAa90+pe5-o9E4%KFV)_^^Y!Zdc#A88l5f3Ut2cb|1$~Te4 zsmgaH4i^{HZ+ONgLr(WQsHyLva`s~X!}$Gg%-9RX$-KRvoVQOFnx_z#X9IV8^1V8F zzV@U`b#)M4SHW9Cg}2XN-CTN3>t02P`TU$$`5I<%O3yL&J2UZlXqwt3yr3k?2J5K; zoFTmVX)!COI2TC?Co}XNl5o6)AOVnaXCpRkB%cFSXHl;m+YziLaq3h1Z~M zl9zTfsk1XUH+#W}ey0DGXZkNXbN-wA1gFlg%Hs1<%MZ?(#8!(l!IpVon`RuC*u-ZU zML%uR542YZz`j@BJdfSpVd;FwHpt^}{2}Wdo7Y|`E4Uh8Vq#eANh%9_G1nk7K-LOE zHh9}BfDIb*Y$}kaZeW}(#6@x7Yt z@hGBmX*TBB7`u!WGv5+Q@Q$to=OYfE*l*F_^9Ga7md+CLoVLHBa?Up!@}dc{ z-h$ZtS_JJtEL_J-RY5z4wN_Zpf{<}s4osuVI=$Q`b zzV!*6MFA-Y(SAdT?k)O{~~iHQae$_Z|BuqsG0S-BSMC(AxJtM;8%D;lL{hMkoo z-Dk8T%XKE8hytZmlfe}tJx)URKGh3j_`aAO`H2O~7h3G76@Ko{gipeT4NgumTc*II z=BJwY{H`f(l`LDqFS39wAAMRJ{z*Ntnx0VOTNB6rZ6BpmE;i;FUt98pr>(GEj|GTc z;XL~`>ivs!Foq$P-3MRV_j#K57pPn1V>yy5yyN~|66eZ^gi)5cwHRf2pyckT)CQUY z^3oSf)~)~B55?4KoqsNjBH}p$YjT*OB#|5I185kDYyP=W{Vt?SzuUvIXGuSLbiNA~ z|LtUH{*(XnH(Q1IFdt70&-Vl>JUd}Z*Ytnr65)x{oXzDSTWwRRSX9{=Enlx*(%TvU zi`c3V;6R5@qi2u|$n!9IfDCZ5SF8Y`GG(JG3)O;!`kf&{xmfc?=G0KSLRx(C|Jq!P z`TqqH&yETbPmWIHpw@$kl-p>_&uAi3lw?V>-g06^3qh9$o%Oin=O+no40}me^kv0b`+!E55i(%~hjbtudn6%JT{vai!7-ub7gsHuQhD+P?hzD7 z_5`#9X8lCyqO6>HY~9kim4{q+mdk*-5<5IlO&1A8?r&YA)R{{O2Bp2_^o#EaiK^lN zzNw$9))O}1W*(YD+0_{|pEltFjPl?&{LFC3>y$ov*FF3SI(i$-rOv$@c$qV{E))?A zOPJ%wJ~>YAL?|5-b44%*t=m@iE@iCyFUH7=4<75r+dvoZeEA(SL+eeASYSh4G^AkQ z^G6XxFCSSqTx%2hD(F7~bfY~$w06+kh3%YMhjws-F2_Hx+=l%M?5z3OV5Nq(X6g8; zmoPy7U+3DXoCfa9kH|XSCDq)}s^T{Fx&x!JaQ15ku#9x^(pAAgF)KR!OcA_4702I! z?}qh`{eo}KEU(@OsB~~0K79DBez9OicKBk+Ivc+^W;AwOesqf=Ey#v_`+BEuzewK( zXkC$gRnpU?FX~ems3PYH2Sawpd*hfa%F47e^FpBOnlF><70vSK+1 zU+X#&(ZA3sf&)&_x5k9?FbLU?QX{vX-nVfGdqmU~cSwt8nBd={1&>Y$Xo8#hFv)f+O&;^6J zx19OM@?@SUPv+l9b2M~OAmrvWwP7k$TWjM)URY;%viWMnB%`<(xu-a2suy^a=`HSN zs_=ntI0PWLcs2I?U-0#&&)g56$+xESH|WQ$R+h}A5x;$zk6+3>`T2|X=TGuFm_M?= z_(;0z(ud@-`|xF%E$63l+f(C-kQ)#G+&4%qK)&r@31rHw*xaXeVXJ2Z8`Co{ndA> zi*G&?Ew$x~rC~H(KJgf%I?oa79`zg0#$zPZZm--EfzDi|xfDT*1Q>1#Bb2Pbdfe;% zdo07!P$^!^czRFQ#WdfllwCDvMbUk5Au`g|(^Wgdaic7v(v$$=)~GR%+^2vRJr9Ql zwPzpSMG#yW8n{>iAZ*J3$DSXNYRIA0m4N~d9{{7+b7sQeYIK9b1D^!jKaUt@oli3w zlFpwX-K$<^?l~|&NZ?TE*Qpn&!4>HU_65Lb_vdi_K8B9TAr?3<#=X`NVw9e=BGDiX zwA;bE&S3WxU6-jc9x|+i<`unT0247^{1!5a7^km#e@yyB$- z53qGaVN)fKrK{$YbW?K~sk9KCk(oLT6$G$d@3(2Q?e|@}l15abRv%nbR_cnd@mJ=y zyp--%+BTk>=WI={I|OchM;i#Ex7@~#3Ast|9z!$i#e z26_y-f(82}e89FE;srC$hb|1;NFruDKa2`>%2>~jl_ystRqqBVQV5~|#S2WY5b1l#OBHjjFx;aKef<;|<(?YTWoky&Lu^XOge z#}j(*xj##z=A2DAUz@)$?d)D_#9yp@9qYxdcx~)JTJ@rI!rGoMQ6BJjo#HON@v1uQ z63ry@<`ddO$!snMao_^W@H*IBr6(P1A%F7N{OF3|6JGGe{K6TdPigUt*8Q~oRtI`` zoafkc?_}4N;Z(7koKX(?%I#36cDYX5*LtJt)K*vTOFTr9Kkp}gv!VDu>?qWh!qKKe z?JBDM{&{2Zvz`BIL;pv^8m!f7RRdpjKy%gcJ7#3;Ic-~kW#xFs0~{SDo;3sBk#s6$ zgG$)o9J{31ob><>yv@%Sbhxsf*f&rD@+Afr?>YQsAWJzh@K;lFWHy39n}u5i#R*m-TK5ZFBU=BQ zGmkD3?Q*iO;@J5h$T}Zs-e&R$-=(JRE&SZ(pUs=!!EfOybXYjY=y7<-(pUD(3sSyxM0bUPcSi&D)Ij-e+X2!wIId$hC@?b8c9(|O3MSaT zv_#6xSdf29`Ta?s$eM6e%4pogh=v#`Kc91<8@5pFzK*3$O3Rubf-Llnz7>N8GEc&e z5B;v39>CM(eb`3^(5=`V-s#h|;0?eP&Tp}pg<(=5z#F834_KMpwr7l!>^vaL!0Zl7 zyLlE@n!v-g!8N@)>-h5E4o@%2as}cgS(?jwDV8$FBn_JL7Y)*Vd%hnF{O*;1CY35< z&UT+FQ@#VV=G%ecS??TE;gMG=2VXhZEjGZG-#@m%QSDiMIF!5cdr!+w)+KJC+2U|L zr2!N}cgG^r9gY1(>Oh8%?XUN=JD$Yf^UvsKy-U4+H{?9MqwDnU9|%Ot<(|XTM*!J( zsN7?Z`~C%rTa+6!Fh!cP_id%1(|ZiXmZ7ExYKLUZ5f?Tlsiucya{8?w7CzW`r~~uI zI9ObM!f{Ssd>$w*MN-f=lO{zPsK=AUY=F1Fk*$T9-whLrBKmIT3Ng>V@5@t>OFzHK ze>aL*^o>`P&%p%;&6UAYN z%tNpf{vLj4=Uf{knY+tFrgxaaRr!{0Zi{%x_W%qN$F`(YNpo!WfUgGmZ(e%qEx+<7 z(|QkneyDjD8ZE-o0!|Ni0hSRzq4pD0hM=8r_J>vQ*`zu?cvHA2a<302j_6V!h{Bs1 zJJ0jIKLVs1BRvJ*l`dc=MV{Jm8lOX{XfMdk&q33~zl8{yyH2v?>&;=(jVbHecDtjtfH%7+vAJg@%6KQ3erQNWxm1nk3 zn(#~cebb*6q9tM$jb;7t-TH1KfF%9_N6SH5nt@V7ojd`NT;C4Zx=|d@nY6W7U?;#m zs}S(rAHWV(K-gJ}Sce1hVanmtbWePm?ui}96Xwkne3L8d$&(uV(NEWK+?-$Qx=dEl zJ@RA9{TTOhLIxiOLytWqEZ-1-jL9KW%gGTh-0-gk63hGdCQqjsD7ynh4=#I5=>3`G z=<%1%3|=kQC{*vO&fb?9@QCAeF3_X=aB}NibtU*Sn-U87`j9K^#d;SkWePyyZul&p;A4|QScR7R2q5ZCNjuUYD~{zRnY;gWvcyzSoO0K_(P1Xq_sP zXTs_z)qg5yAymETgu({_(j<&>CEMjH@pyrq0wwdo%P7DRK^1oG$gZzL(?`r{v-u5( z390NNz=-+z#j2&OBw{LF8o75mgFk$kVs~|E+Gf@WnW6uL*mszuat_prl6C5tw%CXs zu{~?$K%NK>d(=>wQAbDGOAl^c9A(K&lh8*g#36QN6G)eD=M|~d#E?#X7 z%?`zNd2Mft!oT?2*SYapBf(AaO_{o*&+V0Kn4kcj59Ey zt^ndjE7YCBsm6Hlgwa$7ZmkT>{l7Kqx37k0+n3zu9(0~&On+9$iD-CoeMwiDr@LN# z?hTecBUJ5!DE_Cfhi&0e`AUwU%%rak97z$i;Wqg|8GPs_!NN^z2L&2doL?A?a6rIc znjlSax1Er#g7NkJ>kFt>6*@%^)Vj_Z<(0^sA@vCkw0a%n0drUc9T}e?m@;hWKGnerLQa2gv3zOrsjSLaOv6pLGT0|K0s6He zacNYyR@om)WnRh=h#yUx6I2<=3C8iTf2zuwFl*JMd2)UKHx|?jr6Tu=Q9end`~c1C z;%cZlEaWaD=cWeKu$t})NTtCJbdAe1aBzn31A#dsV+(Aqv1CS;%(pM2#OH+F;&D!a zKDB6L!#>WwP?<(agKX-1a%(1fV zJrT9hSa38JS8a+D?bupE$XuEyU5}?WD}QNy`T&ZGIHL02I$kS7NgYhkty}A$vj03l z)s~CaXdM&~*dS)~iCF}_UJ9J8$ICu|%>ZsoDId94O^p=iVK;hsQS&7hcgrNh?)`m!I;(Xc=P1 zni2uu_leTxnc=4|JPu!SPq-JIeV)jg@8rc+0mbhps|5hH-K=c<{?P*ac{l7azX8=c zzg9cHS9-rzde7dMwQMOKzi5%R2@^g|Q}RN=?l+$wjmKb%IngdXGJ$t zl>@H$kiZiatZ`r}c!2o&kZp<1M-il(2W)evUsB+vCv zg!Y)~Me2YlGiJ)GCm}0iq}9>X@FFyE^o|E<6*AS7$aE&2tRgSH0{#l;C;$IN-0sy8 zyBC1&ZkaQaX|7Bb8F5a4c5H)0mz^-K&Q zG%X|97oUoSk*rNI)9WcV%#Z>vPKRgaSsD9bp{$qX7{;Mh8=&K_u`6ObfjwV?1nirW zAhg2tesZGy^rTMNCcZ1YsvS%pH`+1Lx`OIrcxB}N`V zod8wC{$TOhmrgaaFIU+-VyjjpTC%Akya!a4Fjki66nY_ATpa@~$}4;NR_Wd6S9j!T z4Mb>dXI6S;82d{GRED?=%Q9Rlj;tj?MKOBU+r%dnp|*-7h}!;7eOye%eFj zH3>x%e_g6R0uQ_6k;=Mq4tXCDtmCvpG2+0WTDSl0>&G6c{wT*G+d-@H2(I9& zTDN=6x8S`?vJ~axZ=^+5v9-cW3OK`Db?L)3Z)a(TIluqZn}>2BJ^tccc_`1OLMV5Q zpCkPr3HjJcVui2**C#KJa*wth;>4}nMCgjdaU1Kn_Q|Mt1E!41)|d*WP?gcSrPv%< z#=^_-R&L`L6ie%-Jq%lOueSM)poePHD%xBtAyZBBncC{E42o%{!rB^2_gHP+H}kt1 zYZyWOReO{xq1v9I>s@UOT!HAby6wM|L9Lj2{vbu2lZ7frbbD>JIvc2Sm?jRI+w$#S zS*JGY0uIf(?by01hh#`UJCb{1Qd4rGtCCu^2&YmuFPbsvM~z zZgqL$QlW}UxE-pg-eb=4_R#MZ1mqhaxj=RuDAMCr%_G!yE=`3_qTYZcgxBOAG6zLW zh0&9|yK=(R(yBatJG^=Mwm$RA`q=2`X~VtOw$MFqp*`wnK2Nu@$D?P!Ncq6Fn!LzI#g=wkv>axRHJxsBt-~?+t^0y@_ z7K##I0;vbLQs6`NH=8pDvC^ox!4)OcMu0#&UkM1zzY03y3Cu+C|{lW{WT(4`ym1--WpJ)2bcO0X{bTDvMG?H*^AHrt4;GUjtv`hBrG- z%+xn;3Jz{tD!HfNMS!a)#uNX4C|tc`^#l4Hc+lYCebM>N42k}~!v7EGl^(w;V7aC9 zIaNBfoaB@1PAX+H&4-cHRNF90boN)MCVdm2t4c7mS5i)5Di ztX}jyTBBK8wy)aL-@iHXVeMw=ZQ_-)!-vqEvyH!5l2x7jsuT(hSKfxbdej6^@2DP05HK zufM4mCdc#L2pOnilp|a9>sq;Obk+BbJdBsjI_!6-=es%w$aZ%?*$lZtxTdGuDj>7` zs%`^Z;Xc5%*;GtZ%E>liTQ(ikgvf0B1+4jHsTH2R19tC_GI5^Asu01e4iUV+TFiac`4u8T4(<;C}d$a5?uqAC;Y z068^b0}P(7x%gZiT0S%{&F@%#!1QoeVZ1-C!s-JQGH1{Lbv_su_|nD5$ikJ5wuYTJ zH0dbTpi4LM@?NXsD7sKV4|eqd!okZR*^Iu{QoLYJ3Sz32F#+a2RL1;{V}4iRiy1U#(Bo}q{9cpV z5x1J6A$$hdsr_ZgQ>JLUgQRBN@Km$TumuxP(t_zs#|8O;?XaA6V}0|lkN%XRY7Bd3 zI&ckiKHpEZGM5EB*QnHm=zBlBrww0UJf{afA?nC6*MVEkQ%$9aiHjI6d)roqFq|Ry zKhme(sbk7cA5xy6JDpPt-2L3Qi6ULCvlAX09k9Ep$=Z}Mf6Efz)qY3O92Paz!k&6U zRHb=~pqdIt$`M^aR3X5$WvOwt0{Rt-^=d{r>{=a%AYK!WZAhUxMaxE5H{8jo)kUYT z^l2Tar8Ww8*w1wnopy9F4!tdaSqVtI7{dZGHC8E}c+mq@&jGY7oasgg;tr)Tu}+?1 z`n8F%Ra^o1d@;$3<4&ba$#{nErjgzs+2VhYnAiYW*hpwld!JL~` z*Ry5{4RXZ$16Xf)1^A|q2a-DZ{DEPsHX>kkUeR+L*52lav^PQdD0&jjOkWE%{b#@z@ zc`~A`Q){J+8S6H~g0;bc=m9Xw^4_9_CK-3YeuL`PO|_ z`|pgqec03>G*7X!J^-|8oEMG+`IDWsfBu*?@R{%_Q=cqEn0~5z{LuEk(Z`_doat5A zx73+^Er;cti61he^g4i-!*}~;Q|X*yPLPanDs(M4|Ae?4HcS0HK~Bm3y zH26bDbzBm*Ein=UhYWoGb6Hgti!}2VHNF`lKrX2LM)%x&jb2)$se% zpA-5^WOoPQH0hb8rHeh9GW5+(Pt5e+?Ba$+kH`>ZNeoHl(5Y$uO9Ft?kF?paSjhPBn zMQ;sHiV_@E&Prs5u{U+aDZFxdqsu{~@{*3qOFEiC-~B(2ji_G(Z_(>8KHwA&_ncIY zy*3mJ?J>2pX~qn<%IS1CH@s!7I{MIx>Oyx1>7DNC8MY?JUkKEjq9kapNg_+C~nk% z*;hTFqK6Qn3^ETXaUTbQufnM)gwbsHD0Pa{kS|kvR3(%{l(E!8J&4EbiX3C!3;^i~ z9+LASN{8dB5MgysM@atg^`-O!pHFy@3RSFu)Ie$wN9lS<3CBbwB(g7S-=rM}NHB4og!1DE= z+HliYEGpH&pcTM@a;yde%!U902~`@UR-m=&!t;+BP+OeGpT!{U0;3{gjaHcWKn7N(R!BMNM|@S2@(CX20+`OUfpsnEU29 ztTqn2iYiK{Mg;pYEz;CH`jr>jz~u)VIDE{G_EYXNpZZME`?87sRcf@KGMY`MmMH2e z_UV)PWuCHMW!)A%fL0guLq4#d5_27NevcslvIB71FPye$%5NMMf!nnmHN}Gf zA+|qc*P1K28^i``$uOl1#jBGN#!P+#Q|5pdOtErsLG>fMzYUG=k3DG%r90Lx_4qg0mS1bcFM6=BHEF~DhU@TSCfK!E8fD_6By zhpwb)R?!kVBIOfUt@5+B77x^KVHM4iU{=8RUTT6BXVI)qrcV@~P0xExqEsr0`8W9{ zJg8nJ!72(?j@G`ltD1%zKH7JHZk*UIpyW9(UllAU0~p?x@I}H|=Vhos+?#T6`+ox2 zv`IjW7CE86C~|3Nw-;V$`zqug=)=Zz@f`U{S9^F4RA1Enq6My_ER~mZ^h0v=;@msX z3{SM0aNct2=wx9Rs5-S&s^5b&1D-KZGlSITby0`=i`r_{7{$KMP>##=z2@#%8Nqrn zV&qI)SoRmOuUu4Si3JXfJpD({&7wA+3v50Yz4=_!=JNn?w(JFVp9`N^EW)RH5c!Fn z@U<;~A3AC(lBs+83rE&sv>+inc$=*{TIWRR3ug)l0(Q;x;U{JcKQKe>T`GWIFhXr4 z7xWh_MkN?q%I>~2SLY#n1FKFvY||`-Rq6tHtB9jIVqx?soqpdgRG8-|$N41y#QA;n zdoG9V$SFVg7JB_XFybQK)W6ki3YOwxMwZyUM(5wIU7p?Vc_fsn?^qoqp@ zLC=_q%t`0PqK=sYAP?HQy-};Q8(a3SGn_(yIjxwGtf254A4V-Wd=+)sD~p0?StU_( zNOvrgRIOV&4GIUpDPdmJD8+?@5W-!+SkUToG-39Pt^1I;|8Zi62AMvUD5c9n?i0atSl0Oy*j z0Ddf@s{uLzSZaW!05-J^c&IZ34=eg3I949&v8e;~HbClsySBj|$_6`7yuW*Zi{=FI zx)>o?j@l|clnwm9edrYX&XDK=n3QAb5v2iKOCG6qun+AcIB}IOR&noYMjUTrAK-NO z9|u{F6sY{aU+1Vikd9Z8M?7zpOjXC254chCG5PSXau0t@_WLnu?y)sqR+Zi?! zz?2(wF?hAX)uMx9L^7Av^{R7??A%c4y$pQ4^Qg+G#5+r?j5ECZjMbmM{Z#O9VSmB> zznq}DfK-mt3W}$!%;=+K5+(A{XcOoW{U_1{dYq=)Z-BpA93MtK^6^OVa02CDUSkG4 zii0r2Dxp#j6$o{}c)C2`w$2IoRdt-=<^ej{$2wHXNxLUe(s`gT*BTz(|1%;L|0T2x z!H=uPOL@Frat~U1mxW!-1MwSN5Gv^o=R)5<((zHkHveqi{k|cg@bV;DO-)QW=I>>^Eo<2UXfp!Qwz%RpDZJy`5pt607_JG;E+!UM2;;qNf4Vk zw9uF>&@y8kQJeD(u>yD!U2t#VL0!0s2jIF-RZKXrn+Q6o>Li#ehZiIOFTH~S`vzF} zwCKVXEM@(~N&dDJ>|ok2g1Jg~7Z%>-SfD1xgcYi=?!yp?7WYCoY_I}|qospnEYWgL zHqpso2o{pXiVDSI>&5RV7cUTpV^d%&Wbrvk$_u5#?pyOE7*4gmUD}76sw-M%9s9?Y`up zY4E^(NvB_g*gB@PRs`~di&2>{kWxDx267zSt-0_5=;B6jtN^(!0x8;aI|J{!H&|j0 z7n#}Xp1SRcwwKWnM#&xLP<+?de8~;Ep$i@6(g1BNbNupw)FUPTENny5v+d_^h;zJt zbh4DF`G{g;Rp8{TOknlUg@DV68Swn#hX7jyeyIma0URAJo&3noifi$t<)xTmXZsnP zr7FPX+q#6e_-1bS;MKs3G2)Zs&+FV3LXxHU73rq*$x~W7m)_7&7Xov@x2yD9numcd zt++F+y;A^~HJ72mBJ6)TRbzsTbqSU40_MI=h05cR4sxI_fKU5ImRHig+ zBS;zLgGQ@pu(?sN@L3h}Ogs-)i8AWYaaSs9Jg=!t>6G}u@XYg=^E5OgRz=TIWu|Q* zpJwdwTF7$!E8WQqYsrv8p*W~^ook42QZ^SL&wn8lSp~G{r3>%E6!|pB)!bO%sTsDF zSs%<&zctVOGM{AKzZQ?<;Duy~=lB zOCiOKZaXzUrCX#Oh$zY)8sZTuz`=*%ja5jFVIK>4sUsJGFb^J;2nx6AUIl86t0S$9 z!tqFFDnOB%J7C&(pdilz%2q97%k&)3@<1@!93HD2b){T6Tpn2CQbr0kU3hGTadc4S zDYy`1an60BDsvx9hL)^PfdWzWzW<8y8)dBNiE@kzrX~*BMcZ|v{mkBguB>GMm#iB| zS%owg(4ApH6TL0>a~ERJpaNSJn9HuP%2KC>#ZSxb-CCJ)!fqJWV~Z&^i>32^)%glrrcUl3k54XJO*gF%+<2eBfwsa?-<|hYIX(ID z#cfh+RLD*;vFSDZuOjC~N7!y#_gih~ZBFlZ6QwyldC$h-+;yl%8OM6my_xE+I@Miu zs{10{o4M}4xW8}q`R%=+&zqgn%`HFJ{*>2bs9oEx*89+^Ek5BW81$+F3!mwLsjRyK z@n$V88|oHf_d-P&vgaXeJ;+^LDVT(yW};3!f^<_eM>- z3<`kWmR9D_%_e`@Q>gzyf7qmgf-ip>anN5WZ8nZJre?Sfe#pB zN%gzLRcgdzkF9 zWd_?j;T}pD9v}?06I^*YKm@`Y>A(wTw2AO(Zvn}=!V#m8b;!~cc4I)p8JS;^du2%d zG|`}uJ?5W3oLd@5{w5ACOKl?^44}DYM*ci=?$hC>@lRs%5uoP-rj+ow3aC)YDJ;GB zRJ*8~3}a~w^C3z8`HghIZQEe`Nju!sJ^Ds%4`?wv0qpOl12*&4A#U8u5GjAOKjZ`D zo|q?L;;PRug0m2}if0Cr3f*NoZ#MCJT+vgPJKRopMR9b^*WeWKu$Io%u7LK-Xlt+r zOqm1tB;zCD#0Ujcy*S`?*Idp3-K~Nhbx~fRbr|0HhPZA;bCbU=_ z+n}Bo^EfhcHIK0B2%b1m+y8cBD-$Y3nOQLlWV~qr!qw9QahMu>NE!q>W@z0+#SeL> zF(V)0%>zJH3XHJAWrIxl*UNU1g(P=rU3aW`v{C5dst1bj0M>DY;>P9<_w4lUPM38# zdx6(*Vkg8VxLa7t#g??k*TpijS2=77yL~KMnW?M8yWRf!am0Z5FTki^!VwPe?II0YE-xw@Ws36ep5K08rt`7xYa)Z8&^|WuR=LCV%>(m zA_;+VoNk7rhB%!6uFU>2?V7xY8OTf3)V)+gi~9#SrWxpa@tN7KM!v&-#xh-_a3tey z=vb$8nD@vdBzK;uoQHn{&`zzMJ2+D47C4xPdPL!{T;xTtXYjCPBAnF)uOFV)9gs-@ zpjz{$UZX08P4xlziM|k7vT>o2l2gnRxmVaHIRy*dN&2gAI@N+`PkzXnzzl=0UQUn~csu&r=@=~S0WWlSI_s*kV)=FzoB+ZZ^ zg9GT1FquG)4E3$(VC4npXSud~Q0kl1K}H6iUx4@?R9hj73eD1+VJ1Gz>MpHM&Wpx zIazM&ww8b94xIv1+z*L^)5&MnGBuP`tW&f2i()hviBR-q09=&3q zLb|9RZ4K=@@O94bc&@$j#neIBtwCs zkwdkG*tT_UY9Ox>Mf}DA6Z36t*ksc~zy zv(b4DP5k2ieu;+txVM*vPv1k7`^P+ve9l7aG2jxOowk|%Vte!n)iFeNjg1(Pd!`5KEbUi>rPk;`)JS#588A-@9?6b zGSRZ#6!uAzFqJ8!%xo(c*F&DU17gRaQjq;`go3PXNHzkh%&Y4_+>!o{scV{zhdw?B zUPd2cozCXMi{S@geQ`6ocz>xhz8fsG}X31A#^2Sb_v<*>6KUiGHQa@0!={8O&-@K{Uu)3D9_?}!- zOwz95AcqON`@!>f5M52wT%q$KFEq*2ZK~!j>hV(j2UWy+iOMiz{hwZ%JI;e4>AI@-ZhMmfY?y##8-yx^g}62M%LTT|P2rPv~=p#rvAdjZQv zcsSprDj$5OOyJzZ%8m@o#gDT94?FV|!taNlA)lwx%57ZBw`ayBwTk7GO9{3Ot=d_K z2bTY3ZL+OAtpcOl0#LTW26+tN9n=gcM!()m<2IT*lAG^ZnFlHoy#XZ^mQ!lM!9Gd_ zXigl;GC9>ihYjR`D$cUWof%jZJsky$xlJJnSjwwXhV)5J`{lwC<-;B>@<@5wyP991 z!)5HwQ&HRqfj9gTRa9^vlywr53{3^XO}JD2+IGGx>-nxt<9l#!XTnIN0N-d$@lAM^te(@)5 za8l0dhd=iUl6rH_Om}s3!F+@eLP(io=F=u$0y``vu#cd+#uTjVg}8NZ0h0|ae^(e! zXVhHXyLE6c_df37D30dKa*nA>MXgO384r3-CSD1^&se@=C$%)8ELJ(X*X<9ppSHf`T=fxEpG5?yC~>kKsXKR~A-DLNsBlYl!?3WC z-nm~07UUe{%H6k()pw*yFKj=>>|@3286Q67r@$)R92=@eGIyy*RiB`Dor`?nEIdIR zy#}C_$szPQEX`V2aSzacL@wm#2hc@&{4MyTIobRbSV-s&Aq}Og@s$DYMWN*5a4?Pc zJ$RvJ;mSxZ>ZNVcqNHJEiEke#uB?(O;$p@^R$)U-tqUpwe)ECm!lU%#K{ql>@5~?K zgt4R-L{IVRYUx)oK6y5DV|2K&p$Sz(R~c=hpy=AbWjL&sY#*1>jd8jjr10=Z6Hd3Q zW6-M&dLc*{U(&?oU5aCCeSc9(48?ghBK=^MkJ4s@Z=mPQqAp6VeOJ+is+a`=_lwrz zD9ijCzC`})p0QN$gTa-iUQN`CQG(wypI>EPvem(ogfO^LIx1BeQiW^HQaP{t8u0XG zA#$w$4&(?(CQEj=7+U)hm(qo#vtd*hbmE0JIA;)GZ0&(oB5P7V+F5`Pv z_>(b{_!h|oD~Luj$}#XF*Ew-V@m8ks@Awe6j!SgSdC>7^xyiA}D@0t*@IztraH|Ub zwgJm%J|2*pUI}Ir$#2xlMT(cw(xsEz8n#6oyy16wH&imb6wK$Emn(aeEVw)}tlndI zhgs^Ih=$LhgGu(UnBN|xN7K-@DRFgzHJOc{BjLUyw;EI?Jo`DlAP>%Z?{?iuC8Bc~ z6}qSJ84Tb?v+wk>N1Ef&7;kAEg@<0`b6JnjZAcL^t668cF9hRYFnz#S%i+s)=uYau zxVz~}L(Z2)i~g)z>rw7`n)f_ivzk01=@zp!9U@(3`MsLK5DLpmQJO&glwKyzuQf!! z&XUMfl^LqU(rdlj#2``~2ODtU>YQideL0{cQ<*}Ms+wWdS{jNMG7v8YlO#p@fVqbP zq%*tJ0L&15X_8FO`hXdwv@XvyZv|9o@$B*H5!KNn#UJPq)nJzhW2UJ?8!S~ogT+X( zj&{UFn(Y@h+b^bC-0{5^0P5zNI_l*@k!lcDS}Ij<5P0TQ9m)*HK3yvNe}DjU2>rwR z(-z{uQR02_t@PL^kH;?i;Oi)TkX!1W-J(vt#;RsqYAT?9+@w|2>1tp$rcOnrDJPx zPAnCtTGUQCI9uQX-DD%6lY`|te0bpy=Ontx2A#3nCvdCsP5)M+`UpwhMj4X8zL06+ z4MAp9uMzb%lQ0bEcB>6=f=BW4W@KZPpT}xGI8?DiNH*ZPA2Eb_1o*=r2-kp`B#RUr zvB*e)(=#{GtMG`bs?0c1=k1L&TJ^pOaS#kL_U{a$pxStji>$;t|CSXw zV~do?on*;;@AsW=hH*#oCQTj;G?C%~Zj-O}L%Q#>M(KHG$Z;J!0Fn;5U3oaN#mEwR zLBT@2>gmnjb`{H!jwB)qLLK^GyQ+##a{VeL*n9O^ZF2s(4}*jMJ6Y-Blk|r zxLsqy!Mx%S_6)-Zl#pEyH{_@els62voVZdhRhOkR3e6=w%Pn+a*hmbCGhsph#I_?v z*$n!4BhseBsei<+OE;+x(CU$uEA)?z73YlH^R0HuiAfPC6->^%xx|? zpj=$($x-pc-Q-fOmZ&`IZS`n1o}TMM6e@p=ZA>TKZET2v(nRU9wWTXCxXH4p0dfkb z39~0%Jo#7@?`u#SZ*8MI4aQ)DAPF2~lx{E)M)&_vX%h_e){K>bc)G|p&4>6Q&Ph*_ zYIIq*{u%vdbEcT-n|PnT-IUz8u|_4gI#?~3T__S!-MY072oq3c)wC3EQ&syU>et;| zwLQe5rY;x($#Ze5R2C@4LzbH@`c!@wtrczM$0J+g@yNz6LpJ#`#L?Gg6|m5!QRHq( zK|fvvQ2|g36-M=qjOvzZWD8-9&lHk(`xAo~^+?w(K>0j*V|xIksg&=q=$~Zf+=ZaCNZV##-F*NopG}qkLq!m5VaeEVuDm z#awYfRu;Fhwe1XI+u3APBr&w()R?%5yEcnRUt7EnaNGHfV68EpDFm3uwK_M8&b2T= zmOhnv%7H6>;~E(nEA7WH<@LVz{b48jxbbM~jz^#&92UxLLqu z!A93L8-&N$v^_y}I}@X1$gR}Fx`^WZQ7JdIY?UleR3jxNxWKr0KvdLlQ6)AU5i4ku z_k%v0CO8soW;{!2VCZp_MO5Dqo0<{3GF=F5X8qWMmmucvK8WzhKa2f`UC_6O+{Pcg zEj`2r{NT=#i+f%Blk0vWFF!@Yo}%dSk$ij-Zm%X+qZ7_S&NsR{v5`T?^wxloxjS_9 zOGIZ>eG<=nbd1k-1AuNL@|fy#SG~H`Q5*fj5FYYQH7`;rxMbueBNC_R-+g#1NHu`osOc!+!aNou$v1AEyq+rJZMkn zYuI2EhLp-mzZ>vD92f0?nnDvBv8M2MmaZikjW@aq8=-~qMi2WW^dJk_pXuP8bRjKO zA-+e~quiDP9XBT}8K;z%UcekoTi>KQqT~5%Du`LwXJS}`7~dwd)NQR$&_ek{xQb__ zXMuRp0Ze-ff*8)^lrArRJXrd~znWh00a|4+eD4^qW%xf1U!>RG9YCgf3HET#$lz%- zgIHFta+_raW(D$c@kn@=qE`{^I+6>^uJ_e+vv@V4qi;)!^*^)MWiBLnpj`@DlgdfK z`mP|f)9P%~C?oFpl4gL{{UZ2|E4OZ)Oj#L9MeiDguR-+sT3a&h$G3bwp~xZcYO;I^GNmxZ47h>x%vWBCAEA%rQz8k-IJQe<~x&d z(&CnCi&kWj&{_&%7&0Y=4=xT}`*OxDhwShX*XaEsE%I9WG-^P z&F8T<4W!)!f+5#PxcPVZEG^6toUnz5Dz>0qOpje9-BT*11wiD^roCK*86Jf*TLRE` zmTIY`aMWxV(Z6koTAuCYEvZGw%|xfyf(TmJVNy$Dnu930tA$uBe3_>!UpFn+Q|;-N zUjbp8>TQztNG%VK;)tfJT~v!si)9^ape6mw2B)i~#!F1D4pQJ zhIq>;$u9gxOiS-Mj%TRN_~I8IK8dQ|Kw*ld&zR;Dpf+3QLY-8YXuwgpf=x9C)Swrg zYC;H)#<7OKl`1#<_6-Kobf+q^V2USQ#T5)-P4CQt`{U`2w@oUc|Dj0fgD(VbVzLZ+ znHZOk;4X6m_%6g?Jt<&)DKUySb@{ZCxl($9(y`yjw?~Fv969pU9l9nfz`KiSROH?k z6n$5RgeMo6u4&@P8p+9&XG6xFGI7odhdRu@U8`($CTZIFe)%SQXp0@~GT$6}-ZTdv z$9sCN+pPt8(rr=%iiOEgSP~iD{5s%eOQc*DB}hmcr}NyUIv%`YqyBgiv*HWLC>Npx zE!k9JY;>d)>0$;uU5f4Ju`#VF6P)H5z025w9(*A=A5d*>xujdmnps?-M%!cE(9!#F z=y$aTLC~z-6>8RxWy-iTG=B3z<2O|TT@&2_FNl!y8Ld18v(7c5D@S^fa5JxUkzt&LY;CA0r04?&SC`P(g!q)`mgr*r@mJ@ZrmJueb#0a%E z6~Ouzbm2~qH%)klo^%dai3WlGAQn<-Rkh5=RFjL7+Q*BUzS&;VgG}3$@K9^3%g|S= zYX8WDoUyT{ga@JIoMzaqM#o3q=slFJb495hWY{7L2-zK=NW^${E<&%%PxC1=oRyU2+CLGQJc@JKv z?mS@7z%IqH4!JMs;B3~T`tHhKyvtN#CfeAFAm2IxfERt1IH+!_>hRla%nUSPU6q){n$W=y^O!eMkdQX^q2jA}R&|X`*7i_=Ik~z01{=7-LAm^^q+Be9^2F>MM^9*fd zp0_2c1jngBo#NP`<)$7u^Bz_V;YJ}qwl}HZBHEs@mv+^DM&gmSSW0rSccr?|rE2bM z6)RhW#OLN$cVkA}jv2Xcl;34RD&$g5uG?egRkE$t`&I(jbHdT8+**RG~t8PTYL5w%IxV5RxK%IqHNAaVq) z&zSqM=&3K}D+u*t#Oo-|H1T?M z)4oV;B3hvLCoK(&UF1PNF79A%Dab%BA06=rc5LK6ZB(q<&|$QKx? zrDHc^Uchj32r)25T;b{IHmvKhgPH3heS_-tES`R=;0IC=rhXf4fc(1F^cO^5LEGJs zP2u=Dt2;3KoTVu79Q_s(qX2|5tu(}`KOU$He>&Ys<;6dq&m%?whk$1{tm{1T%lQx_ z5Jnl?Fd^%h{rN^Ma8dNisl$?|QGPp|nBd!ks3HH}i5zfvKni4@`CF{JjH1Kfb#SRg z+zBVBYC*w6Gvc&>#XglIallRT%dPgwy71y9B1A^Rh(UQ7f$Kj3Cpl$2tW#IbX&43t z6Ki1#`Tjd)L!=9?fV;JEO5ny@iywl6K>JpA0jHU<2fW!r^a~M<8oLmdysGSW z{3CSdz?ym}+JGnjd?Ir;x8O1wQr2Y%rd)5V4)x0yM3Q427behM5;nM<#08;Z?6fY% z_=i&Jw`%P%g_9~}sTD5+04ssD?4Yzfair3Lb|F;P`e-EuSO|Qqu-OX{Ez3hcuQy8X z@@CA$Ks2Q&XRCnOnq|}1Q){7l(+r~C%#+ir_w1cj;|V#fKF|JC_hX`d5Z}gr0>7@^S){l+56N(b?G*Cl zJP=t(-u!b{F-j(>H$}v&W|m4fpJH%3TKsp48aGVSO$p&GXX(a#1rX+!8}ro%+|u~q zf*+J^$L0#2lf>tEe$}-<$a>^}dXUu&CEJe$O!6}{#FC?K%uts8%a~48A4$;M_D1=v z_S`;<&pI-v-hw?PlV`ai%hmgM-sDcS;l{JA=yO{D-!UOK;KuC@u$-(tPDEHhX!jEn z6v&VZuHdOv{huOQ9YV^U2q}|bK@`y5Yqtr-K}-U8GR>9-gF()q60q|AUlce#_yCj& zjyJ`ex8GiKVr5@*V^k)Z8HC2V1FiypW0 zKAKj6@E|6x3PXjaaqdjB>)(Ejbw^5BLB;5Hn~K0KcR2+31`s-~4ov4|)q1S7uE02#m{WjvqHVppu+&F;O#TKf6EZKrNL;t>^3yDK zjm~42IGkK)ZhtEknyGPHM_z^PuZWqBg+71gQctbb?ceQiGdSDhP8W*Im?rUkv3N>A zInTaVX$#6J*Mww{TKk5Nm^{Fx0dKY>hCCmL3!7`fNB@nA1q{y8K;jcAhgmnP(2ouI z<2Q7F6?~2M(V><_sdRhZ-W12r-@8ezi+R6u-lGXHKbtb|x6%8sHbkRecHnuIk?lrD zEH!eiOG-AR2J*Z}X)>!l?` zyvSa`?cHM!ZB%oiq-QodxjMqon#$I@eU-#Qpz50av`=poNE0tLkN6xH>VI_Y?cl+l z#18uGnkR%mF%-py$OmQL!iqy&YJWR>656^g*5smCgn|9X+It4KIXHn~IM6f*YFHix zN-h}gA7paDv8OsxOZx8OJSA3f-0su+i0CnacSU_SZUT%0-OHm`tnck1tnYXndOV@_ z=k6|Q3irzQ46r-qPBsdsa_XpUoJHCui?6zRqrJ}o%(&n_9I8yW&M9IAZNRqFzG+q0 z?Dv}7o4(txgB+RlyO0k-?92U~CA&l@+oc{^AMi1}S^%sz-O_XL)6f$&q_FMolE4*y zRc>CkhDmk@)`g><>_&TQK*A9Z%uE@qKcZonEPmgvZM2)uD#*eiUvTK$F!rj`vbLD21rchK%}e=Qz)5E8 zFH@s&mw0~96<&pvjb3a!vT2Z^w2{0L5t3Q17_%$lApBAQ@clwOI2D96`28J7Tj=RB zAG0El{cWsxKbR{s+fUshHi~?K)FVc+aR!w^n_SrMvk*NAM+u!RR>>^|t)Q0t5QgfQ z8S6nZiQJVls<%`wJ=01pcEeP1 z+`X>Me7|*=lPSPb$lrXH?6>h$VO+1wq zbQtfobj?X}=Neo|SO7!(6N|=Ytf>j`d^I5CSZj_)VnK4wU>4lNVG-}QkB^Mq5Y8F5 zQwH4prGYZxj=dFSvNjWvcVep}tgY(uo%<%=Dg$`llz#qJ89AaOoA@(Dh7{q@ew?ds?H{r|? z9E5I7PYw$|^weRZj%b|!_D;RFOhWc*mYf;Rw3##2bhd}Q8-b>;^w=C7Q^=v=C?`=h z-2{PKyAW~7KeL+^`mw!p1|8MLo^!CmEQz@?7(?<9zjwm4G*i*?%xy3AR|!WO{|wms zM!LbQre}LSWiwwsS4skKQ*tvXEJfHbaQV4NCqzz)>g6J2ZZSe!F48IFl2pQk(7P<` zjn7G1^M0PT?`tnyr>=a2xvHh5)s=1edL706^7V^?6_R>@YJvTIRN~6cBwL{-m@o&) zd{qu35kQ>APB;TPv-Fg21uF*!TLMFm5Ps#;(sk*U%9rJu4!+W(#i3<8mdg9{x~OiS zOjTtuKVFyhx^z`V&Y*KeUyAD@RE^X!pv!(PUn1kLN69H(*ook}bpik@+7hJ~;x%bx z1kr5_enlAm!*`G!H_CXzn7q&|%Cs9~5Ye|GU+@&(15sJ7ky%ytP`Xt3&QR9o;|wTy`%yURHsCYO zSOMs8x6#P@IkeJvs~pUV7b=g%KM&fCQqc{`j|16Z>g2#qXgs>r*B?B8)2anO1@F#0 zJ@VELxOJ@{S!xVUfCB^+MC-L~C`=3yd{@uts` zqY5|e)wu6s-1n*KS%Q=X?$Yl)fv6k16tQnngMb|X9H8-18BedBSq(?$yv!PT-XGGR z^HF-w^PXmW>gZ}eICc1|qK(|qr|!D3Bn)=B>lehc9VcPrnDCZ;Lht1itD@Au@Hufx z?kh*BT&Rmvr7Su~b*h=7cTeNYIdxm#s&gX=FPAGV)~UlMR;7v;Rv>Ov{`k8FaeHDx zyD$NG)DzyKj?TOGT4C^h!y_8?cnsCF?!u_zV8Oz(5J>%sa%nD2^+}-gXTm(Qo1aJ!QLY>G?L+nDlrwqgX@9qC-iCrRd9&=|d$Bvi?{c zf2V3FVIY-Ud9OmLmU+@0U<`ctN7+anj_^6Q@Z0Hi-O-!|AWop_~CMBm3 zXqR=9QxnXFd0L!1n?PhgwuGstASlQMuy%624I#|VQXo@x$ungIzk`I(0Xs^uLNCXl z+G?c_16gw|WS6VJ)m75D2Z;IwGge*Xpw||0mZqJQUpAO;OaZp$|5nIy7b}k~Ge+%V ze0)O6Om=aR+ihWS>SAh~r7Y}n91Tt1G+k9^fl`%5jyT|8NDXJU1!%rQFYCsmr)FEz zD{N+dUqCmMi4^`#c<{vnMm*I`t233+a;3&%?S4ctsH=X<+aM^wmqH%?q1)VJBl$Qs z9xO2yrZA#t;<4;Ug<8jG&>u4ea@F95=^=Pi#wgC98_@b47ACuHpO4!FE!(BA9b@v# zJkU~K%2RfeqXZN=Ew?goHzj2NJ)oMZmq7_oI(C!yz|$8;BDD~CN9iDZqtE6PX-Bct zM=fJo?}#ROxiZ8nj+UN#tNT_)S`S@4sQ!^3*dwOfQ#Hmn+~;L}ze#4NR=hcaOx?A` z`9+bKszJq>n>wlOf&$?*{F+)CJaxOQ`U!;(F}&q+b9$$#!g>+zP^H7QVg{t&2BTtR z8Vt4cmG+;K_u{yyWs%Y$IC){Xs)U>5FaQ#}WwHDGzS1JDBUFFFmW3yMJ$Q!ICf_$s zS$5w5C6@qRmRY*A?%<|dP_0cAsLhQ;1E96BV+BSYw(!Drl8!vIXa18aG>xZfxpXO# z_*PKoT4hQvgcm^lqt-Oh<3CYfVT!TheCXX+jr|y}D&aF%ae)^;b7eNIUj70KI@eII zEuhk{1F$ji^_voly|qM{9M*cTY7PEvY@=w)p1jIX@qU+{vKz4s#(D#D_08hjB5ZFq z^^`gVw$XsO-GGnMZIqrJDZ?p!vD&72lXd{<)0i;q)o7s=?x+Ct;uJyT<(#2%C=iPS zA@3P8k}#D;C4!1YC7|BaWt>|ONQe7c^~DX$9pjHVTx~Rrfua_|v}A605d@u(AkqUZ zxfU|rPjwplhpDPrTd=hx1Epd+X1SILwUl0^)LucZ$=;WN(ZZ44-!yR(M%=1pusN^RM1H#teq9E&=Eho^6Tw12vk*%x`>boHcQ za}}rjzP6v;ep8aspPr%UF!*{i-|gG~`NaHDl&YD{ySac0PjN-5c(}+9aTA(dGG=J# zENn_M4XzIv(zgJaIef?up^_vFDJJgW*3pD*+#Wd;{Frzib={dVT=Uz3T&jIyc1)1P z+`MYOVV$!8N{DxLw|zGj_PYRIt)&};jQ89auMSH2na!>F4Syaj2kBK^(;S~VC_wT( z1g^z}xjubp%UtgOBK6aPH;H+2EKr^jgJUtp>~%2Vo3m7BTHbTgL-|4+MckkzL`EFw zfM9WNfVzenjGvu{(qQoHapBbh7o5vk7S@H*OHy7wmN=`OoxPc>pAj_YnDcx)ZPfxkQrVL>~RKlp)I(C#$oNDmIWCelnL> zjII%7B0i2%FBVAV{=O5%dRWSRw{&ZR?q$oLj8awYU*NFo=;Fe2iTOJC+S36SOzO!{ zUL?J6vRc^R*V30(qn1LKG6RilOMls?ihkiQNO#H9)H18?!Cu{+i96yjjq#}yK{#y1 zYkfNZW=#FTSD`6WQ8ig&mR|A^J}MIzviYNmcb5<~qVN&FY50zj7`8&*1-ZBgFY2Tu zi+Zb<_`+KTm$8~@b5NI2O|s}ED)FU?dPjrX@C9I-9Nr;i5zOODp+}Ml;Y%xCs3%{X9w@C`>uZlk5@_ zB9-2co!K`zL-7D}pMaHJt3;q^9X~^ z&ec}z#|8zA!$=<C!SbB%55w`JEwzJdo`e8xGU#_(61SDBSu)O|I$X~kgujy z0iQkwlw6_(28+`H<%axK&z8Y^IOG!pK&qGqh}lqpsziKLxU+bEvUe#mV6U0QY1 zn8^rkKi>1j-VLy+hu3V4)t`|Cw_C08!-k-}fDY>8Ee2a??+#Q`dpdrp3Yz~>KOIeF zn#g{GWjd;*E&Obj@lo#%M+%CzAga}y2!l5NG};X2qx!ks(tL2|fv*q1{6(?LgEjG1 z>9;_dDjM;zbe-@3GJyPpCGEC~&^Q1|K(@c(Gi$k3u#jg1QM8zkwz#FXSQJua3n9g9 zQ5}bR1nyAHV2{f`*$d>I6&>L10c|yvxxla85W5fB@1YF?e}R^%h~TCqDd@s7iwjtF zYc(Xi0FK;H;8KWShkw&te^W%4v9S*Uv8iU0U27THyp(%iS(uhlY6ae{sgRq3wUAA% zy>jq?@lzS@}^~uv#Jat=CR>YTh_)AqBPrlq<-Mv^~WCDrp8RBw1L5L zpLdzNs%GRK17Sg}dg!XNiKbWo7E;|X=>a>er3``-q^|d=@WQ%e5abMX1p<>IeJmFC zv2c+i>-#suyHZ0h6-ud#lU0pHN)bgKf@KhdK^} zVF6W74NLWUC}<$eP_=NtCe~&FBMk$lJ|v0|9E*|We|)5|NdJ>X?90`81kNBv`o=FY zKv^mM`cV4S=-vxEw^!C(e?)w;iFTKQ1h35Y*1@m)$>%=Mv&nK+YWgCR+3qD~TdH{4 z-$HYzN+ha%xHklG zWHBOGOn5neqO+Pui90*O(MKs|Sl%V;&rULa7gkut!(vB~gDk`mlQq)QEvQgF;M%&g zcsIO7pAopSw;-{;QZ5ku=2>1b04Ogm3)?4r3!3iKZeiWiWq1O^qH4m$5cT!s{6Rm4 z4Y!4KJ@*<4bsDQ0e1L?Bm(?b+FK!f2W9#Pbryh@4L@~Fpb>W4cW^0ZYuZB+C?uC9= zjmN?rT>5JIBM7FR7hhgO;_keN2)kET?F{j8sC^dodW(7$RJDfW>Y=rhJgYLlsim6d z@ahN$LP+~^k+F^9NysKGF4bG4jn0GHSa)C)9YEtmxJyLK#D@8SH!=%stN1d^+PcV@ zU5l`FxjU9yqjaEC7B?PjZw zF%BkW3mzpl%FDdT-~kvSn_^;ba8M4mS1d%_m%{U9svKmJst+oehw;TTUb0$?1ASUc zy6Yc4#JyN|K{|guIMDqomzt*a+_7%^9eu6iGo?D>TPigQ2CItk1*Yz-io0R54c~!q zwzaD6M%gxWcfY$QY1MtH_OkQ-={v5ZU?%?=UkIMAdgQ@e_03RXE{EULpcdWk`aQ~q zA!RYD8|Jc?jGgc@h+m8Y5G%na;8?QRuSQWZWw`>mh<>SoJ0Gj4r=(ql?EkZq{qFu? zJW+j8S9?}hvU;zxTyqldQsYSt-J|Z2#}7kHk-^;vMT97lMGg>6`m|M!U8c7YB8W zuHcBHQ7oxm+NeP;$teY?YJe`kXRi27^D&;dq)F`^|~RVO`E@e6$vA z3aWx>c>@04UZX_5N~_vD$2V zz2swaj5o3Vk#M;KNj#3!E(~%W{Y1l@K5wduK%>(Gn5Z29A6ayJ46AJi25?t3{-D@e zx|g9YbW9e~BSNm$2*GM*+ns8AiK&gU%cO+M=1Dw!zzW`F)fKn)Szk#Zj6tyW_JDJ) zb%!2~LpQk}iKw%h;?3&DmKZLOpmS;&)F_i1q(A{a1nxKGIMBkAbwzL)YQvW6|zf~*NOVV57fUs zhGWoMjNFk!ichGdT9*+~7UX5!%)T_fnu8tg9^8l423Mk4)+c=AdFl!f;6f~RnHyu!eWz@p zK(#!$7eN$BB$c=lV+<6@WJTpuu^`(O+;IJZt0p=i~#R4%OE z8JgrSyX;w6F2qnETnpVf&TlExIs&x{wi_BNdDB)=1Fh~{wq9;;3zud0ckgSx-zAF} z{*c!1a19YvkWxIQ0#XXrCCcKJ3zwFwRKyDpRx!pko9^{Z-WKQ_U%S|}JgPn#W*9Vc zt-c1;Ozyg)8q#o5I|(uAvGu$WnCENi#&*@EP7WdP9j^}rqV>@+ZyoTxfSrzyXjT+l z899)X)Hs_%G(amu&S(jmIaRbkH#k%jkZkJ9)q^2Q@t9a)B*GA+0!3QqKjPOg-mt3!gpj@wQ{BKnsq*mP9Op^t-B{2NBnygUmKU7rsI#*SlX6tHdH=RCAxJUY!s&ayij&ZgzAh_hj6Wbu|p8kUke|*iB!BYUB|Ubv3OjGhErV z-1$Pul@>#b-ia;rC{+=xW}N!5I#`CMNqzO;)WI8;z6r@qLviWy8&d_zd|h8QFn?6Z zEyYT3^g4`k;_~`MNi1-Dh9kILGt_4}YQIVaF`hNnKmHvjg2(%PY=VQI4ShYJJ1Hpy zUJS^iVuGPuC~I9E_4uTxSD6IlC6jak2H9!crO%Kp6dYccsytcut!BeZK%FL}d@-nh); zEpZ#@({TeEx6%nX65MU-K@h&;G8+=zw&ckt$#OL)2J ze2IF_6I=sMY8|QjjH$NHgd(NELXDAE{3dEf;BM_+{E7I|vBu!`IT5baj|9YT@74XX zM~Y?WV9j~zfD>V+t}Yzzj7X~v#hQ*Bjgo?! zsDjE_C~h|GD#~cbN@PUOstFk0Q}0`MmfW!q$?Xy?R3WByL4~V2P2`6pzkn>qG$Noa zfu*ZYe36|Xpz1G4RK1oFn8zO121gz--Mnu#)h=w2e%lDIgls3V1mUN6rlc>X@&-7Q zH-M-A3Xo4iBIJu6hIpiv1-###Q{KlYhX7o)+pFCGkoKCGuojIr7S=!s#Qt%F*vr-A zpKts-y+Ok#yM>y^Ok8Nx{Q;D3+@bbvpvEQfxYemJf zb@Gwe2yuU8q(>A{#HGTyc=s6hl=mk5RxQ{0s{j*azn7Z1z<%mPr^6%r6O5b%je3wg znQ-ws4@N=nW3x_z+*YdcC{>1xp0Y}Omk4#@%S2&E$&0~sE#59v$)CubR_dsITkn#y z!qGCcAoyaI@v>!VruV{omUUb0KsXqfD7$U{jlbhG3|H^)@ks*1)!XW8_~&6*`gOZB zs`B^ft5Yp50G2FBh7k+cNEyol*}Kgb!DMm&2%M_tTkR2-#~nWGm|umJe6=S=sako7 za=1Xyf*8V|EacR0UP5&+AwEr(Qm=X$!ZLZujoHy@XMR08DS_PB^D+f>ZeXT%yhBcQrF}O z{U*-nKUIt~hoA_zKXqucf+^kH@2y5AgUZoe$>rNW-20A>+~D?obVDb!-|*-#2f+j= zZZtW!_YHzNTL?e?4_=SOEO2!5x{Xz{<|3Q_BPWDcutoD%8$AJJ~<_nv<4 z)6cgy`i4ohJOxdrD~6a4xBf_*VNJxyAu}!u3@-xDo9)kvTe*~WQkbT?7->aA!U47`yjW$gW9;q+^Vcn$eA+P_s|66m{~|Y&;10i0a?M3J*A-WN$(er=KuS=o-&* z_=smc$;Er(`G3oDbaN4Cq!$H*EH17u*3)iwF=r{(TYf9Co@5J4`_3JairI5@kyUSW zO__qKl10Hiy)<$M>Cl|Gp3j{Iv75}Rq(WNI$W1v9Si`tVA_WRx&uSZK9L|Hhk6yuG z0DI4h52)lApp`PWd&<W(yf@}1iKyA>KGI>z#&JJGdgS<>g9#h#7kzqJ=^fIjq&C?<%#<{dyz zLSOrUI@lz-;NuSz@+!###UyqR-TF)(D6nmZP8Nf+BkBef3NJNzDa5YPxCN$EZK8N# z8%yhQ?3&Q-_~yk3#Dfv)_!ba35dkI4xe+@Z4R9yo-bAc!wl1@G1|5wCGOA_;ZX@u+ z#+xjod3*KXb$eSg4R)(asA$2M$$%*5hnc{p3HAcsFi>(QB5{-!iqzJ5cG_|rA)1>- zsv@H1mM#*Csdf?2Dk84MQ;X0m0<=B1OG~qG1=_<=zAo1zP|%QD&SSxJy@i8 z0tZyPVq7TWr7`{<1Bm7(c&P$gSgea=w8;J3NuM0cs1y8DvmQhMvt&)lG;qZzTrq!@ z(0Tt3k>5~J>m?`kl94dPQUHXYQkf1>9upn-dA}}_>z%TAMca-=O_cZ7*$e*;AznD0 z>>O~DoZr!Vc8@VtT}P@7_gNVgf-0=p)4|s_pO;$`IweOSgg^Im-2@a)+#5-%N3xMw~2;U>t9rnpI6Nsmmwy*V$!ed4Ol7#unsIC3A=8wFJj!d5U0RBWL8v=9Ln z?`154Z}`^~8Y8beMQQFs6=iZfRi2znp8HZu+uo!w!<{GOaM_k7MT3`AT$G0*^(^DRJ2l^rG6wUNu|bIR8^Yk<8S28^c4@R-p>KTbFCb&+KrS5 zRlQ#M%wN3BEyeB@!(Nf&mf~OK{>j*-#x0rnP#cT!Yq-damWd+DuRgPIr7(2d-q z7|CkO^cgJe-A}rp^MCgRL`VDYf>LlI9GoTnA90QPR7!$daEolZoBAb_>z?Jw8ajPm zTc4m8sTTIURo_^P-N?~(6Oi|!L0EIR89a4U{`tcu@#`)$Fe8_r6)TXa+zrc3o>`Y@ z=*s2Sdbr`E(90G0=eG@Upxq-qE2oMr;4^~tl|1mK(}NNhJ0V$lc$tKkJO$+=7^Gia zxGCuM5p81&ejXDXuLl`qC@Ef`rG&ZM2Z6B)Xz>)n{RkQ4U$30tVui8<4U!425Q?s$sY{PSU13u~pa6hiKh|?c{rOggXTjn=>e~(M0 zY_F3V#!09HL73p@r|~9PJzT2ZGDHqGGMl2DLZS76&wRx90_(d*!!dsH`bkBRm+Ckw z;`~1~Y(EZk`~%3eFb3%L1^SfDrL`Hwl~8@NPSQI)uEAG)wLE!a?e%?iWwj}?+9OUE z$aBR|#c@<)BH9$R*y4Wb*)O{2G^$OBi9JZ)N2^cm@)nu*pc{!Oyw&h`&1j*9ZWVt*v~CQ3!7`oMv78mTB?yE_J%9uKn0eV=+K&5!FgOA zOg43e{_gr#SE0)e-~f#+N~0i{K26ARUi-e<4#%AHm#*fgrIQ;04Tm(g39|Ian9znl zS>=0dka5yhI@bO~*GD|tT8Kadw|ztyaEs5v!H}76x?`ppkGZ4eo1V&ro-*UOM-~;p zkg{k5J+B~BZR>{WHq|JTm@&1=CpRHewO)MTRgrVgrFI4*dz`F-i`Q}~Dex()xNti+ z9YRinc!Op1>IT_ZI@|CqV5)p(WpyqBMjBMeyfAl%!oH_~d62SVoll)cA@&`7ZMtyE zNg#aCT|Sd1+0pIJC`L1ZN>pwf-%#db2?npbmVFs=)+Y@>-L4ZM`~1GDJm}$~aTUn= zqOnZxJoA2l6E!Pw1v~SN>pUNV4BfZVZ-4G#f&EqL1h7Nrpv<8Nxi5fxDJPNfH*d~NQstd)zf}u#u z(B=y&OE(-_IFE$Jb&C}m>4sRt0gSE`Kk4&d6m=uw$Po#lT}XZ=+>w^f*fo8wTVm3B z!!MlW$^fm-62&QV0sW$Y4!I(NuLZ1yGw&H8G&!t<^M-NllWjYU@Fj!xt%8&t)R9%y zj$MxYd6!d44_#M0R|h)wweNa-rc?m_ZKL>9-%WB=vNPl2%viK1Ezx81!Sw)J#X~-m zb&FnDv#**_D7EbCYq95GQkd0_mloClF(dTqr%}&0uJgXG1S?o26QFHv>9_7GOgc;O zI|+~6R*;8%wOo5Kfs$2v7*m(3VU&Wh_XZ0Tx_$i(_ySvsav>#7oeQe-i!j}kt#xrx zVZ;U)gajx{3*DaklXF(pEzPPo!tXIvL+NT?+bi`!6%^`LbcS7MipP6AyXR? zRi1AtkGm&}H&l?Jk`E{YpFAw>j0qSsJ--C#0jVgXXu;~Nc>%MkL$&IK`p9Tf5EJv5 zI_B=y{OlZ~MbSq+Sc(jR2A*Lms1Wi^2sobxAgP~(B(50#&(_7v2QofU!-Ca^c!3m zymi&82JKJKT|A~ylLz5to<(YWGnJ7(6nK6*RR)?YBZ1R%Fsj^*!P_&%ct;OC8X0L% zT%0uJaI;GPu*>>VR-W+SaG~5 zsojKLV~cL`Jsg0bWsCHLO0I-dS+&=P7u2}LTTJVF0R$hE{;g$SM~IRGkvIPyVbT>+ z=oCflIPhD2qBQQ+>OrFZeJ_f|hEu#Xmz%0rnmE?pq*`(1qw39V@Hf@Oh)Y9UPgF@2#V5 zQqAss*j>-Vwz_N^%_3X0d^wqBS_K<6mRpSKGZ!SgkQd;Dfww$xT-pr@=GR3wVX{a2 z#<}2@4eBTx*K0SUB{5&$UBkKsTcXDvZ;`;T>viiIhlA@^$WS~JZf-603@yvuf$xVKc5Y2WeC_vov(t>7b@gO!->$j+k^4JeF*s{XD6z(Sjwu;hp5VU+=@( zWbq5`TLtZW`5LWHxewr=yWZEzw&IcKUJ_8v3fbks14q?ZEca~97hv{mAaIAT%M!Y> z_Ce)C!|>;e$v1sf!SCk7zF4>sGbFVToDUPY|BQy^8u0H2tICd+$_QVJH-*a9?n*Vp zQkjzs+`3V&_w?v-Y(E%mC-T3rg>Qzpg?s%>5w z@(USOzE-ogO#6oIMGn;z_A#Cs340?hTM3DyYL0vJ)2`$9jCynv-kN3HBTJC41(w4< z1+!U~O;r*cgD_fvv=XAPiKU8t6%Sjj*-9B!+$RBi5* zm&h*FwrsPG!F=%<=b|gc@+;)6c@>0YH9l|X%8mSm6RStHlXH~zxt0GAT{i&Gg7LbL zy8oS9xnQE^gw&s)Q0+}NoIT1Gy-J-z`x^TK_+@C;b*b92<63fvy16?WT3zyj>O0tL z8P;SGzGq7v)+9sVGiF=0d{VC1;(5U9 zCJ(E-+`>&KX&j0zor0tD!q9e8r|6a-nmV1N@F-O?(6s6e?jQ_&yaPTMxO8uZAE%N$ z2C+Z2(_lcidtdtvE=Ib+FKM&t0aD%hnzY5EB4UA+S=SUcrY0WmfJX^z=zx#vzA1F& z!M9DOd#UQ`&;%u+y3H^rs|%m2VRuoL{Lq6P!kj03A(raBeev_>r8<;yf0gC(zA-01 z-hB9nFX442CxNo`ChFQ2x07R+(lAZ<7lJ8Y7wO5lp)~dq5h&M$+(8w&O+~ap+flP zq*&oBwS@=p(sj=jnWTc0q8@{QX!1*gQzmDdZZz^cSvjJWx|Eo^tvLWO{$a{xu*gzJ zrND%K&SC6UT08T;H7Dacrvsqcmrg1&QDnhgt9zeyt<>0p^9B&AwO-}8{i&@|`%F6E z0O+4s%Bmf@!OUBje=WfO^kJ!!aP%q%XzhsMEkI-bbg$NPtz`s!pS{*@#DlutqGV(& zk9ymXT8B^%we@X5kzP3WT>WFL{Ul5{F^xlv$AG65)7aWv#V~ZQeXf^aiG@1jAn>E{ zpmZgX)+4G?5#=4JxjJ)`R8CFI>^%#KdR@0s>eVK?WNhq$W8{5svB8;PTC2NgGbE4U zE8ye}v`1l!26?sPay4XXy;Wn`(FNn1>b2w;B!}gb!fiY^rJz4x)uM3xyr+$7s@THY z-$aiSOT7Z?jcQ#Rz4TX|rHAWLE4!;tY?L8)HMLG8_pcIl6vZ-IGNKd6mer0jRa=ZK(Uth9dQ-o#0He4HXbsV^WJl zu8V?#_OA7MkT-nL+I_AqR7buBfy1u{R)(ht1=s0`3dnJys-YEfPVhW_2paUv9vfui zUo427WmPWBS6FgFTY5?9^J1zz$-MXs^K$pCaynnpj0cxnE+{Z;3?co8Jmi2W#~(2A z&mj21$pg!1L3?G&@xBzAT6PiLX1x+A?I7^f9Fo(m>)bsF@0l?Z)gg$`h=oW?{<*gj zVwNpTzKDOs-3`hJu10)%p--y=Gf`!FygQo-x4gxbk4@usFakF*3j_?>{0YXkeuuuP zCh`W5`je2ph3s~0ud|e4lp`lyHJ$CO8r~RVk5StWe)$C!^3|30Vixj%dXO~&&L2CR z)Yq-+(aR{LV^c>`4RIniIC6$#2p%%=%*$VZ>z+`oFC-2d6dkDjF*dj*0Cd0<+5s7( z(;#TwwW?9wvjhUMC@~hWg|3+NA`o9dGV4>u9(g$_jdQmBOGE#uoy5<1XbK;1^ejJQ z{SlAyogO?iD#>pT){P=R1jNKi2O~%hOh&=iX5ytPHVYc(#prTJ%FiAB4)3Q>IoWaC zv|trqOwNFwh3wIyrM&#}vNuDw3DOV`{sqH*DckaD4nYCA2}%W*Dk)a{jb!@uw00td z^xau=>1=hE5B=`ULif9pRhUB3f|MI{mmX8H+IJ=Y+ehB@Z_%SR4SPFm5JbTV{mV?S zb*B+;y4LULet(LOtBZizy0fZ)=>U~6ef6b0n3h<7iH((8ckLRGD>fMKA<~s_xrEsG zMO12ocoDUAFpjwrAc9_5z5&Xl!!(*vs9F*W$>7mC^f7O;I>TfTKl=E@-}ZM4K-4ug zO9V%MHO6?N?ard;?mIW3epcY2rVYgh1p$Y?6n`?@abrNA8Ty3u#DqUHLGyR(pW7Ete2%98#BevQXHzatQN7bTD^vzF6}y~hQ=f> zFuinZ0d?>U;8VU-OWsW_8RD7v0qbO>5{s$%TLZDd{*;#1f=r_krZmF&wALc?%akKC z3M7Z#8*7E(uwFue2H(gM(Bg+WSL5;!>*aw@E>fKpXzXgySH)r4x@T)9WJKAmJ7isj zQi;IQozo~e|3o{5rPEEi=cZFMxynU-l4}&Rg;=FqP7MXH-ef~^8~U2zd%^O(IuG60 z0%1&r4P#beMTss#!RDVO3o_r~yOU__&!nCnBWI&+|AkMHF~M+1!BHxp7JtXnZD}wc zJIV)S%u;)xKy|MG2dVUl^GQH@rSltWBeg$+Q0?E;xJex%z4gzKzpI>);1%(OA*41X zlmIZ+T3Ri=MaZ{}UItd1IA6u(c23w%d^&^>;BT^0=VqedR#TfBCczEAM2_4lE@ooY z8IEOS5ofuggK1DxcdCs@UgKaR>71u#h{g%`x70=^jDRExI@ zOPeN}8Np@7v?iHEoW-IJInRr4*%@&6{s((T`ks=jQOF5YKXa)MAhQQ^kF$ zfT?2p$0GZi0q_z(LwC6&Tnp)Qx8>FiGf?S&y!npZHk!tIi5^i>MX~S?XojBl*0JCu z_Lk}#MOxl?mSaMP%keC^uv~>^3?)uYsP7a*5q%K0ks`qqY!wM+qqm|FDEF(8lE#+W zf(3?TUL}=CCeeFr*h{dNpTj9{cs=^IieGoE5u@Ig4vF};bmiWdG?5UbASfY-GgywM z^*KF6n+|@lxkG7QCHh~#-1w~co{^>p%BXDtN2`ibfz)F%$KNUmM_E#x0k)~F0sS|1 zZmKp&Qp6fs7DZqCEi(5uV{Xk1ILfW6MO3^t*W5N&b1J^GRvX|fHo!$nKiohUdGf%h zkDdyF*J^sb#PE-ZlWgG+3obOYDr zv`Zz13znPKD?gGifyE-li>?CY2VGl3W|t4Hm3mjn zIGMDJD!_zCq4qL{m6b^sisVR5+^AJ`BcR2dKs`M?HM*)GQ6#VBIpUW-YdlrpOCJxB z6(q$Z}sR>?Z{GfH2E|Jp!zfDvg5L6 zNqJ$&0nQ`3>S&bQ-YYIMO4^?(pyy^P2}prr9bGpdjciIDTCvtU=;y(_*8Fr0I}Sml z%6v`y)D!H!KHnVvE%ffC!$t*~2AYtA?}flxm%JiJ7nRaQX6&R*+k|_^fk&p=O_-g> z#>lZ7sl{*z?J}zzMB4)AR&D;F0@XM3B|&Wb5j@(yVeqQ$N?a?O#yQ7SCmpjinzc}q z8hl2hxKk`Rk2r_Shtjoh+l8gUk@siY((tG+Wgg;E=25Md2Q}@{ut7X(E5rw5=u2`) z;z`|s!s~TdFFH`yb&zg)2SPFHkoqk!&8R+gXPFaA`&Wq^ib$WFBU}R*vV0;^L>bj+ zqp(ErWKl;e587p1xW#GeDxA3Aa4r>iBEwezPUaPBS!&e7x zvi8TGLKL6G1XX&F!H4u9M5i8B@o3z8p6%dyro~eWR6?~35ysyi>j4XPMI5x7a4FYf zRo*`G;%)UwA}W4dOV*dGEb$nHKYaY;LtNlkXp2RmrspW`fMQM0s-|aG)dX3Fv~cie zww@FR#dwANV+Oiz0?M+H*)g=d0MNfIomoU|l&t^XF1h3eq`nqS&*-#U#=zpXCXVkB z9Zpw+sSB0->wcnko{MP&@?oCLMVb17E#N{86*j;B%#z^q4+R-)j7Vj=D=~iPNVvPa4*8;FiL$@H6>m zR@?YBwo#LAku$r>lp~}s8?hZ1QEe!^OQ<+_s^^N?ijl8r&2Z|31Bw}%h2@35ueBA#uJyS1a9J3RJeL{t$sK(gLYkV1KIP#GdOB1I3BxDhHq z>D=$JM;i(3Hpq~>5rm_m*#`8BqNVpc71QsTK~LQbdwJ7gP{r)zw4Qcwh? z4Fg98RR0!+PLBaA6vZ))F^Lmikkk^t&R}WN?I1QVxlus}ts_3 zms6P77a)&wC1Sh;jE%&Zj_6j+2$$85y45!-!Ot8@xnDmepD`Hnu`Gpfd9uq&!SIq_ zw|2X$roL%rytaXcVTek=fy-n7Nm-XsIKwj8a*0+#E27B;<#W$Uq`@td*+igXBd+$u zOK|9{=5XAR8qMf`Nk`FZXSF9z3uA)vALF3nQwo$my*I4jc(?3ljFfAoE=*A1h=QX7dh!T_sx!ZYs7QoYv5a%9E*%^7paY`#xs*zjejM_S$2 z^VhwgKBsZC0Q5dc2%4M)eKEuP^Gxamr7sjMNo9ywJU#z#o`9W0iaw=_{f;*%o@xpO z-$h0u_17bm{CvJ-9N}0NuoT}CD#Ya&kZ*7=22n&>#A&)(E9f`XM!2Zn2$sljLvM#I z_}pnT)lIp@=Vl-+_Jz`5ms+8%VA87JpjFci+`*$C%j zF_RjvLxq~)mC#PnRGu8iWv3u7k_d*?oz1EHCZ3*elxT4m@fONclPccAzEzi)ut+NJ z^-^r9?rvdWT59D&u#jS6A(ve`P%P2et6+Y0gS43XL-`|`c~6($hgI-pF?$x!MBJvy zl(lQIzHtw8L|s#{VRqNPiw5|8TfqV%`+mTnez9xa33A~O{U&gMBY9?h_sUA1vn zrDQQlS#h%CPsqEGzG~>_N8VrIXR);V;`(5T7qPk8{pI2rekvHbUVGuXU?KNz6D!Sl zw~6?8Km&4AVz==~XP1$vMui?mu0T6kheGRs_N3Rmp_*qr{T9?AAu!JdUy$xz3Ebcn z>2Aba8{W#ERP{6c{90K_;K)di?lf_&-a+7m3-loX`R85~>@$VpRt4hBt_cC7-+=NA z;WMoODa-F6V-G!O^~oqU#R~Em;nFLRM!xWRjB-%QKwH|i3d|I02zimH5u=*AQ(afo z)lLOg*GIKD_m~DEgkGI9PDCww@cMD|>1ZNIniNnOt78c^BMH9b5+G-ayGjdL`AD!K@n>AgcS&>Ahg{_mFf;(_ zD9J!e>r;@I-2SaAM}(jszA^zWzPH$BRW80QV5|XfGrq0ox{C8abyx_Pfik36fjolm zlf8K$fYvG;#WB{n(}s*>DcH`i4|ULi@AXoVId4hr42)0mW&ahZtL z*MG&|NyI@bRZpw{;lC?>i=5pm(qP8Q!(JjUHdLI^x=( zmUXg=)V7I(?eCo+WEQbB_RV!e%3iq^vW(}OfGphb0Uam8C!k%TaQ<1@lO{U)4EZ_Q zB^+-G@(?H(mnvZ}CkeKINp`Sk%AQK$X@`(r%vFmCHqaS72dB-LXWwa-Y&G1V_M2l_5W*GYPPD zqSj(-vP8Kqdm&IL>--?>?t3r$ox7}Em+M~ZubkG9`~K{%sD*m)Gvx9CJ!4mA5qCAU zQ(do2NHwcr63jUj%BkCdn)+ch51uExc-U4>e1o99|7^r5NmIh!!$Wnc!Bv0{F zIORlo5XNPM780ce@+==AZ@5$qDJHuzFC_=g1Sjb*aQG4!P8{}Cfu++a>6qRt*g|~z$ zzMRC5{}+BdOD=`i{0W5nNz_wlJGpf@HObqlthZZ-x4KEs6tA%N+n~0;ip&i+-|FoT z1q-mi_1^Wv(XnMTJXE>I$Xkc=ibw^fT^?aDy2(DtF(`f9U6Uwr9-QceGl^5?RL+@} zBsLXC%(|>2>zWM5dk2x*LdN8sf!{@VT@#wuubjo$`CmZt0ta|5)oArzge^D@{idE3 zYAazo9Aa%DimnE_5G${EC*ya%4ovsR8Cot?_vu!D^TwZ)#)XMa;?qs4 zyi+>Jmnm!SmbNFotU8MK?*fs_sfZm*lV2|Hha7pD8r4r+{XanD_~6vKH0i&P8y{H2 z2Y!caGz&=>Zafw8^iVcsOZwOgg+dwH5Hf6Q!1a{KqC9(aA_9zJ4m!3ywdjGf2R3FA znMa5-Jn&eesS6vRnnoK6oo*~b`TS73jLvv%qOJmUtH!uh*R2u-0Y#EvYJ!kl%~u#) zv4=W;xo&Sm^F8Q3RTdm!yzu}zOX9HMFk|~ma>i?k5$xPhRqJD=f>kb<6&8Uknrp3_ zS2gXwT}g>9QZVcj2j}vbDm0Blt@YC1qVpHwYEZshwB(u!g-x|I(8@7kFw#iH!sDr1 zZY_j6u~24P4<7BbtdcFmW&J6>>^X?njayy)*yBSQ{K_pSND0BK;bo04td>^)e5k{m z0E~KjUMEVYBR-a7N0ExQi2cXDby6ANGUp+A%};en%A@ePaM0!O9BJ!O^L?UAWUM5_ z3b}g@|HGZVbZ2GWboNr*6oYqQkLBjE+Vp~hbSO4gTc9mO*}nKwl>5tpt>&(pLpmfM z5z`pYse3mF!PA~P@4;_6pW)c+Nj+5EqV7oh*F&~utoHR(dxyfnBd_}#2Fm8(r>K5* z8@k-NObSPS55wrhR-*JxM6lHF-->j@#VZBqJh0`_goyP_m`T&==UrL51{65D!KTCeXW zaEov2^OZjo-M9N%9V}BpXN$Vy4XG`$b?5QTO5I@EfN8aPC++-A4$C`j)=Ez*VBu!w z3K*A%rZHa8{ZPeV0%FL_-ZvMV!JL^1*qmV#tr@gkvOhMoBw$}W_>XRSvg^H{ZxnqbvCnMyq95u|=mPMo@yUJ(0C zAhV)3>S6{$2apx_Amx@`O|o_5D75s#R<+O@&z&;U4I(F;#mOXWx=upt^Kc)bMl zNG~C=+EhekTP{iTTwdNrHcEFC$v73AjyFv$Yr8I_e=k#7*zitbAHQXM)Avm0U@Y`a zj>KZIuV!7Dev|x>C+;Rs=03C`p3D~MO0@9cyxAI-S~wvKEH2&>8DSTHs9+oTvPjX9 zTP1QOFBmw_QeT34FnwG3(~wBQ5vAZmx1#q=($$uw^OmLS;UEW9e(xRX#Zh+gES^$r zPrH$~J)!A^Lr9me<#E;0=qjD(JYw$ZT7p$?rrO>LR(gHW{lurvz$JAvs1f-5c%bLU z`*Ku`Biq$-R71dYS#_SqSJfswovq-2{`5y7_CLShg~{)ZmsO6c1)0KnzJFCskE)Zy z4Lqy1bd=#SW=p2sx*42PhLj@u7QLeit8FaDV;eG~I%9aItC$*P;_|v#K_20)n>(ZV zk#A_toFi(KR|6J}F`P=%t9VWpx?t{U*SeVCmJ?9#lqxsXNEvu61oJ(WuX4U83)6~5 z{f`fRRl53XE?keP^Bzl#sT+d<4|kuDRy7)&Y$FOP`5IA2?avW zL2l)D&>tOz9&$J`NvVXW;@o@a8zkfUZohJ4dN`X?2G>Z$!m#QCwXAtZgp*(B1p|OqWvr3QBXK?u>$5Ow z(P`LG`vy5nbA6V#B%Ghi0i^v`H*QEUE6M&8*%%!4JXC@I;}dg&Jw_wD6VpF*z^)M} z8;;1VV(9Zeb&?5g;S4(w7dR*SeXBnoq1{jPPD%x&KXx86)k{hlZ&j6oT}D@Sycas@ zY6aJ9M-1i@Qo`mdAcv90t^z7mUAOKbyLt_h^-(bEub6jiIc)1X3tIH(n+YTN)1&;I zNl&{f}%Lb>vrnUs=+FJrXy=!@bzkJ4?dB{6W@ZB~;oOllu& zB5l|3rS;0Mz*5SqD^)*>c)e%+2CP_?$8TpMu6+7^Je` z09HV$zq7_-$#oCB{NQeIYSD(`Vgb*gRwq2@$?AmkDMA-6{p)~gsrumXxS3YNGc&LfTzGsb{*a9u72fctl-~hd?zIt@=ta)j*W zT{tF7kWaqsXyU=9?p7w$-Jy=4Gg=9k-Ljo0UN2!lqf?fn z_6>68B?piiJL#dX*V}IcAqmK%TV{&e6U?LGK7UIXTongK+da-|>Bv{)NP1+l0WAr+ z()vA8yo)P?>=_rEDNnYgFN)43(O;Lmkm$J%zVo2auN{Yeb+nZ$-bgb(6s3%DrHi0A z273MNSuvJP()e8exEP(F=-V~Tq zfxmQ#yQUB_`517lcYLrHPa1c+ympu~VSLI86fVcA&m(DtA(d&^t4#(8w)S%iGq{>< zy$=Gk#^CL)VRZ9;Y@Oic+~Tc6Q-0<+G~pc^bNZHlmMa7rxT$LWj1;l=*aV|x9p%_Y z@Rb_zcD~ODj2d`|Af$)8yX&9^f4@f;D#tddMfTh8Kc#*1*o&L5Ilh9Xq4h9%=?u8i zt%a}WV2NziVBtV*bmy0THR7@lYBM9#^gzV3?6^VSRfo{O047y^yKsv^5mLx`9JB&k zP}nMh`RtMa69?K2zCtMi0iDJi_BpC^6C0ikC8qG_V(M2osuqU!$6}=`ObokTI^b}q z(}s^4=2b1wp!m?oGamJyPzvN%E`m#G25?ZY$PbMHsG|kHC~*fIHXSh?Htp|X zG|fPR>F8oGL(W$kN;7zCej6FW$3Pr2QH);Dnco%vzm*qCvf~H-IW<$PPOJBuMgwJH^ZGA|3QfD3+ z^tpHID<83AGegk!1^Rimic@h7SfZD4axyj0A#}i48jcqZA?ZL<)Y3Ex=i$_Cq7Y8t zc_^p9M2E9q1RPBS_Hy8sfkS{JZfabVY{uplx`i5J#%njpnu2tLH$E1LVGv@E^U;Wa zH~wn=S+#$k+}C;6i3h4g%P`ef-B}rL&4RLA6ogh}_2tRr;oxqqf?v_}hV1>9|mw3N~(XcG=-#*6MT4IZ9Hxg@KDJ-d@ zFKYv^z#v?^76R$IyYb!^!ZPcajt9SnBa-WaQMoD>bi@V3BRRNwp)R&5MgXGO^NI!z zhuy?yU?8tTeYj@Xgh8A60|_9<0s0OCN(tWrOP$n*e#<3#rS*ATw}mu_Yfd)^vt+k- zUY`lY>+@QYBSjQsNV4QZcA}I#=5AYAO^FIi2S)LYVu z+Vt@!+NDsZ9`$K7hMKCQHg7V7m@G)uArt4(3{?IVZ7(Kc3^N95up{g!eh^_-v9t+x z%hE|GHMtg@ z3KgTZ()vDyq?l0E=VssRPVnUB++aU=mWpmxCTuNajEK7-bgXc=)!l3t=2lg)qcc|3 z07}GK9dueR6Fqcqc0s)IbjZcBY~73RcohPknjTz#pLgzC*FqrOeyuqqx-lerMg6o( zX>vqlOoueB!82HwDNmO0vqrpIa?qnS7m1;;fkL|8ipkd!hi<-&^6VFaA>L>so=z^L zr8p)|DPX3|Qta?FED^jui{?I^b2{Aw2=4Uv3|K3AnWU*-Y1AhOkzuKNlq)Z_Qd`PgOt7E$LU})#ruU`Vn|2966n`h#K69^fAu+{sp5NJOhFS|E zSx9D-$cc_$yn~lVLZqmChEeiE83te51g31ub5;ITDBVrAL6dGVkEfAlHW=nkc#{-S z%X?Vn%~|RlGwU65c_NnP=>nt1t0Yyr@Tq4h?OM(qJZ@TY5Zai3qp=dK*Q&tg9C+@d5iz)a#cRMV8Msbv;i3V6u|IeRC3e-wM& zBK&9_=0g)#EheKxGx1b)UYA}oFXbe7F`Zyv3Ye->MQkm`r5ZFmagM2nl&mB(sCm7u zWfdDX#SC<0u;d(xTsq8~W!fa~Ji)M)-MeXq3O%hW2b#OsUGKEJ-W9X@omu_vxO5Vm z>^(DS**Nb*c|VzrJp)wa=x}RHnB-ZVu%p;L?&Q!A0Nuoce2+KP=^`gVrPgy7`pzBF zI|xMP83-_&NB9S}|NA4ZwvnpvJ*P7(Iwj2c zI*qL=fdwtX;O+)>jz_MO(d{MxoSLx7>7$1<7V%~od{_r}VYj;H)q1}R1L7UI=`KeD z27-7oQ@ON|&UY5g_q$wwFbvzO56Pe5K^rrvWPv1V{@W|1{z)bOdyInqfbMO)_+j{6 zhDPnYwP8- z^;8GjHohahs^j&lKNajfG^;&ivMxZ8(c0p~*0$wcZNmeGszXdz#9t*j=O8|v#v9q- zqK{gB=$S>>wBpTV#C1P~v*gIZxUD^CuIZk?=TTcL*|dV}+T0bCR%pphZiLr-cFP{0 zzQDgp=8cZ?LkdK0klwcd@Sr5Zw3rG$>pRG}E)5Jm$cVUy5;NYV3?2`LNzN#^!X!TK zSJj1Ycv+A@y4g|m@7QRb(kDyX;ndE_Rs*pbN+-m61jvSBWa0?Xk_p!5H{aVi7?~_G zjC2kMLvv3?kqFvcB0MdJW(~27VI^5y3zSDruER`#TPMFZhGJmY9-TPiZ_f7L{qgLR zYp{H<$}Kydj%j*iUrR4F>x;Tb5G{O4;1Pi*3VYd0D#==y@HCn5^qIE`c#G|cn<&dd zNxR%Y^!fNAz+}KUTgWPE373s2cTizbeU?bvwRN9kCIs@!?R%kul(~ShNv*K z=8KYi?W6~1bU%%P>KQIxxZo%bkkmC}F`=u&?43k}H!&H&XV{1de3U1gos8me#^YNs z>L%n=;#wylB__0xRm?q%wGcDJ$9laFmYJ8I0{Mw<1Q&e7R8$$gi7&wnun5g1bj5pE zrrTxn)_i$;> zNHP(DBo)i!Spp^MbA^~u3Gob1+E4}JCZ$#wmK`u6MhGo~Ld!^_NOGsa;;M;&7Ii{> zZ9~WipCAW)Y2+nmqyRM?t;$l30?1N#cgaLOG@7Bo>}1Y^U=4@|6v(fN43=hbBa-Kb zgFgklBU;koCd}cQOOhe$ybXo~j?Hy%PKxPeC z-3ABFhI4&@)4^V}p+4KEGUk055@#8YXXw^fq&*-PeAAm0O-#cDj{u)jUuG@hjP=K zkrV=klEgKj*!*E#`{t605nZw2x(USE^r>6UZIn#SSqj|#p90UZS55pAp2RGCAT6Ti z0c72xLvJ2qkDlD+m>OQOd4m9e_1vtlvC<#7%q13=_=A?tPkb8nsMgGTUoNv&dw#x@ z$dI{{Ly<1F%4je*foL#d8^$BLG1XoO-!-FP=X$3!5&*P)5h_B+iBR@E2>Om10&N1E z2DO4UW-pX5Z%eS0j%XpIvZG$=5 zcoDLW2EmPyj2}|HIIJfKf9ENW04C;+fT?)hBrm@5fS03Dd3doSV?X~u!}k)4C6n@Z z_G{107ABr3w+0CPHb?U406{0;b(|*WBW?%y!`& zlftoNGCW#@xx3LMSh*(##1zpHK@UDBKFT*9-QTsMxy`z8?n4|UANcu)@Lzq9dCF4R ze@D6EKA=B1@jM_XFx7(1+&0y$sDwIBsDJt%y#q*}D;wQIc*;L$G|%fSJ`w$16M)6k zBmewqAl-Ek$_Ur2aEEh%uz1)rPp8FTjlqqxE2{Ei6#B@6H0j59?M{;%r*M_H*5#Di`?^>1NxSKz@?W3AA6^#r)shyc#pPeO~$y2e+XT(|cP!U?$YML`P-1HCln zsdQ`_z`S9RC2!DPg$q8i_K9PPaX-Mb|Um|~c%yH=MknfL!YbegkONgx(_4`%57I?KE3pn7~ zsz^KweSI*1zxaZeZ%AL#tl)KSovP3F0xY3h^_8AW{WP2mNh^K5_%btmQ^-hqCm4Ui z2glxnA^qOd&wctC)r(QQ=2EbN$6}~bXuI^kXP#D_sIC+N*TzsL5169Yg=2nFl$$=i zYX(T9)Q-d$mZ~eVX26FQExmGS2Jpk*(Zm)W%{n{U3T;UR^sglnAE?TAD?XIIXHzgK ziV7A?iRR&chTE+WY2#GfS1lPfg+T5LNmN-Dg(HFro&)A&{o4Y_(hv~d#_$baz)dEG z0fC*x0w&pbng!;yTp~6b;2;1eY5gUsDZ<5rcpyh^&#SuKh^a{m#{8`-?iM zo48p&MIVpS=M(B@!ynRvEOEO^S&;HgAZ(H@8mDB-ObD0DjBE|3xKrcRZ-k-MQ38vt zOr7?r6Ccf)4GLt1bAkZn5kC{+mVWI<%}ydW?-7?vo%zu@dhe*Sa#xAtBpeNbw^;FF znHoj@-x4423>{6!&kA%YfuUgm-G7F|@vxN9zm(CU04c?#L@+tIj124Up9MM)N$(Si4Q9$VQy`Xx(QF1TN!b=QgMx*Zxcl|8A5D6c=bXnM-)!#y%xVr`j<|?(2mE;ciWT^AD&h(Ba zl=ll{&W>R)v)k%+ei3|Ri%$KOIM`NQWAm$t3^P>+a5Fhe@pOyfJV8D&H>8yWewHcZ zMxwka(DRq5#3+~%bNM;?DyU_YDWpo+t;=>~l`qIHkqW!5f!#e45Dzy9jp`aGU8%tK zu|OH*@H=KjfU-?K+ih9WK;~7Qrd~ z{N~K@Y0;?mdBhHdAfQyY)M*w9bL=*nCoS%>PXcv89YOU27$S2ub0&{c_X-}p@$6q< zsNI%R@-+j*aj54;Os&pN(A`O0FfssOE-{E3K&SE6`dT#i-vIeqe%Ixcb;Jo4_@ zY=M!OgeEIP^LU7EL0$-u2oi+>Ar#t#Azj2FpX+vOeed~I(n@+{J&BW?M%k>=X4x2M zLo z9#OBPszNQf)xuzl5MtJ=xG5j{Bn&CUy35^A$;xt5N=H#NxP1ppn|3S$D`}% zENGrmhnCz?u)4tHDAFXNzZ;N&lc({jma}9Y$g{P;#~jvtf*OWa%oe0 z3h9sC5pF=S*t-2P24xpW1%4d^xDQZQx?K#@y^(~!ZZfVO+7zzaxYXowXJG-Xjb2F? zwp6i8UHS2ZLyS_8Tf_lEd|T@#;P_j5-39S>%b|X0h?ISqu*-t5>kVoiJ60vb`Sd6; z)6^htNy?lK6MwZR8pBpUb0JKE}RM zNug4E0N8p%AMV3zRrkKdAnYGd|&E8VLe$mx8TjOt6U*kvp zf1K4J*d-)+0G<#Bg!J><;CgCo9|1<$6>g`NCkHYgj(QU9)bi9hiW6lP4*IFcsuM~- zzd~X&5*22Uf@C1_i-=`sw-of!KZ1uEE`D}lJIIAi{Y55?zundqUde^q6UrEFAx3OM zH@-#W3zpOrVI2gk;M7YJ81$q{DHKX8+xYO5@-hO#v=9amZyNle#nV~5HT7Z4)^Z-5 zgko7LRkC22=xI{#w!mp3pQl)|_&d=%bMe01(YmEMjEaY98s#Ubl54j}@<0iPJW6%} zFWRT+dB{2_Mun0$NYsQ`);*U2S}S7rLv;CFZ1vk=*Gd-CT(GK^=(AN)dmhu6Ypo>L zOep;pmYXxHN~*H6ibb47HE8{|RCR06wLop+BZWmRZ57syIk@qz`F)?7g-o5H1A1)q zlVV(0kO)P}fk++w)#yYKi}Uy!U{;%K2JYeWDu_jkpI6y8RGjB^7iW?=dP60|Qe99i z;);TuZt~3f2wOsUEVTy5Cy>(awfm8j7y~8^%6gvM!_9LAOUbjDOA=go@H7hGhP0mT z*-&i{HX)UQ!2;mzr^ze>HYF;p|Gjt~{gwQRzQv13OLj+rMvsEe{Ykt9$oRS`vOsCU zjJI7f9+(nZ6~wHuBzo|fzO+R5Dd&qJjD7 zXA>91t5LFN(WF@Q$Rdx51x0$!1p}4_19)bTdq>YQ@8lzPcP|ckyUF3aibi~=N4>cY z{QRK!R__w-a)GQ{^zsRNWQU}2(N-Q(hlzx70W5TzON_>33PfzQmt=|sgt*1Nv~IEQ zQ)74%%}Ey{hNg>`>)_pUUso{+PD3uW7-^rr7h^Lmio4ktIbFsNVq_OA6ijp=^Ng?Y~`|Hqx+K$9pknK9_m7^D!VEUr=7X*}Chcc2vCBb0^KY9(5$Wm`WCh8CwxCe}km<0M%i zPpy%|04IEH+^%6z-THadR(hSG(u>^)guUn?`2af z(!yd+OAKSW<>-c;X`%KIh2NQ=^W}p%b>g&V;uH0>$ryZR76A0lOfIy%#K>moU8~S$ z=&0vih{Nc+?T<+YfVE@W(DH0c(DD2Rtm?yTDx*KupSi-Jn@9vm>tlqF3DV)7>ozsJ z^^AKx_UmW?i&!$l{^;ab?)2D78S;(_Q^}4|W)}hPs zaV;ajXU!w3A&Z#8Uk+7IOoH(QIjkJwgwz0%@-Bjk+X;H zEk-D}@ZvvTm+XAIyg%#P<^9Co?g0}F2!yI2M7*}>bj!NaHFm+6OvmtfPzTa~|4LtX zr>~yb?1}&|h-&HA?LySJ3;2ko*@zs07x5_o(&v_ontD@Ld-)1?KBge`d3dtJbw+EK zhtgHg7j!tqD_x847j&!KeY*H?50FI5epNM(q$k+SDCF+sVA9WNCtm@F$eEuAGQ7bI z1q6q^gn5=jg$IZ>M+mN&eZb3r1X_#7<9-7tXh*-HtlV$ob{^mq5)h8#&g53K-`1*{ zlGQ-%b2o~{%Ijo`MX`%u6N+O|w8%$QKRd7Nv--UWYNW$L0!ig}=iBjiT_fEj<|d;~ zzc1C=0peW>i#rR8`+5~K6QcOXRB3r^&|IEUcx9QpZ|h||xz{U(taE!ZnRt`(w}14O z0|=RDn?Q4rt!UWfcS?j~NB8-^8%_DbX@B47v}PW+JZFa=Hu!jt_7U zjO20}TSLC47IE(|kYpLfdy2eA_386S&Xxz1(9tam94=i6rA1@oRKNqXeG^mp-LkVf zl-o`~6~d3ZE&VUA@m!$ACR75Og0e1iMG*W|KA7)35h1wks*ZfLD}5U(~PLQ^58wmwI=X~UV3JrvYZXQMXprK$|b z7ttcJl&riFRw@-#ZwkR3MncMAMJSAK0P9a+bo+?~>N%-O;N*;u^(2i?xB)7veSqor zIBbKHz+I~aF-apBg&n#v*4-Z*TUuHODIeu?T{z)FY9F;fN2y*sW9)&1c#X`Yq=Y~C ztsfkpAC&Ao#p~%2F!9ytLtfvyNJOs&Wcz|R;%|~)+n>ejzX!bjmkI!-#&(!eZ0-wp{7w|oxtJ7yGvaUz-X zJgwr4b&3%w`+}&N8V-pIB6I}_iNRkPw2l2$2~@bX{yP-Vx?hJ1)ICdoKA*Fn|8&lF zsCxMSK#%r+7+Hw`+PR}^g?Ow|;&S16u8&?tg>clgth-hf1}q{^_M-pxZmZA?t1Aw|))B9~h7dVDGc`W9PO$vS z`bkd%iajJt|4G;}$dC0|O`x2&X_Uort9(xD$J+Og)I-)>7 zhZi7Ib(fcbvQ2=5v6{PU_d>_401hE&uHjUVE|#u@yeoJ`+v$y3;c>DN0Hj7N&F{lU zRgEBdqlHfM;=z?li5BFgrk1Mj-M#AZy`;)zT-_IdR{aV^s?G)DUoKKLMh+`}q73U@ zbvMzkdw82xAltaem3oi*F~}>uVF-!<+vq?UAhKPXc!g$BYc)|}smuhaD+*GwRHTjE z7+=9ZM3E8{aI!i8LX~E#+7_)drE&X5HhXr9JO;ed^%I>0^i!!@h2yz#kVy)k2;#k1 zKgUh3;E)JmBZwS^h=Cyxd5sdxdy5YANeKd)FhAy>D{~eywxynj@g@;|-#oLa-(g2u zW+|gV_Me4npVe2Nf0!TJXTa&5tm6+{9(ekEzHelf)(aEo`aK!XIO|-+Kd;fN8t@+3RM2V$uj2Y_%zjEO4Od z5|t#rn>$GVceG0XKiCE8s1)a85_yJ5_dRBjo{7Zpq1osO9-8dS5WA9W2Y$+;(cs!8 zhstYt_y9y{a zM7RNsd*6o1m@Rheu6su{1y#*`>gu+OABHX;v6+z)TK@uvR=dr((P-^=SsY1#-P z#gelC4kDT%6hCytu!62*=b;ez)&KA(?X~>s)gg5YRz9&#a`4uCA>hgU1U;mxfUBN> zksOlmEdit?$kzq83m!GL=ldHVRf~V9!Bev__>JEIt6U+)y|4@|1$37B!zfn%E&nXU z+pVz0O?~RxO?~XSC9l1z8eXyy^g_w&{^lg)0b5)v#J+?lef$;lB}Py2fk zbx2HMkelQnq}7}nZomPsHxarZS`rDUC)qYXq$h4hwHCy~hzFVw zS;?^UrJH3}qRK=N$*oDP>Io%Vn^2`owV=Uq`yfNG3UqQqRC)65VZV%SYk>zzB=}6$ zQ-;5;KotGBDcwHsuhoB*9!9yHM=jW2Fb^Por)n+GM)o!+t0ndLx;~SGoeW>vd+65a zPwx+yxmO=&SZ*Y@Y9Fx($&X=DvX<>Jwc79ztJ$@<$>dkU z1xehLsxxSNcc`suf0tayBBfm@ETAIWJyKKUQM(P4iiAFT8n zd$z@jD*uei1Cou{uV$IE&@QhsarSS#j5q!{mIN}+m5!y61T6g$h*jW zjv_i zES94QE%?`H9V0LE0OOfu^HFYBJIcEI{e6UiQHJ8rqha`bV6cYtM}JilKvH|GTWhntO>CbBS&aK}HqxD#9{`hYM4tZjxH2%MwSnqx+{Q z3PbGNxrveHHn9lxR{4w)-Mk>fo)6!;4lL`_KpMK9+vL)ZgF@&rqX_xzQTSc28agA-Qx&Y6MOJ z%Xyve>w2e;Se+x>S;Ux%cLCO)(WQaBVwU{#1)mc6I;`46kBP=bXpQh{-qEE05$a`9 zsab$xl!!yW2!maKn4t|Sr_QCm$6v%9zK1kx3I|H8OQe>f2ttm2v}(!ZhZ@9ic0cf{ zQ@X_Dyq-yww z%zEny-A5eRZD%JsTUg9K3ru{Sg=z|~jkFf-qJMYVOYUz9-NlvaJvZil7a|J$ls(bZ zR46Q`_|B%-`&|fVjJRs4zjS7GnKbpr`5Q4LoX}jMK*_zC)cYT%>Y0^dh+pFbp zqvg=dJvU1GN^p~H*jL`i3>`V{=jh`UJYqldvd|}Sv-S#ml>s^fM2JkQ&hn0+K>^eQ zTgoths3QuSi5}#YfyLZd_rsBht2u=% zTgi3H(Pei$EtgVWL=;Xl(!L<_&ZtFvseoxjmKvp*ijZig;>M(=7-ly(>xn%m7Z`SR z6I-hpf=4AEampUq*f#&DP1rIKu)qY7<$}5mQ$-u59*9P>LmD zk#HJJHR4Io0{XgLUCFlQ5b`{fLx8+8W)*{gV%<{DYMS#P#cQYxu;jk0F6kbV1bqoS- zxN_o*6~B}lq|dBHW}j1|-@2nZ(oNFJRSw* zfgkuGKrvVSP#C~S^TGZ8lqi7XPvr?%`V9RxZkf}h)mRB z5gYSBt~sx9oz#t%$t&v@lV2T)Q(w{u_~Miif0N`_>6jG7V%m)hH)lV~wZq>sGp_i! zz-v0`_u&m5t&Kr7(up(^Va`8~{CgRc6`y7}fpJQ|!zFAuE2&}&wbZFWoeC9?QUDN# zDSPCa#OGlRIVy&?3iSkgQ%AwAERu&LDA;LO&>R)0_z}*FUg&hTUFoR_fL=h?O0<=t z06B;eot@yMu<|RC1b~x*Lp;|vt$liZTC^EA6Q~aWzkczk>1Ej0eyoS33&yNJWo*{| zcn8W5$QByU=4;3qnm@LwYbP2Ll!t3s9H(vk2hiT#M$sU5t?!@XVE6V_w8@M+QWRwER7 zCCO;EUM@Elzn9Dymx~q|YCSog*2p_z{ePfFcoqTHzgB^Iv5{012s zj5oB|XW(Its?!QaG#5&_{H*!+%u*xnbs*{~b*m?!_GiiH5*6v_8s-sj$S;r%!ZbM) zY)kj&cp0N5oRwGcVdW2+t@bGnc2Pb10SUi!=dM>XT1UO*KV*Xq5A3oh!>trLZ@XZWC0LC&5fL$h z8hybk0uREkew zBx0P9Nesm_UKhc>aUq1;;65Ymscl{<)olc?@$8l_vV26|RPNL*H&No0!av>+RF84N zi7|GT5{@>U3#0_06nfZ}7?CFXZOLgoI@QCZt=euZ9amH01MGt z!AZm}?m^vF_ix}0*tyJ{I%8{>0~dW}0;j~>Wd=I1I;W-cSgosA&Yjowz=LRuIFtLE z63GD11$Me(%LTj`4B2GU#iM~@cV!xL8+?Gqa;KEAV`K4Ue9p}zmY*v+jg2YKC8sKT zf-ALL)@^QfDrBMwW~RCBRVvt=DJ;qUsimlq4Ad%Vn28p%b!StLWn{T6ZU}}-tWJWA z!ipn`{dhsrV3Nf}Gas9a(=|4fGL1F5ZjG6MGo?e^SH5S2Wxx3-b)bMO=WUdFPk?V< z#fxv@M(p!Gb%LEjp(DndiRjW~W7r!absROJHl_Cb$zS-+16XTPSkJmiwv{af-Ld3y%r&|5 z$yU`6tuI9o_Etw|4Smk|B1SyG^>6sHQ9{)NXkf~6{5n_qMHtu6uddRw)MV#lqs%nn z`yl{IiWrx*8)&$iU0C>?=EpbU)b0OSjDefB6c*>E?owRfb^TP)WV_UdmZ2 zPsK%TbQd4y`jU-&Wsoo9xv|VI>86yI^u;db8ibY?g+|iatkeEQHoXVkp+RtbGz(8L`mKI8bg!jMLJMAu~4}^E2Mn@$7Zb9 zs4S*&xlCS~c9kFu;`0)X0O@oo;`^`OpLL_aUr|=TW(=B!hhN--&`PyQMcmk2zTkO)Q{>gC5J>R9n~%Ez8r%_k+hILEX3 z2|E~&a#<6!Y*w?o>1KutXt?dJ_-v7i&z~=}s$>c1{I<`7lAChaf&B3wn!W7jNmUzo zxT~DxB(8TQy~OfKI=Cb^j6BP|JCB!!VttSC0fQD5_3^@o_s;66x?1A*D44y(coBQw zyQ4n+hCs`*MMs07?hrM!@R9AZ*X~;t`(=s;3iyPx@=M0KM^Uoipx*8NsL7I%pdETV zTHxwjed?{_UM@uV7=Cy5XtCttz^4~^rm^DgThw4{8FNq4tZ1=f8@g|+SFa_mD{$=r?4LBG~oJ%aq6 znZ>q!YRxJn2+1?5?Ww5afCs@)7JTV&&!SIgad<9eK(le6hI)|BGrA$D^t|4x%~?ll zF70vwDaVhXMIbnEy~h=>7?itm+nYRK>L6uxT;H@(waevE54tb1hP_RE!$ri$6g#Ov ziHQ%1e>{FOjgc{V@5He&BRLBtD7=MsAb2F0dKjv^BStQ~41$UFzUbFVtm&jHhsSoD zEY=oltB?A<=4iT~#=169-P84|HtIYqjc=HE++128S%0dYgf1sf*xUo#?|w9`EzYF9 zaeTAI*`kYfJIQI13n>{1-B4WoU{w9umwNv>ViKBzR;ou*M$Zr*;_+he-ON6=&A9aT5Tr8p#MfK|Ohl+zvk!dH>^ zVaY#>R4EH`&nnU~!0(4BRro-rLxnys6jmb;DXhl2Zs3p@EQ8>ZxQb+AsdIO}>re8l z?J0%f^jEs_-N0eHBF*5R6Vfz=cx33GvpJ#OKrPsb?W9mT`|q64cikcI-D5(Omkl0a znh1jk*_M>b&`@hOBYSp=R|dryZKJe^*l0Y^Zl@Xp)H8Ywc{08YSl#8Apq~e5DNR5~ z3I;=e-c~epMnFhho%jUz+ZA%zIj#eDyGZjQV=4&Qc=Ds#dUtVLb+E^qV}{pr+{;<+ ztMTl4M01p%&awBM3KA2ar?W z=dBq)?ru%4odnExYXx67ZRBR*9fRlm+UMA!B;WP%%?Utst5yE$CSzDBhq>U*$O18| zWC99*!L6Sg{5bR6Q9QwS7z*_VAoA(ldQL@`a3LKXUb}8RK3+;VUgte$c`6{z^pt>d zRUzsr*9;kb$+8R;oXx&y7I&A}x9A+C(gI8`zr1=h(uALq{Ky-{6A zPU*bp%WIi!T+YLOtAtp%!*I@sg7E{$` z_Nm<(qEJdf$?TcYXE|*%OxN7W6*SWtvh=guQUii6Zyk<~KMANBFV{TyB`ktib9km$ z+X6#D$;Gh{1OiP!IX{Rjv*fY$_!3wQH9MhF)3KM$?m=fN2ATx}IY`AC3B(-Ypv^Wd z7-q@g*f33QIbe?7_;vv6%YthjE8T*<2rQ!h6gGxVr|BC9D3R{c!8G_JOvsnv5nYc) zeJj-`S2b*ib3K00)U^o9?6?=KtU zR?Q0Zb8C)xbG$JIV}WG}iGjg#BT5_PXhR#cY@aTaxp5|%c`a1?3hXGlQhF#7w*{DL z-D=TqXIpGRIyf`8G`3n_lc_5c?iqG&d^oik*>F=Rvcra+E^nADu>fFM7;_LvNJ?^bte_i&y@hkl{WSeAc=k6nnB-XomVc zgO5EtpxW;Ogm*j#td256)w6AR^Fg{4PRQyoGrZ~dw#;jN;!5anbHP*6=o9tkLLu?< zI9|ReI=(|*yLxpFK5X$H{9;qInxQRS&CpOWEjaBL@cC`*E9KrIw|LnHK)k{zF#Fj% zfcAd?HDsU*J}1SX8CsROT@mVfbk(+PT&4t7f{c3DsGcpDx6BtE1M0x4 zRBLTN!%aF)tOGVzcgD(9@La3i(ZikmE3K@Vg;?ZK$@K?q^p9E(5Pcp7933xtSr*RnNO?&;Iflwm$Te@4S;(Z9AwX3>17 z@X9}*CZ&2&?i7t6eMU(HQ1HMKi6I6ML8=O3oS;$>2c6M$g`j010eZx(l~B|Iq|PzE ziYG#`Dv^=Ep{|Y3&RxcbUi*{Sks6+zenO3P8)ImleAc% zFYH2__1v;aX&1vxw^8Mi&Z74D4XPZ}*aFSwZon?_@3F2wt zc_?E|nRO$v`zf`GiO4^nI=qI1k&V}E1&9ZPfIHFIAVB0?p2Q`tN3mafdfeh}=I0FS z>qhmNIQU2Z@>@9>a8IhJsTiy@MjIKjC7i?bSBkC-Q>~ueCK>vPStT5#mP)22l?=~v zKHZt2-?xicP($odISiRWL{%~r9@Epoel`@q6%mVkSy5D9l8zqy4w=V!a8A*aY?iNx z!jd>$Rn_g!W1e8+xgkC@P}>5gcA|+`IW0LNosc6I-Qd2WA2>imW@%b*<5}(~>4Q8C z&P_|okXT{3b7)DET&U5Ex)d~uTrsf-?ED_pt{5!37S)i*my(>pBkD286^UVJ4i?bG z0LcN7Ls55K_6RLwW)(!(0oL=gPHh0xxTDwK`211Lw1EWW1+lnzQazC4A@k1bO^0_7LEsv+Q@)?%L!4iIdorw|0?0l05Ns-7sA(QZc6~q! z|aat5$J*+3`@iCqJ$UsKSryLGipE#CMOzGm{6a#wEzVrJUuK`H12P zc1?>CFRMJr$B!#&@1r|6KtNr$)`$E^WzbDR6n@~gKIr846J7Ie;ZHgMIY7q00Xp;( zb590z`s77eu^-*6tj7H#1~b@Wy>LiQ>pGXvb$?!&D5Cy7B5xPL^$=Sz&AKJZ=je~G ziG~KYxewA=$xOUKqyIv2Oe)>8AOl3-mXoxovRVp*k|OSWY6F;*L4%` zF(1*5!Tp^!zsD$L0EH}jjN)10gT|KhsY0d$|6@GM#Y>zwp5`4~Xk_wtkWEM1@ zM!d6&0wzsK@U1LYc(#C%D>2z6a1hL*8fg^X>@Y z7dssJCv7+3z0D11z#cJbtDJRSfrI!3`%U}eD-~ga!^`J;W;j{tz&#kLokXjCxaC}`5vZ@MffEDohl;U zlf8H9S4B_e!smB`34h4c+=a*ixQG3ynL};e{Ka_AjJN(&kHXRe`Xm{D#A8PeMZW$( z{+mQDqUFHj^HI!_M^8VeF*{_?%=9~jl#CgPU>|C#l?<$t}6+9?S8@=jU$rz-PwLVk5nE* zu{z?~pq4q^&o>&*6fmR==lQly)31on0D5~}UR{GXt;f)roM6&m;oxHvnym#Ma;9ld zfevAtcc^t4&$9g!+ILZl_5}>4^PsQ)#J3xLLGStK087$DCMhH!DXBz($b}Q@h_ij_a2WIp+)2^ zWdY`B06=5d`&9tSI#8fe`HM$Xs&@5rmgF19q1`WH9bbUCFG%bLCSJvBqbp9s6_4_c znl30)udi41KK2iXeXoJ61>G}g;=SQhy9efz)F>CPKuFA(b1BvOcb!?{{vGn8+z7de z6_kITC9`KuY`-bFmeL1t=PWy>{aL&fA6hTOBTT=8y#RK+0U<=PGE_w@J>3U^yCe#^ z1q>m`EU*O~=OVeV`P`jpm}XS(_L=vgIsYuiY0ksL!9nDS(37jOC%oPF5IHIdLqj5> zi_}p?ETXPRRAB+r(S+df+5)TFikWUH_L=tm6#X`LN{!nn=?D2aTFi#w8p3R(@Svqn zYQx7q_ZOtPx_M>d*IK(`!(9BUgFJ#GvL151@ z8YFJRset@^qXe|YmqGJTX^<`+&wtQPw9oS>zmZ3vE$)_X?rtO{{Z+pYsHTo@e1pF? zo{pAWc>99tSPDMb%VS9z$0!>i3#938CBceObj=z(~swaCwMCB!?kIa)1Dc z`|=t)(+Qqrzt`)Hqy(%+IDQ@KD9j50_St1i*DT2w(ht^RKgjPebaK_zhsw4RgS_E`=yH zNv>>QVX#%CUp4)jCw0@}8m4HMmb9UY5U7#aGV3_h(Z(PG6>zR7#_S@n`T+hxtZZE| z?^~+8J>qNQeWU2`4uIj{1G#U|^KR%7JYV6mQdFW_mAn8U8`_9iwrfuM85Jw-bAD!@ zk6mo;I{!?iL;NYq78)T!OlA;tsgk9dh?5dTSW5cEv~-MObw2T*IlE`R;$tRzwd2+R zx2Iv1=Q<{N7%=JSmM)N^LKN;bvl31qQJ+W?V`O*)|6o2dso6UH#P^bWzD)K{BH+=a z#f}vWT4HsZNr~OokY0nI9pyR7l&kIqKS=?IYG4_tZ4~B;@A!FXs)$ITvAzqY%&~!pyhIDX`t$S=oUUVV0)x)ts3{f612iwz+Hn>sqS2~woH^TSx{yEmjtlizs8?5+OgY$_ zKsh<^tW=+p4(dtzZ5j5F`NFT;VZi7vhdps`JP=`zEM2B^G-kOvK>Qw8H#|QysPAzN^7;0(*INp8&a1@#6|RC5xwBYv0=H2r?JQTeDsHSmU*Cq zd4#kR1t;N{9G%vD{p}>6>uSmExpu=2L^sENg?>ls4T!h&TfPJd5%$U}Doexnl7Y-m zB`u^cZ>R#Ihv!q6Ko^t0x!(`^J?$2jQX+iC7G?Fz5@D&W@!kSB)d5s@5dgPiTnhcD z$obQS&jS(o+*7xkBzxzCJQ(wu6*@#LrTuS41K&FZQgE@z!w7F^0v%s$ttG478q7OC z>GuJDk3XgfFME;wEuW*%-P8U)m7{EqBhi)l&+&rYZeqUoakMQTSL4tePTfi4qNb6%kLkV>#${F-d4NMWnwzgJ z*R|+3ICsiI;6|L0v=&EzD0!g*r+i_YJO_eg_XX5PE&7sSSNWBwVLRH;Wi6~!;asSn z-(}7`N-b42Ls-fXwA_R7+L7tb2ru#=|i8u3fWpiB8FmCW20jnj4a@ef5VNCOjCSyBIH^RLs4}d zU=xEtkq;dpt8wK!x-4Z3vQa+4@5@&R>R2i%RXi1K2!Z^Blc5FaS_TzbaT)+>G-;Hc zFeW`qb_CT+Qjsoj5nQNXdTXf7dj|&eQvEq394|4oUs&S!6(7-mLvE?` z@xMcg)=l(B+~Q(B5GEJBj3It=23(m{38cC8&@w3m<@tz6czo7Ge|7Wn1K%Ei>wg-rQcn11j{lY;HKjPlGf3LuL-h*O}@m)Gvj}|=x9kB70E(NjtKERqac?djBmWVBL)iC z{v%kh(L+eUDJ^bvVvWFEe?Vr2Tg$j7?pa~P*$Fx)yb_vjJ#Af&@4fJ1(5 zkk0@t@aTT~;8C}`lkL`LwXjImaPt%CVgro`_F)Oo5uR}+u*zOBhSZ{fCyAoVG#RS7 zT6daUe3!OD)P|8^-Jbd+XKDIm1k9#WHf zc}Idrr9gRXu~A6u!j*!Pe*;PTL%^H2XoEPT_KhYVpoXW*!{v7CPr@;l7VoziuYW7R zE%z_a-}MzAipx^R?`5DwYuu6Cw`%JVv9%CIECfumBd7>^SQCW^!P^PKe61kK8LUkW zGmgpU5h7-e(}dMP=3|f6@4+ubK2)oPcm#;BN`e8Bg_v^-6`jHh&(g1TQci-Md6(4D z`jC8NVCBUE<`=vHylGZGf-a+Fb%oHKCs{m2XMh3sF#R4^2Hdz;+Gn|4MsUkx1j{tP zAYD4drvw+6nE8@lgFE!4ggz|wU!sjOFEe}G?aoK59l=!^xxito!7tb{$lHE4vYA`T znMWwOngBcn3UNLuj*Y|{=IVo5DPm78irRGX^9@~kCf4+t?+2|{z^aJq#`9B;eWD}mVPxsu07 ziI+eu^USVUr8D4hv7YwxfUjaxublzAdKJ5#+_ppCe1M~=C698QJn};~1DH`9b^ygg zMaL(Af@1Wbpf3_c;{5n{EpqNg)S++wDhagTb9rtV=?b1(I`Y(A2M~xU+n5Jl= zqIaIjklS6%)}W^)?H4p(3#<78=kxlswIb{EUVi9@wV_V@z`7OhkfN>+>AXfbT1l1(h9 z4O_}*;VN~khkUL8bEjuID#sb5+bBGeo;k7Y+a^_2rSgjWCzwYpP2mGSjF&c6r+){( zZ0x_2(3hy56u!3L>)NjR>ZOFNI=?!L(Bz%Az=JanT(4VqA0#}n^7Sjli*FV?TBW)_ zDW}c_7O*OMd>u$Gkjr~=L}+4ui-YjkhMm>;k^>5X!{(0&~{tjHcpLuVA8~5|- z-^5iq2uWUt;kx~3VfD+pHR>pc%s*?m3=@7RXVYE9=3&Bu!M1vk*fUI2@Z@e`x6_RZpgYzUMoGNT;iUzUMpk zf=Kj9e0;*sPlupELH=<5p7w8-1rZ-F7bsU=s>WR+&4B78xUhr5M+=c2uE5~of`>Ix z<@JKa+{W!zVM4oa2?M^v=`evKW9g=Gi* zyleC*FnYyXV){}kJJVWmO`Q{I5lb|4wLN|f-Bk5)iFt+cw^y!##Y9gx;kY!&)wuAV zDz5@cS2T150t^%YhZS%r@`~?Kfc95r@4o|a^(b15A&x9n&S}UoLvuR59nx_vMwwLn zJLf4Y90-OW8r0N1aO+PC8w~*cq+|=yY%NMmDQ@EZI;gD{H$xa8lsfBlAyjbayd>%@ zKR;)RGGcsP1u@J+8Rme~AAotjN*>knwL-M&OE3GgcyEJj9`C(MR)b3P!wBK^C$%<< zS+B#c8ei+agGDSqEpgblPzyX5`XD=7gys;3iMiHyE6t_vHj+k$2Md`>7?pyVkm=S< zawWwTae$hfC*mol;aOz%U9kF}U|x#UZPe#gY~C@0T{Q8f3E1DV-SZHeEV&OSlwLZYmqx$il7nn-#4e!7v4k5pEL>pE7iW(+bBe0`;l99ADjh1>-M7$-! zjK9z2R}@uvyzw+$5z~CC!7@y_Y)CI%iUO}js+u-aRhyeGRw#q5!Hx*@wZTwKsegjHkz{AK4T3|T$9@nf4D#9DS z1kgxsR6s^qkD|*-hCLXDmpuZAhmZt+`}GHWf1_!`;oSOesClr*ZPTIXHRA;jRGwPZ z&)2J zS*=K|9i=`{n;tGxCr|K~aEPnV@R#XW76F9!kry7h)CkM&az}|iT(qaKefz@pZA*Qt zXjoD$hmh$kz>IS(X1q7RQG(p8crzTQ;7X?l^svA38|kZfBYiDl0t?vy`B{^ng?w5! z9O-MYz~^tD_K##XJYUJ8bZzyLEm&7R>R!j`F{0(+Z@MHbIT1YQkVC}?I*dRfH%B>j zjl%Hc(n9(g&}X8qiLXLDsru7CRp|)z>(fDlHhrbwa@Yl9m-f9;n;9rPw})=6&(g)} zbs0~J?0eUEXK~8T{Smn?2Sf__ju*K445x}Z65kL$i!Lgiqc)5@@*O-=;bRNcd^+*(-x z-MdG5ofu~5^f1;H;Guiy9!d<6zjiF+^d^#p{r#ZoJ<$%$QGY{qB&r6?8oxqX`6h8& z8)Teg^38MY_jx70GnIWXGT;xHriPo9#v6z9i1L_Z`hc-Qrt}-f%VD$nFxm5D3Cs`x z!ImIGGrTw84IG$&w%nn5Iaog$96p-BJoO_P0t{q&iDoeTVnQ1x4i+(eX{uhYAE_V7 zXuO@%ZylK}%MLQ|C{QQG5HO8;Kf}1rZ0tX{s(re!j26o2t+hqt|%!B0LfH!Y*7+?pzA-6BT01 zM=C{@_Xq~CvFE1hQG_v68-#Ey{(ZdN-;@?Ea^VPp^}LD7CuSOcSMLbKtI5s2W>(T3 zZm2z25*|YX^-uI@g(c`=i~ayCy3}pzhLQy)V3Ro^?X3~Ha>HC7mP{HIyt={l;g6<6 z_4LLTp;tNy&Y(Lx?!jx4n^@4Wj<=5a26XV7E{{;Mn<_m+xmooG!fuf-E5+Zs?I)hi zkoK!Ia2KL$CkMIPJ~R0!nLILrHIrM+n<2#3&eO8PwCqA+9U{AeMO0tly0^8ORyPLW zCJ$z6!r3Sr%~V1RM?%hUV`;2rJ8^W$Bwm;?H4m=Lsk`o~s^FT45Fo+(AE)2{?oT|* z+LenV4%*us@w9K(27m>C16s}EE`T|xpmJ;Vp0Tns z&=2+sn1m1M)L$I8$nqf%Y(HQ{q=si4DdJOKlCQ(p=0qKpmK`dts#Cv}ERu=7K{m-1 zRQxBY_LeZOr*Tq}?03Kv(rpspsxn4H1cAM%exkw^O9*Xe1Ry3BmqaOPMbGh(CA+`smr+Vh~#_Dy!lV+DiMjf)!$`=mFwkC zdHXAtumitAX2?yCqP8JE_w&ssb0z~1wHEsG4zgC0 zkjZXIeN^bw6SURwcAf9yf^)o2t}yC+D)$5qHP17@!nP>Zil+ zga9uZ=!YDcNVs%o2tE=WO5-iH5qy4Sh2mPOC(Cr8;f6R0jRWUwyj-gOCzWHocAMDe zl7~7(w2rVtGGK;57sjjLMb10m04oJ3%5}v@Pas$<^ltyD4ZMR3K40;o;{H{B(8*bv z3LlNOxWDh>VD-U#DLvV1A9jaOjg`}9a%)f)8kPIN4{75(ky&IKA9X_>(2Pg7Q54It zq#nsAUu<^)`uYfc6{xJ!f3-tMHJ^_{8n>?M*dt~mgtphpql%+haGr*+W>)k-zWDA^hr0q4rJ5(;z6fzk25t#KhUQk zfW~(q8o;ru*6%|O+*sWZ{E6dM)O(L=&DmJZ*;tF12Md>+k1lx42d*w-(8!W7-Q>a0 zYyEYIjcIzT=}dB~28s|?rM6MMrF;T>^3&+%dkxSEv9tjia#g_Kl)+*(1ZuqQ( zOr3=})*;p=qD;}u+Q>{KUDI;QXRA(jy#S+RA5QV>ZC4}J zPz(|9k;Y;8Ss#W!U0qFj5Z7w-INp;nI3XYeN9#ddB=75?W#n?u$`!qE)Thg`&sS-a zxNn-oeUqhELt&`=OWNz+_Mv@hGDGn|j+7i^Cqd*rCTDZ-^xpxxiOBrBf3nj&ScwGv z;34J(_t$EBt+v*OSP$SeGad82A>(KN;02_-hxPAqs;oW_T|QKq2P`1kg`YUY_r^jD(tHMV~zn@L?&aDy?z_>Qww;^x!dYj!%CzhY(+PDwKh zKfpN}*rJhSR>Z$E-kMt4#uGJ?jytO>cR|H-Od|99+&L_416180XXX*_D(1$s-1qOI zKE8^2>s>I93y1cK<$$FoZlCg`CkhROf z#O#%bc^Wb5Ez14lm7(Y24u)U7h2>aa6sn}4+;X2Y>b@F^#rYkP82D;|c6z+|1#Sv_ zbM~jRY_GQ}gxJ!r>I=SzX|!DwDPPg&vE8V|um$?Sho}gBhzF_jI#>mOj*daSjd>WC zV4qI9@VqV~*skX2l1Xx5-GtQUh`2MmxXt8zh?Mjbd~Ycm)zXP4>VCNSo%%xR(}LgW zG^hSrq5&9uk|4xqDDECWnnWWv4tasRoK_CQu*6UqIZ(rL?kK{-67O$8h!uW%rrhj_ z-~y6h?bmpljPBY2rCPAR1D;+Z5V^%8qvLao&wYHu=cn}wAwIFd6lZ~6X66#jZ-^rN znd4)LGE{DJz}E$SJiStcf^<2PAYHyNd+NIMU1$EHkXYh|ZNM`~7|6*q?r8l=ay7ln z3m0Hntd^u_p|x-nwac+PD_KWO9Ste47Qr6r*KQ)df?FX+o8*$oG&_c~V7M^cb3%;0 zV0t=bTl$ADkJAU@QXHw%r*Y$76nRBOdDFp2h-deUkaC5)Q}wS*P&rIPUS?6-xg?Bx zOd&AwAw@#`2r?%6T>0=1yRapcYphiC_$t|LSLW%&#TX|p%wruPZn@s+?YU*WJ0A5R zrC$0j$PNr?2-G}m!l`bl-0GHFEuo-(J`*e?_9ig5teuwYR)FJ za2wNH>GP(hS*Af1;3JlS)Zbc z2}S|zPKk^Mf`uNyWdJ^avyj!uUK%*wEvCbZ10RkE;**uOnCdnlMyqYz2Q22s+-)!# z*dU9h#lLY<;;?j})Lb^(fd0tTrMg znb|VZ^YG+k%TXxcVsg=jQt9NyRxYpeYo8q5viPv?#fKg4g?GLeULje~o{h+9IjtpI zc5sl3`&!Yg_a{2=wc68e&>erg=gt~(EOq}k!nt&PsYZ3Ld|39srm?rb)5kHe!1@}g z=Pwc@cbJjrM|AJboC)zB#a~Au>4v0s0P4U4fc6NKe;IKw=RKVK2Q1Ax80-Mm-#T!NN#kh#**r7P0W7z=%Ov zb7%Y5om8v4&!79O>0zhJpyx`N!z1YFLmB7kpv&?*m=7K4H1RA)mH9-|wslKC*0AV~ z1^wRGEl8@A&fGY9u#7$I z-K5cK-h@ajhb2cdrmHI%@F99cHNKT>v*}Y8#SMqBG50}@EMenI%Q@30G?XPD(qcxq z4=!@#3_R#Obj%QwNX*290V~Ze?z17zb(&zQA-gU4G z{&!w_rDFSplJP=n(tTuuT)t&XJr(O22XJJzE)5+OIo{vnJmpy$7iKp&iQdPBtoxCe z<cq6>wuI`36{ zg^2kLB)vKBwLj|jw{96&V_1SL>9>fFoax~ zuNTnzikPK@BUf`xXFvy`fKiCalGK5Og6Xz;+&==OS|%^L8V@L`=6P6k!+gI(gb=t4 z)JW#eZ=6OkK*S!f)p-;n?x9+Bq3-5!m|eWUU>OEbtK}?IHkXlhpBWe4xNdSg*gEtL zr^Cp`j0DzAORBb!P_x)fc-GPYYkAPs7=g)>D{2w!LeEOS)+)YfDERWA!n?1b+nsx~ z&ZT89#RLllOYK_ZGMYx%&k$02=Ro2xkzja&Fd{wUcf{4l2Vq+-)#(hFWy^yG`2zsi z@Q8qR&r()LP$i~4)U=@}o&&BL^jxVF%L)Hx{6rynBnzeGNMW;Zz{VHz+cyo$tHpV) zkZO)%dCTrldvg?N{KT4V(W#WUB_b5y_?4saAAy+qx6Pj{c5sE>0L4#6u<} zijxs*!%VjcaFYPtMkF3{Ded=7V)`%Y#AQ-H65>Jz(rvKa2iLWiFz0Sl{KX+hPy*z( zf?XkBv$1EM!&Dsx8ML9~YSL#(ofBoLzP)5p)v2ZQXSr4_TJnvSC&QCrg7BMR53S~E ziC0Ol0xCxO*i;qcSqD3PR(9BC=b@EQB^y@yrlC644R_swdBboHk3x&kbV&gq@Hw2KP+|lP$#q#&+(Qd;{^k zod>?B+}ulIxTp*O-9%)5IS=?u6~997R1=Ox@Qq%y=J82bkSr}UuwyLI>TH6G1{)=? zX&c_~qM)Gr&v4YqOQE;zp$mkJmowh}N}l{&Ok_?F-(m3sg+8`U=tZ{ND2Jf?fgX>2 zqdH&{2((-1X_UFfMKV`+dvOL-a!kdRa+hvyW1^iCCBY28O1c? zWK{q}!-|J*V;f%lNf=#q1<*nO_yQl`jI5SS!dA! zC&-01O7#ZQ9e}wCJup2!$(?qHm3mzuCCY<^i8<|lWIZbem@OFeJ1^+*7sXb+Rjbw1 zRXqZsp`_MbzlU*|Ou9v)Qe>h9aI9T>n?WK~J6C zUa~jDr7tzNORz~TLZRgqc&<92=jM2nx@l0fX@NV4=Hy|ox4mqe#h{ST^xqUi*-*+h zdr}p}{=8JPNHN7lRR0!M7}5i`_rRjZL}+HyM{$w&rd1E!n!kq#0B`ry8u2nM7?BLnarf1d*y#aG5Cea}JU% z8a474#-%dcdXu61p>ijhe0yWHeTe6G9~L42sZ4<(u4FC3S7`kSj2$cIdJ zf(GIkdO$51DE8dOFU>a*C)AR+zGFlPG1L=E*j?G=I{s9|a-nb&CyE>HZMRVxnsBIZ zismJlOOSsM9b#sQg7Xdx;~#MOXYl^2`$bQ$*D7u@9HH1=>fnCV7hA5E0e?} zV-k!oJi5C5OgX8yb>D8Nn1(3wx%IC`Uydc(AjBzV{PWaK+@N2w_METL zBTTn&Zlt3Y_X4<*CNL6o4k6F_P+!)49j^J+@+l=-Ul`gF#W6mZ>U^+%z{oFfkgcua zG-j{+SV_=(LxQ%vQ$D#pU;^vxJuqeBTZ8TwUkwFxQ1tyl2@B#A?amPZgd;xyXL1Xr8kIVf+NHdDfah0le}`^pIY29o)}g4QOc zbj;A*O~UvPG;3KMMl1kBom0zetiBV%bBOx{BQD|sE=d=|a@7p^_f-(!?#U9*cB@tr z;h6R-1Yp+%+Pl~CT?3m^CY%Sp4N7IsAIgwlX(^$9FH$v4*v(}jGN6|-pT86e@uz;? zmJn_FIX)p_eOa_u6Zq6(Qhv*503*D6ztbAm@OrD4qw1ggH2azg$es!jX-G(#@g=EX z&NtJjPJ$jziKmQ^TB;F8JtNOn9M*F)BE5SJkP4UWiwkrQy$uA;S&YwHf zRu(fkd79P4A`_lWT#LCbq#Vq=s+Oh#T|Rm5@2OQe(arKYy!VDxN8I#2YkHmEr%<+{p(%t%EXn%tt>ls zfO(i(G+cL?SK20nQ|6Yo;^r{y1MC&z?!y65k#-bsCs}D%9@JS^uShBxN&wK6T9NNH>#dw-@?!^O@kRa)6j z8QxWcGj^1S4ol2lipoxRJuNS2%}R$h0v$$wlwFo{cQ@dJ3N)ZW*h z+P+f9@6_>wZm9ziP^A98%D|O(N_i{dR1TCAc|6`JFNOmTh`o!o^G!|VG2*5kbh*w! zW5q(Z%4~qPb*ID%L+?9*$h@vSJ>PdI-c!g_C%S!xay;6Q-Vu z=W|2SvYouUm*KCU;Irt%!uDV?##D>dxmT?C!;x1hvD;QRv4mA6W@fuCL%mo#<3=-q zC!&l&8DZ-oVKZuUqFvF~xG(;PuFFrNWf+W&HWaWQij&*KSVmpp~B^9gY^~ zL2JmQuZQIF0Ch5Bb_QNkPkV%ZK%#>2IHTk_;$mQS9awW%aLi|q^!whY=qbI~g244J z$oK)AUAxBUXK@JK`wv+Eb&32pAiS!IKzdWvBWK>jxP12nH!vQ!*7OZ^4jN%;IQ3?D ztxqgxjS++EH%&MWf~HcTxk442-&q&(h-R|EPt-H(^hiC)+epPwbz4AXg>?0Fnm zqnI2Ml&*%2Vxk+@wFV%}=fZvvy9^2<_fY9_ikeQ9hzz`zV(ooTeDL!+ncD%IF zbxNGNZzW3&5n=Jr!XZc8zvSqq8_mS+PknDO=BOyj&2(oO<6f>9S{3CU(J~|(;36p7 zV^wbq^~UgP*9bx>f~z3~1=mBYGcv%aBJ!1q2pL$JWe^_!9#H9rPOUom!FSzs!j?w^=md1};FIGApWN}$RhA$B;tJ&Ci;j@>y3lobgXLeM z;kDohK7$_K%W@;M$vehI)h2MfjPkv4Pr`emh5QFEhrb)Mk zcg_VcJ}k9{SI+BJ!mX=FcpLMfW#XZFNi^eSvpb5XmGi>=v3xA|K}4@VqHBvB_#3lN;t2xm=`Rf!>gR@5i-l>8=7c9%MJsYBw+paY zaAC7BEll+TP)`(HFhy4dn*Wq!<<7~ph{CTOh^zjHl|8W3y@_5E_YkUuBW0YMVG(cVhK)uyQ(D zPMlm$@|jy1;{8z*YBPD%kqFl>|6%-F={G zPh|0|ZB2;ugsszVI`OK>KIWLY8mhY+D~pzo8hDV$?`q@Z6c6$Q4CJ3C)C20u6Tz=< z;9=X*)BYq+`(9&d(7ks2>@OsU=LW(?Dd$3m$-5Kh@Rr~3&C89$ zS3{D`RnFD}(F&@L2HoAMJKqE-=HR&%`qUG70#WefUN*cysQKb?wEU&urLL8&uu062 zC!`5EAZF;ey#`-MND$k`lsVu|hnzS9MR{=o!WAV_G9b->(&S?vK<0S56QkFaeB zd}r<~gW{!^3R&+1S2LDm!;!AO6U?0=4rk2#kst<5N)LIp0GZr(au&Fh>qX85*G~)* za^+*Uy5-EG)t5AjT}@n4Wvt!_O6aKnI4FkY5+x$ms!{+cC1*^G&3(n9x=4O$i~cpd@^kP3q)PZ z`d5@@&P0Ud&jF*=X66{A0J04X@Q|w*UeMAP7anl6n@QQoGXPI#j-m`nC+ty~&u;kNv+wU9fwWEw@!*Hu%uDjd1vmE{nFHA&w-vZS6 z;32jN5n9tf*hYOoTy6cS!|X8-K9ar6CC=RvaDKHb z%1Lt_Zq%1O5@m0{Xk!Un6*eZ)W$My0>nLOjIPJo*4Gg7rl~=P=m+FB86Lvm zo0Wrk?+o)U23i{6-#YVn$Ebk%u|sXBH6_PM@~UFDVd2JaIr*Xh=^6{JQKzFeW^C=p zw%*8#V3WeU3Hv1i@ffjGS;0cRkRvl!{=t>$d|ZM%k7^p_BeFw69bl)ef%Efy6QHeG zU%*jyo1S_Vs+u}&%!djt94LPFY~>Wf500D1>Zr|+KlyyS%EFUEgj*0V@;hIZW4)A$30!$kgHhfW~+TOG3m*#s;8j4(^VgWl!|{+W55^C;LX!!g9y)mR zAujYNQ0C&JN*{%MJm5^VkZLi*O)rG*v@bnaueEbA(zfK*s^+UNb-w93Q=l|fey%eD zVBsZV;UkFHx@ByG9~JD^(2ga-D!~6%2Ov^ArDf=(QkX`fKD6+z` z??HF}KES#+kRd2Do|T9QVqeOjISggOsz)aAfyXS+NzRPO0v#|~)K67&c*M||)>lt? z?$Aev^X&un2B6kg>l8Z>6Pj59rA#dkpR1n`!84je9tX!wh!aL&z^%82IG>W!!3kiy zoe|0H#PeQm0MxoqbN^HKdsXpKqE&B%W6h=?TAcEt(F-k;uuV2pG&1eCK|ObOJ?rCr zi#vemUG@qr@#_3UdnjhdR*|9J7>g*)B|3TYu(2~&-PH4#=GuQFK{by63oMFgJ?#+< zyR=-QB??>wgyFn)tzHHL1whTgfTO_#(ygWQ!H8?MF#}cmmdmkMXstxI6tfib^{B-t zmuwEAE{MHd?0($7hnV+d(a3t_;w8HWXcb$xf= zS_S$b!*{ZReSyJmNSeHkmDimK@w%SH$|8TE1O3{7l#`$UXt&lI+uYK1X|)ly_5oxr zEfC%-3NYKME4Y{hsMST`t4cUM2{KMj*WPp&Eu8(IoaD?&WScn!tXSmBw3<>&SOh=Y z(DknX=^2qw$ai?XRN~+mE#O*~U7tKS)vD|F778V2=&lXBGsYgH;W;#P-Sk3DH*`%t zPwH~M$KJQGvo%$Fg~tfcoPN1(cYGo1pR43;K`N8N67HC~5Xxu))P+cEhwxBrlc4G)&8oXuQvDNxjxnD)&e<>v_^VVo9RosC$5dQ}#=f;w?2T0H?Sq5j)^l2161IIPHP0&Ss?Q?55{M##(^sP5vx=PY{N~45_ng z9=va?wFi$;HIFnW#72B>c%WwCP?*<-4&dd>gPI>+8@oLZZga7sk&A0fy<{--e{Fc& zqKEPZptS{pAe#hg_J;Sl^9Qfj-1d55^o|CDK&%Y~I4kFzhc)FZ;*d4J4)W`RSih9% zaqslpyh~H}u&&{3Ouz;_8}ratLvh8FHmI?dspT$Q@Hjl9>JhC1hJU{S-q@;eo#}P@ zy8_1i4*)$t!oT>wJzkhTN^UJxw~?yby2f^L!@%_fYV2~d4^ZyBw}v*^gf=-4tMlVA3*cGVM2Law1G=Yb~@&)vSuWy>&s4Z7!pBucT;_udrBEE*HZyjrybmvUAu*O6QQJ2#JVwn^QrEF@NbQ#ElIc=XlU9Iv% zXS6`l@HG3}0(mVo3s8%r0VOMIcOnA06MIur2sizKSw8S(B|Vt|-x zM!Q-_kl;~GJKmDbZKwP8VeO8oiSEJl^DW@zyLn{6=M)%ysZdl|OM=u3upT=PTdQYt z(%aCxwc+5Vh|C9OWDuW54UU1B2%=!jjBJZ}J0dfeX?4Grcnff=`xL|Jk*>R3n(TM# zZ1BJ~wrJrbLJEv)F7gFPt7L#Tw>7nd+S-&tEtYU8SkyzgpUOyRdyriFH0mhO+81R! z_IS{4uzaGk30TV$R*-@pL)#fv!K$_Ex#d@hZ_!D^(g)ZM?eQ_>vc)W0jP%vs0l9w` zy^%z3KiRXHPHjcu;{*C3VXIZ4GY5($Ko@y8%r`IiebjDLCxSSg+Osa>V_ET833vd1)I zwBj>wZv^USl$b;Ef}p1C8NpBg+Coc40u1Jj2YwJx)3B^Pyv4f+u07cs@iNh=Auzgy z2?Q;Cbo1WcK0eY5(yx#Pr?q?ZWg8!n1>sXuW41hEn+hnzt810|q_s4{8Xtc)*V5-W z%v$^ACtmIn*RC}pxz5($Rxk~3F454WT!!XdD5)i*ma5}^s1VoKqQsE><&P6{=eZg^ z31d>Zn*g@xY)gOgu9 z21l(Kp&hhxjPOFwW9q16&gPa&A1f^;eT#r#`@mLg+By+@5O8Bo-wYj@_-i#k)ngJ5 zUOfJY3>}Y^eEoQmy4L4IW6_knZY){09!K@6m7$vOX9yW|E{4@%ssH7X>|lA=%GCtPOaN#FI{|Srs|m7B4~;fch&|eg{93zaSMIDz@h&BT8iY zi{}hqoAYmYQ>cV;2wNs|WjTr53X&s|V?-0oFN^YX5y}xBSMwChq}n#`JeW2`Phz}f znB2o{&OQ_*(?u>bztOvcl=b+?N95mqyslK zQFUs6pF}R-TM(r(0lrUW>g)aM0*DJjj?4c(cj9raTfFIuw?n^sp}Rez$H!d12PW5v z^&OlF+=wXnJ!YueFS(R=mEeCONcz!-&5Z$+}n7x1UvbN;;JxK zz6`*Dq}MS@jY?sD!v*6EtV_T*-UvoAv>k5*i^iiuh<9q4UATMH&7u7RRBH!y76V2X|%M4z~`gUrt&@%ew zrq_nQt}QA5PYkffbWRO&fuR|l!HoeGXo$f5e%<|Z-_*nC>>xHV3$Ji zYpaWim%RwDPCQxlO0V_h+rFsr zl>RXgt)}ML^9EMrpXAGiZ+_YEEpE=@D~<1NfsFFso;Kv=Ccg}MV8k7bcet;(WTLSA z-$~!zD%G~gS?#>LXQx_TpF(?|=*=X2Z}3g;4Q4APlLxpI{GBcNM7wsPRrPt~_jH#1 z0mJn@i8cQ%19#rjeYoNGk~l+odJXGMe%JR;FGRi9c@h_h-}$ivzw#7GSZB%a7!z5j zG>~8+y;su-Iau*cy|>Ib|E7%d@3%;F{4S!G4V|r=rfpsMDW{;`x^BZClNIED9@@Vf z@w3T4+ak)5knR8;lt-P8k@S#La_dediF*XZYouR=T6O_35a|@nmwTocWwr(7b%L8T z2esTk%!RZ2Z|ly2a?8KU*4}D6&u8rYceZc}b*f_=n{xBpjATUSQK`wBFl`g&Y?9fU zJY_}>ewQP|+Ax2%*h1h}?_IrDo>0vc_ddAcw44%$ZV8=L|SLE1vOyNCM@O(7OjX`0LVX_bYyN#UDLqp-q^SBgfx3?< z{E`Qn;WM;mO3i4ne&N3Hhu7g!p;gSZ^a6amz9R-FV9oYJ%fnU14e&4%u`$KWPAKyU z1p^gu_6J}U`U7h3gp4Q86!V#|?gRDN!oZ*fl>G>+Lw1AIU!qO^PedW( zM0JvXx4Lo3xVmlebk#vuN!%~&knWD`$KZ4?pla7*21w4W`dtO0(8umh^l=mdeQR?F zSaSd{AFM>l#IPP-w}=^e7b@h&U8+T&^{L`ae8OYJ2jsWPS20V3I{NroW?*5SD~}Gt zQc&z^4_Fl)KB&eH#_hGRtrIQUs?6Uve90**He~l}=LCOQ{L~xAG^FOgZ_jdC)DHf!gTC3>}$OQ@i>|Y5?fQcJzRo zhpj(z^QHNbX~4>OaDm;!>#(`3ybODQuB0cD0&_tB1u*>rn8?)a|4h=Uiv$1p&Ye*w5W4M^?PejqH8)9WvG>L6J~D?J--f|mI>xKaG>#zJ^YLJ@=E4eg3|`}0T28-I~|m-6#U3;jhb z^w&;K)hl-EAj<7tmmg|f)UNN^EgC2dG7mw}kUytPH;)7hwKhx}s8<$>s}hK7XXvBV zV7baIaKM_oe8u(PAle4C$i=m>8~<-? zY{##|u?5{Ot>K9~m#qlZRo930(0-gu+3TRlV8S-^J{X8Ctxx2E>GfdV1Kw)D!X(1c z^3SC5E)iYaa))^3oeG=U*ZRC(W~z8wFCxs^#&my$b`8*dZi79SqaG6l_H+CDq!h1e zYKj@TtTmlxo@h%+jG0kuFV@s+NrIjMJEUn$kXMSm5}6t|RN+Hb!6QtBuG*#JvRXk{ z;&Wz+EFBWHPm`Q+dAd!Xbi#BKzh^x@&En^|{5%gI2yz0{xjIQ*yp*4ZPru6^EVU2I z@ElGjnx{*O0Xo5SotDc!6Y7ErCIIGF6N1cKZupLJ#^pQn_`wLYpOL_jx#lLyKsZs( z2-UoZp$4u5s&d7ng zg4pPasU?&E!TDVT@PIlolnyRp3j}vhkGG?dcACkKnTyY-FbJ#Cn9^tH4>$)WgPa)a zrF2gc4dXl<9$<-FS|Zy~f1b%-{FdyJ!catEcfu@9_HiLUI#KLVweIw8w&TCK|=74gfhoVv**Pfdtyv2=*d|egj6z))`6LX z$230z;d@b)Wq{#&8&gu`dua7;mWTEendfubaIr6T?k*+%2pV{yjqr?7*=70q;cRNF1Kz7{KMpiv(Ydh1im>iDxds1T`lh7mM-tScp+FOXm0ihjx z6r-BbW^On%52 zmCih@C;xsrb3M&aFKG2GW?=HLo(Hlb^Cm=GS`E-eyvj}JQ|(e*JjnbwC=h-Y)V z6m*O?u~I(_je*Iuiy2sNU4$!Qo?3laD)rX2nj4Oxaiy3n1VPJ=4KMWS&9|Q>*zLy& zc3U6vw0KT&5DzIx?MsbRTG*2f0p(5@%PrW%A%Ez|6p1k2nLdVY7e890$98 z)``zvjam%vFPNubcf(G8LcvC4qDK&sc z~4{S$hu`9so2r{k^X;7x0^6QrFI^8GRr>)H%JlP8Ram zSFCIqWG8AYsi#U&nC0GYYix)%y&Li{Hd+!)*f!hbv|m0!UBfY73h?5zrI->ZQX9?S zN_df23rkaIfIz0X4@Y{LUW9Hxk9uTpm3sS$s>N(nVz%pzSWI|=8!;I+lUJnsNsf(_ z^7}wW);+c1y8@;~N@HA#<|Md?lP0^5+tkr#LQlV7<> z&YPSJ4>ZkkHiP2$t)84(#5u+Kf*jbATzVEvII{Kc%I!QG`XpWW)n2u&7xK^#cd~0k zJ>?al8vqZ23su$4P zXVlAZ@;M{98Qugql?aDLs^EdyC!}NGiGwp_;NZweu7f_{U6E+lTcL=Z02B0*a7B-$14iifCl-W7RaH~a3u3?)N*BZku znQ=~x->1X$We_nWxtXvh@lSxUE=sSi2oTFaykjr}fLD`v4Wc4;#g7Ydgv6xC##MT% zy5JtY)*Vp6omQh3qWm7=Qc-&gRZ|Fgj2b-uL40u9gSg9A87PJ)=ZRj*j>q&?9Lvvq z$oS*K+_>(%8s>?7g+Ws5kC?^N`8?@b(ru;+;_%s2OPzs}j_1!9IinBYs|~9Pldt+L z>WJYyNd_>sJw1;;1*4jTK#R{M&7`0w%l%$E)E?ae>&YBJIKrQ$utrs_^sq= z_)wAQa6_9BMq2v|bDUax-=)dXIr)8L{XEzLMsjR*i){ zy9>E=4}_{fD4eA&gjM_&_Fpf`f4wXq8(~%4pFmSeN5%Rri<0nK`MS+a^|frm$#S69 z`6Uj07qRJqaE3(~4FO0N!vRn`o^bDf5PrOXQ`({e#RU2>&~I7ajV{&((@FE9PMVi( zoaV;*6SG^F2D1t%U$A^jWJ&kOD`Gu9!F^5F-$X|(j~4oy7Pd`_K6L&VmgFQK*vc>t z4_z0YQ%<}20+8Kk1-U;32ON9O^XC`wX*E?b2U`HlsusM7w6G^#2Bs};RNewN%BWk9 zIjlD|7zsC}ck{%c97U7?m+S42W20`~NbNIY(|%Ppl_ z|Knvirrbc&-mUlP-mK>iX(0npaYxv*952t2@*F0Qk$VSipOoAmV^p&|d(dvR{KW?x zQ2ul?uo16uwYs~W_30LM8G$!T*&EpQ?u@j{Lv!Bod_o!MZzVEsl$iH8jl2F@O5qe! zH9}?6xs8R>ci_`ATNvxCS{!prP-|CzhCF@1Av0IJK9Vz8R2na8v62{JRmaOG#b|wu zuZ?(IvpzZ_5%ED!{?>jzw?5_>EH1OJwB<#e>C>88&BrAj))zi*VvzF9aG5Px&9P!O~3&|Haw>WLJhO)Yr7o;>QnxS94FP!+DJ~VZWIUAAZvnkF7>#;cBqS z=~IM%I5y|DA&*OXv$Mz{od@Bm%RxKgW#B^h8}OmJ;u6k&2IA*VE8dzH&=o_*1C-}! z1g>Q>7eVbWuMnjz&yOk!KE{#rjWeOmzl&#EUz2m&zjUT{)Df7kjB&kpjAyO&;;YC3 z*ZMegQsnYQ%#$mEJhX%}Vq`-q+U93-Hd<;zYsf&;40a^81XWse-J}Hag(B$}JK7Iz zX=_1|4IA##yW(Z5)PdXxDK9;$RbDYSwOVdB9=5`}56jZVt*3iCAY%xlk z6?To4Gs4%s@!9MqgmtU=<55tHsF>*{{n}d!fdVUNGwWFf-ES!)x}&JN&60JyVP3j} zzB7C10`vcNxn|z#@6e5~M*9`a0ojRD&6~K?_`iMPiwjTT&S~e-g5CQdPqK^%+{i>3 zwh=IV@1=msq&i?2xt%xlCkhh?Fbo}r>Pj@zt$@!XUWF-O@#0It@x2}Zialq7H~LiI zRzUT&Ag;P-Nz?V32|f0|9|RrmBbp8qR}?BWz8@MK!HW+@MC{gT>QMF5_1>xjw|EiN zU{ZpK>X1RA*~pm5HaLSeYQQu*7hV}e)GDj`PVv0B_d9T_X;!x4+~{R8l2TnO8;M7M zH>(s^R|2dhUj-;qlLh#(jhlZfaFg>gmBMRzx?E5qv+TpGH4Xx>d>nZ?R_7 z1r?<^HU$mLRrpX2km)wL;3imnyYM1`_6H;k!FBH%jJb+zZV}ZroA@k`+!gR`0QFs< zw?EShb&*Fk#{Nbb9?Y?wxwghU?q{xYtOK@DD}q6w=6Pt=jGncKYH7{v1n32_sRc8X z=6b-}hK{Lt%I*-$GdcOD-bw%QjR`y%h%|@^YUmcBH*s-Is=@yZ?## z^sBDB?;n_5$8I5esEcQEmA+1m)-PdaOt8jaB^=n;0os^x3p{J#QQPPv*yq;A;~JJO zUA?ds+i1F$g>s?XN(tGVqXo;ebUT!Mt2tZJ^8eAfMk>+Z%9ga|l|Ew+L)~-8R*wJ+yY`#^Hw|Dc;tNO=aYS;6^jeC4UUg7-!a1c#QH#{FL@4`zBOI zf;T!W@G!KY#E(WuaHr-x;!}@$wrew0?wmIy_gc3i{y(Q zGb~P5BNBcW+&p23D`V3lU590p7y45J^84^bmU_nYm7+*EBSgN#M8?kb(~qUuzhuhY zNkpxx4p^l6RX4DDuuQ-H(!h05L!2JG=mDbzGl8UF_Tq#aaYdy1UAK3K_U_FJ>PWqQ zVkl|g^7E&(BnO4AHJP-*#tTgz_5O$|JsWN#wM{5lbs(XRBFxaT3}6cQi05l#l}RVW z<-o|u(CFYc(2>v{H8ffz4{`$vJ*5H%f;jl|c+1|AF&)Zx`I^C7;-??+Vh|2IW_lI9 zA4ie#)q{CvwY%0dBUA){8J5<*6HnHSTGwk&p)HZb2fRic1b@I>L^94GU>A{%(_Hqu zWalNFX@f`U+EE=4ZfLH9Wf@J$-Qc*@i0r_j4w)U;OptdhSQEnDJgBxou1%ay9r7|? zxjhL*Fbyo?sTwKc(~Z3!Vp6KJbED49&2-=0uJ-&fjQ*8Rw4;w2zWZ~!BQvqI2w9&j zE6EPGJO`Q1E>d~XY}@L2IcV|pf&D!ZAveSa&OekO_lO~|C#Ul>UyQXsfw5|yq-9eJ z5cDCX+TJ3+}J->2CfR zgs{GqtiELEow}&ZBng`+AAQ>b4$wyn2DIe4N z)KATw<0+EUCBY<_)u(2N-SA{JC1!b;bU^f=hDvB)XSIEpQ50u2y)aXWkvT?kaa{2! z&rPlZ4mQoKW`j7gn5V9>|H?@Kg!!4Eoy%A4-oG{T+AEj9oD#W;lY)8uSp-(4VP$sD1F`>7!?V?n zOun-{2q6>)aqd_&^6m5iWK1gvsUGfpe4Z0W6u>a^RwQ3thjH{MmiBv!{tz%3*$fSm zK5Y-wgI$m`=A2f>h|BW_*|xdxmPc~Z;f|e)f^kvsjnW8qVt_tg&*Mb4e0;$%DS%l5#o?F2Hjcm6p3TfS4}q5l zq;-@OBX4>{HIJT!MR=g-+G9qE954s2dAf|Png`X>8Hl~6LSv7)VjBRl318DwStjfWpY(Oe%oPW&F{Fh7 z|KheWdi|6Or{P>-My}$t{ZD=nv57ERK80u+zFTF)%rWwzj^v%9ZqR19VqmTw8{46= zXMWY!3?x`pNKxbmX4T9|na?Wb$KA5n>H>X4fSS0iy{=gs4mbzY=6=uu;Ft1_Wr=dX zADAaG19`;?0|bP%Z|ReACD=;g^Njdt->m{Joj%v_923dS51d+H zFL(z;tax_%$M#J3by1Z?YmYAs8rwQ_k^0R}+t!H+zY?lMRbz!W{b>>DWE(xDj%uUL zO0!LG@Z{F+po{m{01`S^eZ^M$>@Atyw$U08OIChG;9W;CxF%(cS}NkkD%y#RCB~iE zt9~v`cf)z|k@D-p$1E;6EvIn3-cO`=3ZkXacWSFAlD8jpW}?FloKxpN;;xpbubZx+ zgb!>5I1YTX!Q|6gy4(=3>vf>8lUVhb>;9_GZRi8vP=jiD!V7EFje4_JE&&2e4*)WG z($iMXevc68qBAJxT2Z;8Ly@^rqLWW595^o|3mYFUx&6YCzFe+z2|gKW6sgKI7E%W) zq6~)MmjeB-C8R*6Vm~%+kkJIGj8t?V3Q5hEORjnzQ%RY00}B4yP);9L%03!XPYi&} zqngXD$~&OTsnCX_?A)BEH9_B&WfF_I;m4kRi;1yQ0{7N;r0L~E%9AW;GUbT}vE`aUxSUO` zPrn2swAL5iAE#{!J+tU3LxJLDWYWF`mwXEhYf9%^O)-xgr|k!@jUMs3L`|Rd08f68 z{G{2^bnhklgPKsfL0d*nT1Kuh5v1HN%KzfzF_uTPMsU$r!U9&aoDRAIsKxDwQ=Crl zPxWRzi2tHYN=JrHL)OHYnWql@aM8jBI7+hvkbDYsL~j$lFgg zyM+D<0kvn5`0gugFoKl?fZ;cUc5MVu%f*q<(~s!N0!z7AZLvHL3gzsRhG3xo0-$Wx zQuiEm%7J*$>(`|_!it1E2X)|P3-YeHB@zaB#H?zd$bbXHSL1U<;$r-P6Y0Ib1MHP9 zMu}!|V%l7vOigR)MGY$smo44@w)r-GrqhTPQI^jQ+3A^B%=jPJ8<#Y;-qMQ26b1+@agsk8(11To}&}t?IPwGe1UcEzM9Kg12cz)0hseqQk=O+b`O0djv3Fx~oG5uI12XIg^ zHK!|S(l4{d3ele_TFn8Q87{pFbn)JnpH(vNpy0)w&;Viq>Nt`2fx1llorlx^88iKP zt#hy7YvZ$JRS$IA0*GnoQBNiM5r-%B2T;B^5_JhWAP&gfo&UEtR=c^}zOC|Q{S#r# z_?lbJO2%+hV@{Rp7{+-{a-B|jsSkK-Mzm*xZBB*{6TwpKAA_mUMz>h{h^GywV@y57-k6d=6Z~acRvSsD-P*q7&xs%g?{nnaf!u$TjT&+)XXKoG_J4CQs+* z)bhp)Hs%?}+6j;(+v?o_-p(D62TL2ebOK#z!}uN!ed;0HhxyveBORiMp~_wQnutwa(xBxHb^G8^8njM;P-i~Fb>0$7d~iCkPvJE zi&}vGBhsp#*-FHKp7@ZOH|GrkT6vIdx_uLUINB+j3Mv(zONm>vKB?cxb2F}t)%bUu z(azEiJ|I}I9A!DM>ebpj(pAs7_2*II_3O$rDFPRgsgX~g8k zT=AfjfE2*4EGoy(xgH?JT5-oL0J!^SvJ~FD_m%HR+V^c5p40iwpy1SxYe+eDwC|r~ zQEJJo%$!fxKyTOwJ$MzV_$7Mz4PK_UBfS%kBq~u1e#|9`8{Px)YLpjfpzxA!a>Ipnq7&KR|y_GpqT#NtPJ^a@Unp}&RNm@NyL zzi!|}tOZs^kaC>~HNwxOxDruR5lhD-Vkj+l1c~KL;`C~ki#WN9SA{sSuP;YNcrL?6 zxQDVbiMMd9F*2sEVDxQ&3T|3$Y zIWn`L=7Gncb$vg=WH1Cn|4>wf8!wZ3?d2#EA9#?@zPRz;kNr7_Fp2m)z?|=nFgQob=HJfMWhrB-(J(fH!V1RKo(qH4zRG z^Q(=KB00%RwgOl`C_KRV1vPZ}x``ElSfs^Edf&y@SGDT2h#Ot`6Y<>zSraQJw&UHz zYjBD|t8`u=a*$dXgjrdE;w^JG58sMDh#WtT9Ue|PJe+#i)RDi#(ZU@%8=oq`cy+g| zYI%=(x~#HFIb%E6TjWR&n5i>oUKC9^gf)1g8^NQTKN2jFltEcnTop?yz&4aF;baM3 zbtK+OFfT+B3`{o@UW@xq(7#yUS^1-LedkfRq&RE;?pL!g$AusW&{Xn#QB2%o35 ziToo|pn4?lc;waYfM9t_5W$=E@&OdG6joq=W!a8RE5|5)Q`|5;1ZQWTc6M%lFd9{5 zX9vOlhX%Ah-HlK+XXNFa z1F|S4ia2 zYdFw#eh`OW)R2BEwTmnAt6r)}5f`-~mMg}?ANRpk)ZDN3m8!PT)vR;FPYW!&y2XCe zsmC3iNRjRVt*sT-&aX%1y_%?lSr#F0fc(oI?%2dBl)B+APFAyhRcV@$NNkyAwUsJ! zNW&8S#T0Eg9HgW>y7CVW6Yi#JEI5cg`JZ_8ZeVJUf3)2k3p()fhdniau{8OuTqF39 zi+kUA?A~QI?`PqKSkv(wes{l)2*|(AqSRb|?&R;)3fgCppE*(~JM)g7Dp4&+nAGh1 zJn&7i{3r~3T3-EM3#J12Idx#bJmUF6`1&{ssoBwFRKM7X^jbw7hL&?WX_W6Sr z2@mMn2w=|v8uWJ}i^SoTM~+Qk3Cn-X>{Mv9=~sYl0*Z{yYvUV&FY80oyBZVa0em$4 zNV#RQ@YGTA;IkaeIrUz)du>SCoJSu8j_#2>#OK65(wD{e+{9a2`L|&fjzMUGPH-%Bb#+L+qeHXou6`PEJMD~dR+H{2WcQu-N<^P)zqS;o(offGOimD45g>r&o@kU5?1nV%#VJ#iu?Wmv*@jp-u>#j{O$}>V7dBc zpZ|@+9KTl$Kr-(bna5@DN=!hH|={tdDU02(c?Ub4rZw^k+%EzXf`QiuA*ud`v~(@Sg;0~NN2 zFN`!CLbj{&Jzn00GJ2_J@Z#RH^nG5tp6GZE6zE(*Ov?1G5W`=neO5LfS$r>T@F{ce zMNf|w5n4DdL#7RTt(S`wKR77xM60Rwqv9p6c*P1m3a@pS9qZsRE>Eq zgqcM|^zT8O1#Pas51$CrLZpzPd_lmK0CF6RI5dq2aa!sjmH=-cxnbh+c{XDWPPeoH zdvRNVId}Dl-CfKJ^}bDQrInwqqk+q58Yx+)69tRp7^wjaHdKmKX@u?QRf)GSl_G#L z%Vh|CpyO8%-egk^_=1yc1*yNcsCXvb_x>}Z;uBY@E4`GLbFFmDnU&VZbOu~nyZ7r3 zb0%7#{suxpJm||0{O*Hwz(Z<*#}8!%DgAijCu4>6a8i%O%5Bkb8VqNeKjoaA8G@XQ z0OaIZ#xcYNVyQ&nX7pqXu=O4=uYs>ytWRf|qVZOK?zl|0g*^?Odqc|Ek!}Fi8tAP| z>68z2>U2hk=J7O_Db5doxMK93{5S@i>!^Y(iDx{|8lrDf9%zX@DYEC*ss0zzu*j3l zI3_XFcB?PdA4q($qp45VS@p@il8%+IXdWU!J4FcX|$g1m^95%MD1aNg&sGg9JS>3Y-)c@uE* zv5Gi88J!a&=;td+;nzPG6$R%{?p8I@{z`hU*J2nMBiO0?7P^c*H2O3vCykk z!Yg--uRfrSnrl7$d}}0U7lsG$v`GjtclvJry&~J9zYBe#Ah|y2T`6_FUdH>@GT!&o z87~A!-~6q!>9aUv=`k?Ouq6f$#iV~01U1-=(6Z}0QTtMWN5J)mr>k~+8tKzAwL2ZJuH_>#QrsD~()Oqfeb5j-Y72ha_76X7>xU8}Mj~X29j^Dz@uS_>{GL5L+dW(jZJ)0xB}U#s ze{S7A7`X^tISZA?$mQ<(2OggtMrjmgEjlWrlIH7#b>`nt0K1nI!0GZMwXNi*rR!w} zW9qzkZdN;qPFRT39j0v;ec$R^z{B*}ojply_0qk!)EA3=`KU#v?^Wj9yrtAlka2VP z@7TS|)^mQ?Xo&N@;wlr9UnLUtgxmEo9jlVzzrGET-N{AnFRrs z6FFpVW@je_J}NWJUC-{uIqn+j9Gg3MIoXRx3_gQ*lMl#slFprSr@OEyV95IzpXB?m zzC|Ev6dUH4Q!u*=3hK2|)8cu2?*DwIzLk>x@+Z;aai1%QHx246&kJeq4Cyz0JlwuC z*m_H@lD#(2n*>}>PEegO7emX+e9UWHyk~X}&gdNUL74oF?pw-Oz*qtm&kT&qbW?R@ zKQgo!1M{OeP+)tR6#aX~P{*B{|9 zitGVGYk&SH;r1ZM(h@J-N}YWmdB);&J*Y#2>v-`lfTYlUWfWTY9>#M)9PZBIRnN+N zXbjK(9s9vTiTw8yku^&?6@W!I;`AiTYm*!#_UO;jqd&8eHH*^wPr7AoXqHm%x~L2RBhw0x|b!Ts7jHR zFw#Vtv0>&fm(OZZ7HJa?fYzOk^`_%lEM}8aBPR|xW;Fvq{K;oUv_{L`*sfiT$Iv01s*!iq6VQIF5AVxHFdN?rUF`4!E?kUpG`p;H-lE6q zVfs|BJlpfY*GE_Zi5x!}RGkS2;L7wtG<<2ar5b&U7wb`;6D~ol|E7n;GElXnG~uwf zDTZaq>HUh@Th7zW<%KL9bW)5NQ3v?IaA&Oa>n*)*N>456{d*!@PoI){KZHYW>DiE6 z+KTaNnSnf65s8L*f;Y5KgM+LyIa ziAYj2a4$-eui` zPvYKu83TAPhQSSiKy>{kA8Lw3g$MbDH+%sgA{-Agxi~{aY#Glf%ql;Q@hzd|2Q1dh%n*yvWVN=7-V|vFE|bX3T7fw$i4#DI_o?8rf{XlEN2%{7 zn@c;DFEu3PV|{e%9;9$H>H#R_XIa?OvS`&VCIxSd7r8NBKA5sU*s@FKT{v=sv(#kG zIOP^?hDal1QNg+yQTe%?4(o3<8^KN~z9`4VZ3W)|YtV2K_dM!Io}%Xv#BxzezON)! zkZ2Vx+H7Jnvzfec%c9yS8pfg+4+AP)Np=;C-xSI+DRqK{)k-Fedaq}cWmp)@{(2yo;lkkmD4w=E zuSx;hsKa>cp_));hiy&%^Z=1~waG)(%qFYYBXni?iE>$!-ogP8dMQ$xNFab7s)OQy zcCj}NxCu7vzR9k=wC6zx0?(@=kB-O4!N7z^AQU~G)8M^~2xLYGWMzlzCLV;8dc7j< zQ$H=t6Bi>Mq9<9n(ig{v4xvtoaHI70f0ZiTNanliSZh0(`@m=PKeMYL_TmPJRrw6^ zL*1)zbwp^#V<^GGyl~^71}>jNSIoMrspWiA;{hs4HFVx;8463rf_Ok2H}o#Y`>ojZ4N^1 z(FI+{rLpYLlJgu?QzHTz`sVRR2Q421EaDh|0#|@btFZktQJ8=0(g0NAt64geH`<|Y zDAbSyx3_`FwO0qfyM8rfG=nwQ zr*>e>$wniz!T4;`=Wme*ViTv)+vMcFGe;NI-cN2_R9C{581f_yn|EG7UY=+|&1G|s zi_^x(ubYT*+qTXyYayxYL8n0%pt);j-=Rx z_h;K)pFeE5QC3pVYjb8|pxDM2;x@XPbO3s8e+;qg5y8w$kix+K?ZYBNwr=Uk3fvj~ zZ=bFU><40NpJ7<9f5b(6U|LRmgRk!RBdRiYO?Q8vog(eV*8qayn!{s zwVtvu&iFlXyQu&$Hq>L@A29EVajg$I{1o3{2Ty{$K9Y*RvGDuNy-nFxGU6;adMiJ- zFUKFh3zOaCH%%V`(6l1kGzAqTw2CM#lfvf1j#|cVX~kKp$+wli^4>OYr)ra4%*47R^utpS zdx+^X{X`nNXT#C->wP7NH$U#EX8V00NR6d8Vr8*x#+!IRzpk>w(ciGv zPKRhvx$cLhr38aYU}F)gVWVZf43nXDjUo|%e5XAFW&zL{U4jG(6VVL!&8_HvOI6*2 z#*rsi#`~H{iBy*+PLv3ob+r|$>$N|jD`$RV3^Q1m3I6`?I#IZE4zBQS$(P7JK^I2T z=bUIe?&gzx)cw2}Uca^X{Zo4{!}*xe|K-Xr(Ocsr`H}0sMDLKK%g+}GG{K|D(m+_% zp_h>K;ran7m0G}(>dIJBUI{9m-_htl`~nXYbUzjpp);WnWkSkql~Q?8gMZP(??G!5 z1Ul<7_58u?V62#xqCrf$nxsQPB33dN!OY%-wm-u`=vHa9ew8bD79c!W>5?8ISoG>W zK7m?3e2p&r6|nsg?f=5A+?8l&d@oSu1FG&Y6YkUJaTgq*da7h7O_c-tsnS~EerGPl zv?6yza90xqy1L&L|1t=^wVc(ea0#|Vh%!(M!?nAUG+v_*7Ul5TE&V{C6zEqVE3Il* zKFBfR9?wz7I0}_8cAM;;rw@>Yb1)OxxWc0JyK1SlqNC&`LPU&6kdTZD3>M;3GjXNN zh*x#;H)dI!W86%RjDe1L5Ct{?OlmWZ`82eyPMoODFTHXAr~BY&n#5P8x^EG*ZzyFQ z`gjbx7nEN?+{9@EH1CDaVOsfic`_qlRp!ZY(i3Zj!4qqF=Eb z-(7DOdqbgh;bWcJ;dC(OxPi@&e1jLtO#YoGY*CfL|^}f{h=9Y ze}H0B#(|Vkg(3s(dEFY8xJ~E5TLq5HFTXV!f!^`Wf{fALfCEh);(~P*<6f%5WOWM1 z#YCrMMqTnU|LunCgm_9_#rr_KS^(hHP0-5--l%4Q8A_p_g~bcQj+U1G4!CRo?q32r_U3(0#-?iECC^ z0~5X^nzlTmUOCwJp*u}8X3I+_MsbZeC2J)`#ENpNP2s*B`o;pN|AZ39p%H68Vk_H* zg{7mU!3W{EPu-om)W!4TJ3x3KDf;YySgU-+@iqx*8<1xMwWzfB=PW8j;BdB!~^Eagq1c37&9Qxs2iu# zhTKTm&T4s&$Z>>F;U^Ec#^$Ns9w@wA9k;GhoNl>LpX=^!k~4dNpgU3{TAoY z>8vumYy)S}#@~FJ&f;=~uP}v{_JLuy_!=4>vmfQ?f>SQU7o0M({{bo${-*COwM*1F z9*eAvKGYJb@vE`F;OmS(O7JmTl!0T)c}0P9JYvc1t4M!$7-HPFz~{o9g9vycQP}v`QJX-iOr*1JoJ6@(n{eTc>W;5A`-3k z!F2nqbYyrUwy?x!W1pqoGpPCWS(Z_UAci9k;#8cG-l}7!I;JKDxMqe$_jajNM^s_p z7?IMXO>ec*iB|GLpc9Z9Gx2ATcIFk*q^u@tF*MV_p2mnB*xzV4S%#rh8AiE0jdpr+ zE*qI=$0*;QPOf8=cTZ>3@fco?qbHz>?exn?twhDz*M4dUNl$%IdFg~8=^@gCvvL#B zI`swv)es)CMLNsc`XpIXMu*P%8bHi(&INaXoUTqt4@@`Z^{&~j;qZIvFH8Y!gC6zso8AX!>`X!*0luILm?Vu#0II(CiNY}6Jz zTNdEPRkVaP1|ip4`9CVz8l`ZJ9e*%BfmlB_s_`3n$VPc{5HY~8Nv_gwNDXK#dnVpA z$nrW|1z`Q>l~~8g5RGliB6NjrOI3)xD|G-{(qVzjv4qhl;SizYAIEY}r58XxLl)3Q zepiPv3ale6+4GE+28J)wh_*~6n3rN-DUh|nHx9TGK4Qy$TRQe*r@3^NTi%RYwH^16 z)7+S$i}rR!EVrj(xn(LKFGEF*^R(PP;o|A+wHorVfJ_|(MF!!ygt-xmwVOUP-JP+> z`x9qm_N9VuD5Yi=rdZ%3FPW3mnFT2x{K=cZ0eP9ude4>d-FFU#Y3#dVX*DOYBsv%p zyxp(@e+xKIH3Wbs6-pp8Cj;Mz(h4%eNI~wM@}6fbuYVER z{=8laJz9->ayHPYN2po^1eoSyETY`*Tu3_J?TZIi7{TqQ@{H>y$sc(qHPC7Fa%69h z7#@-m{woH=BW)A+u8{jgi%M82?>SveSy`O)$hhLb^p6?RF_>!|gSo@9-*1GAextG; zcux@_#7@xd=A`Fn^Z}k)bF>t&zm))<9A)$%7=L-cM~q@^fIv0YPK@bBWn1k60^!m7 zm2)bZ;AH$yJ=7MU6V=nc2ei)}2Z?y-9J3)5lqDzXp7Q-wT_i3NX9N)YM)|(dS%M=# z%J0EI{S6VqzCWa)9U%{O3>a|s2Ou>4{bo)E?>i}*goHk5rybz9-wpuMxsR58>w&yPJX#y10Cepd*|+)#>h>XF zPEyM`<|9r-r0StE%FF%;dQJ_5(Hnk`w7NNhS>j|hwWtDQgnAYQ>kmTYy~xB0ekjm( z4|RP%?Wc3RLES^zv#(daJy=qd=&C6nrY*nA5UmoNbr9$>uiUX8bjoyb(6bt{^vr+_ zt*caUsfFOI9C{4^+eTEberosFJt*4m1Ix@7tmfvGMo~@_E5yuoYLH#ZRt6yQ*vrJ(o=j1R2~bp!hwx?d zj1d~hGmoz}C;x{$Q%*qU93tyb`}>)k4Y$1SC!97OI{O+lCOECD&r;>E zE~w?SnpM1q3t$;-B89EuYD?9#UJW@rP%whg;gW+d0fG;~00!rslOcKad*a+7qW%T8 zb?`_`g>5l&SjGMH-j^qzcGKd*n}Rf*d~&k_Ewzi^2Wq2UEylm<*u6-`fF>8SvPE;e z20O6^yV3njr__MrlQh@A8Z+HZ8&98{sih#?4_|NSMC~Ykve+nG0~7dI~OQ;3Rjp3Jn$iH*`D^V-Vhd%m+1`6w&S` zr$!6*=$^|@!-n&4+yHNoUFgYFo0e&FIEexZ^%W2@7VERG^sQqMV-#lxB$oUt>k z+l{DU`k8vxe4Pa6eT?bcsASA3gY zUt7}}v57})YK>TWy%n3qc5JN-wF&Jha-$Xi=($MSKu1qnAxJc7VZEs%ZVr@4e*>_$ zfa%T&>Zv*BLlRSwjpu-#n{&YL70+X1Dy-*mxQlyw&;Wm$HRgbGaaRut>V~yTf())I zQFJXP(?uWHemw-qw7=5lj7GS0oAq+h%v!(70}~#>{@fzvN*a!x`J(5{`pho^E`S`! zQBjc?W)YAp84K{xbtqyH-0J;b$lAEqN4mZ2fmJS$h7+dH>GT^n$ex$SeEjTOAWsJ_$au8g5Wi@*vk0^qY=O^umF51;MxR=z?>|EYw}fr zT-ldTsA`9naOVgb7mrt<{||9ZxpM14s}x-fr~^iq0|Ihz3q6LJnf3_Zk8F%NqhY!| zTcZr*CUYCNAtP4vw>1#E`sNPfxu1END46y#aTL%q#XDWjBjK9M&*yrZhL{Dqa%|+R zu)-wX-|vqfb}0^zzAO%xphxn6$(bJwL2iC&IlJMjAbCIhC(^w$yrHw+rxNx6Wm{+6 zu2#6<037QhO1v>FKWq0{B|SUtY!`15l>YLwJ0hU$plbKT-%4Dr)68~8isics?KXOLr0r`&0~LGz9n_k*+OAZpJEXluta70XWNwNr9f=11yIoyU(s8ZQqRk7u(7&+Y_`(8BTp7b0~%*S5CH=j6# z;G$b5TOwwq_r!%LUn;0w1}qBubo#Fo%hL{_zQ87BOk_tlBdO_yKDP=BO~ zx@SQwzc0&l70rsrB3Go_79dOMMLaTvkmV{6#7h0j)MeO37vprrPEL6AA3GwB{x1iQ z768OlNecp&tH0PF5JwxVn2wi8d?p7mx8t!A@3#u0fn zr@MwwbeMYa`8mZG$j{HyZ}sd1@a&d=D^n}wmy)7$W9{4u${;wm^6%z74$~bu7G}^p zEOtRN*XrxTFPC&Gk`{u?US2y%Is3A9_7qHYQ^-k06fdAW^B-PycQbpBpz)k-Bu$^kM?@Kb9f{Kccx;&Et@>_ghPERq{mGA(8_(r9OjX1W@XClKoTQdko z;ywQ?t1PuG$CMP?qRp}WrB2@u0|FkZ>y)&`6Kwuz|RX=?7{=WdlMIQa^Z4m^p7 zqh`1zQlNt+T>bbYn}=SGK(9nk6iuZpS{^)oV|>TMO(mL35Nds$8Pj zZl2bSLiG@pCk8xXH-0dx{O@Ykz`psQzfj+e<@U4CcXkl%de`53Nyw_+lh)l4v8z{= zJ-{;g8)_Ez%!^~`$Dy-zJA5fNb=?Rjgl$4f&xTX&nO|#8FwDbgw?qVeGxVktb@vc; zF%H*yF*1^`=s6vSxswW0tRTa@S)y+B!#=f=G-K1lsZf1=loKtz8&tB+qHjykCNq$6 z4a=`R%7yGe-E}+eKpmD&S5k7nN#Ohg5*rq<^Xo^nV1+LM%ag*_SN=TMy*B81KF3T> zsZI7Dl2Tm$!~|88l;Xgw_jOTgT3A)%Db>3mEiR&Tw{G|e;NvMo|+9i#!&6%oa=7sc$S4&~306;R5)ek=H@5_B3$oK9xODY~NoVw{H5 zyD$mD{6CcoeHAt>sv(K{5b9I)T8w2Z6icRyvc`{6>ytLwbBJ5R={_}v!q>vXF`ZU8u9nC(UY8Ts+LR9s|~13_6-tr7NNKjh%aodG2QCXRRm4ViY5Y`+bA(C9w+1| z_ltxn;u^{`0YNbwP{svLz(k%DBGe=RE01r4(6CxJwYZvHg~(g$nmuKgK}I%OSfJ3` zxjUivr(jR$2J*P!rKe-1PTVr0DvkZM&U$pBsqA8ZQ(}7FUC`(v276cgNCBR!2Nz96IA%&FS-TX@dH0Gg{8m4AB zIe4M0GJa}*Y4yw|Gn|4>$9cUT_M)pQWlpyVqIp^Gyo|Vw6k%WE zdV*!bn+PYlJb1co0?Np*rva*T>xv?iqj5v${83WX!(FDjL$gx5m>t< zw)fLZZ|_%FF(HBR2seTfp*U;~(!Fz3EIAil#aIHoE6K6P032WfrMK_sD#Ka6vXkwT zUu{K^r`Xd`SiRcF#q>pj4z=U9FIA6Qy>(fyrrSosbl>Tyv>e2GBs)Y4_OmCnK04m$ zo!v$pxTw@F_^4&Z*fyy4Gr$D1z5>kmfJX9wu13`tRDgi^EB4E|(YzG+kdh)rGqem`iI)wDu&I~XcJGPO9K^C1OJPY97?TAzhmAg zS+0xev%68Hkcx%3iBv!-*d<%8s)U3$zu>EtQA*g~i&So=Lcf)f_}9;9iRJ05E0@#R zt^I51?jVM>R3D$^h-Y_FB;7j9!`Yc;xoG7LXoY6JW*G5UzUkuvZH?g&tY?hyu!l6)52yf)%Mwl*$?bW<@#Tc)^Ce zle_R2#cIvvcRVnC<;`fJ{_Jr$=r2Ww#p^YD?TJnOs&-$p_`eDkJXED6d2jTxYP$7P7B7$M=V||7U-{p7Q3UV zyAF=N>|+3Hv&1Vrp~4)wT81Qo>_=3VrUQrftP)d0Bt`A-vNq}|^5*HS55cv=sk3Le zHlF%q!yU4^Djlfdd?QwUr?_G#FS<>goph_LoC(vhf4r&AxjzGb)6tuR>8q~&FyVoB zC@J75n>vh`&P{p)AK&j4!=}s7<~fpZ@|o4#P{i$d`s zCg0|`dM^d`*4+~~@~88;>nHIN?UZg;3s`DSt)@Dx+vvv zfbl+b?8JFw7mLTq6brf567n%?^!fqK1Aktr+k!TC)I6EcEM zBNP|LPE>Lpp&8>qv`Sd&_#a>Ox|)XpAIC^Fmz|rZI+-ykJ%Qi~V5ah^dsqivPRwnu zqC7e(U+O+&3GSfAGs<{d8ZS0uRuQ3RZrwtU9TyMHyJAdBmjL+}U30_xuIU?i*Y!YP zdNkR=+b}nH2h?B4cDgI>M^{H=)E$T6HY^Qh0JX`h$|?0FQMc*1t@3t9z^LvvG5-LX znjnaHiYUxG2dKKW3NY?BI3fa_#}@)CJY5a{x1g%g@4o+te6SIvTG6G4)v+l~_o&o{ zU2@IJEC9ICaGC6&Usl7dzF<S`!2sWWL&1Ts4$Z0m~j?dinW#DyL=;YhBHUw)ciNj#1B9gm+P#AYT0gYs6WA-To zYmqcPt0plkLyQD)Yik4djmKgvAs2zH#tKhKJ)$v~mHJd`#h)jw8P64y(`O7OsXstG zcrbJeTfNB#d;Od6fD*V5;|kU}3{}L#$J?H$dY?5LUhet5r~{Rp_DqywZH=qd?`)_C4v}9=YhL zwm~jEJOJE~gpkeXbu+LL*MWw<&yJfs_+X(H=fZI6;O=@C;|F}o)-p)Lc@Pq9>+dq5 zZFNQ*r2Ej#L`^|P6=Mkid&Pr#sF)i8qK3H@jJ$+bEZu{!vSVQ!bCL|9h&xH~6#iO1u zYs`VUuZtr{4zDf4*qe?Z2DmcH0WJf3*!tXoZ0%F~KU6?I6WB@)3niRh#5iq~*Leed zG;CMQtryAp{HnbFd!j4`N(>{{7^9R^Tw&SCg2l+fuJr+nEr6DmX zht~|4p395MU#;?$&U(lw={4sUA;gH9ftN=kHo}9MsP|Y{aq=s5CG z88LvX`T%N zCSd7%`H|o)WyOPUu2ds3NgAeKDMwjlFt?_*z;_bu}+c?dbsoYHy@UwlZ3 zoyRY6Re16_e3$D$KD}~$>{Au7Lsw=Pj`bR`3OlnZ;dD}5R9?H+$Gmn^%=0ESKuMH5 z{%xV(H)c+Pj_49UpzrS18VG!2DZpNB7@kYWq;Ar*aP21r4#KNB&V~G@&t|=T0qLY` zYLisPS?H9ZC(?-r^0@MzKOfyD>!zA_9&Ve^ECpBP=eUxe}a` zpC06uyf0T=D6dy8j749kj!fl1_cqW_?Z<>0xNm^O?|Ce*j}k0a$}2BaSGiDK@590! zOxHafLgdqH5~p8Zi)HL5ye+6nb^HDY0_zS0Gx&}yUOLy2Zn&lkx{hy+2lT*a6BSM= z8w0#mwMa2_p!hi88ctc{a{h}HF{6seTlt2Dr^QEt>Oy$kr6$M&FWe&eH@WKN)voQ4 zzlnVs{45m(dX{ekpS$IezU@Ca#}A@Rx_L|4nu=mYPfUbZG(0 z>~IHN_7nY(Gi@!#9GSvfi@CFo-hi0Xk+EE%=T0@I`+~NRB+g0>XF7YC>tZphQ=?h> zNMzVGla~T!G zUkGbIfg>}bL5F2N7APq3YRM~yc~yRilLG|QDsKMOI_Ai&1h&A!GW#Q*7PP!QT7buQ z*$p|@Qws(Dh$ZL;bu)KL+f{-PA(mJ#kg-&bSng!VfU2hALzCT zs9oPQAoEKyI&*koCu(8V!s=oX>SF2S305e(;tAGrVjs|wPZToZ+&x$?rvSv1i@)gS zWtW(ry9 zdk-L;zeq#4$m!5+8yU&*R+E?`31&ay>L3i=PMxj+X3Nk^U(=G3X4Tm-^eZF6u}IY? z%W&;jR{V$1QeB40sCvi^8(ufD)Yg)P%K~a@fwDHFTT*e+gJPNwHIxe)1zQ5;gOP_gxcPw0iwHOZ%Wz4*tWYOxJ}fkS z*B<6)@zzysuH@ESI3#^p8+DZF%!j+4&WF1Zq=cZr#0D&aHS;C94nu&m z!mi*l8Vo7(*K!zg3>^VEvNx6^n$^5XTjVCq(}%`xAmvJ+O@Vc$=83A%{37cnam-Wz za+TWTuh7CKxqpT+bZDx*(q0Y%+ZU&7BcVVX&t!+@q+`PfM(#x(s#qnO}eLp0&SWLLKe$Lv{usi-O(%5KJZ?h3_d6~(uxeNyJCQ?q*)y*Td~@2 za&NSipXET+X|oL%pNqi~IlWCFU69)_^TupTyY59mxVD)#0vibzhGlIm0h`!0Z>n-z zC~i1&FERh-wDGPTkJdL9(oM?dc5EQ%hS`=j0~jp4@j2m^o!0=cZA9&)bPknK+y<^2 z^nj+*P!Zm#W>2Ag*?q+Q4CE8>M)H<_q^O>B7=zlvO_1)xA-~Z?c^;UoHsT>s1 z0ob@_G~HQFnwWwgCXMNYEmFdy&>}HiaC~r>RJs?%fiwqt?5M_gDRzVlXr^<6ZkYpW z-yjP^!a#;30kRdqf(_La={Cx5pkB|OjQUa@a5Hg`B9yw}`*%hjTAJHTG%$<}-ePG` zS0V!YKS#5f72bd|=?ZzFEgY(dQ`@XT)HvGBr+N_Yh#f$DVKR+=moCI-j3H^N9EZmK z)R9lE#g91Rpzusv>GZW#Fl|S-QEkrdQL46lDcq`St+q3R+#A@GL94FPR-fP7=J~xn zck-3W2)(5=U)?u8@phm|R>k`flYfX)?#N=y%v|Z@WA@Qyh3HrDjyiuYMoi%SekhCQzv^FQ7l*$|~<%<7sr1lB4svQp%;m>(N?u}SN`%O>8A*)Ee< z`!l!>kfT@+dA zBMW}SC`4V-J$Yiu!Am@KyyeQD7aNMA2QhZ1x$C76xj&~A_kxaYN5?7UFy$be=3(gv zB8OTA;VNwskOBNtPF+WG>3&6N%Z1P2Tx#!(2-}8K_Q(M)7yI1!A_B}oH+3iSp5=Vm zF*9jt!gSfWk=?g=jxJ&-Of*_DCAo9`t~k4{-xcR2j?HyP=DOn%ax_5foO8lG=h!{x zgl2W?1^q5v&Wy&}MrWj|yfC8vCJWHJzgyfs{m^ZP7|JE4`tO!B-W|6p&NW8m6+VpRFO~)fvM$ne$-5EL`f2-j4 zclUlXWT>X^n+6OAQ|6b7GFzLc+UFXZvIE68e8fH5H#P4sH}7cQq+1b#?fznGJWhYA z0-?%@J_w`o4uMvDn<#GQYFw5m(BJ}}FC8eyX^L{Kj?aeP@0Hqz6|E{H+@;)9IyC(K z-Wy%n=`x{5=^FQ^s0$iD*Hrs+C$fCa=^hGb$B3|PNFEXo0@u_WykR%Y&K(e_)+&bA zNO=D%!)&FTR&2_58mkj_)Pw9t6tsEh`8&{Da7Dy{N$L7-6(KI*4xOGBcy+~yzARMyH-A%29 znQ|wgD>L!f(JfRpZs`sHJQr9>%LfAw(7N=itmiAdm6xJ(R}kifDyxL>_w0A|c0x0o4}^B*8HejNOp zRPdQjIv#@u0aROab6Qfal+`N1Af9~=*Zwn*pVK+;QnJ$fs6f>Wz>bp`6ab9$(&#?- zeN~bI)`&7AP>!@1RT*+}1x#egE=TJMg77o)@_EInd*=n*suj>!Ia@)Z6OHk4!r~OM zS@10wCf6D!M+3#HUPjTXx471T^42GyKGn8d@w4JyO9hHsEgmPHUqEE@35K~_8Z#WH zH+Y^J^zqgD$;dk*Q3ogyz1;e%Kk=Hn@cpaoKrKA_B7y(7hwb8?J_V`n34R z4jP~m7Aljd`7&!Sn>c)h5^*V+;PJNvCWWriRh!$-e6)J2Z{=3sS{}SwTF(|MXNyOi z*48)Tj5(zPuO17iS(?!j_2JX}c|F52P|h;jnAnylwg-t6auO#}$$2!b9)F8jC@|Ba zSe#%MFOes(UPzPE*|M)M7HD;frnlow5jqT%6US8wTzrZ`2(hY>PJ@|UV?APMh`tj> zj*nAjn^fIS?V_FBM7v=gl+VTG4_bgt%2rn@)T!w$7el8^J~1zxGU%`cm({Sf=E~Xd zUBGy70av9K&Ri2}EF`^S=H=&rDC5yZEmqqyxxH7KJY^9LZbvYOowkIWw1pfSF~Vti zSY@otQ~V@KEt_unSd@%5kFyQ2hymx~nF|kI7p@bY28aOLL_qg>fvNLJSuaTXMc}k9 zmJ-)cZ=~GZKMahr1CTqsFL$_0aIbCGg**Qy>OR7vqD%?=!n-l8gu>e~A%DCfelEhk z_mgb@8dl5k3%{{nN6Cc)gdeceX__a|R}YEFzD{9<&lmil_rBQ7EqinPLc-~~15P+M zc1IvrDQ_m#-hC5uVG*FwD?f|52FEi8=_FmIL-3~y`|fpGSt?Hc%1NQ0*IhZxV|rq+ z++Rxf_m#vF0fY6@J8L2FFL4qa0T*d%yfC07BXGoCGMWS-I9?vM43?XdfD6Qv9N4Ql zxT4*lCh?^wpmvECB=mJ$cjcq?k;G4!d@sEm$i?7w*Y?0&S_J{ZO}g_U_gau~%SGek=U)C^ z1oxl}iiXzQ0g#-E2qB9RV?ThPalOV=BGZ5(Jt9LsD5-iWV&voplu!T>E2RmsAWIQy zCOL@^Y%mfz;Xi_{fIUR^9fCgM@>L5ApShz3@C~D9g;t(uTQb1IjFk>SlpdkS|IOp? zF@pPuV(#yzJL#U6eD7izj&QNfPw2f|!+;%sfVZm_2sK0^wDbTu<_e77X_z{;El)WN zqMDb(DF%Vlr%rW)SfsZnOc}oZ%Efc?ltANhHLq15^LfgDf)V{yu|X!O@(|LJ6;lU) zQpyF@$3ayR)`i!%P>3h38Um;S79y7^>Z7I4gWR{jU?(oX_q*H`lqarX*!}^sNSAzc zU!@FH1#=&00Q@OWbUc{?l3}vBDitd0k@|~Hd{1l*hwR?U%j;mJ<1L-Kqc>~#tYqxi zu`u~nw}Y8uyaocDfb~9OI#y;vhZu9Wqv3x+=a2)FS>hSF3?@;1C!d_SsxYrB?hU=t$ooQgMrp<;ln%nCn6=fRx9s;R zU365a6cN`tvPW55>^Lxs8g%I~I}no^c}Gsj)$#TUhQNJpppHBdF7Z|Q{5tmet&UG1 zJLLdg-H*+Cf2QqXi@)M99;D$T?J6c&SxP)X_81Nl*4^~%U#sUz>w`EkrYQExiD&zp z&t5uSpJ@&j5qN%X(vx`0XBzAC-f`u3S-B;0X)Y?>>Q7sRJ7a|vX+KXq@xDJi0d!z* z#H(AS$nK7CjXqF~qSncbJ){uC{mLDz&I)>D;rsm}3V-bLURnxvOqgic#Ie@8dH-g-*dr2TJp(wr?H=)jV`*c?3&f zMAQ%5e__*I#%tw`oazcAS|ZLiN~)gU|iGDZo}~jTUXtW?gwtOT zsUn+aM5y``rgqn(bayjM_IJ7RI4&?#7CnU*^kVF^?JEFmvz%-Nf}V^6)M_yMGWLbl zE!gP?Q8)IAN_V;Gc~`Oyz5(S}?l|Y5M>QI(HU%E`50&Aw#IU2BfiA<+D@2E-N3;y6 zAUwxbgd);`;WyJm>ws=&4wh+Q)i_%@$aZ9U5j4kpU)Xi-Vq+DEwcM)8)${M&A6W~# zVSm;WaEi9w`5ZiA^+9+5ish$KYZ;8kB**sY&8bN|^eImoFm*H5ft0*sl z)prP)xJjI?z>$DiPCaym`u@fUZy=su$Lz86Nk6()#H(X{OYz+yet|0!38s3&;#K9j zga@r1?4{#YyAnXHdF{~IB z5ib}O!Zh!7`RU60l5zf*@>6G9s16>=JwUr`r!7~MOY?9si!KsZNsdU>Dhkxoy51Uy zgJ1gyT}?>)0~FiiREyZs3Mh1#1MCtioB=2@Wy$)A{K;p-^>g8Ce90V@Pz05?R!|ci z=zC{0XYc9SFz{GhWD-?o#7dG@l*lSFgp@WHwyz5p4Q|*v-#wxs#|vJ-T+e$0lDQ%~ zm`A7Y7IDEoU1_O{`zo@{`>*x5A{=DvI;M~LFeihqat0N>&|g=Pe#%e$|Hh;t#J>7~ z?k%W~871Jj8uZIWzuq{O)K^tfL?Cc0{5K%%2T0+&e@+@4ckzR8o>JI=7l9&b!4sLa zU+3;7ha+EwF0yi9W~!vx4W25PRI4B+dEDzCaHdl@QzN?(_hvE3IoE3cEj7F_5Uu!} z#S0Ai1Aq*U)pyKZvHs-W##vN6*WbYuiajrekf)+^DU#8-v<|Xb7=hu}qIWKOFBGdt zg-6s}Xsk@87S@hYwCDg3U1aiGVeLqtb%g@Z-eI9Sca(QUAzx-Nh`1uxww z#rYCuc5WK@m>|OG_*v!8iDf@#&xu6_S!7KyWD90RNqBs+E$S@j(m`Ay{h9C8e>r+ETO-Wf&hB!IFu4V=42w;;gHD(FHi@|7_jg5IRc4Xywi)esVcKmN8 zv#WHlOt=qoYn;2DCV;QHFXTae`5OxVGJOKzXT-7%a%_C6?h=)``sXYcNJ$!#c*m5^ zcw`%au8ng7Gk>T}gfXrDWtMLYHICT6oZdpv@hUQ+M<5(v9At|=i8Wm_1|LF#KnTGa z5^CE#i6M}nVC|3KB5IRjOZ_N>&uCK5G&pmK0L98=P7)_I8zu9^=?ws|3u31O-zt;f zz=#-#44Tof5^2RLA-pFx`cwO1ChCXDi2@4ZcZii7f7jn7yWf@5m`gsAU;=rnD%!z| zp#j0%OAyJxh_j!8(AvYq-J3{cw#85%z|?B2oU>k`rt9}r60PpP6&!HPbazZ?V7W6L zkqt~H@rw6a9{sLEbL-ywZImWsSd!nt{cyu9#p_M#%Uk(bYT3F|xsj~^$4D!_OB-pn zP@aRT@`<6RD`pZdZ$V@l`wgVubG@wwQ}LA}ezDo`AYpCZ(q4c-v~b>UvQsI^n*6}vz`V5oRU<)QWu93 zsD+^Ox(y$JIms^+Kn*X^PIhK`%b57u;xO}7V0R|hu0JwPvg*y# z8KGigALzq6?Y8mN!gqi3Gr1SZ3{34)@hfN>fA{!CQqqMhwql-Xk?VMOI`byB2|6>U zi&UInJZM%pe&$~BwMTwZ#pUO7=cw2XZ>~jzZ9{7723944Kf@iiaG~o%IXD&|IFtZb zC!bl0&+3N_eN`@dNJ{aN4KmG-QY*EF1nH= z$79z?H{?;HL{=Y^X;^fhc-p$o15X8L%~dHi+;z@lci*|U>De;j44%iK37p3Cu3807 z^W4ILAaa+Xxrba>XLxP!2I#F^h=$~fzQ7<^9TIK>wQrECz#IVF00Knp@d9r6fD==5 z5}D{L42~fK=(&FQZakLaugjx?Sx%>8h76VfDRxtQRJglk)2e!%&aV$u0b-Ooh(1|f z78F{k6#LjzSq@wNx_7r93f^-vLS2eo{Ebr7|9&+*$342|MhynNDDnYhZG=k5zcZn~RNh0N9QhvKnqWCNAkgW^CL=(V*ij2x0ukF?*I;}->&J$< z(+)CLB-kI1y;4wxfRi?aX!byz*)DngC9jc3iOa8mTO^Ymt2%K{(F3#;(_%TH#}|4B zImRQ1&4rRwTbc_I%Dt>vx^G$Wi56gp1~q~#0C+8MVF1WC;is&V54NBU(p&f9(Jm}OZw&H=OPP0g#j7=45w6xL7OuBWX6S3x7 z*RcJo6L$84KCXsWoIKvaZj9cOT%zr;pM|rcx*IC_XKG`vE+Y+1w2G>K}&|=MiOGJdVmbwKJ&h!F4 ztu4N^6xy!_$t-X2Ap}jy8Q-cdmh2)~woK^o{3-^CIEa}4#Rfv7rHqXP{4%(|95T)G zqI$iE4s!$W;~eWj^JSg5Y~5VW>yJf0?t^EmU19P(DMGjcO442>Vk{q5ZotV$l1a)X1w_ zmaZYn^5KJZX3H6*ZCyG%0HXQ+t}u*s>2jh~j!s>}6|;t~Ozj&!ilRNS_v0Pz+SiiP zBA#W7lRRz#7k-sZ#;LSIRA#GOs^To?AEt(Qi=-m366Zq)M6#=hb185jUtlle?uJb-ej~*7ZF0eWc{f+%BgM&8f#bZI z_M#l{`S#q$CHknrtasI;(6;D%xL4@9taoizmyOesLO{rw`Wl4H*XHHOJdpi}Z4DrR z>+F6FZu~SN>DGN?IIi7Y2uU{9uhFq71mwUrc8dv#vT?=xr?nN=ps`@Fe_fS5-I^}Y)MgWEnTyqKl z7!gNWplU7JD<|;s3%WMm&9d+7tAVN8UVo%aHz3k!r`r49 z@54-W!SLRBb-;z;exDRoM$+9^ae!2+*XKv~W21DHaUb`(9En)r`%1o`d=spW<3^v{ z3V|hI!%|(pbAPtjTpHVD4|^QaK>{TlkrQhj>FCY*W9ooNOtubBA_J z@;vG*)uUZJcYl*sRVX}w_ifb()Se#D_*~r=10ZST-H$ck&Dw=bue+Xw2Iin-Rc6sbK`|jBxb)$mN(+2RnTImHCu&~^Bu(N{ z`$~7(0U&DNGmqAF_5fUM*96A95M@RMC=E)60<#x&WWLY=`O<58p+TGBO{n8{(~)jo zt~qw9YUV@VI~Dd3}ExPdP1Qat3VE8c# z^OR431%Nzh?Y>f!da{|tVQYem-YYzwE|dcOuO);Jqm(nhmxEcIOWEH`St=u^`VUR4 z^C_1UnypziJ(eX0suFo=2Jlly zYTE1Hij8ABgJnR;C$W2E(3DjlYos-56Y`!@WyzKHH`KNeegqmXNPn6M2P*3o^Z#QGw( z+`s z+KSUP*fW59YA!_RGtR&Qed!iw8h6GP!gN+GwGfG!al3dmKH^>}9H4H6J&d`YP{911 zZb?a8>#|fV!cm%3{htqEnyK)I*7NnLjAo%^c(EyRfzSO`7phVbEkmk|6e?eA{=_%) zCDv>YcAxqTd%lSK)Y}&Y-URgLcI$0dEbwvEnuEn#t#$z%F+Pqccusv6!S1slBVR;# z2UYteqB{;SJBpgqqcN4A(HKaG|Lp@svEDH6JQ$b3u*tu6J?Pl=E8Q;ctCltRZe6sA zx|*bIHRlff+@XdX8Bv#3a~@>QqjbqOcXN?A`x#iq&O>Kzd&(0InI!^j`UI;&A8_1} zg2SFLH_nw6nBGg%j3UCsHe#Ds0C4(yAn-V6jX9;nifAwzI{~oi`-X2^X2dHk=5P|0 zpxhvdtu59%uffijZ^CBk37@x)^TIs9Kb3E%F zbJS$yZH@rBlq=Hm>^0z-08l`$zZDnxM9Km3Sta+&_VF7?PTCG$p#BT(;QkNv| z{PFT($NB`j+}>0IY{CfRW&;k|-YMQX$z9jYEdYE=e(EbC!U-!n z>^-pAB+;5>eXu+vyE|;Z9>_q|@Jivi90Lmt$a=`d`?&l83fLWfZ(Ok z>6Ot9cw7RgdQK8BQf~?vX;6>WLz1y?fGN>UPboRXNbQA{iKLtXt4BB^0jAZVc7q$I z7IZwK@Z|Ow88Jqt)5}$T7n>KZ1Am!@nODwO;F6BF>!4i3rOe!jOY?eWLTgSE92&!x zP&EpjvQ&i9lGn!SOuLEpObrIhC=27yKC}*-cqUBJv_llATBjF&$AT;NBei37F{d2} zLV$BqL%xJ;$;(a&LKmJ6l(-*KQ5~w1S!-}Py~S|p7ncCklcpkJ)QxySS3-M4 zwKSjr zB5xhyg#M0b`xz`g&h9ROR4%Wh2#4{f0!GAkMO?EDhC+SpI+pKVzQwBL$t>%O@a9|bY*?JSGN##XlbvSL3tJAh25Z~OUX}h*Y&>4| zK4_HE)}pdK$d-f-9@dOx7WZ@$M?hM2h&gZL8=NheoCg8OGjY%}G2vPt<{1;9kKxm| zABbB`3kKtDr?92v6B>(K+I)ThO_+Ei{HY9-n0Z)v4;(=M?^>I1p$_bR*O)s{8-1^t zf2~X-2BPBlSq4iRaf=&q0F(~9GpD=qi0mxx1&m)X035XSY&ttOkSVWtZCQ^88X4D% z(~JYOp51C1o#>-Qowiw`OM~tZhPNF6p1{NtcI#`vUEX!KX&VU_1`g2D;`~zSM$utf z_+6-B3nlKfjdJCCv=rOgCUyFzFN*UuKD%`()2%+PKbJaLi*I zNd|INfP_l*xw%dI*qN4^fNZETI17hrO`}p2{@t|dk^;Z0I}Qaz1M}?kqgKjBTMM7|{3fH0Y z={q^f9k?SsLR!idQ~6Aaw6JFA1K-#ThW#BEiJ zAEw0lrAJXdXW)1~Qcf37@A!g5N#`Qv+hZqrT|WEd<>Mm>C=_9#7t72`VdKxaD$A@&2N_D8jd8#Hld z_ne3gF}#?GO`LRj0KK;2P;zIUpfNvpiHmUJmE!_|voN=wW!Rxh?UiANZoPMB4U1`q zGiIBZy&D9}9t+rRjLcxW1%uJR;hR&JtCWM;@c>mqPw}?C8@)*N;Oxj1oJX$bg9diP zsoVJjhXVH35i6!=T>=}HgFNwDI4)$>!z^6~YSE~e1pwb?4NspFN)nkT?%IU)E(JtH9Ju~9eYRhp>Ql$03XG|aW|ohJHI3lzDh3% zxCaFsyA-~gXKTGNTW@phI63jk$u5JHo`0pmvCEKyNCtn=-iwDu;#=)$;INvj_y?e5_!S64X+C0&K_V>^(+R57quY$Y9}=TPCmt-e;A{5)y&z zGrHcpe3#@KK7e_qngE?=3MbA%7rCf2f@5b6ocfTX57Cob^B?)*)-F;FJn_oDC-qD# z^UhOWiYh7=25APMExMyA;s+{ioQte1{QbUCMBK=;Mj;e`m4C@vl^4oTzL}j7Fb;Ho zw*u-AP*}vX5e~77V2Gy-g78F#o5l>VX@x6exuJJ0-Ymjv&U-tMYB%Qz^Dd-#OA`3c z!Fu~|;c`22NCfKb)^_;((;m;;I=p7Pd(Sf=gkBTx??4TO?gZyRKqaC6OhO^oN0~hE zDHk+K2l%Y3NCBAPhtig4Wv00o*IMS$V=(Jo-fDRy&t0^C>L?yiT4)|YLPT{FJqJv; zK%Nbi{p4AKbL2@E@XKP*17LnN0BFoV)kKri%+p(SKn+8y<-+^=6i539jn#Be^+HoW zsprt|!JO94F*T%esnQlun5eU$@Gac~brzW!pD8FB&c>gL&4S5;5ijQ^@xEna#qI6mYsq0AgP>5Q*zWi%-;U7Ze~L^semlqI?N3h-t?Q!I3_#AK^`TR)TXUDC37Hr=TJ;u+v6 z6V9U}QaNili2i8-^j;Q3+25sAu}ps14rI7HtV0sl&DsJ^2jj!?w@UZ%DRVzl@w(?J}-VH}(`>51{N zA{=;v0Rpjz2WnLx0qWpZ?B*nsmqa?|S}O+``4JkJ-#$DTEAvYIij`gO9p21{9J;1+ zFL5s;W0h1XJh@U+L5LiRLw(Ip<8jcUg`^0eoilB`%QOZp8 zFQg(T^J6hcx5R3LkswB-#}-kRfz&fCn_q#-Rlmh#Isi`}QTmOSSYI9*`S<<60$oxv6Ge zt1%Ghj&x0i$ho+6mgHpqpnslr-;GDA~Cc#gTQSNe0=M+0cE8V5T zjQu7})=M1MIy7!no$duw9V;%O*3=AyDd%`H*S0%edVr+XR3}zP=N{ACz{Fi=f$a;) za?y^vn2{k|Fq0l~DH!}-78ir($4Z}zWm2v7`%n~W%}Z}j70jepP>W_A2B1UWxeO2& zf#IGcWCXwWl8fYkc~mHzT!)d17;@5TFS(Q{!F+ct{%<&NG3QYjNnY-Us%>!O$_~m5 z-FcLR;(Z7-!JtSj0vG7K_M-1PA#4*;x*b3b45~qok$eSEVeQb}#1_+}1YWqeJV1A8 zd)5s3!s;A46Er6?pk`@3G-zMI{MFL(ll+>O7WthMjZCqkhhIys3m3(t6#l~H{nRji zZl%A<06K~ok-99GsIR>tFB4jrIO$|l;Dv!Rh@Ab{q-v!c82OAxfvt2jTA-cLtpId# z(}`y6@>sR;jXI8pIX_VS(ZkRqqHjacs~LgIna4IRb?NwDK%GLy1gsbZkfE%ZuvRDQ zwIAAwUFJzAdsJuMc~IE#Gj?+%w^5^S*qP1olqw+Xh75tuO;l0P2XtgM-r#eiQ~LfU zl&^=(4Ft}|^Cb5wL-6IQEz5yh&YA<^QKhSBmB(o=R3I>dCT(Q^K(?tZbeqDt&NYO6 z%;|F+23XY+4dLe^G!bIKrr?apIK+Y=L#d=3`{p-U4tz<{aH^c*hf;E7B(MmnxrtYL z@LdM7=5be#HX}l*)`U@?YE6T%Riy6w_q?PxWlHa#q*uKtrI0VOE7f=VGh<4^1Y!Xw zC>nN;7my4TMfPn_N%~e9~O&PBC006YOG5? zsfDb3sn<8Bpp3R;bRqoIdQ%19U?U=^&tDk>vw7W(Q(P2x>JN~(3y^D)HvtaRZY+6c zV$_px&1PJ~=*Ym@%f34g+CJ%FrrQd2Z0Ge-arLaUDnv?bFXHP=TGm8pT>!1Ti1bN? z)xHK4tLh5Fo*uwg8%QrGd+?K|e=oLKL*MJVu!69bw%c#{Zcl|bI|6v<&fr7(mCBBc z9Bc4)OK11Pu{__WMNQZ~IrF@rr1!&N&<;I!m)29Xo2Ha@go2oB305MFA~5VJb@M}T zHX6Y~*m8vMmcHMql+1wq&;o({#5HWE%2`6t=*e&9F3II*URbCw zu0yHBFQ1$FBWhKu1(=ZyOGJX}Y7@|E$<1h%-w4)POQ2z{c>LotYv3+k1WP3=usCT0 z@{@40`kBrj=YbHFd0cDG2Q}&Q_TWyC=5j7=v%rw z-7dgVVAX|aF4r|LNQ<(1Y57zbI(T0VTl2kFPd+a}0j-DD?BrfE?H#+nS(nKjXDXuS zKbLS^qA@d78JeDgz!B97xd^db)BJ-{gA z!t*rYs_#xupj=juUM<`;-(?78xf8k2yJD1U;v$TB4`8F{B2UwY%b?sU7xwgc%x={F zH{+6T8qJPaf~TM?P_g2);yWbb`wP@g`*bh)izoW5A!CQYLQ!2rKw2EgOFYX&i1s>` z3PDRGq-J-8B0~e1mvR9XuKZ9yTtdPU;>wUJ@_`@no{?mWg--;c7(mg=gHDUR9~PVmJ^U zMz%|fR+_F$%WmtwL)#nn+QdriT`6+fzi6{O+38C3Xh>cwVs2E?eaj)7#Mzc`75+DL z+>`&}rMJ@l|Ms3wvqB)L7biT*@;Kf$3ncHFj{@4U9N($!#W8F`vR=thsmvpm#Z^=* z^-3t9)k-b#S6*>6!z@kDp>9+W!A;0}+0v_d@&=!olyMnds@dQh|JI-Dp+g}RMhziINOhthuu@L$ z$9|DdWlGnw`w+KExd6|2T|!!Vshsw0sDh*)#Veih@arCg(ja2^2T0$>KpQ>Een7nu zMZp*VlPk8z{!@i^oVE|RkO;UusNvz3)yrM#!#l^Z?1>6jZjV55ih46Ldu3(CIl2TtAqrJnGL$XZ^&z@{vD>sf{X3ZCE}o=ZnxJ>6$ty zkj3dWYRS=#0J6;M256avTMM?79V*yy>-oHIt@#uq>QjpM#(b&;**N`FvJPMd@v11zx|v3)u8s!+Rf7X!a?brnF@v)|Lsib>~~BZI~^^e0AT#j@i0N zBQeJ7Ko}mFc#M~0d}u^6p2uDlsB8*FR<*ouVnyP^oUJpg=Qk0877&fjNi7*bDj-UH zyr-* z(G36t59e-C{-&?^dexx)PVrq@_R&VM?xMCdv_FrTzVuo5R&tujmv4^}n_6eUg|}@g zR(lijxba3%ko}Rd>DBBm2juyU3bZoJ@V|Ysld@-WV9hgnzR|iWMR*_@WopmOdhHr# zDJhOUf`unB7hvY<5>n5FVS1sr<4caXF#HHt0aI(L>NGd$yaE zYgvS-9|$w8#0i^>-w89CAJ7v^iS?&{RZb3o&t})Lz74Q=JUBwoU{SmN(FNYj&`!=$ zBx-_y$~qAEZl*~QGB?a-kWo5hwE(4dv*$^9-@}J<7pfcvXd{p>16>8K8YcG{9@4~g zUkEaj2rUgJV~Ekf7}E&jwFH15g8{1aK4OVG9{&?uLR+zh6-$yE5{1dNyL2#RuNX;+ zQVIKO5olM#WBTTiZMi=)h~{P#0R?js@TeSkXX6qPe0lD>!n7Yb6lhpE`O_^!rXB+AtSt&1^E*WG^%- zwuEU7HiFEfJ$k<9kM`iDB9q#BHA-dYX{)s6`p4p`#p>Yh9X#NV#)?}?SS8d{0*Bf> z^c*mMWv%S`&o%Y}^x?DOTXYGlqFAO_Mq(^fW$&ayDc^D@<`I07lOWQB^1zly|6RPP z%BdfVG-VzO2)LG^F5l8zWWQR6Is#3nI;BiYP<1gSskykC#5q3xTK4^v6=1E7wZ^@fohgzAwm2z4!6Hm1$MdF+Q+>LfH*<`d_MgNuG4!+kg z)}fu+P?i0)jTXo+H!pC!0nm_k7#O~*TBZZYUsDLA1pI>t*v7mg#Jyqb-{oTUPf}vl z`e&&YCvJwOVTt>~3ffh`6zvi0&d%oyK|vA;ULCb#cM8^N8&XX@kYHCZpR+h7_tlW#%9;?cGpcU3`h;WW>pa{@g?yF;18d=@^M4_ zn7Q>Qw#uF%AFi>w>FOM5=x!l zS!X`*$tX@eCvgun17n?M1h%BeDLLBj6uc5lrak8frRbFduC1Z~MualvVs-dYZOcW> z8!)Y9I-+P|?mAj6uIXblUM=Dqc5lYB+3WGU_Ttq7(QgU`LjsJ>-^ zR;WY0`_+t3wY#Ia>ScSE8PN{d``6XPbsX*D@-^)OVJC{Kl!dpH^d4fwsEucR;t)5U z{B$B?r3}cY6B+vknB{RVxsnCwQ)T2R@K}9fB-1Z11SZiZu&CQLuJ}qkwECM3G?$OK zV32%{6;&aoSSd&|sl!8;oIJSZv+R-7IVVq>rwkBs=jcSMfZhV)nizQu>*$(;YR^j> zJ1$2Q;9$L#iRj|aV@3!Y7#RaCf2(Qd@MSSG?80o`YaX~j>aI+T$!P#0K0x`j%<$-@ znN-(9I*&aml^r4pt<3;dqn<8-(7&R&4Wl+k&Z*+A0qum zK=3NY5Pciz!8_@PcJK+D_V7KTw@$4*q6jTMr3|ZqRv}=m^6-hK3ID{S>5Y?M7}=ne zSmQm~8ZUs=nU1VlbhRNfyvu(Kt>F{So5wUfMFYL8ylRf;h)@S%2?LxtP&yVo!-y{j zmKXbstiz)8d2mfpvWACF)gW-vCVNaOIPMVwGJze+K6s=B0_$P3_klL_W0hNuSE8fp zeM&`De(w0BTD+U#0o>Ooo)td_F{3l<>u0B*>Ft~{!{?kb!%O8I0(JUZ-k9NI-k9M% z9R?naM1EqM`9jy27STBr5Z(culWwrW0#2%3(5{_L&WbQ^_M< zK(G17N@O}dh>PVUd@tP59>jUjA+;iPsR#WO+so09^%)788yy;&`k{V)mWicDqo>!LibPwdEn`T~F z=1S@0mae=LDt2_!oghUp@2%MON>s`bU(X2uUO7_OFAUpVrp3*exzZbwp2OjBBOH*@ zVJ8FUXZcyvXnc1tAKPzq`^$$b%CY9Ui#YaxX!PKPcWw{RV=z40u}P28hXPh#tQ2^h zA#MTg;Gzxm@1FrDN~QTqiRENU%>#H|73?OfVqI8Wod!o~%sa@_ zxl`S#VV5_-H2pdFkaeB@R?uv4`gq`6gZqCRkHUk*I>gw&^3J^ACTXBTG&>uqcWu#- zyZ3;oE#+TKiTe;hf1CHLz&VO7KkuE-B$5hwD~FdHP0b3Frq%T1cngDF zf-_%VlDCF3Erib*kz*l(*k~#!VFurKEk3yDaf$-;oO+_-+d})*iGr{)1{>iaEzAJn z{T}3$rL*u+jE8YD)eL;db!0hDTgR)+0^WB*azd5r9^O*+@+4;1cVDo{qgZa%=nu@= zq?<8aWRrtU&af+yo7_wAzxJ=6)HsF)_t`r#enC5W zJ&?U@Y2WA(L0AJ;p<-jGs;A|u>%GQs_GnJZ$*2MdJ>^$EsXRD><0fnJmA80mZh?tOhmYhaKmtF7@!mp93;Ew%0SP`=+z2 zh<*>B(PCSh(ETs)I>Sf_NW@14t z0%XsA$43T|Et|dyV>`>n*pLF?osq5PpJnS#yyI|?JGLsl%eD2o#AMYBe~bBT>G_X} zK$*1s;)jG)zS>nS3~za^JXt%jau<75Yk7uCvXcvAv7cYyUvmHAFLnRoFjWAc=riLY zB}xeinpWuX;auQ&05v|qD%`!<(x7AF>Cv6_-u_Ws1huM%_9RqT1*wgAjJ!s`+^mOO zNsq>cJ>e{1IAY<&k>zg$TMm$eT4OY}ijNEBRAAlztK5ffa6#GBH%sxOp^YPucleK{ zA`V!+fqi^drw=Xv4=Mh?pLTk)cu+35NA!S|(6NN#DOq69ivVQFuRz?W`Ljpm&UrwX z3c7P1YooJ5a#`;@P+TcADgXTD+3>Cu9yS;&UN3nc{QhwTz@?>b-q((^L3+CbpS8-q ziS-mSa*|%?(s^0V#i>k*T<-NRrJ#(whExlHnhLNF_0F<7xwQIS$thiE#Rc{NI_AYm zxC}i)PWo7vp6UrHJ(UWqyq2k$)Z>j}MsQe-VaD?qs@_#fuR7jW;xe4YjrYju80gUD zN5TLvvOFiS`2sc$R(-DaM=GR963o`xONn6WTdBZ0xJ;XZ<8#SW8u!8-)gNb^2%SHx&eds9zU%~yS((gsIy2o0< z5~nVALapx#^%Lnqs9utn+U*9NgOT$~7vQ2;^_v&~lv5=^S)wFZcEC1zpb)wf2oYyr z5i@}2@<3Qxk^bb=-k^`kshVHq`U~R8*JkR=T`(8UeES7au!aU8@fDEFSbiX+EBVRg zQjm~ZE&)q|X*uk+@{ldVRb^KPK1ng=wCV(eDo37hmD1T;Cp$8ZWif?`J9h66z&8Px z^+}&Q*a1>7^{g$D=IOB-e!!|W`9@F3b)3F>JgUej%hdqh}KDf!R+)vUc?Yd zg5=>m))o8)++FQCx)^K{){ur3Qp)hKw+i8>yrDb|tyaOlLl}Co44XT;M8O}8+F4E9 z((qe3AJ%PR11`S4u_b32)JltsU#M<$7*)Wgi!TSzB2b>2_yZ3II8{n%;C4A4?oynU zN3%E&s2Q}8dQ1BlYUV)OWd#L2>cMQ;N;Eg*_etfHR%#%$U^>!89(3&Ra5v?LGXvwR zHFMC>H|UXE+M~$4M6SGm(epWhU_S3YcbzzYkVv|tUkd2y!zE;U%||>kjqm?SBnjI~ z2}|TxX)7v8t(dRLC?Vw(j9UW^B$4?%oH=cdk-U}_%tBZ48 zPSGiE&1K}w8moZwEoa$Y-f%)I3QD)Mwr@WVXkPW=_Cz8t$gUmE&;q^Z&c!Ph4l$;U z0Wk_F#is(3Ew+s&3&Saa76n2VzDFsYi9isW{mi?Y^zsOHQ>)NE9R2XK5E-kwE5M?i zw50|#?Wq%%ZzK|$#3+=}d)VB?4=biG)|>?RY{oi_GgVur(WP5hCtl><>_F%>{F1VZ zaeFRgo`0v*r9ND7~*NZaFD@aJsMH}Z5S;gnlvdu3o+x*hD%`YEq^HPA`(QcJ# zxZz517MNCP$?8z7%_uDOrZPX45a89cc?()2!eqFQ7qOHtU%Y%i%R(Q9Sm>IBl!;IY zOu0~xGLE+gmvm>XT6&j@vQ{plU!3K>AnJ1GF?zwf=!^FUa$@au5l-@e_zg0J6ktkB z;6AN5XGsNQtzT3CYM7iJ|z>;ANi$_fH&kWgL{Ovr7tSwhUpiJ@OmK%zzFeX z2BB2zhbk>Veid!!x?Aguam-wbJfTm|hqWl@!|Kb-*r_Wg2CwQpK5A0zd!$TBZ*{;hs`Jfn2?{+!4wW_6g+4@i# zhoh8b0sK%_cU4c#9~xa}Xf6NvH)csw`f9qnl1(FS{RNC(ObUz}bfE8~^Ce!X{a8ew z30>o~YMu#&G9SMoQM{zqrt}hMJ_2#9BUDdmz=G6!^#6~0pKFF%<32$0N^ArYr0yZx z2;M6c6ih3X$x3`sY)Y>>X_csyd)wMH6f~*P0Ol>Ctop%VvI@Q!FO_;OrL~kSMBRO8 zizSxGA!mAD`L8bhaXL-x1RJ9@eiBw%04mR#fC}p-;I&gr7LcPAiztU>G5=`1GMvSk z@s*pgggRH(ZF+DCWgj%k$e|7;R~0Hi45N_FSc+YYvP_v?6CVXb(yMi%lqhR@YCs6d zfAIx0vBXE0tCNsA$C1k=wCr(Byu`^-qkKj7A0nTax&{ER=Q;(1$n&j+1 z{rYGFO-*4nLQQ!fnD^*_g=HZkKl4MZ3Lb1f3~iO5gldg$1>FwQet3}jxg{exTzaU; zjU+Oh>6cyo>?4yn&}J^7NyzhAEtQxe>L9z0QiJCh?Go}e$-LmXjQfW&u9n$vlm5yc zyz_XKd7UT!0-s~m5;v2V^5TPIJWU*hmnLK?rPXS?Tow3SP$}2AZ>j}J_K$MHYQk>` zb14AH1E#=IL(bDOunL<~Fupv~n^)c6um}QRXIpKKD{F2==>Wz$Sx zg?XkPjQ#Wsa6&4l%ID{Qj}rF0YX^IJBq<)3#pU0rVylXYs>MXcyp^6|Ds2(~-u}@m zOe?>_1Q^M!Mr2C9wk-tdKw7%209CRTabNlLJKXMs_N_|uB!pP6J!}-=6ylCLrOW>x=&)MZBI}}QM5bauoI@g$@ zIPX*lVi{mo+oZ9V>$sXl1N?p{%$!=$y7T%NqLw7$Omk~Vu0kt8{RdQKY{XF%f`D=m zLM>r`E5gnBSU{Y|1+1EY5?qJOqj}I0!>~%q+O-C{$8zqjbrDyGW7rVh7G4+MyhfPK zlAgJ>pF&&K3l#9n#HCWiPz73T(P8`wZbY(V!+J48*SBz{8NMmK$PrmaYa<2}>v`+0 z-O_hVjy{Tbn2WJ<5k9GaVpRb7UkWK#SuXY+?>gt(R%im2!mNCnpM)OAa&KOCxftB4 z2xXM>HWd(db_BBSLZq~?172$`RiKV$ETJO!pahBH#wYfF)8k+jG00~5vd*I{pjDy-1t1h)2t6xO)?Us)0ti00CHGtd2Jr+e@c~G{u1w%sB8h z!F(D>r!5}YJP{SgbqC5$?ZZ$jGIk~8hc9>Z<)06fJwQj9*ArNaK&k0+SOTlI1Nhq! z>E>U-IV<+p1T(V6iL)vPiK}kQTJOqRs+_u;w^R|S>O?43YxFX@C5wnPR>ZOiO=w|6 zmm+-J*(xL?CKcozOrxCBW&Yu7uK7K!^kl)F@QTY4UWIkFnr$WF%`9Nek)uS;9;rBk zX?6lYbtcx-Bj&@`ggNL_!E3!-fuNUl()h9pw(`Z70!?E zT7g}v2uF88$=|+~ixU5S;sW;nr*UXl#%KxevpzW7(gvAD`85wJ1Y*mY4OUln`1*-t zT2^S&Rcl(tq*=usnVbZptTSv6l;N|Ta_qiK8sS>}EEBb@>HM&Rh(3xxIJE+~QZjco~+=Bw4loR#LBM`&5E zPu?T0G5t0fP3}>At-jVKN1ze-o9k0D!Rf9#*+^;hcs%Vap>E=7L$Pf%o@(SPr79 z#$#6%p&HPWo=Pr<%ZfA&9(^>VSvmM9u)yS6c0_udMcNS&tA`)KTy<-K2RtwE&a}C0 zrhfL|+K;|f0f%`R%`*3KnZVj4wim)+2@aK;z@L|cYVtzE91LA)#M zOdg#4DwabCZ*3jwwjPmcSMENnD6SRhRG#D_#zw5V1V!-14X9G`LoeH}M?*3DPvvlM zS}|E%Oz>YVtFFDMy2hFs2mgm9)iuJnTx&UvK;_*MSmE1pt*|fGUV9xcy@&+fUA4%1 zr^^Tr(*zW69%I+vEZZtV%E@i7M>MK>{gp#xYb;_49$;y)H54%;{xYId;U_LnZRssd zV3Kx?Z;E>;%F2@qT7hqcs+JzKQ#SZ=ZJl71PN3%`sCE=U>vV9rfXW7ZP&N7Z4^@pN zN&Tf}+a7PpH`^X^0FB)|tJr~Kjf~l^(cn22RKo|%{g|()RMas+zj^lOU;%Go+^|Yc z!{(s|&#YbJLcGiOn_#QyWC&MXN`&aCuYr~7*7M4@IMdY(|Iu0C^gu=6Dh|`!I!;!_ zF{d2fIWjqqE-FOjzKY5H7XUO`&`F)Jy4Tj!RdMgSNno=_2?-$CO#{y$@u%C{-6-A!J0v>+KD;n>C#_TcEG zVHzsOgDy>&=U){gvG;VLHDKbETm-Fa3$;s>+_?vguq*cKC;^2qe^bdB)e>DreEvle zw+lPRG@x)(#jf)~e$V}xZly?1=cAM1Q)`An_|&6YI7s_JYxhHas!}+Z=TV3MArjJ; zCN4nlbY$$K><_S!!#{N7z>LZR@kpD}v&cv1u@md|@}4DUMDmYRswGdn#fgo0v);jU#pkv~n5Hax)=_5E1Ps$rBZ%)MlEQ;en&!&Bc z7bs!&KlpL9f)KWphkcNOo=4b2rO^;ph$ONp~UuSq4$i{{vm1I9JeMjhHPT84XTU`jnL5mMH z2>Ki}ewS{cM_`*3??!}3#>bVsU z_=x6p!=IH4H0ATw-WkR+>L%kOUC!#%MaEn}xixeVV)%MfS~XnlLV(h$@$#2Lj2eK5 zv4Cj|YXs4Nay)S(lGtPP0+~Iz^`nhd6jx7?#IjmnPx3NkOTB#lDYK<|7C*yMI#-1B ztj8+qhi4+zg0r$=McCz&Ln)s+it@>yepd<`j)nBC!}D(J;r`|~1{0|JmQM`^pmGi) z(g9K*f85f==ltSYmDlh4WLov!!#pl$h2MM_c$0yP?~X(H-f@$a0Qme%ePwz-ciZFy z2lgPqzUcO+q_dd|eiX-z<6jXRA@^js7dt3y%J!&Kb~a%uqR3dlygp!n7dx3N0CNZ# zs3-aKMSvz^&esPsCWBAiVM2c>k-Q_p&2tKlne&Ln=MSBe5r6?|68J6(vI!o zPIVnSOVt!HwB3y*G}tqRt~8%T&1Way7diGeo4bGTk-D95<6i~%+(t7$A4S)Ucw)IQD6(fY|^}{P=@7L*7^?BGg z)>IWUf;vE@-A#Qd1c5l33MvQItID;>fetD+(rpV+tMCrCvAazb7F{WOI(z7{8Jq^&dVkSPfb&h2TSn~tS^#lv zDch7lydT>yONcICbzNXv9MH?_uCehj_%30MIulM*xUKNUEMQ}RIX^NRirA1oanQX= zw@J{xsRbM)G5Ao%>6`|3sw0*spPlCQ{5ln zBi!bIx4#rXw)i41XwjD}Ah@BMPR%`oumJ*PEWi|-Fv`Y5Rsz&n<%!+W%`Y7G0!ki@ zp-PO9fmG793g%qBv*Kzj2 zJlEiX{0gZI9dO;bgr&!W_H#=1l<7dNjt;l_x3NkSTot@K-xdkbR|{A=^~xoxII`%D=*sap8AV-u}26c115ZrG}l+ zewraRG*%*3+5nIa;EZZJfNKH!Yl+OGPzC}?yPSiVf=Cn2H5+WDfM=|3g#gQ{fni-u zo?Ne3BNpyE$eQ7Xx#=xWQ*Mi%B&9Hj}=EWR_=y#n@u40p)QH9PJLBkXM8RKfPCc#gNLkCD|l&P!wbYsbOS2R<2-0>v<`IC zdF;dvxhrWsX>+`z+cZ{{3DZ2UswJa%ntX?sw>sebF?XC)CO35D9dwrTo0N0;yv#oG zp>G7(CZddC-_KH&^kC5is%?;KahO1_v>mK7rx&l%_~P<8ngj4^kTY>!>C?#79&^y; zPh%3gy?;({a1{1(&p0>q5lHY>Ntzm zUzhGIQf74DF$4MVH?Jm{UspR1FRDzW*WW>&I+$J4RY+hSng3Q6zyI*CYM(pQ$#GK5 z>Fom4$+KDn=GHPW4{{ZlX%Uz&E4*sI2h}a!HQ5iNWZ)`*Kl9YD)Qp&?3cfM9H;DT_ zmQ1N|$7`Q&raKLCt(fCI>+j@+%}WQUwH-J<&yXL!eC1xLi>59><$h3@n#X|aw_>W- z_kf%_SnuLzPPhq55ZlI7wqoj}27$Brmg1CLRbcQPwHk(-5!)nT6~{>pu!hj7y% zGyE_nfHH>%Je+)cL?17ab(D@skSR&?`>GkXTPZD-gYe4LVH-5YOTu%m1XUK4h*Xlt7?E-z&?)$FWeb&5shgzg&Hw! zqnfFWsvM6z?uBPGa}u?5=Ao*8V8sWSx6uh9Hqi;k;|9Pwb_ev{oq1E4!T02XC{4I` zLR{}vjoxw1=|-8p^Pr+lv4?DYbIO+)e!%P-`57uwPE0*&3M}GVXsC_h0lwBkAMx(V^^Brb}S34tp)Z@JT?|;^(Bsq_h$}WiW*mZXvf$% zE(Mp>Gq(R3jMsuv5ydtt(=!i4A#!SRA?erjWlXypRi8vqyZva|7c5b%G!NY>B`&4pc~hp$U!Pkn6xLYXXl6L!dYhk^KmCa> zko5v)KjSKk2l*-QHZ6H14(j|;mCT}{M$thY@ILOV2rkOi@U6>>vmkTrERDdm2+C4H z;+A_ssYkjFs1%g{#!BdkQu%o$Vf{~9vgXQC`X8-vkXfn(;}+6cojTUrPgmq;iI+>K zgf<2jSFLzd=Ne2(hfz*4XCY|m$ihg?8g$K?sUh(4oZiU%{MdZT$-f(Mo-gMQeA0DI zS)hg=D3LZnB8OsD;>sFJ!G%Xv{U5&VSjsdTt_p!HIZUOX%K)$`PPhj%H!&9rKW~Fn z5ol(ad7T!a0lc$$eZj4S-7Ipc&GC7eyv`lw5rWpuF=-a+#!UuQZy>wdJSbZI$|eF5 zBAo&fjL&n;RRl%o5JBB77_s9_$ocgXR_dsbWm_mjE>P#P$J%yNtBi}Z*@Yv5eA(v) zB5K5$fb;7!RQAITGhWsK^sHLYu2ogotPPDG!)u9T7;CnQpeavwSgD^_Y3uKD{R5q4 zhnYyoRm-!2$%d#f3z#3$`)llU*;VCng%O{aX=W4O?T%MIqm8`NwNH;4GzN%$qlO;n zg5en;7R&?G!T_D8jV%|hsstRUR%aa2Tc3dm_UHXcud2Snu^Eh2Yn&3*fl&R?x?T?UPC9v z{uP$JY{*+YQ;V^(U9H^uXU64Oa|Ea~@w+7tZCL~Cz_uBl>%$7Ni&7(5u7m<-B-##Afp%LX<{By*EPIj zC6`w9jya0Gbt3lm5Y|)2;V9AE3D*$T0vv_V=Xmzx_mzTxTz=p!M*}%Lg^mbu3hfp+ zDv$I9?NYbUNsJTzDQBi$vB3yKh>lyUHl?7t!ds{Ot}1){0U~#+G`<`=>(GSs#1@$# znsMc9Z~>TYfZm19o?J5H+^_6+Tz};rj|+^-`%|I!qRApA`e(D|Mo+5*Lydk&m-m$ikBGXke{hkeZ9XFtVq=B z)(PURjQZ;)+LV>_%V(<=g!JrMU+K8zPY(o_hR?Frx%_OY(s!nan*{NDm{;)tfMt*X z(#Q3}u#|`h7bX++eitlAGxW8{mM-OISyyeyx?EqKaN4A&IbYGAkR<4ZY20Hr$0DUK z)7?SuPI#bTcd{2RR6~`j0$f7#cN!bN^)~CwXSV z<)=LKkXken>%=i6$_52EWC9)+aWf&8&$0ByTVqS1??H^G<^Oi4riuVxd7`508oTL@&vc$ z3sC;(A{Z8>`G=V}K&9i~6916sl30Gd%Ac?0_r5eF-3#z<=|Xds>s^-)^8>4K#Vwy8 zMeY(?@7=c?4L=znobrF=NF_2hDw+T7UHSFtf6u=bV>$hvqf9*MhNKeJ87RYYsvDU? zkNWw9`mf=q}RB>QSoAsZv};4a-t5 z+ehG60H*u5c-KA__-@pS2P*+Jorle~KOfH!H-X;f;aYSD;kOip{2$&s4aN5A&BT_| zF>ZnOKVp%!2O34W2?tZ=C4HSPMv@C-d?E&*;zBp zRdQ+OO^)+WF80@nwb;zD{8{cJl(2`vW_!w zdFF$?TG8i&JyDKl@`r*|xMn;QowjGXD_MsCKd7}Nw-~)4O zXiSE@Qv!|Zfb&SM=q)P34y^V2r$M+H{J9zG8c)ATy%5tSL_Zbk1`k~)jSOxM^g|_J zWk{~^>(5OCjjAvO(5-cv9>D(S;dc|-gHR6VaTo{%7nlyfun-rQO6izX=b@*nlBiw} zfLNO%psq{@{W1w{6A_o>9j>rxP$1EM7M5yndE#l1D|bSq5j9j59LpfMyd4VAXVAt6?T9tLB9)dU~kYU@8Kn z>b}0{8+RYmn90lOMWvVcZc70O&umWh4OHDizQX5m%fM_}(CqYp$260g3roT4D?Rp5 zu}(V0#=3bbBE7r^o}GToVcg8ri)~9e1L|Sw7`bJfvK-c7By+SPiewuh_AzF(5)JcT z$hq0)b!WYm>|)fgYTk%iY$v<=iory(tM-tE#sqw4XL@E(t#wib>MOYI5+nto9gCba zcA*)SK`#V3^-))89gn;fhPHn|Q3U-E&s1}i#pBRo3QS_VIKjNa+w+Acn&=PpT7U%sN-N*w>q`Ku`Za%C0rtZI;(gSXG@JC}JDuZYe!85c z)Z}pR4V$%LWGy!qO2Z0n1O+FOO`QRTN)>O$XoxhC2i{x=$h}}D+B^OVfrw(gb@?cN zXz!#JolzWa4I``0vB>CXm98HlL^fbp21cC5BRLQSL^h+w5T3)MtyNUS!}7e4>4Ofy zbYZ{*J1#YBnT_8z`NOQLovGR@&*%~cFqDU+1QANNS}13K>q`zaI=|ks?G+j!^t70{ zdaZP3oV~M_`kCeaz&xv;@+WTi!Sk`8ZA!X)TBi9tR~jpux?H;2XnSX2@+7^e=?ffo zhK*KmLke{{tLZpnua=qSW2#12JP!1snV&#iFJ{fmlUJcA~k_p4`#U@%$CC65@HVzF93%*{4IU(T?>F4R;qQ) zgfA4enyzI4R_;lO{u{PNpFNB1G)2t4i$h@8)PQX`T${F?(>479Q97->W|l$HPAu2H zJ*7J*v3KqvI{kPnq7dqBxi>Ug;jHH_gp6jgp26Gl`3|Uf=9+JwxxrK{yN|N%)P_~; zK$uhrJj{iHs_i$i)izOq;9`MX%@ z_V^W_jzlZ(uXy(($;KmkU1g4k1InYHJN5af$@(d?|DZBc!ea@kyc~~ms-~g~)AU(3 zb-W5Q+|jFn9L11dV7Xu7MZ!Wv?^L3ri)xY4`~oDtL7v%oDMAHCMx^-$71gSy6-rxc zP+RD_!6p+2^kw*0aUdC-2Z7)%FD1N--PFKYd1>T-F4ayiEY6(B$6w#bg6U909h9Uu z&5{x~v^6<1+9oohxu3iG?=Ae?rk_{%c}+i;8_ZjbBuJDTBC*9Tn@ADu>B@I6O@47c zyfb|9#mam04l*|RBzP0gWaZPq19MXQW#Dq6$RM+;9KCLU4~s?<%+5!?;CwQr1L3&H-EhdRC$9%hHId^}Fk8+hA*lVMz%cMn)P3I~p zZ%0SEsR8ngx}pLy`R5jY&-(1z^-D>9lc+Jxz$Pm2FjSoqC(JB|o?zblx3=CTc;6v5 z`ed25*J9cVqA1GLYzjG|-5Mcfv9s|w^noa@C&NUyOFW9W0aln-!e~+@FR^G|JEjUb z=z*764PAR_Dg5=8k+2usYe`?kwHGT*_fB~sC3) z3rK!u2gKrEu@X)%2Y$~Qn@)@*66Z%!mo2uWEzM{fnL;R*ivEEmSK2(3ncEhAl9}6< zyJO{ZdFSouxH7l@$xZJ;H8pacCN1nwQ*+BuweCq$0>l?dGvY8oJM7FQ-RvnCvO`;C zi3W_Sh(T;Owq!ZBS2ZhJHRl4T`w8_UbK0&hAT24sR+vj|SCbL$)!!*E;fI0T=;}uy${oDPBHKwXvIOj-V>t|u>LPAtVJtg>R#hMiZq?RQ z-iJBB%HV0q-f8>u89We0@S6>q7IPK^1eqxXLpAZV%&<=Z&9)8_vwvu8R|f&4tzg0( z&Flt@$XdGs(g+wEKoSRws0S}R>-+NJEhicCJ#)1wPh#>PvSlrnzD8L{h|$@9Kw8u&z?FxKhCr)_o;IjVIUC)1#0d zU&%Fwl%CHIQamwz%R^4Wr82g~O?A+ltGIuRs9(vL{jc0VE@jHaVqNN2eo5yUO-jMp zr8MxW30Xtae=PAfluWT)~u&1ZCEjG*uOmZuZB5Mks?=s;Yi; zF(DJK;91XdDcP~wCzjW5A%&(UX4!Mz$|qV70p5!PXVfHYAi2H+?Ngn_Wk&BOIyv*; z!2$=%@yJv;TBBOsg2R3j#d&_i%&u59WUY)#1tE9jZ3%=+fC+ds4PX^S#6X6@w9l-! zVp_jE5oXnwS@vaKcp;Z=;8vc0$iQ+(8o7(XS(>}JOor{IkcNT`d$lB$b3{iqx(P+z z7SmPi_a<$<*??aRLl<#A)Gp6vR$ucP2wKFun}DKT*@w1i1$n3M?1ix}B^oafjmpeV zq|ea32HLlUXP}r9pMe*S4=f!pfzoea@#mwG+_Dbr#vbiP@~)-X*x8;7^|F+(`Ufz5 zQ23J2-Q;&%?{7KYd(05@R@%e{MT z-vswNRQ#;93$-s?nJ??N14zu2VjG7vuaqSS%0(a*}IW3?+|)`WFjAj zVZYvuHzhZ#Ka;2UZdl+$YV-01tUXnFZ^-byO9gswP>B%{*PFXMBDpubK-`0FmFvSD zHN&4i|K1WI55~Rw)?6}I^b7Cx{ zW88UnitiX50CDj;HDW{)=1$h!UCzWiAD7(exa2-5=7OblUuZx@-{`pa4#&L*wITBI z5)q*u(Nz(G!7g}OgMP&;svik8)QvpKrfo=B-Q9*2*0sCkxe}wE^FWAORsxalSRDu% zvf$de=Uw1^zg`FGg`28ZxevMTb7T94d0O62l*wBi+%SLR!v>kZuTIH#2o_AD1A##4 zHxZvj!1{B==nu*0iPRBDc0YmkZRq*r z1Ar4Fm)iyum2mKrOYI|dz~=`^RC%l$Qs5Q?5*>PlCjtcl;U!e2(Icu2Ok5CacL}#RUg76dOh! ziIGOa0k~BGAsV$U4S#+ECsTl^HbxLimWS$QNvvp|19STlv^0_;V6v}C$yt;Gh%wF1es_~O>$063(?Bzd(h^Vs9+a(0BqH!xV}mg#-sQv zDet8C8rp<&{<*>5g=(5F%V>#uiLr%NfL=9>q?>9bnSt|lY4|%25mcNYT+IWbhaIYQ zNqjegwJ~f&#t|LRZCSa(HfEw*MU~wN+h|sZQJYl@2K)%6o`2m6Bst5s%>mZ%*^fscNEx0-@Va->t;3e#|oBRr!WX}N1`xP&kZGvuC zRFdaZw2Sr7O!{ZmXNYrr9OD7anP@9DqXpux{Sjb!NijJeN@JI8BC7c>y}vqToXqo+ za5BS>!@L@+x|1@w$?klS9)o&7SfK}LmRpQ>z9lC)VJ;nMtl#pe+$3lKtYC| z@_S2FwuQ72Np#fk^8UeP-E>SAo8ZBauKd7$YcMQbACfM^!yd05l@G9oUcN-*=;Sdr zux~iX-@5)~AZ-sM+ZO_PFD=B+$*^}%jlcha+5Ab>{b@$r*u3+>O-5{ucmOG&{`5J` ztxw9({K~W7Plqn)=oRE(n?J*oYjk^$bS(Ghu}{rLZT4ZZzv7aa^voahUcZI+x*p#~ zCTIB><+nt=vHFo}M;WJRl%Ctf51;bq#nceIx}+uf!AGtSbe%s~zA0AiAw7$Qo@eu8 zxqieJ>2F-8VXOS$^P`7&yUdYC+h7$zf^3l?AK29B?>zJQWd^?ZQ)M*OS;xb_ID&FD zc7qI}S1z3O!Tt5rMbpR2iFn~Ijmf^>TZV# zx9d}pr3nJ^{zkRYA^^P(<YAmC=5|KAu;HJ-CpPi$a{|9-yQ}J-7b{7c#00#X{mw`EYffae;dsh>B zQ5?Ok0`kOgkWE44qU;f-4#}cET}Bq?00MEIE{lSci8NhEUom-~uXb2=*_L0SM=7`^ z1OTOJFwr5{1iazkyorPJzHM(0+8_^Of5qY(XqBns+ac3`IT~JodY1WK*oc!$r%Fu+_;*!0h!gN;qS|%uE|_>wJsW784U(jM-aq%ISen3hO7;v=BL~+ zPFkyyVm5HCre?Irgg%=ahs(UQ{b_R{E@Sw7c{K0$LGsjcS(X%S(+|56vt2yjyjzP8s zpifvh@M*qt#)3o1-C=>8@61(*>z_%E)6WCVAyHyrtv8e>b{rXGpi2NH2j{Avf}WAo zDq0bQ2P-mK6gUTnr%Nw~L+Fo#Q8TM+#-*0K#8eg^iVkqFGn4?ag1w`)<^UC@fa}F! zDqlk7`cQrq4;r~|m5Q=f;qAnX`su_VjU@U9^z+E0kuYMx~ESv1&jKU>s#iKA!#>23gBbjI1&&(>w zc;+DE*)BT|oQ1HpnQj-)VmCkU%x1|$E|)kbEScs>8l`TMTO7f+wE`fzKhTY59 z4iGP1nS#SxAKr11wWU~ z+gDoJm8T2+T7os9R#JY zve$&P!piyDR?6(R^1z?>5n;cQy32I;YGXHbGgr2y9Gnwe0$F+8Tya@kxt`n-JCL>y ziKg>pu}7EoQF`WmYi$(ha0gTD7FWA4i)GN0BM;>6SaX;aB~@7As=uhLjEUVh5*PG^ zIRJZi5(JvPm$y99ByoW#_?pMoxF_o*zaF61w|2n*`3;@FqOF~XquaWh3>3((q=ki} z%_x~*q7N@D7qzs}y~a&&0YV6K^+j!Ne6N3l%bD9?<>7VC%>-xnn|$LNQS$V0gIoBi zDRQZy%ysEknM690RQ6~G+y4c{i6IPbl#I%yV0aH?$U&P=Mvc5Az?27*GLOv_eNmX` z>7aJ1JwTpo%}rx-643W8XpheksH@?iO>qI%+s@vM41hPb7KtX*g|R{y1NlHL#94@}k;jbI7J>sqHL> zBb(SptZ~=Xi4_tXnwm-5ZL!(5&7bRs;xld7C59J?Gww~8a<|+bx)i?~&Zw-U(+EZc zoE~``Z`&m>TZr~wl4e?+Xw0e+jqRa(DN4_2+6rDqC6^Kj{5ipfcA&3&Vly=hA z8Y8i-%1b6~Pe-*}T87fu{@z`vh68esDdA*Ie^d|t^n$3E@TW&cJyiKT|9U=jvppWS zdBjhUV;vni5b8jgWFgDm3|IbQNph5H9J(0}*wX_zMR!_uC%C6(-+ARq`^<`yh-JF|-_(hGMmO4H(s%4PF1Z5uorjxW?@ zGPSz=zNy8dWabpbx2@xjhtw@u^Vs2DT@>zE)5z6G#bfz+)8g5t12B6V%*Ey)6~!)8 zkprj=Rs^M|-X9FER+-Ua9Mr+8Wgn*fNk;6ZEb2|#)L*24%L(b0SFnDC)2u}LoYnWC zJEnn}vObC?e@4zwW&I^Qw-QE-_${Q{_*iN`U*0#WH%niX@tzLL;;Sb%+?wciucHvvRC z;hva8N#U|0deViaryO-k(E7|jw^Sy#u4Co>MCE+|&_Vx<8wYdm`{O|Hxx+JCSf+qXrNw0|4*C_cu1V0Lf?s!gCplQ3;5d7_tPqrNC|n7MsUiMKXosUAU-o$N z&gn^lJS-He@XS`HwD6vT>6`gMca{S-zWownrNq@`SEfFl3{R)Q(vbq0v-sjwrkC~h zC3Q#otr^#W<8ojAIC6|<{TQ?Pf~+xN8H0AdTGIG%!u9HEjp&CKe)lKDVn6+=uTd|s z#o!j}3yg8P0{j}e4`f5VFd>gbh%Z3MU4bA%Eq^InrDV$KWnA2!Ea|3mW*k=!)&7M+ zEmq`Tb{#*+c?@Bm={L+%koDO6LfH?%1NVkU$O2h9)(-kUwgkXK^EW;a;i6#p>4!Hw zM;03)E{D8-NEG|N${eZj3V&a0k@uDQ2%f07*1%fvzH13=-<SoH1c>if&h!}m{_ncjH2 zu(S@YS-c^8b+wwklDetqdjapc**GK|hUO$m(feB_qW5{Q`$6IyJMv|-_q-5QHg);( zNfLTF+RMzo)sQ4oX8(DUuSO=yelO4F%C$eeYaz?aw$P*w>uIJ_(w6))HTwe%=i^6d zhrexirIagh$LwwUjw-i(OmttA39iAZSs%_y(Z!aHLY;r=$MB!iv^t+3a@&0H99Bkj zeZHK-9yFD(Eu`eZlx-1L%iVLKHRr>Ra$t&|&xgZnYpYnXy3sGUlQy%zcbo&Eb z9&4vUECQ03vKa97*`4zLDPi)^1uNH2rMMD8?Z|qw@(Gw41K~{B!RjEB02nZrdD1qQ zVdPdvSKQE7PKtaHny9Uwr(y?#-|IFiD*D=@gFMs0xbiSl0evLBAJz)QgxBlVjO0MV zR%RUXbbd1dLa;r;R1l>t1BD^BbY|or_>^X@L^?mZl%G^UKu81mS^BHVx-XQ%Fu+t( zV5fIr{_Mu0l>0Yr8kv3|!t|<8fH*llT+K~|7d>(Xz>1DaSd>7UT9h&WP)M+T8f>L2 z>CG4J$+BCX9xtK0S{B~I*}ca5(hQa)DMWBGUStS)cDo&uz0u2re`_gSHPOerzM#nW z82j(`Sb19*FoMYNd@_;sVT^;)+}x$YmO?b!bj3{(u5iaN$dbV@P~a6Da0u z;dyhXb>a?7#C_R_DiqNOq+Dk7S(~m6QayV`40Q=uJxW}gmCz5rI_5=y8d<*88Os*Q znD57cIU*dQ5mjd9INa528|BT{0MW)|1eGb^V9F9KIGh0vT+@yT&8jism1g7uWq9Ew zz``Ar_Hm%aBC}8;hAYq2F{QJSp|lAM@fh_2JP5{`laUntu{EQ3%ywIuAY?Kzu)sdb zSQ2q2%4$*pI9a?aK{s6`;HHk3?f$Spi>R88B5DLcO5vwdnpH;5$jVq@*CK2>m-*$2 zGfgn`;hmh8u-fv^V6`BJBDFn~D#LB6ZKy;c9*=Q(L6(}rop>lMgiT6t&pJaaC7xEM z(`1+=7(VS5a_Bf}h_TLYg9EiLPSPJVFsty$hYd@abe2@LuNt-~BW+V8Ml_JOM*$;x zjtV7rd!lW_B)>iJeqh3{P92jA>74Q=ifE*~R!?D;9j!Kbm03w-*CNs@b#9fNTX_nt zB&h4!HEMKL>3fWrnq)>C$)<;En=FA_z^PGBuup+$ZM~wvuj?|*YE!ZPw|MSagw8RYbSc`IUPPO>9F0gW@2HJ7Z~`P4gg7`G zCa!T6IxT?-Y!a+J#fk2Dq-p|ytBv3p4JC*J?k*w?y@%Jf&~hr`3`DUgKO;L#`5hIC zkqQZ}Lj~##bTVH)AT9@0Swx>4>4DZz#DaIEh9^f!DE2-r0*c2hGY$3!j=2J2t0Az@ zJgA?v{gcCa;Ff2-wvhcB>#TOWjNbBXluS2OEKd_oa+%Qqtkf!^1xt*)s!_n3*b;e6 zwaN`I=tO8`YoD;hLyu-BLqd~9=D})(N);OcGiu`#dXE^bg-x1^fU9iN5>WNVnA%#C z;H*K8y6=^~!+z3ZYP_cnrN>nnU)xc7bZtv%PPUY}KxF{V_LRo#lRADe-iVz5QyB;k zlD*rjHqRj6_Q-IJ1Ynq)dX(8q6>2)Ud>A` zfXv%V&``ei(=|^V@@M%S6*8#vCk^eh^yN7)3EaM~=FwGV^Gn3ulzw_}MLGbDovg$+ zbr%$XOBsAP3XilBr*M!*m!6c^d?_2}nN{G0b}tth5qMC^19t(>+eNtoE)@^J1@2r* zRATbw!e1#J?yi`@CO!-V2xf`6vU`xljrwp`ad=Y&4+T-*aJ!1M>xbprlb+BxL4svH z*IX9!3nhb*7#t@Dgv~$!zU4%YK=TEeWj|o|FIYoJOvCxNv^A{)GnWzpKce#D5V>^! z0x^pHvJ*y)fS}^Bo48)l!SfNBSfsmO#t+f^K4y{0^$#u0wLu)XUWU!~MEAx|F9D{C zC|sNJB6*b>YCCRVpjw5e%5ZvPVaNko@8y0L=A>fJ(S22~!yQ&^=2a>KU(yQf?{JM zA%}rD)&Q_9c@%5*0u$`R!*zj!*?GV!le1Sl#A_o0_~UV4hsWjDX1orTb_W?bhQM*l zTZCN7o)ikM^9{E_uGBvA@kT222&>!(R!uI_{zDmHQYy(p@TI8WTP#bqd$lau?pK*| zJsLOVW`ZZv2uFZyxH3Z?mCFboXlmce@^o!ziyAs0M`X6x&17u(y=bj_bA2q><9y|O zr+*13y0LO6#F_L#9c=wHFao2jHD4~}Q!S>_{x!&XIHEc`G|bg>KQ%<|&`PQHpNa_{ z#)7-dtq$@k1ZQ3AGiz0iu=`e<@tANg0qdWQdG}ht zo_+sXcGsdATlXe3hiEG6gKZ86sDD(&WL>YlNIDiKl}tL;UAq<)E+m8XWK3!HUyPsn z3m6pT1o{*NYmx-P)^@{cD=;hRrUoc7(+y8_XJ^n;`Lh$aR;56Te#o%X%#EicSGe^Q ztQw?CLLh_ydW<;%VOuDwQZ&92TUkof`zwn8Kf7vUWJ5^9CI}5Kxl|3U$_Jg!2oeH( zVb^Z8&2^-4==zw4^DksV%xLa%!l&RQ808f%T0~ENEFdmicqDJY6Ot5vKtkk=22&hP zDO7Jgl@epNTD9HhLbA6IOs&}S1SCf$OKiE)iNi%P)qjwz!Yv=8ry&q}4V z5dA%(o}oR&T?Etx&6cBp!(DEOt-H#5+)kvfAp@ukN4d%*R(;CfA^b1bLFS52EncCD zm15irqzKNi4v>F2wSG;WIiY(4R;>$!F0*WK37%=knedxd!U1m8sx0xa-AV;`ChHPt z?Zqm|oG(GgxMP)7`?OY%^VDjDP^J|D_iWTo1|OOzP> z%7!X#qAUB7h-RS*{jF|6e2HgG3~l&BRstkW&0Q1J_N3>nz_6K#Vb=$ORZW86SU>8z z@&Wf^`}9zHZoq^5#t*rEJ>XUQK6!U?58bmgh5$10ctp_Ml!QSG$RpJim5iOS+F3Pw zhK5&n-GbUNQ&4|CFw#Omi0Ld|50a?Ip|fAj$X*E>Gn2f6famXy%`m}OKjH>*k_fet zix{kj+?fR>_~dYU*Oh?S*Rh#u?u--`ujk+Bj^J(6Y{FxZ zhg^o2`#jWrQula^gvP)X!02))QI9asrFi1&QlJAuv5LF2i4RwN$W`hKd}|s4E0ex7 zr$uaKUPIHd>Z-OVcpU3x7)jn-nCK|TO5{C2G;tW&(H0P;RpZ!QS$PM46dHs9SYu6w zqB#-@R6C3%M2AC>n%JcxEOx0xWf-Uk_xVc+v8*oBWtb~I_9jH4`Sz1N>5C}uxIec!6bMGhS< zl-@&*={hrg1(j(_g}FergZQ~tmZ2!}TtHr4jlk-0OY=Lz>o-_q(X(dZHP!<>H^=^r z;u2vgHN2G0b9Yrf`sC=53&#Avy{jB1EakyY*$^}EWqc6h7J2W{r=u;3)LG<<*Lft% za`R3EQx;*dGkXTdy1p}-j{M3MTJ zPC3FQkte>WmTfMo$1RntoTgQaN@W)dKdWW*y9@=c>z||stIg1>&>iw`JSX0*ozXfkWZ+Xf|FY+DN3H#$0jfy~iuFy5MPPiE!b9 zJ}CfWyg9E}qmDt-X-o8sRlk=@@(`UCEkm~LgT)cs(1dURHOID^#o&=F{Rt`LKj3s* zGZ0&+gj9Z94AKFe=$xit=>m^On>sX$iB%(rCkVEg?`q3u{hfhh-MCkRng#<4B zcJO^{q`&zW;#0s{VJmxm!7Y+g{pQiCyow__dF~*khjFls^ox2Rd&~t;Hr+!j+!0v8 z9O-Rks08Ube)6V{gWJ8;V;RnEoLrP{ExJ##EBjRYX5Nh*3)aR5cxji>1Luagy7&;91*01Of|6Nc5z^X9SQ+kM3BxN3*??Jhu zOtqA@vZcJ05(2B82bvS05g-;%tS%o(EJq)InTz|x*aJ;{I_E3D%Y&IHl6{-%ojM(wA-Na zuOXCL=eCnFt9Qe`Z1-r=CHzn|0MRb#nA`MNNR2*pnvj!)$VELrOI}04W zeC~B8cmzt!Wq(z!^mZO}V$Aoi5a$*qb%w6v!ntfiP}S(pVF5-iSOAJacTje^B9=zo z6;K%+umo+iN*PWKS}P=byO=Wp^H)1QRRR053Un&FL}MA`m!SUgxj)!V)?CW)GB|I?_fAc6(RUQFH=Ow0OykjNG(LSI4&8oD6Sw9SV7H876 zrt}K+t8p@D{VlpN+^QP&CIx@E-FBmAQozNH2~MM-Zm)p3GW>%sug{G#AO6iS`ggl% z*t#pvmXuOTnD`#1rnms&_@P@5|VUTw!_W?eaA zyhS^znJoPXt$d{`k%iQZgW8acs0T;23mb7CHrBL>@F+lQ1{G@C)?*}F&JW=-ql+hT zJ)nXR%$t<*QgmkSM9jqpi>i>Bqp{l*MIjNqj-@~gQ$Wl@8C=>{()mM>bUQCQI;|Z* z=8S3=lFj^n>_NJZ1LUJ=eVoEQ=RnCoE#huA;m9rW4X5aNY3L0nhvKQ`A9~8_wXr-2*YE~!*52zP zuc#-?BHx1TT6iTb^pIXj3mC<*j6$6(A2iIs<+mWSZ39oq9tghb<`Ay&Mk4gML=X)M z_doaB^rE4G=Jb1Msd*?R=AZeK0_QONg$xqkvdhdyv(xb6mG7?IuOu2Ww%bwL3b~BY ze(g*R(3C*r12ZTA%qSGV{Yoc!35o2bXr3U_HM2E_s*s*!DU2)W=?l z6Y^N*{bLEhEBCU57uND_Sn5!9ir4a;jrKLD(SPAS7T2=Rz(K(M4mNag|9Ug@_B zwEdEQUR3t9rYzu&tkSYH^6iH1!t~q<%5<1Z&?U$GEi(P`&tG2X=}zA+>00G>$z$H# zfON}0V`U{RP={t^lKQT%G5Vx;4>nFI|4m1X7A&s6J<*N4Aqx9|62dM5wmJ^0XEaXJ zj+3vBq9&a~A3H+nP|6z9O&wpybtNb7!^rn>14{QR!AeU!kONl%3a69ZRPltR0wErBHgnYcg}nnT$&*lliSzI zL!?-s){0c*T?$b%V%dte(q&0+ouoqTzNJF#&Qqawe;Xa&729%m{^Blcj7npC;f^L4 z7eugDDfF2Z@HPHY0c7o8_nLs3@(=IF2_dQ$pyoR^3rJZ}{b5r2wP|1{bPJh#GqqR5 zM4}Vx8=P1l)NNJt5Yw3^{|#cR119J~xrMl4I+~jZiaAJKM-_yCNI>v6A|y+Y1IZ<- zpkQr^u=W&JxE7GL?6o7bwNcQ| zEd>ybfH5Z^`N0kMN;iniaP)s`k8=$iH!e z>uNW3FZ4#2)D8q%mGQkjL1tq(TqVmLcXuMm!jEUj;dI9!u>FE8-40m(GGIZvJ)Z5+ zN`W$(sl<=p5SIwx+&+gQ&Vt%j$b#2%$1$!6LuOxsvT&bdr@yJo&+ z4p#pt*+I9lVN}RAAOXBn%9!#!hteNRF#e=v#e%6oZA? zNbX;6e3P7@)Qe8Jqi!cV-J7~S9;Ec_>Uh9YNC~&(DZ%WkmSE}lyWy2|uGbXUU(#J; z449G-r9?AGdIBAi(rbyXb6*^k-fd85I3WsUIABYq`$z5 zlzHHJeYm77912`R7g1Z>gGjv8F7Y)F*@n%(-pMD7w`jHoaBUVX+eF%Nk*`iUdP71J z5yG@v_$qNR)@oOX1AeJ38@XyXKhvEy!M#vWtqs*;q7X&ll@hH4skJVG#A@eZXRU@c zY}r&`UqSL9Pn^3Dp)k;sN?EADLWsA?RL2(@s`E7$TqR#~E~1RUN*P?7HhNv&H)*Rr zFz>N7At`WWUu^V#JXH?^6tM4aSRq7PGt8dQd6uh>=6mZ}N=sf*e%OgA_1GR^@dN zL<;`RZEe#FSm=>jzUf39u$qCp zWqw{&u9kTeb3)<-JKU+llPd%2%o1k=xve**6_9y&oV6t^Ob@8hoOVw%OKqvDciwJ$ zC7tFihqG05*KS$d-*7?swrfTDu3S%cxO%6BX5Q6xEvzi}1B1u%ulTmuz1Yonwkhsl zQQRBlvA>f!aj#et_nIwnM^i#n^~s1)wKGfVL2O#Q33~S@^`m#W%iyU4N~{lG8bzaJ zM3+RoC2!RG7zsrk8!4}Oyf$4-ggYIr-K8kqWm?kaukV)3e&Xm|9U&bE4o1RWaMa+f z9qCc80)?cd4r+)630Q{B=*|@)JZ+dOu#(RQq|z7*^>jVDi-TWh%jA)$QgkSc6uI9) zEX`Y-s>=cF=1$!&`_spR0KQHUs2QWeu&H|3oR3u~Njg>JFTpGuaOx|e<%ZV#++QAK8SB+p* zIiaaFCo>}ysLhI0=*xF%X?J|Vq5D!w?v_3J{S}*#dOd(801n#(9jf50E%&&27xgRz z5c+rHH|_mhJ}IVKr?U9pi&sXncjMpx<^39mtq)z&j#z ze18Q??j8l$&P!myAZyh&zu<1P3kdklHwx&@%HkNY?faK$))1 zBh)r$ql|4H#nxGY;WzhDMx;30{t6dk1%ky{0i<^IGJqu8&;Q4P%196I_-#?WU z1K!|Gya0Y=D)~C&E%xl@bO2U=8AF`CbabQ0WrZ)7A`kj@C%W83dV1{%@sgQQ z)MMmp=Gl#NFWmg!vWxKu4*Ls`+zz(c)9=HkI_X>mo1m*MrW|~20o6qGtq1k7tQgoB z!fV$Y;Ml9I@#OaFF^+V~Khw=z*lG9bS}u`^_44Gu$AY=c{J&kE-G^Q8f2+`;S^35TyGfJowbAd2D$D$`Or-_>SDMKmEK0bVTZesn;pQiG4rKi z&V&`^0=J4_9@?IDY5v*!@7}Hjdaz zdF?*|%0lS?V*Sd1zN}yYQsFQui32C~L4d)O4~Tz(m?|c(6AraomX9f%67>bNya-Y@ z$p_WgUGd)dT%*4vhhLpy5MJ~gPVPVs^0I%dK9TCzBZrnI8)VlS+RC&LIjzK1PxbhM zv=;`-`XZ_U`ENOqOBU@f*D=9!@s=rOU3%FCIqBw$f#I)T<{WOs7w`ZKx3f~_+Rw;~ zQ20>abJXXeeK#||E7&^J%A2nV8Q`WePy zF2BoNE1YjqF0IPJrbE!lP;f`g@Bmvtq`zKFfYq))&EgS5`Pu5_GK9-U7;0oz46L$Y z6xY(qw%(elI@0xwIhS1OysBNHgW1NjIa~ zReG7o7nOJ4^<|2wOAX@mCC3abA`+k~xf-JButgLy|4@qC^{tEy0t#^6YHNHM%8A5I z+Oh-0ux6_G+PWA$r>2L{rc7H=O8~S!VwI#b-qR zh-jhN>nyqv!Ws@3slOR@-+W=)$}NFpS~-wC0cDYzugx|quS{4}AMu1@uDE1U!5Z7< zY>L;ek{%@=XwUurG6&>`D!LQ7KCH)nl&f?5iDM_+QiOb z6AL?bhx(kM3I~UKWtJ3f{bYR3df$>D(B#2#TY_V|jQxX@gw($ew%h#kcGQxk>sbvg za@%-rq0WYOaC7lHAH;UqZbbe#4d>`z!yo+jB=Db*Pa_SXyk1 zKFA;_EtbB($@DH|)buu$GmqMb#L)PdEX5p)TlVThe&McY+QwN(YB|)O@v9b5U3UfR zIaDgo|H-cGo4S`Bd*6qYelgZemiPt-Ty^+Ty)8huZ%{e)Jh-M*C0a}d+ue2aV9FVj z0s|`IWV>yZF$Cp9)*I++JTB$}XVwjts+u>khH9c9Dqd}C-7c$?6arwk1yab#a=rv6 zl*YeJb?sv#tQH&)-6>~b?bB}V$oX4xdHAHy)kvr;2vSDLx~>xps=Bz$h3Jt)>>a zfb;p7C#&#@%t(V~q+$Dw)sN9;Wa`5oa2FcIYUVU=>z|EDh=se!c3*3uQHCyAeOV%;|4_=#RxU~q6g6BZ!0WOsU;tVhNUpq$rmfwjpz2ZW zS)7&Sq|LJ1y@h#XS(+_L^RY4wipP^bc7bZT_dlQvAqtO-NUjiRGO>co`0{O_Kc^Lc zXg6kQH+BG2tI(LT9|$;!3Hy9RiS!lx@mW~HYrTEG#!_;y1bTk(_fLGP4d@hgTIvAd z`@=6TXlNFtKfKkHSd^hZwFE7U&20G-lBiVro0%UWl`a>^aKGyumVbJ&#$$JufnG;E zu#1>&9-z4B5rxwSroz8PuSW+`T~1oWUe(e0eeMK-Q%MKZ_plalRXR+C6N~n?IHalL z^6>13Rm?AG{^`BV{|qB36<~rZ&M_VZF_uyy6H0}38$)PgkxD;LHQHJS3%cP7dc{ukrzfB*u!{Fr(IDX|*0yF3+HunPI7$~)a7O9ci`k4g$^=}Sg6>KrRgk!-Q=!JvpcFekK)=2 z47HsD>o{COi-yk3nc#+M1weN>VpLt0Scv|zk-TLRLYBMr;TOAqdB7LWhM98_{4^DxD&UStXI8x0|4uE0Q97olqMGldeW|GmDe?U4qi5;w=$ z=0;DZquj0*mHY*RI5nLFl4g{@zR*|T{)qX7e$E8fvc&}iZ(@;J=j^;AYhFQ@CX-cOzyV?!Uyj-rwGdUAU=@}-y& zon7P7@WSmTMJvb+KX?`)TAMFT%QGP$GuxIcdnd=3|J1odEx>B+ia1>59a=My;f0kR zuQp%_udLw+ul4Lv-(amQhFSaXS6f@h`ka(ltYsdnRx=5;2-PbofN}O$R^3eMSk~Us z7JqAAH*9LxZ)iKSjA$!Ctb(9YOWbgHo*0z^ zVmP;l7Quv9P!_@jEK;;>LvvTtD_&3{G>6igNJOzf%p}1ce^(m-|K9RSl9D=PJQ4tQVA3au;We5SL)w3Au7N8Y1 zEwGg)D0MC1AA#gpHi@M`whTY3JK@2OoyfB;16e29gHEsqo%jiOMdrc9E$TGLtY}fH zeKT zQ*XM@vv2Af3Ni(m&;-bYXNVoyQr(?oJsejh6p6zax;0CRWJ%RMaiGkZ6uaOO25 zgujt6W#kt^2o1Qjbiz2rthTZv4pcP;>2%Wr>sB2+J)hyD)|%0n!J%B>zGJ8quD5uE za$slFe~?>tS}fPLhy==xJhJKM0VqHRZ0^*Q3&5GbM{istTq9pHnU?*Z8S<=b5%Re> zZV(PE+in>NAZA`c6`5V0Y&3Y3AanaeEu!VhObQ4w-4=GKCX8r?UiCx>LYAAauLOrg}E)1AB%Fc<%YqL$!<Du= zLIcozK^B2%*~H-u%7OSi<@rsRx?wqcIz^L#a9Q0;POFqcTk8Tff1vz}u_k4~Mx^-$ z75x}HK1;~aT@zNjXqdZ>m;p35i*I@En*Dt8bYIHd8zoygR-pwH4_ASezPjxD1aqx{ zIoRDhYN`+56lB%|A;43#hAqVe!SU?wiyinTOKOlaj!d7uMV1S-|5OTWt5lY~(q9X! z=5oN%NokVEQrP@IN{fN(m5926F=b}?%!~LgreXI|2VQe}Itc7aha7c13Sv$$qSY@Y zEBi~z?Mq9F0}$h1wJ+t5+_ZwkSPzGIDa0l&aU2L<92{T)08c}WsC}d<2!2t*Us9J$ zrDW6T5_=-E^9-{e%$(MrQ(4ag3$7H@n%x(fqIdRaL zEWGUVPx3GiEU}VF+DB5k<3GI+?xdICds%VT5)&M=N8q-_P z%WJN2SddRfDl>||l&dzCWW#fD4#+kewWG;VJ&wi^Fmq(k2zB%guRIR50|lcR4>OiyFCWm33!n>=r;S#f1iw5*2Z>Va%?5 z3SCVXNHjn5^CL5gqI*h&mr5&+k42aDK8pm^YU9MR@nI|0hh_VtGOKwq+o{t}8_oXy zUknI`UaDyiCrRwUmY(Z__GK?`tD=8w=RxkpO+i(?Q=!^%HpeF!&6%10(rfAqS5=Hd zfkls-lSl9~Fa?V3VRebO`!n!IW>Vow_9_VCtLZ44F8+Ys}N7yicrU)mN5$V0kVsLnxEN-%QZ zq#@-g^r#>sbcNZH{Q7GH`F~wvbsvN!$QUN{J0UPkC<0rB{FRZJK@n@d)C#-_c=j() z<-itKf(9(rpV`q243N&BgG_u~VzxzMa(3OYL|59Nni}&lgRE2DYtnJX{xv~@M~qri|E##&Qcj3MQxj1uH#I86*+0axaiB~^x=be9O@(!>(Olk?_btI|vIKb8QN&Vp!P3RVP=<08 zv!KhN)?J&o#uu7$f`$6DOse?5Ro}cjQ0fuoHJ%Q^d42@)SV*K8ls9V}d7W?V$UC=s z&?v}iGKEWlt$^sx#SF*Ly$;{=D=^U*Tltn1r$D`=xdEvzOx_{py(Yydc`;4 zsL5kZ$;q*a?q8~ys$7_^wSsEe<)x8 z{;UmX%ETxm2v+xm9_(Z?R(6n%niHn%Y3Q2CE&sgnMdn+~TbTPd%;quhyo-B2SQj4+ zvEWfQIYbA&WO9zpAjKxxJ2@NAGKu$7=mPr-!a1t-B-e={Ci%^Dz~ z!OA^=S_w*I(J5o2R>zUT)jdX;6d8rez+v^$g<$!0HU;G6`;~9smu`sfRm_0O75tU% z;1^ionmc6aHKv@k^a!oBO@IXhJ-pgZiKhnpLUnSCB_z+ynDCO?K;sUWX3{jQ0U!b zo#T}V!^PHRV`UT8S1SM&b2NgqUUu;N85+F`2UPnMO1&-M6ssf>tyhO<>ouW;{pw*n zepe|sxGf#YYE1!6;aN@llbDR}3GJoB#S2i)7aenP33*3W~vl;j>X^qaJzL)1) zIOVs_@aa{|8vWtjPJq@_cgDwaAFaYgSv9|6>1dvvq{Wgo@X~Z%!AF&TY8J`9rk#N> z@Vq_zYK#lX-DHLU*OX?Z!5!oZ|&WyvEcm5h;_m91ysnEk=VcYDZ{YLh4tx zW0C4$mlB1S+F`!MO`?^U3Xg`qvM1T9UULLXX6Zdy!HO|5lp!y1|AT5^P>=p1Q1)Bd zPa7JA+tOTlhqC$AHJ{BMm}_maxMj$Ajb{*96`}%W?r287T%+CEiz9 z*xyzX?pF&?vny7|mlXS@%t^zb5H(Ic@J*#yWiR)wnfRtd8ryrk7(NM+4h3pshb5Q| zN3pf%YrLV@uUzaFH$!X=F^i(8k)j$E2qouxvVOVFBk z>X*RU8f3IqZ75<|F?){(Nu7-349qXow^Xp=Uz)ppo`H&-S0E!s|j7d|3|kr z*L_rblg9hdjYO#P-T;AWDtokuqAraUyFfy-64Lz?K|J(V}s)M2>>oL?1fr6d{>~@MR>e?gO z55(2xq4#KWiZvNFP+BIRM=dxerUIgTKIwUB*}8$_qy$KGci6NeJ|Q=Dm}a={3F2jk zHkwhg9UlSH38xE=csZDX+@nE)q8|Zq<{T)SseC7Zu6a+ku0fkE{FP)jydnbovvv2q zl5RS<1nyx1*K$v93(wyTX0NBWH2{dbgE8+VuC#NXsWXiTEIFvkj}#HA8dF6jVZihe z`PYWdph8yUQIJiIUMip<&3r^*Tmt8vA}QPvn?wES;c@qbZNGvuZzG)9tMI^}QV1u` zG5XbFvWJh3`k1XAa~rRRY6^>gaZbBrAE+%&+|#uZ(VbvGxIB`zBtk{MIjcv; z;(2ufnscP!$xbXenD`d=r5vEGBSbHDvfUF#>RgX9=P+o~8BSo>O;p;2Y-{N*mV5kB z#$TAOaTkh7n39FnuB>^GUT#zQ&^Fi78&ZzOo2;^rn(*EmRJK5Qy?jRzVv>=|gp zn0sXXyEP8t<;v(TdQv=E1lAcHp`ur|qUcHkZNrPaYnKH%Ql_#IA!LFrwx&~M2d%BF zv;m}7T5Hdth*FDfh6zD&Ko#o?Se~$FrgPt{)Ue*m_bLHx6(K5bR>jo>Lbmq%?Z%ww z{q_O1QNXG17GPn9hgLo>u-Jy7<%uf8RUDb;X_NPS62)1AKGEq7YiYo-cn6P4qqEKh zJm(cPu|PT~mWT48#QW<9%7W&=_O#U&U>s}_k)aX6KQ=-E?xm<07{V$fuvc_QYpzD` zx)0pm@Y*(%-4!-(=YuJQl?~XdBU|!Ucu2Loumw0aY?Xe@f?QkEn!kQOS6S3jftol` z5oknJpv7*`L8>x(|1V@!kd@U3XXe4V&$VHe?HY$p+oa*Cljty$^T?y$RrI?i=;NTR z8GsjIuM9w8xneePSFN3xL(~B(rgwVZiaKdjGJ1l_YSpO9N3&W9{C|93kFKm$jIVLW zewdjsicNw$y8tp2x1G5DeD)q))iwc5x+bD4(hu-5 zWXniLKcDFFe@X=JS|UXDoYOKEko*>}_yvW6y38uQ-zNt!3E5v%9#jdl0#+Ls%mWfo zRmFi3x(0$ogO-FKQA44e5`y!bLn#$fu!Q3xKPoQLEc=YUaYGp=JVM*j5yW2%*pc-& zqDfr$?aB`0aM9TS1U9KW=nnv@BwvZ-bL^&~{tHOT2P>zs6GtD>1d# zz63OEABODdkvCRi`H_7WR9N;qmiXawBY#ABhf4vFJBMW-g9P7HV-7S4g2r=ew4h;g zil}+?^PE5O7&?K!G{?hrd)RYb3YY>Dau%+mgxyd<44bz9%zx@GF5nkln+hB@x)ID9 z2|^3u4R~Hm){>uIBw}YhixXIXT{*TiTyS8i9j0JggeWhNOP{bG0W(_O@isyLomIwqY;p0* zPDgQoxGd7>mkDcCXub2L0xYgvCR7#_ODMrFzo{}Ifl%#ZKNqAT6(u9t`6TendBar! zT6i!JIL((0bqE3S&kYqUM;xZR?*q@nu-SXbJ{mfeg6Hjxvat=?*p`TS&REKK5&VW- zxa-pv)S%8ftq-Q-9Bv16V|`(x-_S}-<*N~eD!^g&a)aP9M=b}JrQTSHsCQU>*w&nS z3CkY61m_vb_#zY*AJ+!71l4+9iC{aR`^H9d+Q|jMwghEy2CQtufwtYw5@yR{)NQ{N z`lR*V|;cK-l2lQZ?%AnNgSUb>Xdg^o}CD^hE1SBG}?d23#va+X+aD`vK#HE5T%wv|W=;Mr7ay zFAzpnZ}19X096KVqc;Wvur_uHS^2oufeHKp9Gig!XA!5_lYv5%;X-LwfIVI2^&$egFC<7m_8h?MqqqQg4f1W;^nA@61A>D32std5}*i+ zLn`;C#tHzZnaCKj;0~zv?L{QEbFBIH1QOb(e0vd?nZ8ea901b2PpVZxu3LfNkC5c= zlWuT;P;;kM-GK-#p2GDSsbcnZRc@^2?|*o?-|XA1xvInVEgl9Ngw;aZZc(QIvL0a; zq131C-tnu40iIqfHwfjOCqSj~9#E47v#7MII^4pNiys4 zYzONC+>&~XPgh%Vc5@wY|K%CdB%^v0M=Qg@ch= zPq~Ukref#aT~I4qe`V?tQ)8G69PkMv3lZ3kOv*C?GA}%2t3t{;7C`0%u%hv($$mDV0 z84w0P9HLA4k67jdfkE~|5#5zq8PTb+k|~i3k<9xtoLeH5NjI#>0evjA7|(0t{c15a zHq~8tOu+$oxy~5WsUBMER`bh)Yn|HI@m%UgHgC!;j7Y)Ut!0Txz$`PB&|zB(9d-_+ zH#s}JkrLi)-7;*h^g9M4VUOW5SCCe4|5>`pm22X-1LBAnu(@G%C0S~n2xXeU~Sc&{7RJ~Ndq!>8O zM@E#jV3?Q7*c|)%i7WHp^6?6nnCmQfWkT}MQhw(iH}RE<0(o;YLfz1gO({1inJQOr zq?h455FO9hbdgJ9)B>7sdwm2<`Dbmu;x_Rh)o$9^vwLSG$kBM)26o|1*{sVYsEC)9;3pS z1x_8X`4W|034AM|wZlY+H4(D|v`L zR<{jP5nFs&Q+7bS$`Met0gO1=lespx1(X|k;OjFp6;P8i6{#~G%7~5*4Qtbo0tcqu zaM8y^@qwF5ymH9$G}PwlTgubW@oUX#AfEK~?#b(K!~vu(C{O$%U5zU!vB3(sx{N$= zkL93eg7@SxT@?R{!`-?}L+WrXVnAs@}%u!I~{k7r*HH;9MqzVUOTQSR?i1B>=x?47{s z5WIx04LBCyF|UM+$$oqf8#~HBhZ@KH?XF(fv>v#du0DLvX!A9k&cv$C^CsM)2erB+ zzbWUbwd%cbOAm=xMqZ4yrROcLy|}A=2m#maBTouhy#$yx1%G<@%7X__Ce*fkNDD`_ zcHfk>n87XwaZH4*zc1y*ivfClgai*4musxM-dno?B@{fqX3sgwA_=HKA z)~P3EW_lK%%(KB;Dc;n3Wa7B%sqoAWSU2E$BIHu$-->0q6rvUxIk@OFZGu z_$bI7*N-ppJozOafx+H%e3>%A^6*mZDC{Z@qK=RXh?o+3j-Bn1 zF4?C}I-Y4@X34Z}<_VWkP?@@f{>5 z@WRZfPbs4&lFB$1fFGVZwgM6isVfSl9!_Sup5L~{5~(=w$nq%|WwnMAzMbbl5g5;K zrd|ea5L@s70Hf+4E88Y!ot2QS3c=5?tL|AzmgaEUObR$;+5xOrSE{;?Ls{0Ezfl9l zo1=1V8~7yZNl}FdV#MfyP}e97=3yLJM+|b29audKa-ru8=TFFQ?#RmCd&{kiL$DC( zCvXpx7Rkz+w+^RP8=aajz#s)QBmYympHm_GwUA6EluPh{SBglER<;_oq=61uZA@^N zNR$$j+&h~4KEbGxV^OQ-cfEHJU3%q$Un;LUKjZ$|YyYPHs&g!?wo;-X$Xr0zW`=}| zPWu9tT@II^zVq=yD1qAm2huWAa7tvJ`~WDRODCVTdG{3L+Pr&;PICr=gb<&o&pA4G zc#g_A7=64@9=_$O5=w_{xn2^N%EMgGGY?flS8VD>-9%glHV80L*K>I=Tb;N6A;`>D zPcP%QJT%h+1evysyi|we7*+tP-{QDw2h^e~k?>I-^8_>nvtQjCIorS+@x^CzjgK+B zqrutr=>a9NF4dB7L;==Ec?sQAEKx2ZKKD_@tJ}P4VJfQ9=T*wa8yJR*ekyWJC8cgE z#j1O8RZb3bEP1lA)jE2&N@Wkpk;O5;MRlc!E~k|DC)Pi2KCkg&5nOc??NhwW0D zi*lztE4fn&iWs9kQgDUr$t=qsF-pV@2=>mp1T55D**#OtnAYE7klwu#Iu(U3e6DEUav|}C?a!9Un(fH029w%uq8=GdYQJb z?hVwU3tj`=VB%c$FO{lZC#rwx{O~8);a>wbQ`*!okVs#L+g7!O{HTy0f~*?q0eNk4 z5Z%sz!B%dA%H1x{S3KR+0HrgVHYm5+nTiA2ZYJQs=bEo=QB7Jzx~RV(%q1_!-)0<{ zS@pF5g6N7FwRc2$%iTy@O)vKIN;FNm_tan$Cpi@F84s(3 zJRPKa1HwG}Md}Wav0b6nXN5&9^rJr156c>wQs;I zGkqu6jV%i3fi>K9dUn)7mMWz5`-6eopHlkMT)GEL=#V_^;@u#RjJm1{3bEr9cuEeE$Foq)a5+dj`yu-+f3>H?CNO$Ufzss2v(t+MF^PxixGBTj#7ESR14q~kO zO1?OpzlTdnZl2jyGPis!w3pZHQmktxE!%)o!e;B`0U#AyS@Iw}#GXE*#i4~fp!D!j zj;O~E4Q*9YGt^GyC{Vpj*mwKXSkW1GLLMHcwAdYw6VAXrUh{|{iqZ=hz{}9qz)J~< z>1%d#5BK-VAP&N+kb`^t-XCh+k__}cX8wt|e}O@KQGkv38mL3b3Lc)OA06mI)gj zlXzq7Wo2Qg|WCT2s#0wySlIQp0E&}!)lf4Aw(UB$}G^Z8z zd8#-M*7BvT2WgOP`sHIkL-L3~0}JhavMRi1`rs@-c&?k@wwF(y`Y=5q z^NuVZTn&H;R?2{BFte$|!9woPruN0uq@ixR4NZ%|q|um66+61A14_*!aG{tZgFIeo zWIWe!fwo@Kuh_^-Y38Ltzve|AB^*@zjz8zfpE`D9xV5?XX(qOG2j=PAN&JZ}x$rjW zrW-C7@VB||wV8w-w%S`R7L~k7Klf03 zx)ON&-Vi|yXO9x|n=)wyfT<#i)Oife_>3|jz!8cTe+94X|4`Jj^!pqWRzNE42oj*$ z!FBn~4_0?s_U+EqU7~e!FR&^~Tn#!f-^RYbZXGzDd<~CyXD_RlzB?P>ZXCKDh+)G! z7W>7cYRqvc;!QU#v#kIp%wFn{$IbvY^;sp^Ub@N$dF^ z6uJ^-vBo+wZMYvX+Cnaz4z|=`*cMacqLHn6GeD?|{x)=@V#^Jq(;aNl%)1f$29_Q8 z(4dwT-(A6%p~C%2kHJ|GVR#?OfmEkKoA%O|5COplQ@%4T`a2VUXC{$*NVC_|jS>c# z9`S%I`(J_Z&u7UQg${{W1$iV6m{kq2&=9M6Ymu+79!}K)<|Pl-9B9yudC7giaCLEl z&5R3kcwRPz3WgajloRTutc)JbVUXT?J@vhMEGQDq2g>C`tu7BLWe0O&)FaK`=(T`F)!BC*DekEAQbqm|&}2POFEY+Zj@ zRgvY2M4Vut*EEMMQ|N%aHKV~SdUTAC#NivQ`$8PM8@DZl&fP@o#_k6(VP*6H$L0a} zLCZY2{_<@-2E_fBo;@#`Kd)uc5SN;!K)x^+&0w%emSb^J*4E$nd?A23Za{{WMlAi8 zFS#75p8+&!wtiFkSpU$Kx6#4tG~l<>_u7`87E6A|%>A~7CyNtcEabUTyihlymJx4T z)|qgq<><7v#-No0FjksA3Tj&+i@vi=wz zs^>ajapJoIi#&z(6DcUw_kSte-4GlPNh^3{8oQ8L`(UOCiICF(@?8Tccb`YE#dcI! z!~7T*R>C8w4y`#rYb@gpy)tb)Q@_b}NL>&|Na}*MAxA~)UZ?4VW1?kgNF3-cm~7xu ze#dmP;5+Ru-K?o|p>9MiJ?<`3!)3u*>HI#LmSU;DI(RptSliu|vaMzUrb=k@&)wPY z*mYRjx|TX8HLoMq$Otj2{=7>qU-{aE5hp-F=vmOgp#vT`bT=R+mvV>cBJTNT_9;QU%^&8_?ay?pxKI(D*Ks84q2L?HbGPSZfcPoH+p!xZ#15BIO7iLS8_KS=ZP3t^yA5%vm0g~eE@S|QfMTa z2@e~lcsOE2F4DmTqY0xfcu$1gb~MdycoHzDcMWnKD-KYyZ#pU{i{Kvit(>zQ4UvC_ z3``+J3Eixn!PbYJ!#Cf{ykEK<>};kKlx;RJb*^Z1q=K?2a$5t+-f5uRhvh>?N{ zZn*h7=p2a^5ukPsn7H~RP@81ONE7jf`^ekKrsR#K`ev!KHWLg}vM`}ln5w#?J}KeO z2L+pXm)nf{1;_gi=fL-tEX+G@PUYg;ymR_z3P*^ z-_dFIM|%4YB7a4S=>5)i`5nj9156cBxPIpoh15`iK8M1hq=PUF>l3hI8S7kvxJ+mVl8BR$rqJP4b#nKtLLQ zk9n(ZPya#o2!~QUw2FI77bNiJ1}b`U9fnn^!#L3_({E6&o91t+;@FwvVOC1$%oCSg z$MvLLpa{tyWtehEpYVs-u1v1h;^c*xv0Jbas#KrzHRK zVn^DrB~mr|eE5Ubw9vOd9QZwOCO-1dC^K@u_85oyF-{tXhq*K}ol^Rpfj=_7myejX zxhq)f@1LaEMYh+Nf5w?x3@)~jig_g6Uk&XU$+Mb2Gh(DpNx9+@u5k97QQlk_M&(Z< zTWowa^G+4K;&E?IL_1)(XWE@lXncu1d z5`7{AE63eB(ncilMXoh}kk9ER+&<2{Mb6A|_wY~)m3w%FM|fK=o@(%Iy> zGRN==BY0M!qq7Pfo#{+SOq}^j4De66NDlA?k=&}b=|^gHh;Sb>0=KRaf?HPydd%Im zw^iUH-Dk^_VQ!Dj3tX2<_*+cOk~in_CHdI+!nc+`m_JaBvp#-SeHp~T)4$!#`M0Y% z4y9&LfYDT%JJc(`Vp!Dz+Xx1~ z-K&?skuH0s0%AN$M#RjxUk9yKnT@$IWr)sK%7@~HAo*#krQiV*6~0pgOS&4F5?(ad zE%%v11oQ8PelHanCE%27a+qy1^2K}`ZJ4sg*bZ<1&MA~$08AZ`B@X4ji2U-WG0*^~ zuik#e$VJCRAx2pRx=n>LUsgCX^4q%=n(h#k+`V9gd@b%#Md0Oz4#&lC2lF^AmfL4D zg|;UR<>+$=3S03IsSy`QxdOH1ab7Gtr94I$-;1r#Gf~6{l_=U3_>sB(?v5x!!=q5)Mt$1AH0Hy}`6o77l2u1*yVn{t| zVOj z%gp_P zM$8iE>8h_v=*;76lt~`~rDal9KISo~v3QWj-eJhXO`t|z!!dkpYv|b40r;*+stFDN z%!6lZt}3(3g`DfEMyzI0fTFR?Ll-Y4-?dgIDz7jfSYZsu(;09Cn1y6SG)YZ3Id#^B zZc>`Kbiv2}w<|#qp`6UJ{Bw8qJ9kBN#PH_Nz_!mAK3Oz)sCWRJLze59c>ib&kE382 z3ucx^+w4qoQO=pHzALwnhVK#?yh?P?w`L|oA_a@Y+kGxCRe`@$b)^%hNr4Uu+;)AZ z=eQqGdZdYG#gdgkXV+To_uF&!`<*vSM}qlh6+xcfS(6du-wsJ_cXkG7d4;xMu2`Oa z7N(yy-GpvD>-99a>_*(%+crC;3O-hHcX!i7|FIqFZ1c6N0QbM`{5}hjV^wv?w5Y4Zg`^dEf1PO zlKJM1>E#`f_QLq6lg~a+CSTonpHcnCyfIcX* zmxpx+xbK=;kNTdwjyB6vrJZ^5LI9b@J(*qN&vZlg4PPSLFrna6e7`Ax-JACq}RL5+|qLfX{*zSTPhmM(1n~p5Lw)g2Q{zC+$I>Ds=d%LWiGhPd~|+ z{tMKyZG6kwk&^x*19)v#LOnu8 z-;6j*9(j=Hz%`I7=dA~HYlcxlxAa1#1n%=(0fxm!0?(Ueda<7lMAOS*Y+?C`2)T4b z2!F!hEn32x+h#G}X89UWn2IqUY-R{$$;>}Xt6aW}age|s z&pD7w*TfhEa`~8yxFnJxO6JEVLV^Ry%25;c0vtd&3XKn*^DlZ*l1LhSIJy8z^X=Cp$e6R&Cb0btOAG#G!Ni*L`3HH<%E5g?(FxL zYHSN>=8xrFoTF}4?C-z8x_`pqjqHqS5wujRYD*mdB2|p;`Z&T}q+G)&oob8LM3T31 zf%7sm(E2vaa=$J$QP&Fz_AsRnbCj~c4ZNb}@ICmdT9W=s<#*7P%l)^fyevZ^Twg)fTTfJN=!Z=I!(Q;X?%S!dQE{D9uYerfA zRwIOTk>@9ZF3(H?O7Wz?ibh>*9hL#7E4dao6t!I}+gT`b19vd-z4<85s6C+J^7*h? zg47f$N76>%AlY&rL!*-|d-TX^J=MxUh}wXTK-|W1`La&DznNoKTtrHo-@@Jt^j$!r z?m(8BS0>;NZjn;&wYe>uMf2XDsog4jwF7NbO}X3GYd=scWYK2u0R>2{Ktrtm|wHGGu*KRVY2;w7{}a5I4`6GNc0 zDuqO|895dzW@RX%MOhgZNc|dM&??m+Y6Xk0oE!(Wg~vZ~D{OoyZ5B|)NItRgDBfra zSYB2gZmSHam4~|?RpEA7$1u^XXndjbM`Z0v`X4O(k6zxn4Uj%ubT1>>!z*kFgN{j$ z;-+R)X)n7Q9^h)YJ~VTQuLnRr`YAC!aHcC>(dz@>=!$b&2Dm$nV&Mo({82qXD%^mW zP(e(~#v(X{H%K!?$>XdB0aHYUBzX>AFcNdxFS51)R3fucfTzbov z@+yNbrP9TZrjMPz6?RZCE4VKeJ($a{4B{gLVSB>yf1t{(Pupy?S#1AemeNJ$)MA&m(;3!S?Mg-LB-^3DVB<;&Fv+K!)VBj##_ zAv@O0t%A9UCG5cb3#jj!X8=<`tiKi3_bKK=phw*Ew`^v$Ja=R^$FGmiIpSH@{nGvV zC4lVagwcOUAQ`CzC=AtB-38Q8U;~C7eXG~jP*%_@vtt(euI&~A#LIGpUVAA|>cdv` zOLhg`Ns43Y-Q%zu@Hn0*8*HP`kAK?^?uv%OKB7=w7WJ@i2cRwace7`=y^{d{>17x1 zY{~_4Y2KZd+L%Zu3nnc5OB|%M+P8ydeHdtX!S7H z3eV8Kd8tCm8s4&{*ZQR_4++~KE!rS0JPaZMWz?trN64%i0o~B1d`#;sShE>oml z7xs}!7566jHaqa<6^~f11H?6Zn-aAi&I6g6^GY!m>bZ`mOwE}LkU_70Avcu-eQUv; zV{z^fg(LG5`^{PTof*pP?CZfNU0;vfIDVIJuZcIR1)vtcQ9gJYih-{$hsJ`c>P8Zs zv3zzs;lM~1wj^v+nPBL++>CBYeoSS7q{Jb@MwFhWfnw1nWKul{r(3DgRaUxE=hspl zHZ}9pP$SZPkVU2r_Jr~~veAGP8fxB0HqTJ=jA$OS+R!D01HuAsP{7T<)bUd#w&!Ws zBbmRUZc7{>%X8V{JZ5{p>(R`Yn|`s~mnnW-vGO}u0j>mE0XH&KZeXb34k}H;yNi2# zl0pfd-Q(}GpdN6VeorSdu;acrYz*B)_)n&f`b%RWHdHn&`Pn!=5dQ!%wU&;mrL%5H zZf5tbncX-n)QFrLU6>1BZRLYFFB6}Jg{xH|3tD<5*pw1qjqAG(tGMg1iaVM1_wxI! z&c;NN-QuTk$VW4+Rpi4b6`b;M4`jP_zz;L&PM$4kaNXH%zmwg5A9xT!-iKL{L(V#XD5AV`Ba+ZyfpQ8K?0%hS&A!Ud-Ps@XUWQP zvNJ^-jKLa_exsQpr0F2RX;AdfieQMov2>0Yo<*=QQvHdKrmtC)thkFfoLD~nPqxIN z>)EUuV_=D_{6>gdp=itMhPKs#VH=_t5Qk-U?QrUi`EadR3O^cf{W#HBVN&P=AO$&c zLJ0DS0oZf3Sm`(Or^mt1Wq5U#Yx9Y@*>8B>v5#jOTu1V_>6kIW?~Px{c^w^(67|>P8C4t800xy!2Fgsrgg|F{BWM zt0%ia1UHs4wfG!iB#%ll2ub-#KRP;^UE$KoEKfijXgL8D z4vej82>7N?c4%Ywt@+(LHgByP*BG+}W6MEVB_3<+{t~4F18k(AN_mQSx;BhA-lYo4 z`HJvuwK!-CbK{0q-Z(HouC_ldBcqDh8+FXy$sQZRL(noG)nP4**{CiTjC8#qK$tfX zQ#f=cMPqk%@8+uqz!9&NI~*Zi;*m8amf%)OV}0a9X%Hq65>}zt>!T$_a8 zM=7ApS`q?1g+!Tv`Us4vwFMDXp_^Ik{!KW4FoZ@5p_j2b2W_`hSiFqq=ugEL_xA~G zS)N)1GD>v(R2_|$!ZOF0N@mT77i8rNn3tanckJyK%{9LNg`suBaGVDzH04;t|>2#{Hm^zZ_P4mb!DCQ;T$-Oj4wiOnX8;kr~-}w{#5;7rjtTG zmOSTloUqiVKC@#fks-1aXn!n`Evi)JY|cX=p8j-CK=VPUpLbPL2o_ZaGIvacuuk!= zK^_+fY)J?idooc(3t)svFp)~hKeJDJ;#i*vPOiMH$rIVB>?Q zOq2(BnV4spTl=^(O+Dqk)V+h}X$EEvZ<<4ut)Sy%Do@IYN@i8R_%?@=&tNXiS8kl} z;>_1Y5z9bGCyH{P(37-&iI$fi=XTKc&Kx6|w8b;G%vwD{P}qK_HT55W7p@c;IK z&8|7VFo6b_+Vs+PcXmfWRv~P7h&_Ttu<|YrPh{XL{C$#N=$ne%cDhkgL zjizQru)yKSUQVU&8NkI&rpPUDY!hsOJ%Wozh^%JoItAK9c->N@XBPoP3%u&)DR8|) z<~+f2l3_i@9W9T6N(s?f-~vUa7H&S6Y6`_J%gEHDqq}f{iGA%Zj1Xy@;P3L?OHVm? zxA(HbfrNwJk6gmiYAP7GinvTHCzQwLSRflq&Gf3-0)Ri%$yBt9T(AN?b9Q>`CMMd9 z-<`|vSV(FC65TAaYghk$6U)Qirx!936`P$KEfUc0FPVUTk(W2HNcZf>?csL^&$x(W zc8a^Op>9DTU18`N)dIfKgb*@;Rp*MiUO4Q=mpWnwF^~{DvY=VCH{`wIKo%6+i4`VN zT?@qOztRnk6^;y73d+hqw^Ybx%6W{}%I?Dz)au$XHT7g=$1a&{E1G+`mFq%FR?1ag zma7#ly7Eo-mpsbva5pO4*`45AcjK!wOUO0|_b|R4q;A5)7-_Ia#6V$n&bmo6AW-uh zKFu$6o?dF>rn*tfedYX8KrmWKiQjf<0w8R-fB3@}wu%sDpG>Eh{yda-10DFfr<&#HiyD_Yeht zYr+pr&8C*FDc$pvD3YO+h-ku^IGj zx#(u$zzXCUgdFollnTh>?tvpucLAIva6bdS5XkpfGqCIN(|nJ$0HwaI-eW~5jKEye zbfN_~@bhJCY-Ni!`#Vt5_v5izIcDrmY#7h@RfF1-(Hi~TIok{HX%o0sK1n!ZZ%x~I zWJQ(XYuf?~Pi_a`STQVTx@&&`dAalM3PG+8JPi1)8!Lv|oKvl|0y>;xhc{vGE)PI$ z8peAL8^$-d67JojdV#cfScyKXJ#4E)#eK6^M+l#{amd<|R0fmQFORmL?{Lf2|9|k~ zUbCTRy~NF0-+Kfp{h4xGf6_U%5C?p87}`h=4?DE!^~&kdrl<9DHnyv+<-tunpj4xa zgRrVzZ2}c6>TC1rhU&C7E*$9%6WcvWQ-fNcHc+>-ZX~1FI#~O9HIH4+%Tql4OgDh;rK+h2eQK?kjxHa&h|S! zUoAQ&)?1F%&^#)mA-#P@8G3>ZT>Xcf;+(`1O)1Wy{o(U$!!cb(9cUYN15%WQQCE>n z^%j!Hz5fNLBoLp*Tg-#11o})6usZk zt|6*}Gc*`lCY(!#9Z^#}HIPoIxw~2V(j3#t*n-*UTVQ=~G^K%PO0%eoy)HdSqOOf) zH$n7s=d^-!T`o^Z@>Yt|2%~&FM*Db-ipDW?!N+Jv$5M54Q0A)A!cNOV$Z`l{X*df4 zTz)qHw4ppei>-c2DsH)_3Vo3>W7sPrNBN)hu>;liwcuYe1ARqSK<;rOx=7VZC+|M4 zPDm9iJVOlUmmVl2)B(7!O5+)PpEB11W`Y^sjqZ??RL-ZUZkHRS43t7aZLnxM66;2?zAk2GZ}BE5@cPTeC;pe!hu_O+^gtXyY0Me zMtoj4?S5sM4#)l?Hp$T2CI z_roLZbHP5UvAZaCN$4!DO~Nj*w8?{Ewd|_1^r(exY{!7N{475W6X|eXZW}hfEd?$d z2sY?sMOjfg99()xIn+&$-EuJ4i4jn;->L%$OCB5MLH?ONxRyP*?9D*#R~&M+=Xn?P zIxiy0!)Ez$2@BbfEzZyE=sLEpm;h@@X+dOskL@q;$Up#HAaKZItj0tSjzI1Dd;W$o zeh`L7elYW=zxKnZT6GQXgi$n%ZsM1|(@>PotFh>nceDbA4rnM+IW#r^FhbVhYz<`v z;9UaIVJY$xFkQL74nHVBiqU_UcQ8Po^qzrY3X&s_H68(Qr$x&R_5>AFu1dM841eLZ8q<(~84bGMyc%=yMLz4{hM$*y%bDWO-kK=T# z3m2|nW=PlOP_>%y#k0mm=2wo)&y0*Wi_)+lup?J-bC8>iE;GL!Rg2EQuuoro$hEG(TZp|s@#ZrvUg&N z@*u3eicmig;#yt+NLSB6pF2o~?jbW>az0?DU$`62+-{1;`T&t#CHbT`j0G6g`BU9>T-z!qeuYLSkN9U|xwKnUmD!UOFI zfzPvh*s@EPX2D4{xzCsn!0ws=1eE@mMx<#&{#au0VmB!cot@*pB7q<5DUebMfQ#f;9Dc5~WJ!}`HU{a|EV z+FtzXlHT#Pgy0Yrucqwizdxym##bTWGJrp?5TT0)eKEQpMZ{2jCHhlqk%(#LlVff~ia9Nzvy^+0=JyPvA`b}m&zD*Gba@*l z+`v6kCWe@{L0(UK;*vRBHDsv6yta4`)29JYqq?$7^=nf&BS z(oc0s`pHKYPdKuGfSdH&d7{b}$FsuO?(5=QdlL~hvVh;{F`O>>SC3MJ;vlN}L zll;^#ic6An<;C&_()PkQ2H)UHc*5(aBzGQA$@49(pVxWzxYx)5IzcyCN#|T}()4|O z%P;r(lELZq?Y8v`4U|Ae1LZY;DSk3qCpp7k-@>0>hT3W1LzJlr6!VMoIDuZrCxOd; z>n~)d^%+17UrqTdbNFNo-RJ%bS6t#pDmAG$zVMLy?`2m{#+l0L#NVM(kDyjQBVC_= z^*2gsF#=ft-VLVE6ej!|;$?jR)Ne_In8sL?q8Sg=x9W{9|0z@pw|Nr4f?jp7_X#LL zF4RTXr@Uo~t9Oy+_mw`539a7OZMk9hV{CHqO}sG&X`6qR>i10x$y?@b(A2IrgmT`! zrNVv7^lR_mbT#rV1FPQnlIeTI~UJB6eO5~Z@Ww@Mw!3%@s_C~l5 ze6{{9z$i1jIG{WlcuBv?9EH(0T#~Cg$MUtgH1OF=yek_X1HY7BdGPZa_$k5En~Unt z`L`a~ipgw~BuF$if90-|Or;qPy3wB)C z;d}v`)&Wdk0VEI10gyAg#|7=6E;P)7&vZJFe^#O)E=KK_Ze+m`pF?L$h00=r3hIE& zy8K*-tu!G7yWn9Y2ZTE}5_k)7N@a|@*;GDR#+dI)2n-!H?{KUZSy#@}9NAXLR*-pa z1cT7RsJ*EUA#KAKQln{t@57ap)1{;toHB^dlVtrJvr$-P2bmct%wb1mxxk&KLojRT z**pg^bSjd@+<+7f)d5XN@M|4lo6(bMexSLGDr;F$4Ac!!!c2A zq>JG0{jyjqO^&1+Y)C4QQM+YKad_>QZMae^A!mjIz&TYPAkACU!8$Z|@m!RzSCr*z zFNvrT)6wPe``E}7hvCd>3923i!_|Ki=0?B&|qlP}}rxjnwHx8tM8J?_7Dc>f|$%iuU7x-`(4RiU~Fiq#Q|_2Ihb)dROvH?@{jVdE6NSp>w;Z?EFO&I27T*aTUi% zL|X=FV9rV_q2-)kc%FUG)klN{a!}8P1oXsXVDW!oE7ZE%(z@HS?rcdoX2s@NvUu*S zCKvbc0ni#_#!;U64Vi$zCBUQJ|A6}8WAe$9C=HFsy}#oFz7etf0>q2x#lmV?)I`(X z5MAxt_Ljlbd#hhr`%_=bVOpf$F7W9~{`uP$sKZq`m=|(Y?pm~UyB=0NdKR|GxtxYw zOHXoSeMw1(59B%jx@!8*lipwATirpdpbBw*Y- z&aP-BM=XBF_JzR3dMNjyI#WYX^Cii+byb16b#rs=t(J*7p0C&fRB?MTnQ?B@m&CLC z?W9?^X2f0NEvlxXUT(MRvT-b3n6Pt(oCg&i#DPo8)#7&h9#H531GSNEGkOg7gLl8T z8<~kPIUSXw4I6Qz%L6!Q5q6^oK=&k{@rdr|k%Unc555Pg?82gki^AC*X5)@Xg@0pD z!i_x%w}r$=R4(hzGFIxg9Qi4Cjkn!sK~K{L8JC!KzhH%T*a1`AY&QPxWS`6TeRf_G zq<%bT%REq}-W#S)d-wZEi|-^xcM+WAsUvsEn-wEe-EAoGe|kRn44~x{B?j&8o`zNR z4XVCDK5qahsB44dUm5o+rWqLl&2#3Ca|R=r(~n#vp=;ot7q0X>8nR>l8QxXvIkI8r zl~AY%d@(dEcwn~nGlc8?mT7Gc;se!B$-2Jx?!C7jc-r?-5$9>y1-iL3i z`tSi>zPyG@CI1Yx=KI9?V(EW0PkJKb5rSD8)RT|yZImmmd&8OMPDYRzPmsiHJ{1O& zAddOx3uIt_g-88F9>sm^xZ+ah)I50H#(1WKZ{qDE^=*{B;uuSKv2SO;?IV{#1;PE^ODAf<_;MVW6?J^yOYQxA|Q<~$b`%vA z;FutWb7zGFO~v=L_LKLt_K7k|_wiky<#z_qz01D(X3v2exv{YCbM&?f$nrT|c)^(1 z=|3s2|3rTO1Hpz^t_1`t08hS0k~LkHQ8#{p*)?_FMnh%(7o6im(uq7o(@kcf4~Uc- z&t?o8eiNBz6PkYI)t({?2V%CBPDDSHfN>CZdi9O3>j&_#Fl)k>)n)q(S8pINz6_1> zU`$m9#xyD+mO5?Has^WL<6JxdTJ8dbFfIFc`by1SGeNOx1#YZ2MZRSkYqdgAnu==GnrbCYwXv^s zipPGr5>_m^vqp{5M~;$FC-V+KsW1;1t#lKva!Aa-HtICf&uu)?oSRqk)}WW0ehG3N z$efj-lLr}HqQcmn)#+czLQ~i;Uxv!`vdoeJUo0ja`#@0-bIWZmMS0SxqN6H{^yM{c zz)P^c#k7_Qlb$*%9xGBJS#QjDZbDW*yo`yJYi8X$hquLMK{r)Esp5Pve;i9bMXdo; z+aI{*&ogEeNCJt7p8y-ti}G_sE-lp)J#f|Y16K~P@aQ9x`A7ub@7(8_XjBA)8<`tu zSu%2wedX`=`Cgr)Dz5e7t&)A#iU730LFNixVGooL@8&yW-ajzz(|5z9#x8^bym1X% zu2*zSEH8-C-52uP%QGoV6%k5T(naiRLoTot7Q*@k#^YyPUDtA_z|o8*W)7}=ShB)l zi6b{uJjFz1yKWuGy|8-b6*_G;VKrRYFj~PdTH!faPnK@i73D88WbMv=AE`Fkl$CPg z21Kw8ZBI}N{UE-rTgR^VHTtlM-fiD$P*T$QZ^XckeGg?Ic$2Fi{JoY-o${IyaL@ahEpy$CP-aw$k%AF znZx{86kS<=25pg?_x2z#8z?Tpj12?8Lu2NK>z-w(keNA>hyf=P=Jee;N8%cxzV4(# z(vc7|L-|;%WW2FoFqm1|VM&J?(4htrZ3nuz$LHv8CYL#51|DrmYxJxTL?vi)91Xns zE&yd(nc+5E(Jhg=a0@P9?V7;6ti2Lo!@fhzQo763p`ph@tj#hG>|FGK|Hl95B~%BV zbh{@(ZDi7%f`}_6)I<{>i2JwC@W|&;hm55?XDr>}LBuLu1k@(FT*X|NS`{!0z`c&h zD$lYv$bdJ<(@kxP$c@2)(q9_+OG?O4E7}#_nN1L9XUJHAh^zH1L;1_xffA-*EYD0> zWB(s1M9H0yq`;!m6UL||r!{cn+p&(l^N`r!fX?G_7R_1XXFR)3F9!_$ANDmg}bEp z|KdY?bSudYw2KJvw3yh(LK0=Q#&GcP`$g#eieF4+g1b-&`gE&-Pw zGM`~m-vi2=!;+GAz)o7W3D`=vhrDN>l+Bn)-)KhDN~JRlKxzF!X@*S^gC`|Jj0U8d zg;+Y~7eRc(Mban}!&uAev8;%4);m-f{g zr~aER>Af$5ZgJ)I@cV-2as@au@WIS`2=*=FM!2q33EqkcuHOn09)89q*h$zB#vJZv-sTtQyrisw!#TS02JK;Ne~)JbMS^+HgC9& z@ou?q7;FD-Ki!LmDF%|!a{C7Dm3}*&QPif=qQi(=u+#=eSMU4KAt&zAka!DeY2H%L zy&v>VaTVI(?QM9dVP_P6VWfyTrhAs1H&9J4go_w(?@3c5$aP>w!$n8 z_2%X5y@(sWu24u%Rl2kDtFGeDaOlFzMIk`39LX@wUGxNE{Ha z*1X*#P%BX%A$M?cn7?5=;^(*6j=U`mfi&~p$4*Q{e7>WJA2K!+j_$&Ea7`cs;{EA) z?fLkH=T};IK23Ijc?rp{ltgm3K9Jsd*LR-RiM3s3Y_89tQ)8=kwatz8T729i%b%@Kpj@%dJ zW}@}b_d>rNm}l2+l5Nf)_L&??t~pbTYlG&rqx9#b5i7o6=xRWSPImbwx9Hl^FsZWN!yi(cci^7jFQTnl8wi{Bv{fHPh~eY%ApGeF^m8Drel^Xaw7mLLtq- z3(D!=nBoD&v>U0vp9AG11Oe)pWE@jg$=&n!iq76zKii8ou zHL$ecFsSOwCeu@YXg$n^3@B8V7A4RnDjOP5#8S^^oXlgVC-Yc{T)PO>IOq%UMl@{U zfiKUXI;t%(dN8?tcA_3&?Kv(l5*}F`t~ID|xO#lIZ#8tc{RWIV0SP9!<6uJV{+5Lc z5YCL=Sdip2*?1I$6mMz}iuvZqO2{@PW>V$(_6a?A1=1t^dc`6_iCwRK!#xhS%!FJ; zP*+0<5ifBd2~kAopk1#6&VX=y9M)8X%7c{BWOb0@v9tv7nY6>~BRBmmg8L6dkNmmz zf3(OTA(|=uXI-j_@cJHCBF|(KQXa=1 zm<47mNcF}OOXz{CdxT|Xc5gwDn-bWaku32Mnz9$bXJzVwYSo1sn-GVtWPofl-5ts@ z3!8S!1=VY#pTfG4T00A%r9by|rKrA`BsRU{J9L z2Tl(vjOaL2=rZZ2!z{Cch;`_o3*Tgz#2!LNrw;k9eJfGL>2RWpQ{e-!5J!rlZ^6M3 z#7=k@T593nMCS%N+*>IMM!nUX%(U(>kxDb2Me1y%+|EwU!6u|*PZLn&)-X}h%OG?; z`5(jpbYmy?L&a&Ere!xZ`v|2c@u2fTpZU|X_pz6+&mZWMs2U0B=NmYc{>HQo(zE0c zI6-e&1tj6U@jSc1OuOOs;g)~CmKf+ribqXbX7&ME6r{-0t-J5KlDn$JqqR4$k6IY-M*ticrOjR6Tk1WRd<(79M*w*C7ZazNtgPsG&eKVsITWq zdq?G!jp}=M5rN)`7#t@h=G)&(uB3_(7tr{9WX4 zb9A;1??z`lJh}RwJyQLhPLl3Y{q^-zrhcR| zAF%iOaUf!u5C@G*O4qPVQIhE3)95GYPqK!4)X-^yk(c^iSTl$vxi2Qx;GXSavp(M3 z&J$$7qpCre7Qea4*Ycb3(Ll>ml|gnnVKo6qBEOkI8X}N$nZRAnA?R4 z%a9ZY=uYZ3;$@dqG`#Hc3k=v{wuG{ULSr#Qc%w)3%c3zZ_l*?S*^b;43-fK5Nid{C zYY@Paoel!~R8|XOi;VkjdOp9e#zfbKQ zCwCF(M`N4HhXjKjIk}Sr?4<@2_}p944bp4>AX}ig-yVH4s>6_&l@T=l0o-!<>RGM>$WaN?dSN#%%b6fUt5;!nIgSOlSr>R5G* zC+UAh-Rg8zfby&!n=87Ny&v+OeA_0&&=wt~yM6?3aB6HTd()B#kI9c#yGLbDj;;Uu}WBUBCIpe~G^^_zc6zFP| z!phQ_wOdv-!k?I5W5r=Uz#ALj0qnwZ47K;Q)Oz*uh64BPz*ZU?a=Re*-l)lOkE^QS z^?fgiS_>=;ih%Xa%z_)@oFOJ<94DCgMd>&khi>Nmb#liP%{|;X93#|n zCk_m1B1usM-$!a{DLYptgVYxXz|;{%jZx^F`o!05I;5OOgj~#rd9ZK#N*^0yVQhG1 zk>|Gu6?W2rU!VUjyp#=3w$t9?!MOmiYF%yq#sFb)H#=h4%?My($mg?AyzLkdV>vo% z6jHX7{nPm9Ms8b(1u71h@u3XO2kL?m>dv$NFezF0mDlY&{p;F(wy>0&8e%;t#0?uG zMFYvW#NI$~;OQz4fx zPTj~lZOV&h0m*MfOfTm8ekwA9W!ty#{fPWVO9O6H+5j`=LC&7eqFb;w- z7ZOFW7Y_Ub50}|gx*sMju7(SBU#vk3Zy)?k&rDT2ss(rA2ZFS500{Oj%D|~We%_xf z6Nhj5e&im@>Sk<`bWo2AFCVbKS>`*d;>B+a@3PNxWy>W-W?BAp^pTv!x-^noxkEeD zH$vLK@{P5tY=u``_?H(!#K228jaLW4O*5KfpCK2n2+%HIk7V^>^a}Tn3!zbKvyr;j z+=r*ykehf$_5>s-sMvfIC`lON z9YJ!{wrb6>vOg9)3x!?;!VZ-hFpO!mdI@23z>b4-HbzXaNU~hnsoBJdNkUCAE+e0s zjCSEsus8;~Q-x!dF|>LVUrmj5uegVooo9IlLyml-*pkm7y_#``x8C;iFD>4`uF|{J zj*oXRJMn#qfVIm;N3LVZ*kVJ1U_N_2%2l+J71Z{m!d74^>dDG(fT$G&O52kit>2#AK-II!nVe;0#1p@zDe8oDd?~N+OKOal>iP>h{FZT;VOe=YY@J7N zTi?-O5yvlYxl*RM6}d*fL4im_spLaVDTGEj$v^*L3Mz*}7xp48!FvJy(}Md^=Hf^8 z=5rrx%{T}aBbf)EzS*nT_?mHEZYqmBdrLofajA}Zb!|t-kJ0J)3-3781A-{hKNaW`ht``H1=8|N4i_9>77qb$;E9>3v(SSjkX`e2OqKh%OEE^r%$2Vep?iP7;KV3FGrk8j$4&!>+I`zp-wt2tupk3m9 zNpX-mT^Ant2Uu_uI_a{6cWuqf1VKy_?Sd!R08f0yWnwqW)WMa$j3{KIygtFRX|Ne^ zb0dfpxUHv-$ypjZTlqjT$0rq5JyBrwG;r}U(!+**lkw8iA-mVw)ZQR)#KF|@XPmp0 z1JLP*?o0!VlxXfW@XVEaqv@*yZu-e#Hcd<}l%3n`OubBfpSO4+@mgL|g)DzYdBej4 z@`*zhQfRl=3(m+84PVF*p7JgwBUrc`Ec0!#tT!8x`(av%xMqTOya5KyFlXmE_o6|hBt05c0K@9TH@YRtTMoq1iG@M$VrTm@FEJGpOQ_Qafg;f`@ zaV3>9(5FJ@wqwf=`e0ek0>rzu@K7CGU1dV`vsG11*6v#rA z$Q5_KQdIv8StjPI<<#i$JO0|ZHc>Y>`)i|CF~<$TMZ?`&E{6^wr0xq=|N*-IP45J^}@?GsLx_#31e*m79 zwbR*7Ph3GM21E6OZAJdh+VB?JVb*wOO*UD+P*{-sMxjG)TK+dF^ILWDhy1i+`fqxO zHt5{8P+)5OQd43H=2kPhbl$zpq8no3qkpr+ZCW5qK7gALsXr;8@cFGGXAZlev@zQY zt9Q6XAC*CV`${Ow=b%+rNG^647|qTnIFsh~HISFwfx@Z6wFgwi*m$MH=oXQhVW~#k zzB#mRVyLw=@vRVo5%o){d}kTd$!!>ib!B0^MMtduBX$ z@@P`kLpvj{B4=pY7s_H?nY)obO zMU%ylKWe+{Ok|0<`^=c4_|$AX^Yd|nz*uF|h_eJK)6;O@DT(kL@3q~*^)=7DniZC6 zOGNN%R%$KlF?P?0el9mSWSjj;bd!AE2A*9Txd+*iQ9i8WBo6k0PzLS_Lzw_P10}PJj zQtb#JJoA=S%42O=Vy;w6)63Sj?+FI>v~`Q;$kG}b;8(N`9#9M=hHgA762ek+8H(H$ zMReq@gPVbGY8AYRac1xVp1Bq_Ew*`A`Q`!(8sZ(xFAORkT*qe7(SS$k&gyPfhDZ)g zw^6KHswKP2EISimUA2SENhAROg={;Le?xZ|Jr}hf4e;bogNFr~Bm_hL?4FlaqoBs)i~LuV_qZpja;TbgxhuZ{xD=i_tU%!#?e5xfNiZ97pQ zOI?918+&?ErPzEp1i%KCWzj01L*R)K0KBK1RDBM(caVKCrp{b*>>Cz%)z+6_2L(yS zyH?q6H2$nIS}ZYEMM^q|ij+KXHTL@i>;TiB6I9C6?HLue$=POn@#_8(vhrs05Bkau zo2*ejJjFgxOiv+w!&20cQvxltC6=C#1yZH>QK3{R7~GLUJ6vQ328*r2*emUEH?A!| zrLjimw)Kv`)ReX7tiLyo(_ZOZb48ouPz$JqRyf*lWJ3+f*O)&7^ucDVQGtHsm*l(+ z*QRjNR$??N5gIFo|Ew7Pv+{_qYP=6f#q2@QxdBB`%yyhDM8@|56QTBlOLLqpeqI9MIWjBaC7Zwb=~~mYad6Y zNR`Lx3I&$xHLCe3KIT(kY?|aM**@7Qm22#@O6TfuIHWm+|1ShJRTM`2Zz5}u8iYS& zF2zdTzF|*nl*gLyV8NFIzMO+4SCA$0_+`Tbi#!PVoGIhXz_9RU9ibMhCDJeZuy@=V zyWA_lu)yCX@L7@KCrj~5WM|5iy~3tAgFaoQqaPfC4@F)FQTsrqhwXy4zUTafto-dl zHy$>4VrRQHW+Hlcy$>?cI~b&z_e}~w&Nd&hc&WaI2ZLt2_MIiX36s@k2w%qD;sZ7l z^k`XKZdIc{-o(Vuce!KT+J<@9BAs@k0YN)am(rWt)~X5GVs;Oi@LQgrI$T$;Od`04 z>3g!8Ubj4?@sO7x9B?>mJxX}XGhLqL9n@I~NgEe(5D^coNC<#K5RDL#4yR52`JWX~ zCk@HuAIwB+kqWX$Zx?Pk9qe{*c(<{|Own?evE4hWARi+hB=EvTYEXZ+fLMJ)reH_^ zxsHLQ?+)?hUmk(n_)u-b5!DjQTl?+7dL|QCNX41JL1g{)K+EHyI`zO#9e|->b^7r0 zAU%#Ipr=@)(3}Wm6ER=g$h-tm9$8?eFXf=>ise3dn+|(fHFK(%$QwPClz{4$q-`3i z$l+6$GU2^iOP8b9ZjbO=NM(i*PWh z@}jpql&#@+A|M2d+$DLlCZx;Af}q9{Msj0j7FHg{iN%^bp^(@{$aVy@ZsRA+@EBv` zCwMlTIvWp&7!K}M?y#Y4Q^<&*_Dq{?l#yfM$a}LaEz-$>2Wg2cI}cv72oQ#Xy0pAi z9AX~TjORER>*B%6@{nNQuHBkS7dGO-#tVl9DX}jIK#YhN91w04f(u@^?Wrt8nMh=N zD*gI|ZlD0=UooL?dR1CZLPIy#46G;ymz(V1Gjz4n2t&qjoQA>Z4D)cW6n8IhrvJ(h zR{I!pXReDdDOY5neYXj=iG_qUhI7pr(CKF8nP}3ne?puv(!Y;Ew4kgu26C923GwV= zJurqZJ|+*JXevc;ln-$1tpWFxG2{f1nQM-9RTs@P-EeC4+-c@X`^+PlNh$85bYLNb z?6ewWXaIY%jPhh17<6G7ln?VhWdQaq^~oKA{y|FIz2qw;mJ&RIBgmZ}!s}q^TvARm z2cnnAY`T3wn?Mh>b?7eIYO(R3BAgPrZ{mvhM4;!KRP2!#KWWp=aWT9e#ceCF!q@}&QJqNd;C?_e+riu#eZwZ4ExTQN_gmeyDP=07tP1g` zj+L6S{@EzUsbGw8ly-YA%O&B9c=F@Qa7yS>KxA?ZK<-O!lX&pJAzhZLP)#a5363ib)5W(7EtXe%nf!cu{_KG#!>cg znq~q{Q*7Vbrp6r^uo^(MdEUa+u>;4m+waf>xmJmox$lNVRJ`_c5HYMf0h%0iouME4 zOww5Uh4Pn<1+&d z+C6>SbHQMziMd19)unwdoy9ke5H z%RlQ`B8UqXl8OrZp8E{X8D<5Oz1%xKD;QNs$)G3d8R1kv)ikO@{oQmYP5D_P8|po% zQryY1qLu6S5@&s(L6*~`6WT)GDrBg9lP5dQS7?29|FR73Dy0_;_mjsVB`TBvaUnV1 z*!uL6w@<1h|32JjlI&+ZQwsUkl4w(AOOe-7<%h)VkUH0+%Jk?UWVL0CG~9eb$P*l^ zt0&55X_lP)l}wQJJdn?3ct8}!GrpcxSo~}#!Zidej*?L`z8CQ10A!Eoe}h9G1Uf{7=8#%!fntq|BPOZXW>lOZqx+-UZq?Ho^%o93I5$Dx`2O0VH4yx zeH$hT-7J&d-zPs5`-Fw=*=<}i=CgiwTs#*YG)v2VP_UB^9-nxV@1Q>#7R`KqT)xKl zIY}!%hX7STs=o(MlHna+h|3Z_C^iq0%_`^;LoT1gbQ$OqeaILm7)D;BCmd-!2i6A^ zV({eGKc1wPAgE6Q1gj{@Dt!bRsfUh-ZDCfx1)zh@Qumf}H`t$s-O}sK&zR8?Px=m= zt)L3^Q~8QeYIJ4ni5i^yC`ngV?h7Ubd@e%`@dgCTlaD3JD<&JJ@fIJIc^&Qj8c2u*4Ro&COZ-6)L1EdChy?K}V zhN+2ZddfxDzx0&c!|&M382s(d3U(Bw`bbfkg_(cJIr@N|)n7gaeDFcw-$etETzh&I zTEM3T8S*Iz&4F;tRhY1>Jzvp$q+?lmJs|?CpNvTHVTa`t7y_e)`^zEW56%@1>Nou+ zpG=Bb(JsgCUUO4l@}Yr``RsEZMZffzAV&mE0jU_t3w6hz)38B4z`TU zf?IH2wSbYbi!c!5h~|!EZ0_H`HSd1sn(n2F`#4CImgr+N++hcBZD2tUmveAQzc$0I zBSdEB$Rj<9fgVM~=YyxxwNcFTPGRO7F)dvk8x2!3>UE z1C5dQn^TwM+#W}HW|0Md=|7*jBBg^*m) z%_wc476hvJ{MwBbdWrT35Zyw|`Rq|!4JDQ@2hs{{q&sX5Rja6Q-kSPa}g&p={hz_Wc*(7BK6 zKJsK+!%{3wy^T7sWkNG8yYK*q8baK<_xvPBu!GKQ+N+0LuKph6_U6y&s0D{ywq?Kf zHSG2q>)d#m+5B#qF!jo|k^=gGUBMvrZ8Cy5DvNph&(I~r0DS9uP*S&Rr`RstFb*-; zS~ZkE{7SbT6Yu%nW5DS#QYm4t@`~R>ZiF4BRV``@(I{e`-P=v|_Eu=kl?~X<du* ztu$QYf0%g7;X13D?pFsZAvKJ+_;7%hQGafEk!-K3nzhjM>{y{}qwK~lrkFs1ULpBS zK~mzIh}1)$kWv8Fn((g`;a_S09f4}^y&cN6q7PQ@r30RAYMUZw4V#WlMHDt(gHTs$ z*)H?Ww7AWVbQcCCH{6@~SMB!f^yi-9gIZ^art%t}rO$RshuL^RvV7aBJ-t}#Y_Av4 zwkJ+P(9VM+n*&{0QWnj9hq*6H9d-A^4_Iv$*~-SiAx*z128C#~KFpE~-nWgV+4?WT zviI!fJNuGi#K@l>K+KeklFSK6wypqLQ3Xu7@TJnmoFk`yyvZx6!9t6DhP4QI+DZUg+Nzxoh zk3wpZ(h7=2k}aegQf`7`ibp;Yv6?Op%@LWT!7juRAJsiN{8T zuLrIhsS3GcbM(1Fp9NifB%B~&_2uP})QGM;JK_1KI$YFw1x?9egF4<2&VA7TkP7z86>tmn8oZ2MSl0wnk-98(8k?w8FdPKFFpOUM!}*t#-s6*SfSRd(Qfm^a-g z=mZFP%z#k@*;=JwEzKdGB~biBLlo$0bnJ(fg$?)TM*$HLP6adJf-VMRNjXs6&(f}2 zq+Pd*<-wQX)nSMJzi{o_Z%Dfd%E$$8dgb0n{I>Y)gp^58kf$Mu8*}tP?ZEjuN^T3| zQ}t!^c8gyrqWYvo@0lo_R5;?j=z~JGVX%h4HgpgetP$aVB3O}+w*{CaE1a*yDBpdTo`>PSterg zJ*E3X+K2`m>Q3dL+Y}8;T7wk}g>n!-=R~REW!ROYuw2|wE`Bh854sWyJ)OIr*Sbs@ zqyl;i1$0olFQk!Z*y`cJmMd6m9ofFs8fIO^jFq%VZv~~JO>qdC@)t<3itc`|1MdtR z8HMd_bv0ChvgX6pQACXzq(*Z98|W?cUpG{C426gb)%!Q=uYt&tLhI%Gx3*;t6n~yZ z?E8l1r>Q#*q=NBmwZ~Iw5mfC-HQR8k+GH8bGiyAxxqOidKDhtD@9D98@GBIkzny!vC5+$C27N~AR25RlB)UpSibQPI0;gOR=Owm9pCcQ%mXC%U;Q}RGw zN^-aG*(p7VT`*Fyh|GVU)G|#djfpieZVS5!1}&6^&cgZ^=w;!XkgLn;@=C%m%zTC+Yc!_aL%GBln@*th_`stHt>+Y?>C1oBl?BcziFqh0&Y8eoq-u z@u@NS!3Rqwz9;4&W4TC^nms}*R@OtXOYT*tITXpzJi%n;kS6i{i)_%p^KgP~ z6jo};GJFGuWmT?rJIo4^8wn(0HxA5ms6d`l3lDhaTQKk~I{6K#a%-0AoAp=gSh?TG*2bHSy3Kr4u6d;f#Z+cGNDzj3q;)C=-9Fz+>6Fu2U#tU|*0}UwqA_nqB z3{_vmfdU;LP&5#9d=@aUmmEgg{Yw!U)n!d0bB8C!5rr12C}6QYqa=dZ^(b~D ziNz==&6O3>nC{5QAs!W9k)@+nCQ6T}U7JMd+RO>?BVZtQ6d`xezcI`*`y-;pdGM@7 zSeZVfqLwB)hx9y1`mg9~W_>?(r0^$PzK7}2QEw+nh5gx}_Gcb&*^M+33hHQ)i?uSn zfU5!J-QoaSzJL%XF9UAQhRWvbfGD|g7?iD9bzJVr2HcY+GJa=m)ViBq0+VB~@+?~a zdmv!t=EAE|9;PiAjHUkxd-BwNZ z!Ke{3TBDkYJ}5Ihd%CFt1YeFdXsmrl0RE{Z)-XoS)z7l_$1*xJ)ErxqpX>K&M7b+g z{z--6OJQ=tjxI1t%(gMbG&KOCv!AgR88kv@(1^i7BZirbI$Y#HjBhS~LyyDQ+!=8f zG&wer3Zvs7su6c=#J#KZ^zJ!Ly_M5&#L$tknN>sQyQE4ZDbZnV_aN1fnOZB|9b>v( zQOH(zmpWl9y(P#_^6`=##nox#RcYi?!;FA$bim4?Y@`kf6(3X|IvV#ds4(shG7Tek z#5Lp|&HE|-D>^n%w_$u8l^FM?9nOKdG2kYNy8MmGvj8Y*?S@H1CW6cim<7==@l%M? zq(_b_pIZ%?(S{t!*Em+ajU%}FMs)TaDz&p}?BZ)KeL3>u^M54UaP~ZS_V{M35M3yIH1l4AHYaXfNFbB zXa3NwJnvUY)M{bHnrGEAX_1X0H(H`wNz^ST9!YyU0rDC?E|;aBU~>6bUl-Rt6%ehM zG8TJWI+}m<+MkE85W6ZunjF9xJktv}6~=SmP#-M6Wsi)mWjU#Z8ny7uTHx7}g2Dam zxZoH;*tsL>zT+5q$feU<4);4kGUkVbbE`a7wdzA*MG0s^49+iXgt!737tl=Gd3oEF zob4)PbM#5cQZUd5Jdfi(w~Q=Tk`MCA)H11dZp(|>GGV;+q$94UrXM8$0{W*0X&ur! zu2~YX8lZc|~;|<$FbTQ!YaUGO2fq+dI(lm9wDlSS6Tz#-3 zu=>Fu+Z*?V+pid2B08y{!Lp4<@`bcuE7F7ocMg$>;wmS{d z#x~%DM^6(UK284EM>oiF@X0jbXv2~>$zYp6YX$92g6!yjdTi&=DoCpk(x^)qax6~} z{xabL=ZKF^k3j=3}c@N~R5O)y6IV{S+)sD@gxg6@@Hu-=`&r)!mU(mBOcQ^vDhCAY6_4Nwy zU%2q!7hp&25tRQ&dpj^g=gJw}fsv1Fcu*g%jw4JiNHePNnW8agt-=F@T2o>&xlKb0 zo@ELB0O~c&x?QfaS8}flxNal1&}x812nsQnV6)6KTc>V{jJ3-HhB<~Y-2{16+U=- z(}o(;NRj7iXap7)VbH-uD7Q^;9*88e4z|NM97Ln2qS4E;F}di)g_PzZi8~5NiHbWY zr=<5!W4^%Zr7zel5LXfCSbU=kR6*rsyJeA%R&aqVrx(>1P}j=~NOZowRIlzVG_!*- zMF0$l3y{8#uL8{lIW-TiYl^EX)JT|-G32jH%9}$DrTRU`G)@md@%b6Ck?j9p77UK#b*2U!#>P0{;=I zKMbF|L0C>e+~T^?5>D53^WC60jEJ@x9F8rl0QMqpV8Vqkcd_|)IEdoRIQ(kAfHxqc z;?|?6tphtKnFGJKL(FvBvq=x=&JwmQS^ze3#)RypC z{ec=)wmQ_62YuuObK&Y6SlJH8X^iNGoQL!SC%g(M6QdOvT(2{sg_Mqs!Alfj@$SM2 zJe-U#KP(S;k1x5k?X2X~=G9olygkUd=P*uAOtORQrY~^K<7u9x< z@nyV7OFGeGjF>Q}J@Q?_iE#UXsa3YfBk=>~LmW3q#vh>96js+#z^f~?H8-nD_-9vr zjEfamxO)|Vtt4-XEC+v~yT};q;k^QX+P0U%V8n!kOh6uHnO~legN@aSNtfh z{L45U>bcUxDQjr#>m;9(E@1JRbcSiBOq9vaA-83j6mawZP6DPYlial()Chh zsS^>d>y&u>z%c1<+YtL9V6SC+DA>!Nd&n8~#)m5c>`nO+4nKjT5wEl-W~$?PPIGj0f{%t2#ix?=RrvYsU$J1E^5N!BU1=3*q$?y(Gk z+*$F?ayzflz_!_!E0M8qa1O`j?nrz-X4yasQdri586;zbVW{kAlVsaEe1@X{z z>#p5=UyNl=rxUz@7fE!s4hJ1v8;)47@A0L+<)nm@)LH=&j6ul`JD9eUbP`*~a?rCJ zPzH!i=YVh!FxwIa4Yv*5wYP!!8nRptl!74HY5-1O za4T)-SlYlPv7zT-TPEgES-O__+A&qGEDKI~u&g#XeGN@2$FAE#vz7u9wjG<*%VzB) z>5Y=~of;-RP+LV`$S=Qt67C)EUo^eCeX+v<%&rb#c06I(U+RQqzu=|n@R5#_VfQf5v{D2xAX!$#TH^ON=hgwLbXngu`qf&)N3V_tmr+d4NaVLTVn3 zE3nmeUx~A#(#OHOuY%|fdJlJq0;28V9mE9FH3gik?xREm$+|o8Gv7;p)G$i&gf&lv za57hUC739~{5h@yQzsX@k_?iIA2q{N`HHOnyu*~0xG%5j72%;v(ea)EiFb9Gp=Qps z^vZqQzBUgmzM>mwU$yzPrZm$9v=SmyL=VIs@y8rA`%meXAmB#UOiNpMT^^ZctX}-U zKHq6@%AiIw z5cd1Ru-{iRUbym6_F}|&lo2?S98U29>lqbU5;dnr?87+mIE+Ozy_$)O3)(mCf!8!r zib2+9o>(msb)UKEH9UZh>O6$fF-{ zLL$)*Z()cnu*XlD!vT)d^}znv)Q{q}M$D9QHsLl8q>hVvMlDBT!Aw7R8YIN@mdiFXA&bys9LhS<7db)J-V0;g^W188|K>426| z7O1z54HWsEF0U!K*We|^C*?j(N(0U96Se4%F7&a_O;dTw9lBB@y^Qhn$r2Wx zU?~$q&EN1GxDA71%b=$al6QG-{){&sMQWrIV#(q5EO}8_?gySkgPKHe8Asi~ab&CM zR?roH#Mn^=jYOvgEDBMG%#WV=v9bvs&pgC8N;0c*DQjr1S9nBcjSlNfpPI{s5tDb* zUCN?*!di&Bi_yhC*Mm&mHJoOsX%M%>c(DRm6hcr9z5WD6jm+CQ#M`u-v-5M2fKMX*;+ESgrIp%cedev*dx7)jnMboa-*fb4J+@x~cu zW3EOSah%ZSHtF?4iI_*UbR`z8GziP>vVeFp8Q{M~JVXS3sQ5P|E_2v*TJQMUW(0?= z-1(3HWX{InW{8V7ICLH4>$oAlvIxaV+ZC}Cox3ZFR>|E^AT4~nvi%iykQmN&?^H59#TTNG~=+_kY8G=_QcNJ1d{VJ#1>$i$JA4CXW8pTX9GN*Nz zeE!;w)l+|kX#1Cc6~4&8Hee$+did1=h_hR6E=*5@(=Y8aen{hYTDhx1v3R3M+3qh0 zs7(o;6X2MLlN=)J5Nib?dU;q4kfSvljPxh>92*a>-){`PKQd~r6(&sJuiX~P71yj zy~-%+lR7m|z7leaGwNMXyQ(7d=F_bh8UDQ9@54f0xr2G@5!{dnDGk9|+?S{pnQ%EG zUc$7&2juDLcy~i)0CLKmD^-g_tshWDX4lG%mA25j3e}5ffnX4L!ho@VqV&C*ws7m) zwVQQjPKb%I!h$`f@Du;_Tmd9Wm->Enmzr5%LIO^yT-Ie7{;H4Q+Pf~Vf2wMgcc2b& zdF-U9TLN1V|8)a#2~;62>!xGzHyVU><9O||(OlP0NAD*^ecHmOtqugY)N88&`O6y* z&sHcb7NWt1m~Aq_J+;O}XU1BApoioW1Q}+!kKgDnD~8yIDlYNQwg9g+TzWZE;50}O z#||D|5%uU7SWfsPQm$w01Pg`f6a(d;n%dXsD;iLUHU1KF7X?@ft-_8)Fl4zMQw0F; z$DJtMLZPCKv}zJPn=KNhTe`)qjA*jM>F*Vw`0(ECO0s?hyG4LdZzT|X^UeEM18XgW zT8Y5M)fN|OBwc$!L*|E+?6Ry0pLFi(91B5@7pBT#=~55J>2%gOq3V6SakY zmpyW}b-vf(iMyhrI3KLe;ulb%9fmss`tq*u6LgsxAz9o4OQpo;t*QpV?v<)i3J(_HXzQKR#c zndW|1h`S(GD!6k6kQX3f{Zd~H2>#-x1#Saz+q7`Vj-ka9=-KA+-Z&z+81kQ-faRs=(g|g{W(I(KFw_yLeta|3155=VWYRlM>|wS3DUs+Z-z(hi z7DZeHu~K${(v`7VV63{OHdYIb73BL7DDKK4pHWgcsBoJaJ*dk$du1N|1gzB=kx*$3 zC+SZ!*eXl(&Bp?-RVwh}15ZGfTLLHL(o7Rmqu*dEs1|O}Wn5diZIsdbcerdGiHpY; zDi5(E(*Qs9$3*onUA)Z9LD?t+hf4)a`vFv%>R~)AeaHg}J@&vF4vhx~Q}SJK$OG|4 ze9*725<&`>N()tv+KJdJ2+mhmWmfVl_ff@==kg92OaMT4bu{MGjX( z33^Y~S^$J3fZ1wWX>E}gc^z@rRPhZN9Faazq9e?@k_K^#z37hhSco2+IfQ7d5W&_H zq)h09LJ>SJi0Xv`J}wvjlvkgv1egjyjJ}8LbxdK~iBj$LC~oZKRRfiU@wnYI;syvM zB|S*VvG6v>M-&vZ_SkqCjQ4L~89cUQT8|p;^(!UD-3dJDH6P$;ojY&T@Yd241MuXV zRSByt76}&P8sNJ100$F26scJ~s*D)Vvykp{EC5}ly>fv?$N}MK=`MI8f(J>2g&%E; zp1L06x{s4QK)wE%>mCn@4>*_&btJx!&sg}04?e5!rDN=HsZ3}OsM8FBD@F3=EMhVuUVN_7NK#*aSK-w@0U>1sr4WkIFF(ua7BC^&*GNA(U69<(W z|CkAv*4AU&)O?d3xWmYozkY?21h4zXj4%WA&EG+MiB6pWQoIhrD))rFbS;92olRfC zZdw*iTPSMwLV8&b;32X!drypJxvgxYUbY{^0i93N-t+0|yW5&&A2ITDOKGfriHqB9 zswyO;YD36u2|X6!XV3VhKP57n9(r=eWJoXiH_vB5?N$$iAp-7g_B!_5;F7Ed@ za*0Kk&qoNlc~vS9dfbC-rIOq+j918=_+>;pWGqlXKs=B~@JHai8ix?)`lT6*q<7V3 z6o?t_J%1+dK?+9t+!I9j+aqMJW71SQQO6IwKYnKYbp^y&j&2>T*{vdj$jN1#E@z!Y zGu$kZO^p7{HQX8q*NCa3dJ5S%af6}8+`M)Wjk&FBO9@y{=81DGzLGFXz+Od^ z3D&RE%n%>MmjKv={Ba2U2r-&L-M0c^8S%H=VF`e}iYUz^p(vm4`0M4nBxRG7vZ>=Q zz6paMfPJ`$pG2XrD}=T>yXl}ZG95QHjMY_n*ZT? zntwh9wbZ7IWw{Na>T=Eb{8?CVZbdA%8%C1`ny3!5JV!Dtx&}@OBSN?zJVMTG0V$JP zZi>P^fvk_rO}y~yOW$Cm$(#z83|_)Cgw2t@s(At?sD3KHcOMDj0?-<-H3*GkCTy`J z?bH@Q5z{o-EpnQoXysCS_u==xqvg-d6S@9*#9oESYT&L7| zi*6^Kl+zn~y)Lwb##{>0y78dFzN)w`EhSd!0AFOPm-vg?(?zPbHK6PQuU-*?f);T5 zXQ1FaE9EySY`O0w5o5GM%==PThk0o z4>n?f@E5W&fX%(%Wp}u}@0tho?;-p5;El!uwcUe^oQD*YCvQQYxHEVv-ah&LZwGpD z9c8Qj>^lC!Am@^!?=?W_!IRa(6Scx~oo+-AdB<)Up*OI!eJwpGZND_vPWpb%A-VWb z^#Rd&1TT%+q`QOOVxL~zYdFI2^7Vx9%@C}#Ah4++?XPr+xZG4u1-j1#q@yLGho7o1 z@*xjMIy@ZdF5Sqqa?4hxS1z0QLbFsDvf;y3xFgtDoIv_}s9SNM-X6{*+9V zLuJHmy>L(3hm~Y9E0YT^%~z;DvE$kt*JFp8^F{a~N$&b}gXMq83)TNRD}As` z2YE9;cX=+v&J0(UM>k()kz-^O(z!0JuCEv!j((c9()Jdh;>F9FKNgr?-wKfJ6Uuxo zf#9y*X5{vX>zfa~^DY)}ggE%8Msr&~Fr%=5+|h(HV5WM6 zNOkbHAf&zOV2~xC;79`p;Qj>(T^Y!mnY-c|`#|8r9u5SDO~o$COj=sPP)x+557m~s z{z*$Sq!64~NG0l1E2BUx2$s1F>Ufpl;4CU0x5%ZOdNmm#2Qel$!0~ekCH86Lq_jJr zQbY;ZN)-4d0ET7=3JxN(%vhyeq+##Ks`Zu*l0Aw)1Si)gLesM}9P-V}K#egfq9G21 zgNV4w@P#5QMNkCf?O57|CU;7(36duFMvePywzO9tjwn3(~!JsHqVZ*&V8FMi?$X=@M$ zWaLSZheLq`v$MTF2ii*f7t*GcO>jHN1U8-LddN*AIy%fEU7-*SJUR=oYMXx;jh%vEg%DW4pFCj)OK`!J4?dUy!CDc$o|-FpCfanu z1YeeaJo3RUZ=ziRiYOpunzz3U#W{U^)6vIVofBEZ zDt*wBIsoH5{dUozO7e`jyL49$tC4Ptua343pEE9Wh{Nc9j56w6OwP~sU?sV5>mBsC zD@ck$nu+MVimRunhFx!%(dY!I^Z1reaCx0H?l#Jm*0GN0w!(Z6CiPY>he5FA$I`dGrkx_d)Ia>v2=7P;eyKNYqWdinS~ zOdPZk(@IMv+4aqhP~mpP4M4|EVF`WjW2@mXvSZ;u!N56|XV=(>>sQgm(uoULCxRL% z9W;)}yJ6td$c-AgS;N8=z%`Wyb$#(2BkE=3vE)= zzaoWP*L{u6fd|5BWYV2;Q3f-!b0&7uEp7=xo_vg|q4}3vg>xs*nN41N3;`wb(xc0) z)e=1m*2cZrs5jeAJW^LQ$vS6wlIGb%ZT0U!3G`C*a+;6YB1V6YB2C2dGcXoY38_16o!$ zGUmm#7*9?=TiW{Eu-TvEUhj>H!z>=Jlh~jscu#XV3)@}ZDR+Bz44l0;pI6sAq>k=# z(5;cpGu!~l(NCM&d-ttZUl#ly)_X^W*pAX972$E`ebF73{CnID7b}Rm6~_LR9aaui(-U~-un{%d|w{}3rNhRBoB)zbU6s2 zi3y525yyBp9mH{m#+cA>=_QIl=95Gst2~}P*7xX|lqIqnibd4miEq%*r2_2it(76C z?_C{l-7Bu)6J=LocX$h1q=f742Qe`JK7e2C4lCsSSlX3Za74GW7;t$K;fGN=olk00 zBMV75%qj)JedXoj_1tN0n#DcIV=wN3b^XFY8w(hGy}V^oO6QLDSa)jsZ~-a5d1fY;j24IC z(u00S*0jKyR>n$I$3bdIW8j6F<#A}g_GD63 zPf)q;Cv|aA6-fO%5LHmnHE_#6cb|U8nr=`Ri`ETA>-Hl6ZZH;rxW(w+O@gLngJ8Im zFo8uNUu5Fvm`>ui+dIRZhlgL6Iw8xj8r})qef(KT=2)8gpNRN+{ekxlx?x1(2(*=G zMQIP%``mhNJhXe-iIxR+212rU29(1rfFf+qhlPWpBY@dY~S9GX05kd<>%apoYJVa!<*P)bMJ?0|w(2AN$QYyiUvkRlMZ#`mS%5 z@$mR1Pl_Q|MIg!BA#{fPQU}Jv`=AR5Zy3!t9_(j&{=$DVbT}!Ju`_feHKt&UG^M`i z!Ex9RMfHX*WCQEQW8y%F^ze5?Oc)agl%*vrGG&Gq4B*`}Y@AQxK0rY86ho9t6UFPO zv4TsXm^;(JB$+6rd4kyC>Dr4Nw1Mtow6i!(Eq7j=@t?$nTh_uofJquwrM#pYW)50K z?sW$Rke-^UrH%N6=U5Y;taB4&>{VE^AppzKF~}_=P;Ng zq>+V99i9@Z&p!}|hlB(LFK8&h5h1cf%zb64(9+fU>demm5Ae6z#iF*SZlRvZJ>^Lq zEQ?_{HIP>x988>dmTICGp$JUJ5-FVr-yHqZjSAi}L1ti&w4jZ834tI*gkgZ#`VUsQ0_ovsZg2?^xA*{5lLDF3zin$VhPd$sLm*` zcBYXKV7}R zu}RNGoLtk~y;ME3zbGuLVK?#wZj5QtGY{t61TS<6Kv8;=n&Z$+`Hn&)KgBXL!LtMc zAU?qKJkT?X{w#$5CkDy$a5d1p#F|shx|z0w5g>qQTCNT zA$Qo5*w+QB;Hi9Px=>~52kvnv@oa%3s+ICV>*NW!4=Z)=;WuYtGc6n~(?hL(CGE-d zP}5mP^i7Y-vaK4U*3Sp7pz@Mx0LW{q(^F0QCr3GvP{2>=JWje5E*jU;IX|`_Rb~M0-;kLJb7N&5ch{LYSi|0mO{fcXcm^l_ zd^s1kYo`!#b<5v!XIzW^Ry_L2e4v|svvhf#ME*`PE;8a9kGtiKMn^j7dy7#zH|{Nc z#BbcY;-j5ANKBIBdNDUiKL}(>&-`yj? zU(m_@0gSk=EN~IjlpUByx#-ii*8F_OF9o7P2U5ZPA4`f6zrLIaY(DfV8O?oq&Z*M5 z7Bdx=!YOS%SUU62DPFvO3ohISzWo#sx9HJ^Z+kHKb?XJv>1@#gq3Dn0-V%RqF1wnf z+#-YGCe!9J_i5d0pK##|ZtP2IrtaS9JE#F2_VWLwi(UR-2BwVWSo4=zwWw(kFikmF z^`NFAsSC%Fc;rx1qf2QXsJvK!xlt)0c)sY1nW_k)*J|qvx>y$;U#&az73$?-!8R1+ zs@8?j0Fl7^gsn@rjO(K^)ZtlrzZTqMQ0Ai)!}au)m12I1POPZI<{lD5Gs{NOA2hN+CHgLi?YfH#TxA93oG`-ApL+<(c zmv}mvmZQ}21@)kC87&<4bi}G@+J6KVa7^U`2zcg z@8>Zk|4(uKoJ-KiByVw!89;&F2^8k=B|H~iz|0DHq~pjdu_3K)VtCZ)#zLnXOUw30 zYEZU1IAwy&maueJJ=QWsg#+*isQGz<`hP)@W5s{#mZ|sJP~YXNLMLccT=nf0jP3U3 zT4~CTL)q=uPHvd;qPF9XX_2wRu{NQH7utx+n1qFUo4cy`P$(QSRGX&q6R>WI#){JTAzAan%qpML(#}FFKTtJWCNJ+k$_R9a{08R3>|#X8Nk= zvN$V<%)6a3hX-;>gp~vJPaK7y{`N2(eHxK4)fE=BMk>HLDQac3i6V;IeCrV9<=~29;5S}nyvxiMs zom!1|T8;NXK*Rz91oaXx5|CDa)(R*&bvq0DE7r{no5!|7Q6YdKl!T@mI+ zC!kpNQS+%xEM;o$Ai1m2j!6TPK53)<`7tRb`&l#XWS!v$nvq>? zh20O{L_*zpNLkZoJz@F8biurt9>B&qhU=XW_A{rKhD8G$hKD$TWOGg!cPPV}k_g%( z^~}mpoM2XIIM{$#ZBo+)!RibXOZL3}1%`%<5mlznbq>c8dhBzd!1Q`f+gQHJG820k0FJ=L@(JR?ft8CjZ1`B|4smq-DTDH>9A5zg+Q+J?XmR&Qr%%9` zcLQ;M{(f)_k}NggeWGIVtw-Uh^lh!r4+XZy_-*qewIw`hEiVcs$WkDX5iZbiN{L#e zLm)tD+1OItBW529ShZjXG%OYYzSn!AQ46B*?9ZckPRr_GQU^47TM8O&%ml7=s%CZt zJUP7t50p_E3)s&Eq#2peA9>9F`3*N@TmHGlYfBraOxpU!wCLiyMUQR^Yh3_}OWFNz zLguax$wOfqrif2k zK4twK-q-5+v~}Yp1|BFo$z*nD(P;AHaXxf#8>v)#GO5&y)6>x4+FMPQ265-`<@$QBO*L zE~27xqt;wx=(33!(?ugLpl$`A@ce>@zJSSN?@%8=0-`=8$M(YIb3vIh(BM@*Ll-lQ zRNIiYvmBC}bD3#7Eo)0q`+#ac!hXps@5UWrY=h;kZ7dLy+HG;_30pLkd;MHWjCDt1 zBd-BCqBNTmnH8#WPIWufzIzY8X#_(X&2Qm;Mchh)+VT9L#i<@|oK}qlC;aE?3*D?7hrPk41r}#lV|xBBmve(!vT} zuA%FQJCN|S;wTYt|F({+WoV3X3Ap((k9^NS_zR33=>0p~a+_nO zsW1FF<^d%i`R9g&>ES!F7rJyrnBQUhTc|S^mY*c+@d0!D(U3eoNFE;zOW8w7*`xc= zEqV>`Q3m(XK?3H`r5+P78@R_|Fn5`G@MD6QyUaW~CKu9h?R1xRNp3Dv4WbV0JeYfl zZaEK`YooBISbapoE?U+&=O>{gA6%L4L+$dVTaT<)Ox0D!8~hRu#3os)3eB>|KpTTc z+?kdXN++frSQLg=%&ZFHFx19Gj07`bz}{C|EZZs*&`N~t_G(69N17>|9VAm=>>*{7vr=UB#c zSvpJEPRsc2SC1qS``)PHnZ!;S^vQVoUIXMY+$+t4w(TpWla3556>z?323U&k3-6;9 z_S$p(e4xKOIOfBJjplEZitPN}?Ldjn_UOlz>md$W8ZO&V{GW}x7*X)T8P{!mer}YA zy$;F3Ytez9bEsI(Uj`{uY(G#jA*xniG`DoYoHoc-+z+zTKoM{@8qsNMYF8o)rhH4Q zX_*(fH9PeculCt<=$D}~9MYL&DfHEr-??sC^SL89DCRWyIqBxHRR`1P4z=pEjLyg` zzRM{Qq7sUBfzxS6<(7IC(F%Y%8;=+|8&6Pf5MayrIP_q+ZBx2A_bO`4Ltp<4<)I;! z=ONt2i5Slb9W3saPk@y1V7Mnm{UDFq)K z=J>z`=;1;`s^5w_eL-NgvWVnLNd*%)YvjjABp~Wv?(=Xv5JymmPyUA14ZJ=8(i<4^ zxJlnnm8e-yU3)e0VH{?ePKtnK)F{j_nITuYq4C9>UFka9-KAfff|jIW;`Gs z{xRGauG>k)9Y<)GC{W^&qwfWzBExyUD4_y@G6&_!adXM(Z;>hIA*1&3IqVYgRJI9E znFt|AA7r9X){$6L^i$>lPt;5^SW?bJnI(P|8!~tZn=2IK6YDD!?n9bnr6W=RKS030 zOcNprDdePg?Sc9ET!5Cw0*`Qt`Tn;#)DyY8^V^9Q|5Yz|f@9z>%iFQjMpE7gGJcge>qwGn09ofl0)+aP7(id zw60H#magUt5Fa!aTrE`hufF;Z6-%gs3E~T1{(iCD^}_eLUpkTUOJ+Y#u{pVCuXa8D z61ilFgk(A|IYVBz#z?c_^(TjqWozMenmn>x$&z*2f+!1n0+hKM=&Dt6Jq?gr+oQLI z+b;IGP~TfZuzLl>-J2@?o4AMSdwZf$n{zAM%dz)FbLru|OEH5!mKNzmQ(@Wcwk>&g z6CIKZILOMf(h4`C0~|j9I+VlGIys&yRL0S#O1)Dd8!j#cyp@9+sCiu5ff+_076y%M zS+Z#YLe-DXrxP@B&$0a?OI>QlBxi8DHfr>I)`$XlYWg2R%D-e4=k z`mB8ANnd#>*(uHJZYt9P8RR!SIa8=yDYA4QC?yOh z8cW%}J89jA?~L6!yHy)opDS@e(Eb5c6vYp{9XpY)G6PD&N{28^7qTv&bQEOyeMR2| zZR;Atd^kjEs0{WJJu7bY+_BcCu<&eS14F_#)0%t02FRboiZ(9r5%r@xhu&$o+%yHT}mme5DgFitJ0xFoWwn# zcyS?Y<4WypGE9X)e4pfJCl)GU#ZJT6?EPby2IN6VFdcSD=TDDcl%Bh9c&#gqnXYEt zcdl=Yk#Kv#g_nR}eOPlAV)aI_E5SC6h{XwHUTi#o>p;;eFcht+q{5Hm;cSXIlPy<~ zg?C0uE;93soM8^il$(-XMr(!)6tQ-heZoPQrCq+Vh1{GkYL7F=$RYVfWr)sr(cfcu z;fff!cFmVnW5npq_)het+EuPcrN)*)Z6Qr+2ehd7 z!yRq~SQB90@hw2RuIXKdTPAx$yOV zT6%=Mhp6s91#_;g3WFxsayPn~y9}K@G5spiS*K>5-wOU;VeSVcYnh1k?U&I2C!TqI z7fc>mU!=xQ0`g=3M%9`-S`Evn_st%IK{FoM{n#L-^D{ zSo>fZ5w*T7s3wX8w;_bZ@j>Xt-_}4_KmdV zCay!n7m7W6LVj+z^Na0^WfGu7jZWwthFW{k}Z;DMmYuALfRFrFcJ2q(q1v$xg|I` z2)kcD2x(Wa;Xc@a{Px&}?o{F}ySYr!_u!RFX!T`;%TK!kD4tvZB{i4$_6_#`n$GP* zR3~CmRM~!yQ&nf6tWs466{$Kz$)_H?lzkwBZann2Lc*0GP-!7B10$qp4-J1_Uj1`` z8_K?TCe=~(c+nt@{PnSrVD1MZG!DHC89^U7_tKq4g-eIxV`>J8)zD1nBlJ^rLNB3_ zFLM^rNlNe zmmI1xt`SCqyWv@gM7{+`Dc}vJ;0DewQH$_=ouCJ;7zGCbO%99ZTmeq9S-9RO6t4J& zR=^CB^I)5PhAen|96<}5`kkn1lNM@H1tO{ay4o7c_dW&y0PpdzHbU{F*8H%-8vQl- z38RjA4Ic6uy&X2ln4hMMVGkG>JI1K-kz+$UpAe&h8y;~tFfyPQ4wk*225SHL$Asrs z=dc`Tx$P3%l6yY^jLfxvLTEf~ zA@H^hq|HL^7y&5i$6~@5i9y}tfSXy@TMfF!7{!}J?=|GRAk>+>1tH{(h}edp1ce*1 zAV0@NlwETQk&}SFz2_hF=^b}}jpl`=Q@Uy~Xwr!%(qTKou;T|N8KC3ob-``VDS_6!b;~F z&uM3B;mje0_2QUjKbh zdhNT`z<2r*I8o|zX?v`yFk~XORHbNCz9-jrO|6fecn_lQWx(J`xN;$~3wA#}`?v<{cR&H?{-_6P`r|2!IgbHS7KxS&!vPO_Tq?7z&s+iQ>SAEg- zRJQM-@QBp05J(1!m!Rt=5&{t<;E4SrXzs+Efbs9XYrpQR_Tw*?k1o`oMYecD z+Exg|PCX4iG4rg1t|W(quQ3 ziMnp_8 zB?oPFixOATTlZ$&XOb+v6mh%%G*a6nOB;UB7h0t6Y3?+)i|HkV+27C|h zorhL+R}hzabzV!xYd5+^721~DPz!B?C+!m!$x2Ej!>1dpg^}rAHp*%^Ip%-he)osi zKWXJODfKi>%6g-q7YDJzC(wC4O=)3ze9%5sgj?;084^^y3pCVoK zs@(B%@3b@EA!w?-57E{KA6-szM>IVu9U;e;f6jaq2aqvAO2wnm%}=FU=6DvGbqsYj z_wt(|ySM@mARtR+vy#H&soubQJ??iI?DF?$Ux)JN$*_ z1GB!cd>NTimR5{pg(sHUP0F6tH~cMHkg@@lY&@vXfMn)=p5`s+<&OY=6*+6{a( zo`iGF0d{WZ7T1lId=gvtQ*FKa-i;C6KR|x`%!%M>88L9dCLq-ml+eOxkKOCYEX$i( z3pZ4un_3O=6tdesj@8eDwKf0H!kr7?LIXi~~s;-ERz-eUmdYXo&miZ-e<2gFF z&S2|YR?j+Q1)%p{ol20~X=PHG20ccMptGZB*1WrU0! z>Cp4d`KWuJ+nVWepqCXG=(8!fW1YgmRn1^&1R7G1MfiT6`$m~J2KKe)YaH20zOQUP zm~hSqa`;^kf0jfusDL!AK#QPAo9Gd`pM$uJ>kvQ4pc&ZK$AFF#@zXd}^{n`UjOR#^ zeWI7IZ#i%GO?T&3FntH7I?8pz3j7u5nxjtwXrd0S?il|05@%p#>bNr+3XIZ{QfGi*`aog zc^9&x78>zFGJ*WKxeSlOtq_>~^1xsqXMdnijIbIZRe8Yt44U~Uhr*nPfBDqEd`TVp z+-P|kZmNz_+Hz>X4c$l%p?GG2XI2FO-1uy0faD4ZvKQ*BQbC!K_l{jMcXcn?fsO?g zh)c%c6VV(`45T^1Ypuevq@Dk$PMn2n>^&8Za@)fm{*9tmDi(Rctd=cSX|}hz+pz(oPVcL6+!SP?Q)EVyoTh~vDrI!F5b`?K1~bS*l#tKb&+UN_-dunaF?I%zc)`63g0=UIx_h2q zie9Gkyn=vu=KEZpQb5*w6>|s7*gPBl(E9uxpF?;8c40A>`J@JU=RDMtylULlTx4lj zFD)>*OLI(C0iN<6u{*$3^}C7ilHa+kOQ$g+qv(lghdV=py>l;+N!8L~gHJ@;T}PJ5 za@#wlNE0%;v`PmDJYd#CLrUl@-sXY6vrSocMZ>}~e1UJWAy$qP)O;zkoo^-Ql_md|bAj67wMr*NbJi_GE)BUiz;xOlzQvLa%gUBKR^^ z_%b42SX+98P?yWciL@w%gLnT7Qytw!EbV{+zo7;^8XFe*Qb(#pJ=WoH z+*5ztTR!zt%q$;Sm-SBep5N>T#f74cPkt3RyJjx;)%=& zSQ|AYlT1(@F{=9!Bzmp3U>j}0PK50=q>~2sCg1MBY6zrS#4mQ7IKHDBfclQ^uzeKT zjqR9Cv}5a3f5g6H+q4u*+1)B_qgLtRlY_TamPVP~;_MS$QcWuC+`hKv zOF_zs5Xn6xM;JD>I?z49VS6@v&yZ(GU)2|o8ScFn55rrx?Nw1nFS=SEP^z*FD}z-% z6NF?5DZ;eS`ftQx=Or-Qf^(X8hh@+-?+Wq{_%jDXTFDdw&D`{|FV0>M+bPY4xLa_3 z4Kr;Frs8dqpWV5l!prW(G})66XHX}hBgc4&FdFbWc_2cicvfyy%DTZ!NS_L!qeDqh zvUGbqd8Z|(@a}l70T5q~*G}^AwFT?k@Cf^?X;R?u0E!=#Jppv4TsSKyTR8661?}wp zqf>y$f)s2toMuop>l>_Kb^iras9kUK)0 z=?o8=dyhg;D|85vg5i5W0Kcz*0fs9P{dl;L5pDOU(+_3xKPo$O{fLXl?KRZ90CsM6 zp;bB#eR>@n!p!S%k}vu2WaFrJIp_TIzkkJ;j*GT7@wWVc~`z- z5K72&FN084PB$luLNim;BGj%ip#Yp-sn9c(lMPpj)mMe7RfPBTjm~mTtXUl^0#=5 z^faW0gRaSbEo<=l-+;LPpr#SrlR+Cx-^x0!Ocr%d4e2hqZm&}}GgVx`S;1LFY8NaZ zaXVwJX2ne}&DR2Y*NK%3XpYGasukfBZ!eHlBLov@+N||yGp`I0Rgg?&<}b8p6ap!A z5j=d-8ch@{(K0@ViTUR-&v+yxnvH4q8ce$<)1(S5xn6LR=A~|Bm6!G0dXu9RUWJ@Q zF3fe6p&BAOVO=*Yw-o|xr#ua}QtP_+4B2}`SR~s*U{xtkhdp_((2InxRw*+&Jq{36 z3wgOt6eL{_Aa_b2+NvtaBS<->GWRx;yh0eeP9<{MV$MG4S4qhI3$*lN8&{1JGvuV3 zMI&fk-6lSl55VbH^?cst-22r3jg6z?Z(6qs17yc*y~f^doR?}7L$XzRK<)lg+BQ$s zaA#O#0KLP}1m}&szj0zJ+7+ls*z+T}eKF)EXZdI|pK^~?Et2F9Hd6iD&-87tB$|3LmYRexvLVYt-`p{z> ze8kmQoRE^ul-|7{G1L2rtPTf{#56o=U!J1(NmMr}-GyPvCxkL3Mi695JW*z7YjZzn zOF8i?b%|mj)M4pC$tvVXvo8EO?Icievb__spZNV9CD9e2388FB`OyL^5o_9eQ28hAKQ;uGqa;%Ta_v!2SrbDBznaHb1C0J*DlIy=X zTAmFiBUsZT=3rAiF9S*LB^;p?z{)rVE?4l}jW zhB)txc&UMlB!ds=8uf&(fjy~#y{Ks*GTp@NGBO&`z{@&@-_|kBwn(LH;(HqqK5QV7 zp@G~@Ff{_HEu^+Wm8+147!48K_lUg;$)jXAyI}%>@Eb@>m>{JNh-oko%V0RqnTfd` zCTQw#L5!1u3nCVcSOD>@5swZ7zam}5d^zNP}c&2JK)rm z8Q&ZYXGX~SW(A$(IRH?e2S{C+FqyG%ZOtUVb*7FTKBE!3z|Uyl-R@9J)(db|A<)WY z1p^*Z1HMu7<2)D^n)Mk`#25qX4TaX9s8tWmYH97_O9}X7pjlhskTj|c9FH3~AUAm0XViJ0SvLw` zOs^B|J;XAa^#E=((1L>&7*7S)iNg@53aBs%_E83QQf7T216R0ZYh)sR<2MACLONB= zOOa!)5>dmY0s?@Vs(rY14O8{F>>87&!*OTgy^!w2M@KC@Jn78CKHUvnL@ny`ck%g| ziE}2Ai9!?gz{mXx0QB*T#n|0u5RY(MxVB;ad`Yxw_}|eOIt-P;PzOd!9Z!yyIxfS) zbh!sSu01~MrJ%5h+nQ!kf|LtcnWOMj-dyl<9Eo+qns zSNt>w*>nY##O0_)O&uK_?Uy-n;Cq?j+#g@cJRqE>FWTzhOt+p$xBU-i0Ww5rZckTr zfZ9IDh!haPL=W0Op$dl_t`3tBH5@lyAdcJ0*)1@K*>Qu%|N3x2zMQBZ_l6@B?%32j zOr@Y0LQ=LoHut`Q>HG9{PKKGIW0bs5eheQ4WQ140`)KN9(S`t|g94C_iCun3CAU_V z3CwbN^eW5cfl))gFhvcayD}jJ_03-p)EP_8`S%|}`2Nkyd8oJ;?A)yKrr?#~;?CYdnmTuJAr&nau47qPA(RuY zlc=U9oiyTU0h|&Xi`7-*nb8TUe8BQ2?5ZJRYJc)cADdeKi0PXON}|w{L*CG8gwyD# z-n%)Zv3Q6R$iv)G%=(Zf3vc}#->+L7=EFzr)Nuka8#U-nfQEkny%~{b>27&h*uk^w z0m@p47@Bi58S;2obf1Rvcyyo!%>DsXgpcQJ`38sOiaug&S*W>z!s^4N?8i=<5+v_+VIV3VV z`2wHu6?CPedgpoAFGKnyD^ny$z>6{IM|Ce8zV*UfgCY1-?qpwl-$u^<7bh+DInrx6 zi(jA81H9;DKIWv!9e(X3Kd&-@jGkJbj*@&%X1X^`8t*c!2H4VUuXLZp`I>4>5+A&pv2$uAl+OjARB3Kz=( zq8L`rqg;wL7+GwFSjl49NwQSV&O#TnB|!EMm@?ENt!~8Zz{=M*UcDx!$_`$EHl|-C zcjaxalTw!WP(-Tn;o5f-kwsgsy|{Sh$=5z!GERND;?VZt_|c8oOEkiPmMV&*EFf`) zg?kqXOVjNvfMXhOH7>J3>oe(kw@Izy227@q)Pq!z?dSUW;!oP>Z($!lI^gbH!D zx{7?DFnFJZsvruatcRuz^>$KKOjP;@ZqO)Y+w$g?~pKM@N} z&Nc+ViwP>ci+rBuXjhhraHT)%XXkz7aY}~#UNGz3G%h_p_t-(hOR6!2wzSRKI=+yZ zDkvh}ClYrN_u~+@ym^oiG1Pej(5416_aS0L51x%xA{I~b3;(iiy3l<`Au4E$jCXfFqh<8Y*r?-K;V4pgi>|2XV7<%ab>3-35Nl zJEZgX2?=tL9Cfddb7M}xqUnpEHema_@^KT7c6U)YByu~Xn(J`;^y2MPcM%!uBOTJ! zp9s@kd#)p7wfn%hW2c!Lv64=@TK#s*uEzk6>`uZiw)HMrY@g=pAh2p3_yrRo)!`J)%=26Mj|D;)MNh@o!PxgEV77d!kIY^ zr|KAaXA^udG@(ZBJ8h%7Nn}`wn`SR{nNGX~&Z7I{#d(%bzzVf{$4q%4!6jRVZiJ`d zpaV0I=lnBGg&8DbhJDW~hs?eUzz|*ZYG%beqhg+ig}Fcfs-%`Yk?T@vMyB#t$`|&I z3xYeS6InOIE#96JZ=NF3fZEM@&6LtL*M3;xb0&FEWOb%dpA>7mqhE)m3Q6(h0=n0M znFBNercjVje#YOE9opHwo3Y`p|CsT55RsrExU2k*a`KRJ^59lJP);7K`yQzK9^@f; zh@$KUdeFowyPO=dasJ33eBuY6!)oMK_;0=)F2b0H+jWIc-$1Nxyg9?Y+f7C|#NyI> zc(X*bnb2`LIAp~X0f5L{5sCXVAPK_lIM=lf#qJi3%*AiO%EtBH+}0JVx`%D5$bU0P zW1tCZw$MQ*6~*qJGoB;_c@tq#JJ-doht~=q7CHMR@$YxJrB7+MuV|rNNGoqKB z%RllSG81^;1Os#LQD(|VEc|ZE@AM&gp~{i@bCy2{SvUY9zs`tVkh)HPBup#()VEQj z-69iBg(@`6op+0nV(TOiizW+2d!HMk3!Qfo&$&8R0RAeoTP@}S;B{KyTV4-5T0E&T{_8cu-kIFDn{g{+Zh~C&Kjrxi^dt;d)8# z1jk$&nF($7dwj0V@Qc|ed|P+RP21v)G_gu7jLGd@ap#j42H5`G{kxt#{xP46Y>ydu zv<=uswDlB-vh}w)`PFXAFS*f5fZ zzqpl0*guy7JsRSozzF8QpHgJ}kE>xsN*+`YJ8h*B2Defk`1%JRE=y@WnwtOGH=Wmq z(3+TrX3Rij&?L`2r%NL;2*gS*<%yybK&L|!I3^ugCNPx{^6gC@ae(MZC^9I{yjFnO z)JRw`C>+o&{!mfoSUv9kwipzl`a5( zHC^T=9i|QzqBPnI0@^B~e8*ubGPB?%agSrQ4Zy6ur;ZlW3D-AA7fYK&fUcdol^B42 z2R4$WeLQtLMUsTH*zYoRr;hpC{FTgA>tl=xC>*&Tok3^I6b0AFX7=mRVFW?^SlD7( z!tqB7u(S?&Zi6c*yOrU+zgvxg0#>hJ5d$5@dPr`Z-?UVw@D<%NxFNKiK;@q3YuWkLXGH|pF zOoOSWHnq~6231MO0Qg%VcGg#%_`sp`*W5_)*HnN`%*qdo)uij9dbp0v$cY&#*!WYe z=$ZW;=&KOoGUe&Py_3X>RAez2rv1Xr+93>cVg_fv+K!ig3xO)rgZ05fD1%4SN-wTg zhL4gWTXx{lEUY#kl=|F(SXdt6B2fYG$ULMAcY1UKxr`lx+{V*G$)xnLI`Ti&(X_mb z1ZQjLzwCR}xOvo!n-h99dO`&3821fgUbvS6)|vHVdMLnW?hw%7L$`#aJRl-h!H@$3 zFH#bT44A}?BxvO%FD7}Yo=1ZI)_$zBE+y zA}YT2Om+823wb4~JV`pKU4{IokpC(&yb>WY0m&3V@(I~kQ0|@G*)UnUF$F97GTbX^ z;68RrFP#>Nz2)5L+Au=hA-Ja=(*F?{Lt{{;mV3hWrKw=>xHD_jj;PmUOL(O7Fn7%C z4s7pvAmI|99-5yRAo4y6hNn!AC%voHP>N4vi_Cmd;vs|O&0NAodm-k5eq*86&qZW` zsgCFIaJLc+Nsln7g&{TLOVCmx@geAe0}uL7fd}&d5|;*y6L+4t`cy!n83)G1>jDD6 ze2<92>+!29;O&hb;14=)Rt04lc_p!?`0y2FfdE&BgRvbn>;2U{v#o-0BaUt>berjF zETHyvX)Dsb2%E)Ws*nO;a;B^#E@E(2r8V3oic)eRs%-U2JB>NYU|A!eTcrZot(9z_ z8LTNsZjM^FWgi@dRa^yxhXnb(Xmv#3usoQ)x=tKAd5}d5KEuM9HXwPC_)sB-9+eha zY@r6y^mie_OLcr$gRhI$;Z3@jGzwHrgi%|ZpsJ99g|jYIp%5amt2HCKDY4mF!PQ}V zRg4u56?J;!ejz=*DXp|gy|h&n=B8EVHnBi#V0dg=Yi>$!o}hi_>9fTZZkH$)=Pe#9 z6zSX8n_6lbWnIG+SJm{%p^umCKu+EBAI?cRsF8{-NJpXGX;##A?0^ z>|0`aotH?!=_Ldz#kJ%tv0FIfLGD>O_GjP_+cxaVXco?5~9ehFXB}ut!{%V|`kHbK?QNOQ;@DRdpFqUqJOr6d;j} zc-l)ir5pQAT;loQF zeL9AM^W<-#N_@SuOyi|{zNqFf>qUQVcuULk=2p9>wcHMF<_(&NDlF@(<=$*7`3D!@ zxlKM7lyGDoo=AyhGcgz1|EW~rjFKFXm%HA7`ImXZ!5Vy@w_pp#y)G0OA=sihhKhc< zPff``nIMx-taB+C#aR@bJ4Xm+M453X#=YIrwY07mXnDjXtaGRv?ray9f|99xLBF8h z0%IFfX+=2j3sKXCzHMcO;eRYb>t|_-#o^_E*i^Hutum0YG9J$#>rxCVoH>+Mbj4qq z%?>!cwT(b{-?(?hU0s z5XxD30^QrF8rR2nO$5v+LGUnnj00(q3kn5TrQq-wkUsLd(G{U(R03Z1amxoYjdPd? zQ-QM%z_Pd~)r^|ic{VBonb&ib8HK`0mxW`k7P)0u@IYVseU^0-C-0f+_UwH*4Lwoo z#1=__g=@D$D%UUO!T*k~B2pnqM*llT9|^f)re%ihjSlpS4htFWx9lAo3Og)GO8Jt~ zJ=TNU@RWOjmtU{~s?v*p&4XRBE9yYWM z%g>WO@r@o8|4@}Ulh~+NC3nNtlPBpWx#_4Btapq4PJ!SMyqj>N-35+sVu4Y$(d83x z9&IbPU;1>n4}9Bb?w3p$CuyqiEmMbU!+b6A?FB_soYH4(>=DC{>_kf=QYK^0HaVE) zdhBRun;3W*UMSBCrbl*PkY(PR=3cM#t}A`43g@OST(UMuQ_;v zGw31lyX5{!XFTxi(@o4OHS{ADKWKa42b13Or%O{?3yO4+Mn+(bKFR}=s z_@Ht~weD9u_u64lcaBgXayPFu6W>0Ju$=AgBbU#FMtwN*WamV4J0{=Q`9yXnNp*m> zj>zlGPPQTSjcv=FcQ!lk#ok~8?Wes*cWC!$^2wEE=ZrRQ9JQ4@Duioi%LeS4eII!6 zM7{eu>!Nd^e*G+`4;1y>X<17Gs1@T*)S6H02 z`Mc`Uu{=fKK?|;oF;hR?CAK}Kj7qM?pDr=m;n6L4932o3rQPh<=q~@w#8nZ?U|POm zVR@$8S&c_H_DovN8cvyM$?~u~BAGcX=`hx|W54Z^^HBr&#h!-chn|b_P2H7(^cO1LlBHR|;$`})GUAqagTE?+EDFNk+dApeH_C$c*LEEqVvK6J^BDcH2r3_RFgQMf%E}>9 z1b(j3_Jsp<9_3-BqFN=gFh?|`uLw4snA$gTSh4sTr{qPu;oWeu?057w6|?J2fc*16 zm2C;pW(u!TZ&1P~T|ASV0phjf6Y`_A{#M_RU)Xi)bMJU1f8&&XzsYg&hHk(4Q0R>( zLJnXE0KI>6CXjbhDiU$8eM7eMzg1q1NsktbJ259<;wNA)F&t%1kXAm%wU!6q68&yE z0^DKK_}@A;OXWTDbmEo!{one(W8imslOHv!k^feAe}EdD&DGfIu@NTDD2 zIa=t^C^M*yGJD$C+{F>n7{eLfi70)$V+@$cM3Fscq|8Al@wB&IlKwZIvx|-SiNZQM zszZhnr%&uu!;YV+VU~8_&n)rESsp2mTABxJdq+6K^lsrt-fiV_wGwi(JT|6fRvEEi zk8(pc%9w{yJii_JpSf?DVhiQ6N_TZ62bX(sSZAP|b_xr#Zv=a9)MnlY8FfdF{PAR# zD6oY`h=Lk1^l8Mnr?C?3GEXgA*$RjSqCy{A| z^0|dDs7x|U6O8qA{vvYrglItGYV>ohCjK)O!6ED;~skWB-X14qYfmuc&4i`W4FoR&@ts3m$r1kC>hv7|3{F5 zfK=ShHKv3A-?G54&mZu@a+qZa7NAmpo&qu^WaPNev9rLI&hJPC?Xs?;qMv$HWR1x< zZcG7|)|^n(wE<@(y;4sx`85(64hMcfv z|A3?0Q73j)P09YSacHR}Z6>sxqB)Te0AyT10ON-Cjw@wPi6c+M%xWv>Uoj+P z;*3!7R48iLrZQ%3SyNQmWS3n-BSf%{huB&jwg6tL z0k%TJ*%ZmNyK%6}XEyaA9^F_~0x+L4gOZ@zft3z!pFgxUs(e|b zAp9kft)MbvHpv)A*R2C--6~?lLbNF%0ukEuCrZEdOx$QDZqLE?3iAve^uD0v1C|0N zAFmt-GY>mhbtd00Mhu!-0wvwO5lc1~gA1dKC7dl3wEYb4vrmNnj8*k>tILLOFb|l_ zj`~0q{b>U`@Jf=KZFy+L_pC)$mvgMbYL8j;{7*Ot+#BI6W8~9}aRPtY1Rk?o^Y z#+8ip%DW?SNic5?5UlVxd1;UtQLg?#bFHPClir0%khin1i^xus_p>rPjfbcmO9sKx z_JX`&V@yRQGKP(>zIl#>=zIAv+X<0L`wOJB`Bd6mN7US}H37s0}1lo~Qs@eAHQpX37% zsSmc$)F8yGRHC@%^rDpAMu;sF+Gb~ExA`}x|Kxq%iDDL(@|$YmR@#43d75sL!|0vJ z0Bkys@m7X*b9ql#Q*1HzS!h?)#nQFCR~^{<(u0%Cg1Glm4#Cxs0m2e<5Zz1iEkKGA z$XAM4Nh+yG9Dvn^g~h=tjRs1`LI>ag|0IqBuRQh_+zfE3K{N!u&kU0FTeY%LVXZW= z^;V`F6#yw`_NOM&il1&edIB|Ir3M593Q@w8F$$=DmG{0Run!jy_X>XhS^z~Y6eDrV zWl-WWw*CS1+9!A&TR=N9`WcUQGov3Y=8r;QDSlANh2``?7Rduep-T=XDGCoI?GI6b zI4GY)CYDhESluYZ_)`@uiVvJl4?K39N)!`q;T;q-Tj-5+(FMrF6C{D;A<(%?t51Qa zYESd~Q-hu~{wq31riR8R|9nB)I9SeLA-~uzkC@WXSF1#*#gDh^4*;Aw9i0~j0Lu?g zl-JyhO5@HU4YpJquOIaC%c|Cb((0OBo};CADrUsUBv1MyUGwg^hC+I&%F9r@XP~7C zl)@c~{e#O^IrTmXUnn#J>bU#F+&e;~L`k03vvC>_DZz;}Q@eIo-^$%@-=As3v;6Z& z3>ymtnlz9sob-vAJ;LPdIz84n(%nYntx(j*H~9F5dOZU~hqpmBaHCUXkD@JMzzy_7 zLqOg&4#v6LrdnkaRiqJu_-v-J*17OV>ByaQ@LIzXoE!M;8qHZqiSAIEagt}2sJ2kl zu))-o5%`gu=Rx=2Y5fqSmT6@IcDOzcus(JJD_}u@ZH(;4uq|joc@`|PE0q}w^K{-6 zHA^>b6;-62do_rs@*+&oZnH!!8<>vF)0ASh%(?>x!5s#aK{#nBOo2>NbjbS{8IxOw zX3@ZAQHSP)Yap5v-4iQMKfjxi%Du(4qiMKyG-P|Bv`oqj8?I=szWzX74wuFgZPQmW zVKYO}!jjv#ft+L^V9N@sQPd&^p1#)rqIIN(dsf2(f4|KH=9i$b^h@c4*CP@+H>lO@ zqUCV7@rQ4P!XLiL58uXyIwMb89DS|Ob5z?j+#BY%^pp*E^?4-sNG-pA(j@eT?5NHJ({oNGI1cZn_uCYrVs`=bfDvgX&6=iK^$k|-JA&xPk*&C_{AIy8_Uq~3r)dCX4Z%;-F!KZ~KEGjRZqJg}=&Pe3ph>r?v}d`i zelH-24&WS$8g!4BDZ!6UiTyGdxq$nG2zd)?zcRB=fV(K$2#F84N=*q^#Erd;IZ{jd zAuu@^f(k@&`VPCifd@Db@3u8yoR?^$Y@!e3F@%t(2}7O|RWxp6Ta`ne0)%_8ksDxO z&!diunubk(XfL#W)!m4rlDW+zoV)qmv~&0Sjc#AtYcI~AghPmgwYm~kbB~4^@(@eF zLk-45HuIs!;(=qKd>JvwKvJ<_tLIpXlE!Aa19hnVFe`chzF-?Y#jX zWC4^;-|uLm_>iu)Q1wvK%CW++oDbL#<2S1of)`+&E6&5}gDxkOy?P<`2QUk{veJuw zuwtyAr^3Qkka&YrRIthw#fN4k%0`6?fxjszhDq{UTgO9K)cQ)RLZIUCY~%{@tzuV* zL-FZ&Q+0)`+oo$16&dhIuOhH!TJcz`5yx7qI&*6DnbW$nH$OMZQqioYEDNV__^q%P zUgci+B&|;+3AXo|M+}Z#$id!(+$Yk5j`k2*K{8(_x7@0UiF=2Ym&*bvEIY2i^JlqK z=4rT>d*<6)Z-JqYJk=Gi6NQ_jzHI6oX=hsL{-e2e`uripyLOU?57=b5v3mHJKM5Fk ztRE$|PmKDB}5rOBnj%pDK zMo5Nm4T-x4I)y?)pu)rh&o~-+#&O(V->txV61hH*LW8kgCQZp}lSxF77AJf6xmdCnFxgp# z0?aZ9V8$@n8N*~9Rf=ySOW~a%AT=TOL=?|W&+>`sxtUtI%b8>98yP)tV!Dr|WxdYO z7L=<9&WprfqYTn>AaMwkFz{u0*Czo4yC-;yP1LX#=0Spu)Il*QcmX)ofy_NIVtPqT znq&?m_pk{wQ-46f5=e@e18w5MM8a%%Wx~PCAeYkwG`|M1tU8?j;JXlQGmVOFA!Lo zq=H0|i#Q>4#*)xQ2#Os5Z9tO0-is_K6f7gpVhRWZ)L8eHWeqlmr3S%!1z6Z?zc2|! zTtt)37)?4;H0g}dq_c`9oiUnpu0)g06iqtUqDkk*Igq)c=swOBS*scY<7X+7aF(%^ z@HJBA@#n6QtQg9X=t-G~GG&Tv(oo_k90geGX`)7IY9K>1Pt2|mi5nfPNCT}%T`RNL z{hDJu5G1lYL8w6kMv7?H;WyIH|Bb+q7_cPM?#$hEh0zM>iG+!9BDjuHb^_LgvaO(U zv!T(f_(hJUd%^4q@h-&g_3uCS%vKPV5xNBsoa#Wej#%yrDBgtG1-aUow`>kvten#x zOT_KZoh7=>ghpH~m_^7*-b$R9UU!$K_lY@;VD*(grhP4+)7`<&3}B6kc#L`A`PgPc z`(lz9@u9Vfn%XnS>pAl;mCMEhI z&ahxFw}rSX;=2%EiYPxhbkqYPqlSK|x#=NOIzHYr^Z4$k`<|%Qvy+d~lqI zMiRvn8MA*QE9 zE{EZD$@a8zxbt4-yNeUcD}+A~<~bt`2M>V!h7yEs)Br{!TwuWxA6U~2TGKcTPj}l( zv9UcqPn9wBGL=L2XrD%4-;)t`B1gE-o1tUcj}|0%pv2dC>dKsObmGE}@0tfK;c>Oc z&0PuF3dDMGFL1)1TECvKCn{PyX%6Gew5pGyi?&lO!N%H2F%opHwfghr<7*>(ARM6c ziaYs6P}t_bXTqtG)xP1L7+h8^>3pTHqLUyT3yWg^9q^iZLb!FNr-#)GeE$KTr^D(p zVD1_&;jg)iR-s#GvFM4gItbP~BYlL(+Y>8)b^B;D@;p_>>%)KK!xr0chfpzqio|IBeZ zk^q=AL;Q(yhC$~Qb0;7Vy8Ge~#Q|6_AlI7*RN7KGMTyYYzd=VmXrmamRZjY&#Kt&E zPo(tViKoGA57fM(c)HPaG1v~V^S9fcw9RU1-yKmX3?~Xqtq6kgIWgqjiYRbzIamer zE@Y+_jlY_EvtL%jP9_tgRd&uSJu{OUwl6#YP26G#KrLjC*2C5Ul>C4nOppLwd6L-# zb@K_Zd%e=kIrp?o&$Z#>GBe!MoaNQbd3~Ywc!|@``M?EFtl`IXR4kS%{~#Zw^i3Yj z(t9S{CoUy(4g>%X8$J#lFx)hL+&Q9{w*{8@>wsDaD$gaKNZgk6fAF>B6Tog@4}p1d zpl@BcJq~u8_oSK+a|5H^Z3;q?QCkqa?YNaMTdF*jdJ&&qkP~%&ecxogCbqSJYIqB3 zG6nqx@Fw5UP~w_T~(<9`yQy+_l>%~WkPG3yG#nd zjH;6QpR{0MMOm{>ssm@qYO; zuhI@(elIk6X&{r~&Ok&}YM~ngi+sgmk#`msaJ5HLnJ5OOM7q%zbi*eqa?!|H5O(!b zq2U-d`PI|%`H2Q9)Sy1HS1_fSEDNRU((+9u!IE7XnOQy*zxINr#IU4+4|M+cwU?6U z5j=j^9#s)$lg}7&QsgmOrYY8NX&&A5qR9rYa4ijy)6ehspnBqOh|A8r-z@Fo68R#J zh!%N7bW%p5jD^y1sl2`SRHLY+L7u+X0GV$ctGYp}x~>^@C3_*hbaByX1LPjwEjY=x zrx}#i;-$Na;P5~jy#<>Kx77b|2!#RLCrV~Y5TK<1)*k?!y#1FD(G@Q~)YY0p@!w0= zA-nR=AEg7wSg5Y9L)`_(gpNu>tMyaB=nn)Gyh`G*yTWBT>fY2ZAaUQ`qLptgfNyH$ zfHo9eD_y$jZshZ2OFSUC$HbwJjGGu!C`w2skO2p9=b~zaKl-n$$%{XiA%TfcCn~K9-JqTB;QT5^Jm)d z*kPAlRLk10v+hpcr^{fnQ?M%(rznej9%+%UA~^~S*Fh@H(?R49rPAP0r3K$oTI7AO zMcxN<6cp$~-OzHFmqrvOu9nFb$gpaQSBM-*f1K9k6*g7g%bF=P6<1|?ti~#UEi}|3 zYl)L<3#RrBtG=>VFq!!WsZb{rQiZMuw6Zwr7r5=R@NJg`mXCa8<^1{5fE5z%q>3=v z2!Z|!Q0c#iAqyl9+3-}hi+G$Antd5eyH{``Rfj{lw;54emyeq`+Y1~`@N`c%FJ$hP z&JTd@13ML;3V&{z(>LPuZEBQGxc!>I@f1ebA>>Ef2tfE?lAJ53te1B}7M2UoAEo>yL&^u!BvoMw?&<(+h!p zu)XrZ;;G1@PDLDGSM)RvukTi{Bj3BFGtE>(`Tb!ZpC%FCELZvROkEqX*vChW(}>HE z3b81!;QN5Uh84XQ`bd41E(?ekScT(O+@wB#mM;>7>uvNR!7BZgaF_a|yoe%tCmzKv zOC&sk3kQ@dcqA2RCz1=>%FTdfS1-D&j0z6qccO@msMvf8OHkrm%WVWW1!xDx!vL{uU1 zCsFG5LWlF+RbGC}3vi*4ykDdhxze?`0zk%t?Oi~?bGdLA$UBp{0#S76gg-cM3r>5x z0OYlGtBd__%u6=~sCt>1=u zow{0GQ>}X^_W2on)9`_MtHN1MkYw5KXm4ef$&3ZLhLW_v0mdp~1dOO9e1xkpLnrnX zzMk;zgx@ENKAGWvhuCljewyf_O}M ze0ykka_oH(#DbbC7)h3I8ViJ9cU}oS*4BCs zY4#HCL!I(mIY8fy9oFSTlif>CZcDIBcWEs5xhZeNwV#1S=slEI1H{6r;0n;Pkegj( zaOm2GKJRsHcp;&Dyt7ROl`d~c*d)b%_bm(At3bRu9;jHK1Byv-;^Y&%xyGb)1Sd&7 z?KS0e9oEWMvya!&yX(5FGl-~v#QUtwCxYmOwn@1Gi?puOdWVO`%U8lUHQ|OvpB@s& zl01n*!4z^C3(ENvOYQ$wOvtq>`1+|-;Tzgwxxdm{4?4;gk|k1cxq9keA(sY@OfHnC zJktrpr##tNue6-U^&?RYya*90FiBFx+&pnY4E*|K;uS$T=*WRIV_KXpB}JLbPqu<^ z#l&Pn4BN)kAO;}2`ao_v9DfEEs!&cXIB|-jHkUr9z^p5mna5W70ruRiEm^!`d+BI! z)iBfX%1FZX{{);=djl>e{VK@2QH%-Ru&}2R9q8AoR%hSG_-0WlJaQ@h-i^qr>43aj zXjL$%L;dfNYM|6N`b!gX`nz$oM)bXacOUU72W+sU)7o^;LCW%QaId54%Jr=CON*Ac znZ0)3hF{*`2^UL})SWw_MZP?l-njI}y5P_aC)TY@tXl&g{_UJHC4TTE&#O^oQ{-?4 z?HZDrcDcWiwu<3IP^fqC7zL^*IyBU5dBA#-J7D-t@cL$&MPxBPzj%u}%BM6f z>f&ap4x0(!oDOZX=$`f<#2lq^)3Lz9LDd+IURcow(-plvrI0VKqUil3YR{i^7={o zn%rI8tWWLEy|=$oig(#G>9WZ%A!8PTloLb-DW4c{vLy_<+fI-=^8mP#khkW>`4y#$w?oW)Ga8S!txs!6m#Zz8VgnM*+i*9w# zM=rW7SZfm*bQ2MAU7zCHg`#z2IFiXY@lIh&Vcv3)}OcRkJ=neWbaSczPU4FuYJ_qg|{u$l9}47L4(c9r1oc1 zWrqe=EVJ1yhqy{D3`8dVmSNH5ayGpxbFt$Q#4#MGX_;U*F0Rsg)-r^6?e)4 z2wkR(tawaIsr{dd6^6KiawourL;z6$!_+M3hTk6#Xz7I~uo%*StTsJCvBmOfUk1x1 z%3(hv0d|PMSH*?nDJI%bS#|{RRQL8(K}0d-32_#v2%LjU4EvnI{A`Ic?Qm{)D}&jF zy{(AmP2dW11Q=?5eS-q9Dk7p<5|dUbkBlcyO;x^52x3NgOz8>Fepz-}|99|UWXH4j zAPKNGaJ0qWZTvluAQvqEooJ4=di856N*?1&bxPVi+d>AJ&TU+utWcpw!PmP*} zFahoYce?4Pm3IY>g-9>aS|r(mvj~;ihd``OrwGBo82-GzC@W&WbMT-?66L3DnlI->pwE= zsWFA7RzoE$JYad8taPIU(z*H0b=%HxN0T;MC5rnfM))MM-moO^mJL8y!>rQ27WJ=v zRRB^ooqz#$-oIld`3zFT`AmllW(eGN4it=Lm<~2-rFDO3WAu0`1N5jEp8{6e|7diR z9=b^nB?k|wx*n>ELSgglQMCS}TdutOc%);JK~}%mS{s)lY!0&5s}ch9P%88xwbMiE z_y=nFN2dXWIPmT^ymfUi0NO|=L@~df%BBd}#q!9$`|jM{?JtJClczuIR%IDHQ%jOG zqob+3TXa$;*aOdM6>x~=0|e{YtEh7E`2^YZP6x0ld2Kkkmxq}SeOeydpbGfCMobQK z{$m4M43hSTPzM>gIAhSE0AQ~#M(QkQ=FC1EjJ1|{^ijMWaQ=K*MHF#*6@V@doiH#K zJgOBMckX(rvpwByd!Gd$)1L>xGh|iHhz-4oeMpTKZUpQZWe6cy22&*w%c!2@=D-}T z1(hZ!ZBbL9TE(S^Xx%QuG6YnlXmv38G<$)`ta=Xh7^aCi;&9=yxhVs=b*0ODPeSQq zD*H^wq*S3ay)c|m{1MxyGsp5dJFuL&KE0&8IS9?b2od!>`-a*0lqqsNq%&HgLkpcq6WUo(Mi0?bd#a5WBkp}{Nn6PP+P?g9&05Q(pdV=$D~0ouC^v|#n(G)>1d>M z{4Ub5xYTgmz$NZl<$^V@_ZK?O=6ERglB!^RlbUsyci}Axc9Q0W9O)sL)MP3)Fn9$E z5x%%YrCPpt0{EaVK{CfqkZCB+IyxT>SVT+P+zI794fjmPNRtFnu_jAJfL zm{B-DRx`^TugL`>-;-N$&$;4Tyep`w6|~cGf0}{M?3a6tvbIo3K&q+)l&a+*2LT3M zy3kqpf^mS$K%A4LhG^oPa~ZBwtvthA_#9-xEGz5s-?zH!XXDG#efs^f8lE1mIhVL= z6i9~2*|P*!Nd-YCRvrn@zGtCbe2^OO!hw%}tyV1qF>XaI1P;7k&*@p~_~Q3Cuivt7 zJc-3%EF8PJpflP5zNt$X?)-2Ce8DOeXFRt=AP99S+uuskvZq=5KNNG$ZCl z*D*_gVU-`l)d~PS{E3Isx4)QS@2DRJyw=N3hCsN{lMm)GZs`uZ}N3hVM+P#It& z9gu5}Xs6{xp#^A5{#lH@Cx~%(#9dQ!uf6IgI{3My?)K!wjuorT6^hz~@wQ4Wd{Dg9 zD$@nZRIQY$74x))B&*@ryEI@+7(oC=DGM-tz5}Cf-w` zlfzPO|56STlb15&eyV&7eNkJ#UMGs(xQPIvJbou|UJb{GVn}Pm>~#=TMeFn}xqq7! z?J;J!p(X#fk3B8Rw-}Gt=iwMv5(25Iw+{lfu~P^$WUQN!9%1j=Fv=C|LAyeA5mgwo z)2Gt#{_hy@UU7=hPVKB;0zN-08|O_9ZkxGu)3jpoc!707n9(3p$hrzy7;PlqkPFyK z=5p++2C;&fYe!^3F>IikkdYM>ki)&Is3Idq-n5G^L>K8Y;*MS*!Yw`14(ejHJnlBF zG-?AATD4|UAZi{;iupFu0c^VIJC*xA!3QhB@X=P2n!@2$#x*KvUSA>41JH3ZL?ifK z`8^YO+;eQQxvOU1p(XcT`0529Z6eLUgAK~$B&*qz?k&L#8kB6xQwlQ<+{_W&pJtQ} z!z6UsyfJX{sE2QrcW!+nllIOCw<{CF;*G;Je0XBwv9B-4jN?(3r)_3y_MKT5UK89U z;|tqrcb;8p>jUZM&3bqux*Ul5R9_CNKspLJF+;bX)Gr3&X+~A z-0z(XUkkz)Hs6K!I~`Tv(af%{_V3k8{rgCp-JPcRzHlo=Z0-(EF1ZedTvFxa-6y}{ zhAh>vWx77G=bxLIF8A;8h(uoT-;c2)Pr zid~5$in(L{J6E1!3%n=l4)D2o!9A@6cTX?=hUM4VfnrkOlJRl9Hn`c02>>#ka)0b# z;T~7oM#vF8t}iZHXb>Cx#Ms~i1K|=iPwj)rK)m;;mXcCBM(k()`PiT`zkNvN=~2I* za!98={*F7!qO*_b#+9L_J*I*7{S*0o++zm&PIW-E{^6p1OjoO=FP{2i;!1KOWw5=s z@7hAaH1mR{5!j38;K zoCv(#6)|wT>jY_p_{M&f#|@Fb$48!*f^!EPqXOEv>lzF2F?3Ibd;EF{|B?`Fkw5YL znOrbi;p?^&CHHT85k)Y_@NCS4kDDJyy2$jBXPxR;m$r80g z0HN2yAlnwy|L+*>kTr!Rl_VFmLmrDgONMesfcvt~lqq=F1mrf==b1`Dsacuj$0y8{0AL9(tFKwNe4Yp(fw9($|kWY$5%r0m$HFzS!odO546)x`a@`?D+v!Vu`aBJR! z^vr$o+=b}kjLEjWLv*!o$&@D^q-X6j9gQQbGH)}IClkEinZaNvpCGt}oj~#uwg(xd zRUXAZode3b2HWtAt0Q@c#cOot1zqUn|(bxy@ss*ntO} zjz3KEeP~bm5912fZTby|E)Nyxkd-VvN8B~Fe5j!aJ7?DSnMg^!C~oQbHOtTQTb`F^ z%hyqHoBJfIHTQ>eJ3T`nLna&UY@ujAl&@KIK!o$XqFSDO%NA_pCwiP*1vQ7$^TP$% z=jYp;PvmcAE#edUFL0(rEQ#ruSB)1YGst85k{5thIu3qaI(h%&^(W?(UL<|50ZJ90 zvnagw<`8?P)mw_vAND%l)aYF88wFKp;Wwppd*l6(trYaW?)0l@$R;Cr9mQqD*_oV^ ztiL5t?u-SngFUi?UQHu%@FZx;D34q>}Rl><(+>b#wUA(*NFfRqj z^Z6u8t&r(LGdPIc;BMk9zcd7ftT;LxMaF4HBE)EJO-u4C!jv5GdbV)@L`W9*JDh^T zDW=2UWZ;s7-zb79f;$Zk$&c3Ta&t%#;$JF-Gno^`Gp;QZ!=$3w9ho^SW>(vsW+lse z>&;5RX*lFfEu=%a167%ddC?@+8qWEztk1X7oGPS5h;)@=nM}*b0 z$xWoAut3ORo+jxiOLSpNoRHI;-4!HWqAC+@Ekg44t!OZ1Op}7fA38QuBi8<)cq>4{3V0eCKP!Yog z9-3yD?BUQTec>h&XbcbHk;|wua?8+76%@38sPO%TEn0uBWbYM3UL8FlV~tH?S#g(f zs0(l5u5Qqh_U;jf->; zC#nU@;G>!}&Ts+c8{&?$MIajKunf(15CK({9mG{TjQ(uLAG~t2i>d@`L)?_w;B|}* z-|O8V%T*#~Mj9H*CPXXAVKjFhM}upXxgWX?kOV`PVor`##L8g!E`o4LHf-ce9?=X7 z)H1=$2;4~Yz0hd}G$Qt?GdaEYYF0z;-4sB*L z{=kA)jRAuH)1W^BnMyW#rI|pby{txxM4Jlt3foMrcCK5vkv6_i8|ZpsfCe(V9_3vS zC(WpxMAh>C#0U?Pr(X{}8Zq)&Zj(-=W;$uS69RW*5XK9;ffTa^E0VG}(7OW3t>UI< z*6nOB$rlkEnU#B>iwgFY5W5^bOT;|EZEX){KkVVG+QX$w;x`#do6HiJb|%VD%-VAXN?i9D1&ey*!W z{~O!${@kA94(wR7OX~Qytpct^au6T9jy>eyJ?me6e%y#X$<$iG)OxZh)o4@dx$yiE zCeG{QZtnHjRq!4fwUd8~0N|pUx(4m~;f0T+Z5{09#0%_>!X+iiFiltj^!&O2p48czR^qWi422qVsOn27+5jkwRimy=&&%$I<(k^7m)g{X}O@=Qg`K4 zFu}UdKp9$_;M8Z07o9gXFk^^89zzVmK?NJLYnXY0!VJnJX$Q*{>0Glcld_)euB0z} z)|Vc^cJ!6seF-pm1P66NKw8GKF;RbpC&D3y8SxOyoZxI3?|n=KRI;RT>*-w{)u_tD zJgFozsPZ;XhVss%`aDlYe`L}tngCS2-Z*@I(kGNrn+Wx)Pr!X@2{hpUH%zrrD%gTl zDl3krsO&btMlc0&-(+M##8H`W&l;>vsA~zId_`t&0kWb9#(DRtk{Z& zD}y>*>ELh$)hI61L63@s`bzuP{IJs`*hx!gz)*Ka?u#6_Z?to3q%`#?wnh^obyWf? znC5m|Q-gi~9njuk^I~sgE<&26UWlffZR8b_(lQsTZ|NhDA-4jRou~{RRo9!L!o6PJ z;&HHg>tsc+n@R|=i}H~6wbaJS$91&fygNY3g6C2J5)l8OH z5t*L~X!(NzJD|1hBRJ_lU#2ohq71J&vB=kE>E*_kdVFM5lQLO9phRURKyTzA2mBA* zf+@>Gks04z*#_PViH}sTy`U*GBG|ES0f9>+88pEfal$CGP6n#nIs#p(w~}AyEYK3L z^t`>S;K=dR^tLLZ_-h#^`qAo7;r6I&2i40KFWPtzDEa_m3$o)~)=O`$x>jkA_;h4d zb960l#(bUWX{Z9zyb#RZN1m7gvP0SiS>3@q?bgRxZv`PEa1%s?;5vu~NM`-yYQUGG zw-~yOhD7&qo2}+SX2%_NgZjID!*jluM<3mQ4pQmpI7#YA91N(T#bd`TMj4>W%hLCr zgLAB;eRe0hfLK-Y9nSf>;Uh1HZyWhxR~5fywG;2Xr$TA2Y*5FYv5=E#x(rLJmz62r zG~;_-z69Lt5O{gD!vU2Bo`A}NFk#1PjpC-jl`{kt9!`_CnOW3NO!um^X!dco&@TPK z@}+ET?oQ(1TWGT?CXd~qs;I>Yt~Z`?!1o^qe6J0}P6MGkocpM@8giR)?gidJH_5C0mZ%GDdd(l78AfzuzXP8@^y<7Hc=&0p}?6EWr1*XTv&Wz^z88YX@L}BH8TO`LfM&A2Eecc z80gi?BZ!BhoiWY3Iu2IkF>tV((GFDOlOVyR1qZF1`Vp;2k?y1h~pAd&V+-~~3_eKrB!O=%V zl$nYf(?)Def8KZw_tjF}p6yo9dH)#zMd^+_O~*pvxmZqyhwO0(#yrO?yHm%pvm`-ETaltW-bLFT>jp!dcD zZ+Zv47d)7E0aoEp14#pUSWf9m{@lD zp(q|w4Ybaor)St3)?vGJW~hK@%MW$m9gK`q{uZ*c=vUJ+pmt; zeWAjAzL4W7-{o^uP;H5xMc5+S?o~yJu37~sZBb$VQzg)U!f^LV z=2_jQu0!G=ndJ^xuzGQ#(*kOGeZ+ylIy3}jOuzK$&j|w8UBXCj`h-5b3A}g{x$!1) z%qFxDD84nNSR!O94 zTW4OM!7tf@y^1Sr*WE0gtQ3Z#U(4EBhe&5nhfLD$#m4-}Y1#w1t;)+^saOwzWt zFi$u!(6)BdjzM+79NsakZp8zpm_$7hRYrw|Gb*fiN^lUIfMtxT_MsWT}SklxKl02!FnP(8kMn7 z(6bN{9)oA$#ApQ4cSYX?vG#>sePf?1pK&mG|I*>MZrvu;p2cA z&g}?z-6bE@As)mu@;j}fM7{o6?NbLEh>&udGGA@*V(AvY zD1>rpj=Q=G91@{}Ikl>rYei@mm^a}it1@X8R78nf=FJJ%YXD(oz`JzhRBs!>ALXmu=*xPh1??N0(4KgRs>guReFBhQQoakkk6h- z9A3dI6cD*h>qxY*P+*`#LV8=MTk!S_?P3TORA%{3SUrp13>6;Qtv|#)O7~hLRD2~2C(`J%k<_6)>WpaN1-|Z90`Ke{g*wr`=zNh zZIAC{2_Ed%hPF?iMJ`aT%ye8nd?ZBYT?CktWn?Vc z2?5Bf0fE($;7WC$szP zSR&g(LDoH)bqDwRsrv0+<(Ob9#|Js`ZK5S3DSX((MOJE62O4y3ZQ9EM?EV>7ns?VI zNyIa;NdJZD?M~d$0m?gsGj+gR7baSdtpMy5dZ`{`90Fa&IGCo=SJ6jGIhN>H17>B) z7zhZs*}R>Y(gR4oK@0AHx4GC;PH`|2Rn)0eI!SAa=33|z%?L~db^ zafC*t*GL#_!wK6fAlZz)?>bw->>&-EWoWIwgw49rbQBnB)Xi?=u6|FtHo7QnI-E-- zuRi>%?=zJT!;%T}hAviyNDPirCS7ufKpm`3y1t@L z2G}fxTN`60l4|zxY=TI$C4{@R0k_VB3Zm7_qINl9NEva73IK43BxhLrVyZSG;AV_$-Wo)6*~>T;~$a>Jy|S zKj2XK=^|K0y(Pf1DvF>zo?*8L=J`~>Ftt2*{fMPj+F`CT)Otah3v%qH8jhxdnlYbY z)vi;1iGZw%2F9RAV3p@1#VZEv2PkSlhx{NHD)pklV>?5~c8*-@GwnVMpY9bH^ww58 zOE$g3RhzF2Tso{Pu)M5bpoW1BmKomfRTY1W-HpL(-Ucpso0T-EJWDexj}<%+andWM zPwCjoW>+J>dyv^B9D@d)d34l+sMA;Ku4@);#=VY#-HyTCjDh`(;SG(^TNRP(H*?%kY}+oxtRtd zi`}s~#1+%QI~=<^8YTz{hwgIIbz+7eA(R>E6&&Y$KypwfTXD%!B7V4sd16*|<#Yly zb{PIl`2g;$J*^C_S@h=@{ybjVHFD#9m`|f*)Mv{_4SJj%5xva^C*buEY!x@EG|3Xh z7K&;Vu8#+MxeG*m+4850Ry*u6j3n2VqJ=z$r&I=ss>tisqu1@wiB%J#^rwHoSrb%$Z24YmgeJ@6U-Bum zh|;Y}Fww5IhAQM~&~2H7S>PZOB8r#E6L(FO^^0T3QokH3$kUJ@5UUqKmBC8c8d?C> z#vvhTAPh>0I5hFZR#U~dj7;QR0Ad&IL3;&L7^GTTt}2UmiipzGqZCoRSi4Iu>D4(%f*s>0FWLp_(3j>Yn3NV6cc zS}R!nbJfbxrQiU% zJ#QKH>p?X>y_rwbwO6WP%D4UkprWH3M9A0)s_7Vy!VeCY3pT2pd!NKs(Q>Z`p4ZYr z@5#uMm$dBu=XOT&;lNb=1cT@AtXdwMbO$p;CY3KPR#mqYo{)z_AebYxK!_Vop19Y# zEjlJrt&H*Uv{?|39UoNyLaTbSV8LG;;=H6~YQ)63Cs7#f;C9vZSM#9MWAn+sgx$({gC;BL2hVd&4e-w1m-| zxZxpksVAJzWEoa?018jFiB~G!e;+;qaF+q!#=&j#XsAGf+W1;R?ugj$_UN%QYuVlR z(Oq{>r1JJ@B8{TX}!xciDk+sKC0&4s7YSfWV4o^YQ5Ti`^|738NJH7{6R`b) z6x{S!^9`F-N=ENLz_}@3@g>?N!f|*No<_PdG-YA&^behr-I_i%@hu_t<9O{wM5ceMidOUeKg+1FBY~ zTgQw^^9tHMzvNUY@toydFms?Mo;8I{kJpZyeaVc7bU;3O?Qz8 zLE%(Bq>`KpM5|7$qgT2&7Z&+7LMv{C!jtVLhUj)vQ|4AUa#ES+H`yXbXA!>Pf^@rq zWu9J7BfH$=)U3MEtip?m@^dXf_FnGM0O!_t=zwm1o`Kw)+>SdB!+(7tT~}25f&Ods zQ~xS~@Jzh`8XktbvMtJ;El2GenI1MH`aX;8yMS55{sV^G)xr$7zfQnyVpGbkLM{@f zl6K$9fKuk-T?yA6nsNvKu0V*s-_f-zK`1*8$zy#-QN1e*R+z4LZ6*EJ^EakJ=C=&8 z9`8YLj!WyFA75A-g$KxsTf(D^u5#fA13l2P(BES=1`8m~(?z6nZzZM?0x$`%4i109OzXy3y!cmmiUXmaLUY)J)$bhbai`s}Cv;QiVZ zTVo4|*5rnhjXBKs@64*5GqiIVSv*RfDJ!3XxAOT^+YD5z_~vjSCg&~Xz#1!y)j-q! zMbmzmluZr&9C#PE6v_pS!w@)rK_l@*8F_QCz>K$P1yHHoMRa3PnsO=HVpz1gSZKx! z3tUS{AnDW+&9hs$eV>9$~Rx7`uL*v<>Vx1R-(^%)tcb5nz02{n)Js z8vvt>(TWgVBZODkW~?+4TBd6#WwoI4W@fsIXFY5@&K>2$9w!DFm7Y@-t@v!aPTh=4 zSD5oNE?oh|!PscPMkm1%gLjAvG-x{B9l1YG9uLUagVlsg^|*Gocz z|CZj3fMvUcz-2TYT)DcqMAg|fjWm2?p`gXE!Yr9aHSi#O6YrMQfvUso3Q@W=zI1Uh zloN|xp)_i@FroQ4{gY@t#DW*@`s55%t z#IrHB+U?(B+B%Ttb3_S&)V}HoUDT}ivYI<(fu~=*-`ola?|^37|IF$bWQP6dxhOC{ zX3BPPf-dkBc!If0DFQ>=iU@&ig?mm@4RX4*4P!kkzJWD9s|9L?23I^CGy6JbnIRas zR|IO-Ub7h$)ckn><)w33zX0gUWz{Pi9SQ^|-TX zZi_m$T7=_rf%u|AFB9)X;C(p(y2bdMR)Dp9FC2&DaLT!#8a@gPpM50EBr*R0ng+Gl zFZrg{t>9J$-Myz*492_B?e-Z*pyBUV6@}f?94%~Yc_|2KFa^Cbk6M~Z4piGe{4Utf zJBV0X3tuV;XXXk0u~B?*9t+fj1xt|JxMEu5QxVagi=JI=cq~w2YE@mhYn?tfN$C9saqeL&c;4C{$Y=Wggke zl2>4IJY?u7;`XA~+NrC_?o^_y0;nb?uzD`7-YIxCui{wl1RZSqdXRMgcu=j2({Mn_7-s*8tuam$AZ7hc4rwXrWZ!;ELDxG_3fZ1o7Z;&Q2&(B zh{HbN?)z`_XYO=L;gOGebv_t7zmFcV90Vw^>mNj_m?BwkC0gk$_3l2F>b+#@LP}YP zqp|M?XD3yy2zRc1=r}Yh8kCjTtY!Sss2tZvMN;k`>#MNCgKN=V%Xlc!i8Yt;p4`LH zsymZZMYV+zm&p@h*QYjsrt}Pi^a?K1P}x~dw5?P}r2I|D!|{t#&cuc6krv0QWg` z!-J{b4=zVzQ-iSqn>V&Iw_;&#>cox8PUK|^vUL?Z{D6jwk7kT{V_D(G*=!%lj2xK6U=2mb>U-nF7k%F z1Fg*m)Ne+yD?GuBG^EYtP!|y#u#v$H9#pH&ql%_C*N&GO58UHb5nO6a1qswncT{?g z4BRdk2qA6`qZ=N5C2xV623)rjZjvuOdgQBGofyXoKSlX*rX?c)$XRYU-Y>yaxZjCf zciqJ?rlcujL!rJN)ne?!iCOeVTYN0t!PdEglBd?DJ=CGKiMy^{)TH7_3Z-R|knc`K zr@)|B;!es~-^iA2LUQGBO)R7C6d&hNcMLM{AkF%S609G1Su!%$hixb-QD5LbA>V|m zBD#{O$9)9dZggmy!P87LR{AL?KAE+VE_@+o)KLs6(Y6$bajI1Wy4s97{H-#BwAov_ zu2fM)yFvG!U1Mw7Cf$W?QR_^d?&}0Gd=8?&8J}M(AI3bx0tRweRbH&QbQnuYVZKNV z2TK~Y1fHm^!ioTcLn~7oC>kamh-mO!(C8{k>7`P7!O|7U710W2`A$|ArNQQ(ro~@X zL3#{Iija4t=}}THH}lz!FqH+d6;#W%aeT$FKx)HFgKIQD3O9_NoN{7*D++1Mvtaou+ZcW$dCCL3PrUcDUU0JEdR`_Y*6xY~_d_jbTv0bIx7L8fMq0x;_k?&BG zmJf@X+D@O^Jjqs16`{9eJ{wz|?VLh50V{gBKuJMYG@Ddv_Rx}G(IM+F)h@`#OitKC z9Y1;N`cXS_G7rt(hahUkJ_Ju6HD*1SRnKP95*Odcv;tLWN{Ci14bm~MlEric7$zHT zQkBcDm^ZsVmEDD9y;n|IcRpj?In*1job7ZIG12iTa~~=o=)=GskUj2w%a=wC0SDN= zsNLU=8|Qub39zf9Hw@s}cMi@#ZrI8fEPdmxIpzhpFr((G{N$wMwIC0!3Z4~|+ASkn z+jZ#JT2!32>(N6JAbpQ65(mRulo1+IPQY+HS%B%! zCY)>`3kbR(bW}bpBUXDwXbrKI-ixpAgSzBtvP%|~v!Put!8`V&LcZBTA zP>NQ0{D4~SExsuy@nDypxTn70U7jh~<%m6NoOlu^dKHOid)UC*UY&{99uGxqzi#U> zt#s&NL)tpwJt`$se2+zSXSElKt%OQu0$S%Bf|id0(o2bhtJ$2;EufT)=1M_QJ@o(e zeckN@*PZ{=2J!u!FB02IV7(nG5=Gllhru!X8|&Kj&^aik?oePb=28i?tm^2b=xH$PT?H0p@tdaiBH-xc{j_=v|N{|GuaHUPvZoRI(3tN9%j;3%-x)@uw{ z$%#X0L7XCoI{!lVs#T|d7LNYxp>CPRmRJe-&{}AzU27cok`W#YkSyoJQ(4oyB76{| ze#m=@uI@{rVAfGVIim(O^i3s3Rp1 z^>4y~%02jKan(nQ>TXarbB>({Jxk+Z6*s^xd;noUp1-gu^C%Qvv&C-pp$*^%_UNJP z(FcB)_4uR6=|eBqyb(SjYmdjD=>TZ)2baCf;qq7~P8suvw;%<`RL!kNJWQ+ETW669 zdX=ixo%V9ViSVL_*CT1;f_L6y#st>+(os&ye|)f2*gLTPj7fin$*{-pfc9dAeu z{<^)eS-Xa>!jFYg+sdniNC{WH_^h|`Cmhf2Lq1vL(WomcpX2_NuIP%fT5^x-M6?$2 z&?ZD_`UC--A;>X@ZhG>dPAVtA&3s7?%=C#Oit}X!KTpV9dy%i4BowzZ!vw2l5bS_z z1=T33l;;_BNCwEBpvdRPyO8g*=KIWipUp~lX#*@h(*g|(*h=RFT6R=-Lv(>W9Dz=b zjT5H(DZ2;_7suWw1-6^6q=9{A$A@YmHxf;AI5QKkK6q01g|;(IbX^T^Io|19N=Fvu zl&i6T)PPCrxw|Y%YhGYA>#ju3Ou6zz6BJeH2vt(XmH?O#vS0gSvK*^0#_e+P?01+@ z1lobe@a5e*37|`*;&D8@S<1<1bgxdWIq+gIQUIh!{nU3-zX>9Q`8w)#hYsVre^{Ej z3(H2Ke3u(FvD-q?Iv%fIblkK6p{B7qx)(}Eq#Qth(pD}eP9?hTE(DyOFkxZ%zAe(7 zyZB%0Nx1n>JqcJ{od9#ypTS}%zw??qSbF9zmfkfzsS9MoLU|bil=Ct;+^|~~uEnz+ zEb?wKD^I;8#7C4Fxa@PIFmFFX0<-Ea?AUm2cxmpY=Km(zxOGc~4!&&%;_=^L+&AEFwGxM1>t7}i z-DQ!V){%Iw1iD!y9-S@Stvc#LYdFBQGLB8W#VxC1>+U8k!m`1uZqz-NX!(5-op8$0T^r{{Lok-rn za7}85!T`&6Aw+OZMybZgHhkQf{g61+)1M9AIZK%Q3SCQR`w0zBfZ^lLZlHMR7Z3U{ ztKpfEXS3=Sc;SXwF`X*l29$3vD(Ss9#Jv#%-*DM+dWF0El8=}~RHeR%Q#Fn?WJfg~ z^$MTAxjM>`Q-A{0Rlf;tn_=NZUvhtisA|)~J`5YT*857_Ta6kjpMy*Wz&o5_A6J4J z?HBU!W%&YM7(Ohu#+LWU3$~lJ?1+Ptq4rt$SZ8>GEs%$8*TyChpatlvpKM-d^$dLYOvZ0JL z1lXq<@yQtn9;Qnj9G*3}5S+4|Yc!W)1XEqzk_jN&8qup#G5)Ngl=@d_(pd(K>Op{Xo>jWJ~nKZ zpQi3k-ubb!o%a9x+ck2NFsdV6a+Xh5-bGBfik_ScYB&I@PFNp}Da8$M` zf!~g9)pl-*X+E(9_~233r*{-B^hTN6qNUxr#_h_{5tFlol`h{{=q9~?qo((`U?f+`K4IpV3~Y`6j^8n1;1n9ah6qW3Qi zo*U&)QW(_Wam++!+m7L&AYf5&EJrp)ID2c@eUVW& zUpQA)f(7HJY|m%qVZm{mwd`VA)f0iy_6Z^*?7R7Me`XbuB2Mlp@oJ#TkI#Be@PYgM z4}I8_7i`8P5*?*EO%SMLs4#O2@h%0V)QbL6t-Tw!c%^vdh+3b2AY!?jH7YOi+}zyE zMIU?=Rm}T}V0)7YE?31;N}bXzYEFwd$c}PcrV3>GN{>L0iwVxty)$W z+W%9s!UPcmw6uf%UhqYf52=%?LNVGm8Fm!tndDSw#myxed#^MWUPJ0!iZIw-$1T$2 zO`!6%ew}zGFXh>XS>O)!&W1ME7p(|E37&Mz;dKk#3qBzO%QwZADOW#u`Iq%>nynu= zJR`m&n=X%m7j1Db_3C!z2YW^9_D;o7C8;aXRLjnp=pu}gz195H?5SRMbJVKBqs?Wv zX4M1f{$^m~yXbC~&e>Iu9xRm(p-0E!QS+kKQ+YY9TQs#4eOGkM8)SbYdfq5)%4FGq zktf|9{liA?ufwF%pAq->8zo{aHKOor?%)k)n$JA&$_H=Q2z{co)lZbR>$#ofq2GMi z_zQdp0ce!+-$HJg@ScgmcC^kZrA?zPCi{d@&tM*UK$lV6Zk(SYfWu)IWT)shb+%Y2 z-_BT1>i1JD2jF9ablQg1{Cu|RQ4Nh6oULMo`t+w(qmCdKSP?}o&)8kLpU&AFMxP$( z7N}5-2Qd(j^a?_LsunL1QM;<{F-*!MoZ|2wkR`6Gm|mNnO(ToQCf?FM=~L74yGDHo zZg6AQlGx5`RcvSPVDcrMFVxGHbRX;=lV;Bc z8|W;k6IG?mes6)YFD1XZ?%?v;2(6Q6A-qU}%z=catc!-Wh}c?7;zKn&hU)38hc3W_!y6m8JWy{bXw9jVdoJc^fh z5OmK_3aS8*Ed3ZvZ}=oMgv?)jRM{v{wAVM4y}r?Bh=9WueT?C!j98%xEQ;GM6HRfk z<1&1Z7C^V?t_W0p+XqH?s7!ECz$2>wa4@J%O=!GK4zD4&f-ReUyIFEf}G-yA(T z?CzJhlCI~(`jW3ebVg0eLit%?eNFJwap_#{w3m3(iK#12#JXQswPM(K_cgpNy)l}5 zOYp*1t37LYd%v@KfwyFuTD=c~{g3^JuUPH*uqfV2=JeXrGO7q5zU2cFS7 z5ef;Y@^Bp&m>}US4=;s#4BP1e=8Z@))9Dhr`zD;RVm?<_Pu4_-Dk;mUfS3sI;V>}q z52KWftO&z=54vvJJ#d#8Qo|;fKnAHzOQE!wmOJl%!p_(LP+ujGP+BS;KkUyQ-NHs^ z+Dpln|G0;H{PPy>hluG%&BghsxH!K?R-eR5B_VAGRHB28A864&hRR;ED7DA%Zy$Q1 z_~f54^|2EyxVh)(xP)W~EFuxteMX|m^Q2_T1&a{88CXz!JCL4SOu(!&o*j3ybP?s* z(NKh++|b;_Zx_w`VQL0Bsp7>pxu^{nyt33s1(g)jaOI==JyUurm`^B9Qln^PGM(gQ zwOo3P&KfIfu?k}aQQeamVYxxM_VhyG_KmW6>{Cf+G z?gVr}-^#!XNiNetr4GE8?m@feX560bf~|Z_t5?^vP7HbF1BiU`4#u}tm_bvexkeZ#7656XBKFpsdsmmm2Q!8=rf)k9Rg?}5^=7N$H3iDz^4Uy7R^fgI}>L$a=ln z-f+(I26GCu_MJ2Lm-j#G{GM6dLOQWJeuP26X;3-0n#tD{pM!h(tafOLdI z&ppqb{%V1omV-)7UsmGDyKLYbWl*9r6$*1t4E}U(xFOMQvJYjzUqJ02VWPT^-JK>1 zeNS=382ZlVT3CfrIYQDoaY&D$gpSS=7N)C@A*@uPB8~%+r)>rbUZAHrpkAOyIX*C8 zX2MkT$V7T%QkJG1PBSJgWs3?&}OLWR4f17&BK^p?TA6nZu!) zV9ZImgQM63+Oi3L731(PKQw6-G% zj*D6-Q{kT|gNH$}$m4sLgZB%HtSp#RLP%)D|Il$*0M8=B$05rx^A2`=8`{jw<=S7@ z`9e^iL2-ojt@6%yM)E6f^mv~L>N_cXw=2}*_~@31-v!7M3vNib>qjC7J|3bE^sJG5?r`82iyV>aHKb??MD)Z!a$W~%%5%$} z%vCsg8C%2TT($k;+qU$CVf1cWN#|jtrwJWK%hZ+LVi|0wZ`9#&=|FE{B!p17RtbZU zZsmk8&UdBpN(Xr(Eh~Jh1)9!Z2ReUE5YefJ>h*)j+$BtDJE#LR_mRp0+VEJ7%HH!3 zhlpuqTGiF_<_{Pq>*d04|6DQ&&u1yU_<9*sNilw_dUtXx6#Z!E2xn&}L|u0Zs7vf% zzV76qt9~*tKwYEdxkN@cAL`BpK78dY#}7f(3&Om~#eXVG1@t3NvH(mvSK{DX|FHl^ z?3~!PQLlTAE*w@kU`~{R2$CK_E2#X)BOIWtoY|pKqtvOV(l9vRL9B*I+vbGa){3Cr zSk!v;c-u&)7anxbt4kU8jLx$~px3FbbTMD6X|cBfu7v~fQaW6TnskT~EFQ7Q*RRl0 z6-rgPgV%#rK7K31A)BD?#tRg3q}ov3x=B6siKk~PrvnX;nTBh2Pljq~n&DkgAy?Z_ znLQi0FC$8e-$s`=B2f2sBcEpg*4Uho%x<%)mvKjLGX0SQr@y=lVpUP>T2<^*Qybge zn}ACFu*)@p(Q|qN>7j!r9$dock>@Lb(DSw8*=7_cDJHMln)IS)EhA2IECa=8!D}W# zV@s9Nw)%@Ls;2hdYc`!rOUh}iuK;8aWB$-Z}rT&#|1F=`mW#e#RP8aeXrK@=9+pQ zTtQKTCO1m!XYm}ke=pI$;d@x-3cH6j#%+y-O7DPW1g@^b6%Q31EC#I6f#QnKc9r__ zEE&~wFO*iza$AV1q14D9G!4Eb9>}FpS^=P9XY2D$inZF*9rhkHclpf5W zqJ-xps~0+_{5&z}^b`74RfXu`JUuxhd;sCiffaLEMP-LUHtMUn^`w!D(f`pub ze1rbE;JxO>b0%g}bdE+BEnPT1@Y+1dGoE$&JR~?Kp{Q)BvZq8*rTd5pKXE||9Eh7b z0WK_%cJ;I=$W~~2t&>FEz71OVO*m|285KmnxRMsy=C8WHa>CK>Pgu14G4YF9xKHx! z(Cl)z2X6A%$pP!1+xdg~dxh&2Dx2Q%{xJG=`juYRuX#0^|ao=V9X9ZJiJ5|V&YB3rxUp85jA}ycVd;Wv0FNORAevMs{6$rlc8ADvs-73y za(HqQ(N_}4a+yC7E;)(9^nFfJBA|m(ql?PF!VWPmc;n zG1SwVPG#5H5JQXDkr^PAwaMYuid-ACC>CX`EOMy#;r9O->D`*HV}+b@h797g>cl>q z%2+)ivOJl|?BeFIG3CjB5*%-~lCtL|wF;F@{#OjB7XN7@Q?qHDAT0^OU-@p9g zV1o?tRtoS2Ua^qxldtPtT@qnO^J&h$2m)r_I_{@h(vaP!n*9y8{#LL%4{7AA6E{Sx zRV&{+*$PG7B@s)*x^boD%xhgO6U9Q!>rwvT#_QcCmb&fUsDf^j*vSgC>V!#z2`IuB zM){4&1>dW$1Sf?>6mPIIOmuYBZh%cap%`GgI{k>^x^4O-WTUeWkI}W&&N(){`ilXk z^c5w;i2&%{$$o9MZc&G{eZkhnrt2siel~cB8t6~|=e0*zg)0e&d@-=eixnG}tGoakoJYdVYAS+VzH0|XwD4V9V*3~w$&=HIBOjN~Z{@u$o~#}p?Rb2L;3>xA03RNc z78jzz^s4{vz_+yn5LEoZuW1JiTrXK4de{0u8|1;e%15E_#vW|!huVsl90s5|0$b3@}$`=Il8Fr>Qrha{?1ESJ7(_HBaWHKN_kTxJO4`TpcAxhMs z$IgJS&JnvW)V4ul6Q)w3w3+dskH5{B9_;YcfTLP}Xz=GJaO{ zGC!8;H1_Loe08Xdz@oK>tj_FO%-##OH@tsEgU`RfD>J?D$t28 zTRC(cDG-&fimz4F$s$#W%Mq`qkH52o19t++OcKxq*9r>G6hJ8~d>ag5&_zsGAb{aS z!V2h6V^~58TxG52%-mVcPE9|Kk zg#marubRx>!;3@`x+)zabLtzHv|Q^5PFQZhpKidDe$uweplm`4*mau_#LZ3jXcIEB zU)H0dL-xFxzYFLmB760zF z`b(|=woxc6S0LM5S6xwzc5=HhS=Ak%HxbyBYv(P{AD{wKG0X(<-qjiwk2c&kYnEV$ znlmAEB4z=S@pBQ|OyAL{v|$(u?cUP)1#S_1z*EN7iB}0E%EeCw9b}S%f-&sWK z3DFt>{K>$y)vb|LTO-@ogx>Zn^>(-o6%FJYcMI>z3arkdE#UPG+Gnw9OH@PXp}SA8 z^)_{XD>&!+y~R8xqvZX%yW>i|LfR0NdGjF$hVh>|nG0|yZDk>&O^iK0%y%)JDw|o0 z2FYVRuKUY!#bSq zr>uor@#IC}*uOX9=NcY^UjF~aM6lWhcrsTC<+SdNQdjGr_{^;#b>-o&Z(srCD4T?( zIGYp7P8o+or;LNBnVe8OO`qSyy^}DqGoBP_=f2dg*z>>^bR- z+^)T9+hH=tUV1Z-yVy18_j3!`D2UVtPcG|Er?##GZ(UCaH!)zaktb}gfc8S46?qoK zN;}Jep$8aU|BU;g6IE;KteQI0Sx~~^Nl*gTT9!7XEn@4RPhi!IT8~6;Sp5yWfOn|9 z-K4z~n(m<_UbWm{Xo8`9lCgd;skjyyC1Lmml761rbQR_nmUf#WZh~0h&W4p+%|1cA zHZ}H+;rvzLejJ6))`ZiNaCXXc2`E%{C#+W0F6iHT^{SK>dc1=xN(P>TayNri>7v)W zUW>ydh}~D}`qX5(|Lq1cML=E$Ha0-b4fN(}q{AQ$)Nvp6Tc}?>(A}^rzuGHZNfrW2 zUdaaQILF^Ai>8PG%GA&N;&nrY)f#@jFwt?td!lS#LyaZdLjbW;J-{sbQX-O; zGVX1pa}92GJ;AnLX^S6HRlS7WseF<>5-Y<+2~-kLEd?6 z?N!U-wU^{dlSO)!0MSx^1@CIdL4_FvT~ldTGK^boSA~)%&!&3}x}K15snmj#{Sc+e z_&uJ|K>29A4vp3`c}*KGmHa(t?=Lmi>cEDAT;g34@iuC%W=4AZr=n^cc!F(HUr0WNR#L!Uc&B9*AWujmVU1dhm?wuK#@ZvO~4UjA|5o}Cc^+V^|O|w3jF%KpG5>~2P8XV9i#K0x;N)D@4o;IxPiwYTWq&B8xdI=)`&woI>vg+JlPOGa6*q1iu^B3#aPi*1@e}N6%lGgXf$9FW zvW|WIb>M)*y-Is*{cm}xDqe7f)vTiyiBS++O)Z*ZWh)8Otf)+f)eMJbt%!daoax)h zO&kzJAw8T~BLO4_`5J}56g9H)&54BKu1q@O2CRk^Uq(pPln;FgSzYI*Dqw<6%VEgE z;ACbIpdZC_R-XElEdqS)4#yEO2`3|B)>#j*=u}nC|Vx=*R%tKa780lUTAT| z?i*g&j6u6$b3D4*!TI$chqgEOk88fL1)9)<(pq*D(Y z<-x2r7%ugPFQQpFl0QAb+Ryd2h}1Jidm%ki?L8zE*ZQNoF#728tIGv;SHaCaJNAys z1)N@A!0|BMl{;Nza&Dc}~PCpcg9O z_%{Wpe1$!D2@h*)9J0(DxH+n8dFW}G_08+rW9q%I8Sbf}Cu~u1AztVfblSasbZox6 z=``C006BZ@{VP4v7G6k~VO@tnmjj^V`xD5=_m_nonUlJBdgdIcQmHCQk20xcT4~bd zg12{?G8HqkPtc^QmlM$g*r``g%B^?eG2SX*Ww2F%;HB3B0_7K=eEU^^;a(`SSsdSLzFt=%%IvIe9m0#P`JgN#MkW^ukB%hqjc6(RhsrFU07WXVm_jKa z1W$14RLGQZT(6D?WuxXQSgNuZshrV0=ZrofO8UbQl0fjN73=)~$B%sL`=neb9xvZ& zzo3qFwY{M9C*^mBT6bTvyOfP2BTAnk!XkVk#8>fr^eg zOwLD-f{Bheoa=OfH#8p+3q1?&Zn*j2ls{gH=Y9Y2b>LM>c2D1bVM_LI`3R0yw^X*1 zqDjk0z+!r|Zx?P%S!@66tI@^>1`$XX z$LxUA)#aI|1B5lCpDQwond1|+$ls_^;1xgO@q^}8@;w!bS~j37lO1jq@r~JM!|f3q zGJLKxf%igwe723`+(tN*=1hhmSLO>F z1r8|8g86gLH&t>gG)ke?m!z`!$m2v+FoLKVQcmZt2>rO@v}rqomAap3a1PhWe_J6u7L}$O2W=q zY^5dmw%)O**$PI;qGl_QH&$pO%j8MqWoDC(-;>TtR2~zbWV96A%ZMeE?r_f;veDro zeU9}g%^Y~Mw#nP@j*brG0P&1M53+*}RySWJ}^n9-`|7I-`4LeV6o0Zz3s{t z-`GMh>PXZD6sn6shq)3YkC17*2fjn>Uj>YbSJ0?6E&2!}5aX! zeHF6z5~7|kO&~B%9F(~?(Or9wfs5FU&;1w=lHmq+#L{_51+QD7xxzR2PZ+;3oN`bC z=v`rdxOG$p;n1HGYujrccyMJ#Qb*=b%;4E^2>!who}HKJ)YI(-_P;N)-d5aKzoMSK zLHNN5lvC`L&Z`p{Sys*{UVn*@cdNyto}CEbPIvP#yuZ_CYFD(tGZMYyJ^^-_VeK8;M(aWq0nghbYlM0u}7d6%t+aMKG<{BdcZGnew6OLLWpBD3dw^jDDb zDb9&oS|hx3;TlLxreyFE)Co2RebDKWLjd-@bGua`Hu=-L=cL<>PEv->LUx_S%*+LB zjQ0>z6OSI?;K83e+=(WY&T+Z+%_di+fVuW5Pfk&rC-!X9x$rOx!wZ8kBs0$?51(B| zEUrA_6G!m_p#-x^7b&cAh5o5$I*jU6TqW2%*c}kuI zmi-D|Tv1|)IhHh9XyO`PDq>&Cp7#Gz?L^v{F0itSLLXX&rJ#w{d|;RZnwW9UasesG zx=3J~*g}_rTFl4Ps{ApQ{8&_M13xtrWi%E0$duAn64X%gYq>up8pi}72f1(FcPGOR zGPWYt0$iGNZt~>Srl>fgAz$t|C7@C9$vz|}@76mNfpXq}IBA4K{SBi)Z93679 z6^ojqwiU8yebGteak(|~P*Lo+aAzWikCZ0+0l z12U=zQa_0d;sG_u@ay9;;36Gd_GR%Dt5M(sEJ6QuZni%%C;#hXW&?|erF=f;mI4S5 zTB!(S%wg5|5x5MZM?bo+=!XRF_0AN2Mo_gs1?3`)TM;xHCw#iHBmxOt6qURzk%nj} z_m=}ibvk0G$CJqPkm~Xw76M>tM1x^o5X0Q@r$h=i4;U5^Zk3wT=L93dadKSTV{tN= zBs9y*{oYFh*+ESW>G#1J$Ko%5W$MlD(KT%99Gy1+Y3rCGc^8BKEr&>j2yB{dj=7lhrL#@-&%0RJLzi$6|8q)o_!IE zQ*Rz@4P^yg5B4A(6CR_qNCFkdbHJ&|l+8bwOv`FJc!D8(dWq@l;Sq-8vN}(zOaT}+ z5a}(NzcDL;WqkWn0n~u0*#2X&or>i&1YUat&}yD5UZya-lyDZ$Y=-8=Ib^fI{n zRp^n0txUUE!2W<2t*7v8It2i}1!ia<;b6qY zb4qtA*HhlXRO9u`uKvau3Af|PV*3uZ&LHI+HfB0Pt$6O-j`&9EtP7@W#5G4 z-6TL^Xil*1qy&o-zF0sz19S=Kw3htXUCHfTi7s5Y3Xqy0CHFXq(mG7)vuinQI1#pi z+9F0(l^NgC=-IDPsY}%j)d4^(GBgJH+D$ zEV{%aR!>_A2IDA}_#l^bsGH!mnQLQcM<_sZHr^juO&4bMGMA>>&fJbW*Bd;Nx7fe3^F7h0Ehob_ zy>4%4`5=VFG=dzB$p+L@X}s z#uH+Bk&P%iB5=spM_fTwF%qHu<`sW=)mhH2?iSF>1o-S34|vvc1yA$oFc%sPCp8yA zX1NNnP*lgcf#Efv;ABpag5JNw%iIYC*tDTCAB`Jd`t!Hm0yi`@SeQEk#^UQ4Rw{bb z96XPjgU2J;wek?2qX!}PFHmTJtpTkBu>3^`%ANx%(UZs`b`Dx?o*2l-I$h6^D*8;o0ya`YgeWp3K7m50xC3cV|{Yynlrx^<}4gy>`fu(dU^e`wLm|a0c;>!T&>JVu=dYnvd2|$_OGDFc0WUx?sz5q#lhJ(ZhBuad# zSW0|Cerkj^pL_{C4lMApDn!@^j!8$t^*Su5&BwT4hm5NL)9oxkYUYaT)(DL|Cf@mv z>BXMlleY-n>(~a*bWiYn!3K&z`9Nmj4)NZtgebXg%3;A>0{0p$^Rzcl^^XMw0Wm(bDm*~k3Wy8>4o&nBhy!-_4X=y~HWFYAH(HEmKP)YVv|Q7z zr1B!=30u{N!kcXJL+jj4)P47?$1F2bpRgA~7!CPBdN*tG4AhaE@A)~3 z)_3wQHsCOr-vM=leFQKxM*;jUxBxbd*ch{a?=yu_VAvPEdy>f_l-ONKhPg=gE45jpj9!*C_tNkZZ5-!*KP9= z&m~--`$acyeUY)N;gJsxRIPLrRb3myRXy-Amk2R+j96RIt^C5rp&X^vO=$~tBWjU4 z;eCF|C#g>2@~tHLjxrUR%hXbBeXQzx@<+4Lo-6q%aM$%9s}dask8^rqZK3-LjNfF&?C zug(mb{z|UG+|Kbz_V6fNgJZ{ELC@0Iq0=b5do;#RAT!49^$B=W(1TauF)DIc#Kv1g zjlLDNeGUl_6Qc$J@@_#r=vSqw7B;Jv)M?lbpV9 z&668+kEgFmZpY#4V6jVU1gF-h+)g7qp2o-WA|IhYpI9n`IFhL~iorXnE|akmJa2cX zH@iLluGY)o`u*DzkViz=GUGTf53$jMVh~)E+JSm8Jv*Z!Xq&qMUAkud}(>ie`Y z-*pxi`Y+zBF`XFrFK- zi+9{T3aB>8+?Dpq9D6GuJfXWw4`Q-Nr$%0(nZh-(Or4op`ad-rz9karelZuXiJU;Y zHR>xt^fEuDPSh68R$LdUu6rZH@m)@H6whgB<;GyjrzKrTVbXo4eou;nKZO*ZXg5?vquyuF^Ybjk?Sa-z6f2qs1H(%^ zO1f~SqtMLe|HBg6N1~4y;jLu7>gCF&t7X_DW}|!!^lxBYmlT%gEt#K_XL4X05n!=72J(OF=%lmn>N* zRa!(zFbAvWw*_jaJ07>gep0>xszf{hH`yRtug(C1n}nD3rb)3`FnF1jNH_3`q(^9` zX6Ky`Lff=Q^L%M=<1&;Gj6^vjo~&w;%ij4faunt!{BYhnS+7mxXDbu zl9?Nl8_+f#lTP;kF64exbpK*dK?u`s4i_v6m2WT1DRdxT|Mm@uHA~!8Un-C#)Tc9$GCP!T3 zILb%32>Szk;>MK*>GnWtZo|eReZ!}+9m4bq5ss5HWL#cKFm8^?uRkah0mpIyz#<(q zRr3tJH%h7BDOzv7kB#AvxKyr=w?=@vk1%1D%sMs4tWtB#gWN`@D-@Z0ms{QtFm*@7 z$N;c#XIdBTWl4Cj=DGiR2>E_!*?q9wR#eN#(l`$Ho+}!K+xLWM0AA^L02Vl^VjeUf z3r*P&(sY<1S?3<;xC+cX8L;ldu-`k3p%K3C6ZdS!8ty6Vu^C_U4C5IdsDw{0@O(w^ zf`%svi|skD%P=!bSATI3=J+-kZqO$7|MRviH-&KQy#az1%_dG*XPzv%a&z6p>h}{J zJ|Yd?2|GHVkj(QHY)K*xQZxRb7EK;5=Jy=G{w!FqF4xU9#xEcp8^0`q5buo4|mc}VAr8DDem5Ty-*0>^lBhvnq zBG(j)0_lHTfngNM`tTbuGD1AQ;>)-vT4fOI?^r0jG!dgbWM`IX-Rs?txeC{my0Tud z*2Y>%!Es+!Mw$HnR939DzVO`cSIaRfP}*D4edX36lzw)fzRjhdmBJjel8ZNgsC>*P zY^4;(ik6RT$4ZFpvE)a-Q&GwHWvoi!BOYj>1n&03C&aRMBF{Z$cNgnN;bw2a z^8pLuv$*9GE#{{UI9rAJ)evCYUK5EnJ^ojalp?QSQ<^+dIya?`3wTDDsWtQ#t$S#y z3z%(cdJKbRN5+3>GL%paA9wkl0hSwMY*&h-S4Haz$Q68rWfss&okO_ocd)H<=6qdi z-15zJ65AU(m;_&iJLE*(2RwH#(7(aP5{K^zUTccLV?X<@;drh!pMa<|5Wc|K+oe6` znxywBwl}V^t*{nd>62S{wNw;!SiEKG@al*+qYr)Jdlnd`burZrMJ>FDxMEl0T>NJ7 z2%0D}#~b>|BZBPCML(D(x-7DOSa@X{k{vHqDk#XAb;v_T~t^?re=F|wZTro0S|FV zluOjcn2O-&x-5cUY!S>S_}wnSit26nUK0+&+{m|nOD(e>2=(GG6dKI*U&{H`ywR=Z zs#u;iD?IGfpThWFemLegPNybh$v`i{315ZNtiV@tn|_?$Vy!+ZucS2-LCrDT_q#i>}Wb-EljvsMDh&GXYv;1G{TcyM>!sxu>8kAI|Dhb5|G zCGYS@TumoeZt_R;hn<3m>JHGl-CVu;zxtE)p{9sTO85uSj1F$An>}_)L}b0u5h|KZ zDTgFn$7=W@!Mw!0U77S&KJ{1*(!)OG_T`)s0}PUvh6S^}QdUsrBeitK)@P@LWFZt)KDU4)^z` zf{jU<5=eMPeQHs(b5#J}S`FY^S6&p$Lb#GkQTW7GKK~)TzjjQ{4PVDb-hf>53569H z&g7a=LRovL%H~?IlC>*&{8zCIo>V4_-QP){I7`PG?9GWx^9ZF=&kRmZE&94ILatg> zhQuotqsWEYms%>qhcMI?&ALhD9pNG{%EOfdwj=nVST$6J8kcW}*lGxrNQW^WKp>bS zrT9!JKpYi1P;0_={9$e_8wq(>Su6q?${wCU!K*BUW8utA0^ADRR>vW?Jj{H=0Xr6z z392Ac&eHgv6i3kl$SGcec1$>57Gk)9Kt=HP=D-7Jui@hqn!U&wyd62s<=t zWy-+$Qb(%6WcKo!{t0ccr0-%*vQ;m9{j1Tm}}w$&eFvfktxeLh}Px}H{~?l zgxMyVQN}kv>b>KL_J43ZH_WNI_bHUjK!DrUSg7*1@K|s1!RwgpZ^=b5?|2{6pIc3k#i)+0b3}U26o?+^do-(pSW{*@BI?Ir6Ca4O4s@hFn?(HTxbIU*Dz^Wvvp4<|hTIL|)!hNab*Q_e5!kUs5&w)^-0ZJ$| zhqE|4%IU)+-G(YnyexR|9qP=lEl3nMusq68nusr)<_4Cpkuc-ku}$Pr$yBIYcV71U zE{Cg3fIAHo9J0zcfz^w^{2*}UIba77_i7?0n!Eybd;k?l?Ng-&_bMg>vIlb%uu*-h z0L3SntA8mZdK*MSt?UZtq*~iBL+EtT0V1iD2gzXy!ACCcHiJac-SjSSao}y#H_;!s zQI#GnE~Ht}%0N%(Vu)^Pu(3V8tpSQGO~R#s5TRnHWvAIWg^%7k=N1C-V;uc5n&kGW4diAWy6ZEcKX!zuzGJ)JtY(&=cxRBMsUbU5xk z0!!ale6ZDZE$;0M0=hbczDedsKyFEtg@Ro-maA-g2ne%dW8v~BW=KMzmWUS52PE-C zSw}UroMERmWA*gR9o{;jqr&T0BU159Bm)A6@n9ff%~x>gcYxz7!-!Y!47&mt6`%D? zA&VqgOIBz`aHA8!^U3~@0rU|?gABMb%mK;chfq0!0dGE{fjukxsGZz;o4w|sh61E- zbrBMfP6-H}fNcM;*tSl74r^ZSxHE~3x$~~X<7`*OS&321p!k#%hG7Ru-OVsy4$xI0 z=;a7F9@hkDyFD0D6`koPvJ0P{$ffKf+J8^Dpy;~VO05mNsoGFA&g zz>pXWPbCHo9qy@9Msf-Z@^ey zCeu}=GRW3#)#-M4e%VYIr6+XjG)vi;ZT4v=84Dq`C1AzK!v~$P&@}8W{ z?+4rjh+mpgs4vMRPnzUe>0v_LNb)QNaNC}*O4(lQVJ$y1(PEsDqpBO90l|04J(OFM zkg`b}+tJDhB|B1*7MY0JR(MZ5m9Go;`e9+a5Yx*-|1C$SUHeY+8|3W-{A)lq{xl|k zvwY7^eEsXYWmY|ZM$evEJ9UGqeiFC1Ehk(P>DE+~nutl$v1k-|mS$o&ferDy{_jYq z09pu|J;dt^DV{Ram%7}*O1{oyBz#&Z)mm56M2xS&d0~MUGAJb_H zTYT>;W8%@Jw@Q$0khUvf*Fw8^Q&S_HO&zUMkiuz|JX&I^FQ9MS?@7kCI*?}K^lK#+ zPHU|qQ^-8KeHDdK%%RMWS!6(pM418U)!^e}34+RPZWYsJsefjr!)8flah*l$@4C3q z2lIX5@88c^4ifD$ttcjVCf|j8Kt`2Uj*l;hs#DrFDtRA+aKHd7&2{oUMm|2SCHmO>sLQ^VeE160ioq7-f zvJcy2Dwr%_o1VR!6wl2WZcnFT!?nH@ORSpz7D)*wSG%7cB^beJzU~EPMV79vKO^>bG9*K|=i8`}^nK zGJX*-A?r0D&%MC5Un-+)Q#^1Ro^in-$5_(-qon;%a#YJkE|+smQIS_Sek$^c+a6KG zD5F;>A=6*@X~=*weO&PQmB?3P37Urk-A93x97vwlv6{GI0NDvqdY81WDW({a^UtDnaHf2c zWzVdJn>RmJvOB&t4rFJcCRx<>=qZVjoswfgPoz zWo7uVtOV%rUsj;5q0JTo1?E33XaV|Pzibrjor#ucwos(h^eod3!AwNk-qZQh;x3DW zXs%f1ik*bn8B$P8vX54O$N;e)Hq}w5qTns|jH}cXfwIbFtpU+Aim+;h(#+{F>P(~> zbEHFa2n6}fa*i{q6VC>};t?ba5|42nU9n%0&k>wN+Vc34wB?bne8TN-N8tf&#c;}3 zK*bI3lZbgU6V*p!^cgblv+9`AApdNJA_L{S^69=SpKc}US}0<;JPn7dqy2CO6#jH% zaR-Q;Q{Ad7F+jAG@eHqE`c7^P0;)U&NJ!l%cr&n!n;lpZ zg!<`hjStKMTGazc%||=(tdU!Y6Y=k*ptCbQ{d>4;O=Y}{9I;nZ z8`NYRBJ{0viO}HPcLje}UqPc$oO&b!zv%HnnC-`(qP&MYZM_eAK{Y^F-tOrU?*i)N zZuMYKbvM|zG<=U>8$&OI?d&^IC~65COB2UY+ZVJQIWfFI7ca0o7UJb|l*8u`wU1cs zN$(~?B_9NxBfYBUNGGaeBL?4xdeNd3=pZR`?Hlw3=?AMpR&GOa_W0u`+$iP4r|d^M z&4y)c338A5D)X>y&yFBZAaU_$DfsDy%9m0>=`c&GAUiiaMp1R-p|T$>X5maA8}zM) z1}E_#_O8!-1IhZ}o<~8^TX@fuZphYO#Cr|b?k+thLk{b?`}>@2Mm`AjC={s*hGavQ z!mXOX=tOX2YIg6_CT@SYz1@{WI8=f9c(~v9Nq?kFfuYx} z@TLPQ{(;WVazfWaC&NLj=7HZnlql>KH#oO-npF8o6r8kWDjr{Q5ZzL8{|=L`qm&nq z11EBfW)UD=Ns4*NqA`){BEX~zV+b#&aBb;Ksu-Tb+%{rq9r_$sIu=a#A24J0A0Vtn z5~e5;hwArD&BpMy#1KLqyX`m5OILFweSvQMI(IQsyVHtMD;`1Sq3w zE5*fzWms9t)uN6lKDJ2H4nS-}Jh$ zNt1m;lYKZ%jf1FUWSCxQBGVV1m|jVh=~0|auk?cvi6%~n0u)L!$m&y0^{qhqZsZj$ zeqk(2o59$t{9X=3U%dv~{H0IXk~_(f#qKcD8?i@pAbBu}FygE{!Er4r=G#fTj7_Up zckO)!{7!iJJbKY~rw7Yp;0&!+Oi3I(T8;h{M&Hqu3X_4E0aU@jX_SL#HFxbvl4Zj0|CtWuSuC$e=ok;HDQ?7wBZ0}VM+gtt}6}ND#S|e@N zMLg{Nin~S7e#^h2TNa@|ok=wpiV%k#@4q^#uDN!6cS z)n|=Dm`oHt@^EJiXzJUb|74>VY_wc07WqlxCrPP=UgFVJF>gZ^OBb&jm6QT6&c+9w1Zjh9tm~`}BlfJu${Pn0QYNv~Y;IQeMy-RfD|H;X#8&b!mqvk*d$n zaw|U^oM(j1rA6tEk7d%%~0yYz#{O3nRJquY6WG+oDi$4fcNx{ zNl>TsYa+2{xa%%%Up8wfje@E`vb0sl6O_W(G)Fw@}FF}`Zr=fwcwD+k0Kl`!wMdaL|@`V?YUC9l4s_SexFK#vjJ8~WOT_| zA(WHq+PjeKCKA3iDL1l(2iS^`Is8GD`Gb!QWo26Ms(MDjMfDT&u}!K|*q8rMGhP%2 zM5eDU%ur7}pN7_^XL7`hNhN5~d?=-+jw?Q>F-RpLe_w=#4fBxW8#ttAx%x1ZM3C3EzV~VJxZ3E_i=t&w(F;G z`J&tcIV3&*D$NBji{|FO-1knAofCP<2X6^xKH_pCXLnUgE^u>v^gTo*)s;S|j0ox&om$ z<|_$cdVF~*fK|k(B4~}75+GjH6=23b#D-7A(x=m$qM7FQ)WeoVr7f!0N?`i|S!r1) zz+);47y)J@pjLgh0%8%GJhF($ds0e#YZE0viG>uCWy6@C%l5t7sOUq9Px$B+&DafJ zUQEyp-(8F#U13C(4|f~JWe1pR+20=TgL@pW0vU*_fCrMHT7Yb*1~jW$fv5D3zR2;h z9SL-wXlHrOA7S;({eow)p`Jdyw^nv}^SoGw;fz>#GBiI$`p@-{IT1ITFj5Xg$#v$O zH!P-ZC#+1bqtL=snwM2>pVHmeHRX^mK+D^agjA|`d2)-><7Ne8JEex@{_jNm)B#XQ z-|_Bmj@NdL{F(#4d0u2Bn0X1xBWJ@AhGBgj;XM0A)j0bT{$s0^ofnH})hCNc)u$}( z-=Tmuw&$v;t>IE`LLrt1DpAZ&% z9JY;oL7Vghxdh);dhVD*m=BQB29et7;JZ7XF0(&|(M`!T0>D%exW(US2!!8ygJ;%L zs@g)TWWG%!Yp&9m6PfxPResdO7l9Jpb`upBI{`;m8v*lq8<6m7Q(G$|W?L$0{$0#K zk$z!0%SHNd*%i^GEmE4SN%etx(EKn~wSD+etq6NH-R5Qf(Bh>WUV7jMUc3SF!sjyu z>Lrc?jNKZR1h1Y-;-ABsNzOML)4N6b)4!)E5YHH}1tN8#tm$enD}e9jk|no~sa>+* zzMC7gw~q(Qn<(xOptSmMHnY_{vhM~C5c?Dc0aO`$8y};t#@)W%1%CiWuP(G4bXtnx zf>7T#NBZ`^J_q@}uWv9RdbAxJX?1>o_*hWep-EoNb-x+@3EeYNv=E`Hf!n2l7KUeF zehS&hHir1fTXp{hS=x*7<6pB*KR(10FyU=en7;3B9PW**c8tNb zxg#A8dbsaVhP->7ZG%3>d|$}aVQlWlpg!WGAxcY@2lT*cgH(LMfS^9U(}VFq4#9F~ zWRUs0JVW2(5Z<%G7bEFco-o+RJ`hmWo33P%!um&O-QV+@@xT6=d(85`C zGz%TzVDgc_*_F<92flsfX>)TOyUMp`7@CA0Y~NIx;rB%eGd7ToFroZ07bGRb2M|-M z@IzzQ?2?yb&VvxiKVRwBamiU2@B?1k`lJXwfz5Yx8RrsJDxhtlGrt=Q6Sf!;AP{e$ zuO*U9U|jOv5>{5Q)e18ht7bVHivuOlbC{W^%fgNGfHT#KkWa5>s|~WaMc{xa+yIjj zJ}yJ6zPKE}f$=9oH_Af_1B$(Ci=9{4xxf_e+(h4tR4t3qM5y`8G%EpHVu~g5wlEp2 z%ahK%%HKQ}zJa=v*84L5_p!K>Qw>KH${c5qaLi)_f-^b7wOUg6GJ?K<>M0aJ-*CZm z=XC+#M^*bA`J`Q_psRqT)#BP6VjK;y@;b=b6LxO4P~|#vP1ae~jwfV1YE^&@=utZf zOoI8xq!R2=@4%z`^t&9~M``&3bXFh%n;zvZVxo#}KUfMLa^O$EKPsRFNGv*z%Iy{k z*8xlo@Gbz|!jap^RhUdUxb0=27BTs7rN1tduyh{L)n7ybwMi;m+RO~g%(5k~eWqbT z`v@7i)i%50O7n{|rJ%}2ApjcvHHw-@xXLFh;Q|3&yk$X`1~99Dh&11zz_Q}7;TGh< z{5-d%j3wb}h2dM`%^k&%?rl>-DyZ~Bt!+0*LUsUn;zIRe$e05hR2V+k?dGkiA+vJA zj0>rbn6o4ed%G?)Bine&KO(}^A>}*UBF&O;-~|miu08kE-@J=-VLYVY?z^b-o-@Xu zw8v|i+l6GHB)KdW;;q?)t$vFJePQyglX5R+SWa^uY5C{w)9<#?wZXb@yB$O?LwXaJ zQ$w$BXd!{FzAYuL6*@M;mzF~=Qa2y_UFen?k`#|rph<7un{gpZTx=TzO=Nb4d%ke3 z-GSzZX!^b6<;<;PK49PPA6f`^nbXH{Z*{+SAIj0PbI;TFe&_8PSIO(mU9L8F+Wg#6 zxbEX{O5e5(Vwl_=!Xpk?m(C7KiLL@4G;F56M&DA>xA&6GFptv{UV#UDs zG+bq{`oRu3*nKjUN^|?kJzjZ{IyS$ZE%&(nB0J`Dz$YTqkk!Zl^>$R*@K^*5m-S&3 zq%r?Yo5EtA4C5Wm??Ai@%X=96WqA;!4-YLrGKP0aWWjiVsUq??4dY1L$`O~_VWd3_ z?phsDb+X*93IN?kN=_1B+{|)@=;&*?WSRggWUsQ2;yckxVY3e0!}Q=y?&eHlIb%0* z<~Dz*?X#tVwor&UGwqigfk`ybso(M%fi+pqWX`*KcY!RfB-X?qA4+oNl_{$P(o z&CIAW{~z77*hQ899S?~ua=e@Njkyz`yVN+3Zl(sqLiFf(fE@%svw#U6i!a6C_Hzwo_>FY;~swz4=fcQfhm9^4C)r57Z3S?2HmL3S{{)uBQg}Wo+&d!&L za67D3qW$yBC^y!lQ!?Et#4@o+1s7KEgJ2t#7c3Im>MZCn^`=fXC`gA#!U40 zzKp6OX{b4##~NAS{m%mLQedexZ~~5x%{E*$=(pdM$VFsqp53N9{5!uGRJyIs%0@aZ z8!w9nz#)gDn<}7if%0dl& zCaGW|&%ptXQXQQ&fsmSUYT7$9fAa46zde9vYJ!}V<3crH?-!oevgGSa(S78VWPb@K zsE71agTj1c?$LAG9e?2IK@Va#U_i+k^j|nRH5EwEhy}v@lDwXlP1BdMMHr`@C1Mhb z!`JaJw1FBiSo5S?Ra)u>dyt@@BTz1hX)UBL!q+CT`hUS>*U^BsMS<>?u4Kh`z^$2E=D;OK+m>jL z>B6W&*|$z8peBUOxm>kdOs$M<+ZC@aaZ4*v2C)$)wuuM&4z5(NCix3WRGIbb<;c&1qq2IPpp)hUGCaEf?2g?Rp3eyKQF_i~e z;H$GJ*;FP1ad+xix^YfU12+w;Kl{a+#t-rxw{z3P&4enJpW&t(;LSA?kNKcAYeUEt zKC?DInkph5rj<6i6TA%($YedFml9im@YARJ+#=2;T*VF)D!HS3?TkEp2 z@>yeMF&Jfc!@Y_^bCO(K73Y?0Z))e{-RTf49 zc%bZZ1Rj{P$-1Y#CW65$&W=v}pYiz;M?Vx9n$aHDt+~<0GGcst;xTg;zq$J>mfP94 z7#HNZ;|5`Ky7|)V+#_Gl#e4X2zbMcPRRYOwme-l=u(?=ZCkbt^P~+cTDhhaZDb>tm zt3DvN7alW+sGQ#c*2TN^sB=Z+K>T2t%Cmo)S9eJ*xe>^Nh{!zE=KF9ND|I#^H&((` zs%$7dmWPTxa6$$JXrQk3Xt#DUWl}h%8XYw6&(|xB?3jd8=hPBPolPkJ8G(nqfr7}~9)oQ4U56kDdVH?Jg z1|i0d^u;$c&&-a(#JQ_f(Z?H51@vus`S0t?%#25_E2SV9&^NnLrQ;pax2T5AtXUdZ z^Z)j4<7s{OQE_hU$|2v(!k-7(K+-0$KUfZ`CNgIzkASXb= zYEB5SWJ@YBa^osxq;Q@k)##@}U^F=xv$ViWflbS`6Eg~hGv%)XXc z`dVg}4^08^uDi!n`nbssZY32IV~X$`-&FovE(zX_dFxb>3CZ1((9*%TnmJ<1yjfmR z9)Z8vk++l#Dy<(ApW+Ldu|Rsi0BJC*-wAM!JIlqhS$>D-osXbD64GD`G9y>f<`f9E zqKC(4J^0K~jp`7nGH3(?v! zwRF~;a!r=onucK$u0M}Gz918h?3Gmt%5yU02mZ**{kI%s>`}JSs+=(5@*H zMf&(A#yz>n!HlFc=}nwv1lOTgcV&l(t2J$VKy66XVs>EyJFjh%4`6Jx}@2--*0*XkPj6UEm=-kJzk6!14Ww&;YzIv|W}T z1&GeD4B4$%2NSCQBUi(%9d3jQmk@3M_$LD1;sVU^``3*6-~`&CQk4vQ-q4*=s!G(m zV$NMi?n%eV3J4L6>Tn$DDu8(+IV5-PE~6#3zUxND#E9;)Yu*MWYR+>BR8t|Bj|@DV zp23;=KSeD^@0&WN_K^BP^(Incgn3m1FqGT(9iUc~C7Ojkv!Zj~ycFiJ`??f>FgbJMX zVAT>TSak7sbab*Ula{<>+ifd-e$9lAXDY7nn_R*peG~{a^kVhgRvy)|if#Yfhk4+I z;_(X}fyNGgSkTS|+epYhE^~p|}8(%)>_NJ!2NCsn`l9jTDSgD#g&X zn-VQ%_=1v=(Vr(BZbrOeq%cgD8&bINSI(r zqi9-boFi(MZQ&icVN2LUDpkoCabq=m3SZ=$PGdt+_qGVOSOK~}V%oXIO%roN9GMpw zo8B}Ps`A5CE!*`Xq~4~3*rLxY9UaF!gNb^lipy!K?J2A)fpk;eNB0PkBgK9KE5Vkt8jk0j%XCR4dO<9e_m^17Oc>xlFNR;ev!C zis~a7YF`$)b|r+EsSai;pwinz30H0)-p`=sfm1x)cge!CLu#*AN$s^?WEd{|zR3c> zq+L2m5;f1vlWvIo&Lko6o+c!IzxMQHG!1s50p;GyaOB(=JehozskhfdxA*bVab)rZ z&Wprp$b#n1E^jd``i|``@6aM7%f>!)ygD6_?BW*0A}`tQ+b)S4E+UTF)#&JS+l6X) zfeGm-#D9Yci}ur!xJz<4Ay4!V1N0uGM7)K0@@&ZA_>4z2MZG*#2E1pqT<{8!L%lzu zQum)|W#tP#W2UNO(`fetAJkPLbxFt}xWN(9U{ff|(o>}6a^(7VX7QzYP%RE_2x*Eq zq^aUcd!%*oEEGDKd4j@v4s!qX6#L&N`gLMa^y-{+TVZ#x8=uQQo&&4cx%(X3WnT`{ z;CXy(>`SccO}^$`82V~A84TVE1NlYsD{<&GNOc2i)=QkVFVbL^!H{L&^3z;~aiDb~ zMq8$bBEx+~sH@??r(6J<^V6uXCjrY{`r&kGK9f-;Q`*m!(sn$;ZWpqv{HPpS255Yz z(SX?g)Z3aH$#*hwWArmzDH&*_yViAOG5q1{C<)ePfX?7$^ks^lDoP@BZ}4pJXW?{L z;aYhfytO$h>{=q!x?YFCF*(3kli{H~Oz!8M9h;~2e3I~Jnji5YCfov-D z#B+~OfHHkO{a|`#k0YaSCOSxEgs5-GU9m&qef!jqa^e0&?5pHq2x&-Uac$JmZ{nTj z6LD|07EYrb=AMtxigs2R@om&J=k%N|t zn3m=K?Vd(MIXB&hq9o|=BIt(X=#4UDNJjAiM@Qy)@Ft##fYtyIOqZFQ!>T1xI7bMt zY?QgVYt(e0$smO=iyuwWPSRwJvOe%{1tR#jy2cu!rYU^^hli7tOZiYsu zt@@l>94f|CQw5O8Ts*Pvg2}{PkxOx^pTyBT&?x*#0W0}XBsXB84-|G>cH0j-rg6?a zw0(SLXv0fO-BloyrU7$7{*0k*;Y}{ES{;3syh$r?X3w>s2m0o(Sy(zA0n3rVpeBgG z!RkhNm--_{KZRHl(ac!z_*RT|RjJgd3)QmA1~{Gt`Bx`?%{skohMI3!+4@CT&9WW6 zu%RP<{)BG+$aZK}iqy3p^uN8+O+EgIA^hLoRr+)Mp{ma5T_5T&&;Q_PFA7*B-;u9d zW9uWj;W0u_~2k@!J_C~&b6_9Jc zTHflX|iR&Dgd> zN5sN1%x%;I*~ zr#dd})>`3J@eM-1%1K{lZgF}YK123@Lbid#vL&BKyFtud0u+;}<`W_7JAJGBuX}P2 z91!>$fN)&VbzipO9b4l{+^#^7k?a zPtv_3qOY-(>4#;|d+yMa_~R@ufN{AqG5ChaJ%% zPt*?)?GUI|ld}k)fQj-_KjfMm5Z@tkBHr`QGM#l+)`LhAk^IxSwg;vVEg5Ga(P%eV zJY+vokPcAg73PfaSD14Emq&6%a9ZCDKiwd6WBIc~aTeeG#Ya?JUe}P;xJ86iMIi@7 zQb&I~RbD19J`tNl4AcVBL#}>s#nf%|$Gp78uD$EMN7&VLkbbRuoZIPn_#vn*!Yu4+ zxqD2^9Nh~xi}YKJ={!*QEnMnV*`sjxSYWOTA<*_6J0g}TId)h1IA5wh(S++DMm6Hh7hvJxx$$y$lQj049=gq=r{OAaHx@^9;D(`BhxS}gz0+7x9s+hu#hNTFQo0T_QA(kIeOa0ushm7Z_+2e0 z>QCOx2B?Y?oo^;fvXI02ErUVp=+~3uU)QSDjQTC11)Sj}t4Es_>>#47d~uR`o?G*zlED zU(i-(+k_r$5VYxB*w}rai-eic{E#!>m1>8I@K15ShBsh5+R}wOs9$6@aNr#uN&|3M zYg%C|%w1(DgF-Arw>Gw~e11*Q{rL5@Uuw!EPErZ0h-RA1twdJFBO%`cS)0Q`qY%1U zab2bQ0yTL`Eg?bjcsjCyPo(E<_!AXI-}o+&gAP~s9BQTV@FLQK!-dWw%T^ieHO2$L zaBo%Rw#L(=3j(LLI;GdRFu5FyazZf*hFZHmuctJ-j~`(sVfVP^}iv zx7}0H=YF`_(3|jyok)K~Qm?Tbl4Q8;ekv_Z`y?Ds+t=&@+Y2A?39Fh$mRt}g&Tgzh zyLiY6s?#2|;R!q5RiG+Nj4)v1)8$JX)iIh!KjR7*_PCK}xUG2(`2Hu9%ZVa{Xgvp0 zSt6b>6b1Tt0xNxdhD=uiRnfRlnQ}&a)JTuaMb)94`9fxAiQMQ)84_=nx|PGNaPqLV`wC8lWY{&;65+%6Os`5qAN? z6RFZ#}m(FwPh6BM03uJ zD|gLAi>RRRs&2wq%(vk%YBe&n7P*U~1G}oOG7e?@QOfQu9RhDY!F33X-SqQ-|a+n#jvI3BzaVHgSU{ZAP}Zr#b+L3C%)H?mHr>SvNft=pg}<9Ht~6(@MqG zOz4<`&05J-JINzOktjXUfrD#D!<}-V=i&AcwN;*iY5c?cQ3`@6rNO%Sw6JNQmd4PSy>6KtnyZfjX9}XWp+mC9|fv1 z8xu}U!4tc2sBHpwc{zMb{D;c3`qiKKRzPAaGO!d&)gfdyUeP}>JIl4z(M=Ulx_UWRg9l+Q(brP)v3D~?@z3Sj-+X=Zpj>UEOA$hY2`yH|wy%-dZQ91HAY-$SByg=_ zUD}}mnWm3t=8C-;V3k>+%sx(v5A#PP#qVa-ap*Lg%X40?GNRJx(%M>6v5m)-XRp7C zp6It_WC;yU^|8n(jcgv#dpC+Opg>JAYr^!I@55W;(5>v=7x~Y%v77`aY!1ww|Ec(9 z`FOZTi08vyN)FoR#b|`G)jJ{N1DeHR^4|qyu1Y4h_nQd0S==?ulW<{yf`tRNvJ6W0 zb*w%>ZE#4PR28#wN~V^GR(z}f_%AgqU--es+Ki7rI`SaTFCv}X%rkoeW~uTp4}Bne z>$=b@-CT8dx9-aIgvf~Es!>`mf5UJ`OOZ}30c4bzL778Fh_4xzNu5ilg|*yUvB-Mm z@Se%$oVAlXJ>LZV;>nQbfo-m;)#;K3G~L7aD}aM9$(N1+8LZZ)1S+N?RPxudL6ifP zPm*d|UxrTE(45YxvOa;vSG(l!{)9_91M`&K3v+Ns0-2YELmDp1=a3MYwYz0YHbh93 zmF=yB3$H1|Bt4Z_nV3tv&^6t7&utNTM>}wH4REHlQVctKuhv2Kdc{mz-Abb`G8=a* zJH|xCCy|{5VQ(lFw*T$JNTH?SnnmUrd}2%bdK1B>F=QD+MID`-EPgxOQsPAi)`$YY;dGqo z*#YbzSqC~RgN%fPd+12#kKoSZBoFEfxaDvF%Z*4&w-w(px~-xiKf1FI=9wFYrms9gLsgDpC!QqC%s9U(YbQ7oj0YuB10CLxELv2RhL?A|hRi@=lM1(n5g_}22 zzz(8QOXaGh{@Qq}y@^ZLj{a5N=pmnC711+34$3dSNTz+4b+-=ha!WiJUPRKLa>{6xXSXial^uI0avfA$o3Viu=^rZ*?pUewBE=<*cP4| zI4#cRtG*|BroK9;twMi`^~K{TsJm2}a`ZnWp8F7wUNIQcBi}5p`4m&4c*d2(&Q=1e zA6A*i0$5M04`--f-qJbMkhFD7`JGH<=@#4Uz-ENl44&kT%BT0hp^9CaJRyQrOtk&M z6E)<*hncn?(ton~P1FI6d2$_3EdM&S%5aw+1NT-^pF)i8D5LLzHZgD3{|2^)(IE?Q zUWN_;^G2RtmkBiCur=gpmyzU@{4R0OeEQs@QI%zmnMcROMB&q^;BLTHjufJ1A{%oR zQ>_ZjFlm<4K;gdnbvj?v5=iqET3F$<<0gIDCT`5>F&>B2K!VU`^UuuK!q#(AH5?s~ z7?}5KZAK3~3T5&*B6Cq187IO@4}Z!wp!K_{467JZ!%jIPH}9r0sA5FT@wqFONH!Cg zli=n#iRzp(=U)bQgI&_%b9R)$0Q+LxiNvT`DMwWzh zjSTFEfYWtB+AyrrWp1xvopL!oTyH$b0>VP z);WrC9j0Yw!z>F!-T@J3Lz!yFxDfWy6|1uYOUVKs#FY1DMxB4~qeLfU(GnqjLJRUYso1ftm~q80lcziYZ`63IMm_ zMu4T9v_fRq!6aNuC$VKlhKs@_yyV36UCS<+_&9ug7q*ofyI6!|xmpC8xsO)k{ks&l zfS%3Bi%6{Z880!2rNnNXs26f#W&|ftOW}Htj93&Mm~ZyKJh0(OC*h<#VO&c48op|DCIm8o3CvjF( zG=%pXxTPFfq`an=a+X8Bl+*3v{Vhk%A$aJbJA`BI*{EBE&#<$W=@y=p5-dN{(mlze zAf96Bo*Z2Kq|oB$(Q)xScxg8K=AxpJ;p^NS*de#l~a$Y_=yPCb?A<>SrvXehQdJkt@Lz$M@APgAY0G}+wu z@m7VnfUDkLgiBzN?x;I{*YX|x+y+(K4Ve0~E-LkI%J-c{?#Em!Y!cZhe$<7dhq`cd zVvem-*>Fv~vl?7)xk64ATdedSds&u8rIw3dwjTnf*`0BP>ugy+$S(P@>?bVE9uZUf zS|hHe{jde3zs1x3kq%T~*8ixaxMx^#DVS^<{OGGL zfJ&WzH*(m#hb@iQyTcv0Gg9NRN}jDUyWD#hU4lU_W3*ozlU`k3A- z_x&V4{z)zm;Q*jaFb6`bxX*9u;4;@Ytpv3B_XY?edgP=DV#mZzQ87^6BZ?I&AxV-> zP&Z4)wxZd0$hg(V*Qh}*PQX7A@YYV+hn+u;4TPVEDHK#`DMt;P3!(c&F`~+M`u*`} zz76vzX=DDqA|EL^8I*1&W^+l9W(o@2I3c`ajGLY^Vk3TyUP(HseK$Iny z6FM|p(ShF?+GT<~OiH#5Gc z4M^OmI~2Z%46sp%<@~5&kbEDW_3s%UN1k6yEMH!*%7%QVeY3#0ys|>rWSK4hz7ipY z6FO4&nMOx=`8ZM{6ouB`(;vTF_ zq5Sbl33Sl)q%Lut4N?7>fSM5wmQTvOND7)c;w_w1r|6(Z+!yfo^x*Khd+7wjE8tDN zN(61)zdpNl|D_sylp+T5bl{jk-Im~R5l@zA^cyZzbo@}V_IyPwr1+N5X-7J zLp_cR={`e*YuK-*JfA(js}M7LLcDO_wIntz(r6soOu*DBp;me)pzlCN^VN|a^39Vd zmW*c6K!r=Wt@PP%fD6G8rO4?3Bs2$4 z0=Lr0R-)QXiT#DXJt2l_0Lu5;AK%5s8OB0$_1S6IBCiCe3n-HZMF!_j?=FxreS%g@ zlB>Dj6TYVtW~0bLC~$J-Hk`0f%-V@&MEN2vFyc``M>9;zgFKloJ6e1%TuV*t>J3rF z!=`Z0Qr|2&k{MYd(h{Y}!bv;lbKch$Kz>frW^F?21*{g!r5T9_IS#Gx!o6E`Wku;D zw`2SxFq_^*%5_#BMe6;%4}}%N=n!g^%r`@dSUH?tf?B*L7C_5h|DX%jD7dZC2YO!Q zgpImoIN|&wM7TxCm?b;O#ng%g^g5YKpa(JHX~9gbs6XKp%2WnZ1s9)4-SX1XnVH>y z3Ru?DSRWetia!YL%JCzh2cfwVSl*L4fh-B#ChFNb)UMH+S?2pmx0+iij8mUdmlD!U zsFx9(^X1gg$Iz^BbS(ndp@{i+84v)Bp-X*+V_J_eR#z!P&myYwWqKjY1K(Yxg}4aH zFfsyxS`k5H48v_hM6+&}acB`zlu#&z0h!1s`>pU*Xl`Q8Dc{#Yo3-}pNz->`&N~>=H4Ksgiz%_pB zmYeFibA1%R*Q;v1xT}_Ga3cnN-q&TWaA(CFqi&Or=fzkRY+f*=9Q6&QtB#%r+eZ4^*w?u!S!Q(D&$%)}(oWf>^XT&rJ@!iVpXuzoNiLc4q z*6DNMqBZZ36I!)S!eJ^-%e-I5uGuPWh*xtToXOD_Tcv-g6k4UP$z#XHNbQx_zDCcw zQTi*FQv9nG6YQ*&5cJMku@scX8(5Rea^T9?#@4EJZXIyCC1|w?2@8!`Y70e~2+RH> zM{zFm zYuQS8r7G3pgXuG1snw%8>rp@df?XdH@hAjd#2$j#Su|}V31-zbf?JD zCP9eQM^EO^-6Y|b2_GDlLpOGxDe{Og>^bEOlpe9PD@FQ)>o3CA$y3UD{RWrg07+f)bDj5l3xIX7i|3M9mE1*gAu<)|y%K%~JEtYT_m{Fe_v9!Z|Jgy5J--KK}L5RoXlxRR?mj@RKM{^MIF$fcGgAv(U;RSId$@8uK z-`;GNEx6Xdvl5-*$mgv!jLbdU4DA$vcblQV0(Vfw1`w|65eE2(RGJYw^% z&-}Y#%_-Hrv8*1AP>zmnYJkGB=OB-0;|m-<(lj5^!m~j=J{8n2EfJC=FTxC2N|@|P znI&N^098P$zXXaz!QI``NtGeqi0YS*Uz10v4Vg2G2+D$K43DOHmqh-#k>7#SzC~Cl ziC8`b21;9}8~IH%Asw}=(S`Hap@vyBF*sFHKBieT*N7NEjVgRde1*yK$NJtz*pL zZ=xr!G}n=f&LlB~K;c$dzvJmGI=;n89Uax4v@7}(!=>huJo`~_W2TMuPNLEjqR2;rCp*S`f_Ui#sbvVzs z5}iqUa8A(vA3*9$Tps&$imx?$!{JLQy;$%=*lFVdH&6n>adb!ztdi!I8+1mvUROO_~!%A zM_91t3m91A;J0S$H2NlvdkeBs@r?rY0+_dt%j-7{tV7BDb;1dsyDLNEMXmzTwb3_s#oOkm zun-TZ;7OH!sYaB86bC%~PU^rSNnWT}!Z{KSQv{7i9fm^Xpmb4U3D?(Aq8v&=3e||- zL9b0C)~;8K+J}|PLrfh*6`^}Tz_NQF;Xc&|E{Uxf#)r_(Tf8Uq5XyOLBnF*9TVr}b z>q<5tPec`z$ayF|V5Pc50||eJKxG?v6DKB84LaIIXtkvIE<&q0T&HWn znd=}obcQC(O?X2c?9S}>xVvQkiKEVyCr`{aqz@3?Z!1MPz$%Tk zm4mbl#yMJni^&=asg7E?yK|@t#sFDxV>pl-9gzwF-|I-_=)n#LJ8fFqGj58xIrB_C zfrdeEpb59YR*p-ig89;k@zITHxW@R*2DVntUw^9K15r-TK*s5LLi$C2=>+w?;*9wK zt>V-GiaLQ+F9epu{cX4k24aN%Hryoddb|_isDtcy1W<&I1DYBPzjJ)3CqtwP5L4ed zkXl78oEpYaw{sLN6mQWANMYe19*r#^IbR2O)wN(sC99&Yz=)?Bj3>}qMTAa1X#o(2 zejD9QOmx}yMXEn1L>6fB`%4bHYyo35B=>H)T(}WUimQM|bgGWri{(C%?d8p?yVD!m z2-}v4KQ0<%oFkoOfi35e8yLJF=8nZJ{Ic@@g?zUu#6w`rM`Sg1Q2b)Yqbf# zm7~#yD*`H8;B6sRqo2zWNt!$vhEklAW_lS3X;7y)VI%p!tO#+TMr)>7aj>!FhaSqj z_K>!YftFf%0wPdvL{)?@K?~>UB;ykJBGQ4Y||!Ihnx0gVL!C z1|2nEs_%FC`#t||h>&|Jc8jpU?&6Bvo|WUA>7NQt^7kqK-pKmkh;0|%&_pcXk}*IP z`sLF%FCDR}+>bkn@(y;-Zyq?v+zcaQW_*<0fea%ucc+isKz4*ez>bw^Ya!_#09lgtkG9_5FL9w*NxM`3daGe#D}V( z2!CeVh1Zx01*P`LMLIcGvw+~8mGnx~`Rj$FUM?sQ+kIKcS$jWMRTzP7#MRLOAid&A z{%}!amuE2iK#rp?|D?Ay05pv%C}n3p8k=EN-{t8+c%B4#GWXx<$Ph~Ac~Z?q#Qv-G>lE1J4{Mig1VQBBNgX@zvl#Y7VRd zDo*zo?k`#ZiRoTYVzN7&si9H_UeeX_5?+cIeL@5@V!yMMaNIlct{*Aal(5ea^qn*i zE_+NvE8<3mydJh90PGOw;)ggFKelCPnYtWhvK|;nqOSj!dx+V&G&Ie1E78(;7u%;~ zNT^cjfdK(0p_w5_Be*F-P+{jL-GukmPxRkGV#8(Mcni6}773E?&kPM@CQS6grQveH z)W$jRKkr;l0KT7FE+S;<@d#T(ApKueK)&+`NYlp=|6TmwUtoIa;PLs>kdCl9#A@JZ zgW#;%1A7Q?-`~#&VQ(0};9<*0SQ*L-q&N1rF~L9Vh#+|JE(m#u1ISb=5uVxMB3d0; zQrdeJ#7FwIlXEHmywMyhEWGyOmD<{!j}s$@=L&b~hwFgpo6B>)c+7}Nc}066A6Wdf zEhKIgGzjj6z@-nMs(PCr>8bK4OyNziq+UG^54{jL%06~>YD8jsxUmw`d5F|Zz6d6` zgsMe`OL@MI`BmhouuwnRk5 zuji^JeC8rFbP54y39<3~r?ewOE3zdA#7m6F!HvlJM|3^?)>ioe_pk8!mHQnZiwOCr z(72C?e?TmelO%M&!r=gK%h2JZW9v|tE z#UdFUT3Bc^QMoPue3i`KN>jJ%LL|81K8Q^Gft&~K+&4+>8KajPd$Hr)0l~zC_`ueN-o$OeeY?U`u{JL*5hJh{?W|m66_r5rcn6Xx!G_R z_kdg710<3kz`VZQnpv{-77wB`XK%M*CIp(yx0@wunk^p*a(PRWk%T?z$)xaPv_XKds;NX8 zWT5$sgl=Gb0Rj=R5da3K7jF;c@&-G88^l9E0d)I?Z^uC=$AggI0dVx0HKvtT>IvDF zwIfJ4dRPmF>&V4tC5vd=+}ZRYGTDK5G00m-JB#}-ks|&?3@pf-=-VzQe;V??&Rr?D zr$>&&#G53;-yKu?2TLSaUm5a{ynE!IWz&k`A{YI%+K=J|gm8MUcXngj5T+!JJc-?0 zp=NfCvZeXUBy7b19y?xa-dF~njePe2$KXs4G-rd2mo5Pz5)Bt&5=5o0I ziTdXVOsWwRdkpKB<=6U8ZZ>C4#0zK(Hllx54<4xP^ z(W+)y*(@I5qHrfcnbNO~TrCBYrVGuQNjQ`odBi8Q0P<_ZXS5=8Za+Xpe*O$L-_dyr zdOW_+PH<5C4$6{|kgDtT@0YKRgRV#%^q!cl+Nwgv=SUJ@!^cR5>B8;EEs$zC4=JhT zsW7&?Z4H+?Rcr{*E#=i_X_DKe$>o5pVf^J(LLN0#Ca*(x%a+KH_mM8s#yAUe8_NkhX>z*9=)1%{QBev?( zV^QR?$(%-2dK9Jgq@*eNK@U#dr{CuagK({wCZ#1o^ro7^(ds6^{u7SXfe__sV1>}Gp^J)wl9+$R zeT~?t%*|hXia09y=6CdE!TIYunt?afJHR^1Uf?ampi3OD1lxXIiF; z3LqObuLAR(+nAko7(1IrtSz*eX(+3AQVu8i4)bKbGi&a_888B1t0S)|{o#)<&{LEK6OgmCE0e5NP!CwaPN>qG39J*Hj@*R)mURD_kGe~54`36v~& zFgx85Th@;A1KwRK)s$-}!^|ge2`~bn(tB|Z=P;Gt^VmOX1N*2AtP&C_A-vGf@f{OwQ8TE{YBu;61s#bA8g8MP*Mu+hb*| z85BaY7Uo0iiAY*S!Bk+CcKBMB@wMm8=IVSzxYt}q(p)P~mQ_m23XE76IsjR{nU;=0 z)(`DniTgPq*O6w`nao#5H5GD}z;&g`zhXa5VnbfP^;gR4kDgP9^!2(ADfh@SqhD#+?zMf(TlA}Wq`W#uOWnmwTQd1UnPy#vEPIyiFcK~JnJf4uaX zhYvdav5*QmSt-n9H7|BUuQ_LOn?d|-gI~7`_sEtARZmtjkD05VsdkZZJh2E4bL825s?*SZF2^nzwVT5WypGJKS2)|pwZxozFgZ_* z+W;NEOQU!bX5_}ks7)9HJ~jV)>uZe{Emy}-CqP&myag8a z&{U9L&&=(0DYusbE95T1QuILEX9CZ}R%Ue=L|Al@-^{dO92+(qp5E#7e+J*(IHHcQIZ?A9xU4jW6PF*@-PLkDl~$ha$Fog!Rwz z>cF^`mFw{+71n>$o|g-oS+@GWT-$u2e!&^T~JneMDWepND_4R~p{ z_N^~1{tYeO$3`~ls!?NP|+-ns$JEMyBPqKo{77; z;wwo%Im}f5R3&iRq4g)@s4kc03QmURCta*A`eK3W*Vk|>?h?{GX8N6K=zK^|RvRZm zwiFIwA&oC)@jZW@sR)eXrTbRjL9{IY3*J-6v?7HkneIBoRM`dqc$R_?(Y~Sk(gyAr zYzLRisJbTg%yL=ocXcPjO}o2ToKM_n9)pA>aerWYcKDw2eV564`OL}dbr3YXWw8i} zYJ|fIGWZ2j`uTr*CpBd7bcKu`X?kDZoh*J0k9wtAT0u;cvXz5g0Ot$3 z_QGw#a59@Ow=eC7&$Ysf(}ZC7GJu|LYJfa;Cq&psO$n&aI-u?M*{Toq>4qyRfcD%E za6d!hAsiX^HYa$HLVf-mZ~2|PNDIV`2SCz|V&Kwmb*wCk z(YYJ%QrE@%?wPgS{I_GoUy*n0gc$z(922XQCagD_sB4IoOLX~-T=h#1{9g8tC-1vX z5N|N0ZZ{!R&aWqg>Sn2^%>>CRpzK7*53u6J6?si%xpx+~ZjH-j<8zY1{w;!Jgo*@; zD3yr+3{D)n-zo7no-}!CTOntmy5H5Ty7R2M&*+d3keMCx%Y7mK0Lf74)OZLVUCO?H z5mB5AMsYflB~tNhdMds?3W#6g4bp%-KH>mXt;}SAm=y=dLoQh< zkYsr@xTN^&Qd!kLgaMJRQf-BLeIK;2c*(i;xb<~FS`%YMv?iXow;17vKX1=BDwYRX zClAq)ZiaWpfgbJgvO!+((J2Jx?+gp|Tf88>Jm7hj*ln~X9t+p*-|0)#eQv}|clGZf z>1rcp{bT0^J!CY8hU`Z(HS{rODjqqrd_o=z!Nj9_Cw(XS0h(!S*t`eEiwMU;%@gXR zqemj-zlwMA(0&;k-XRp-Hey2aNEP|ad2K86d2F{qHNVZ5drLR!i`%Ivgqc0Yn_FcN z#_k()x>+1H#*X=u1aU6`w8`{1P(_iG;xto?2F}P27y9l1~ff8P|(85w2Wj_6#Y8-Y!pQ7`;_D) zp#~NY)D`3KRAU|J82{=(+5tJlx9TNY0^Z(GETgh(!`XJpfp7FoI_@Uad5X*54~^x(3kg(76V z;mH1T*GcQZ7$X5P{kw-|G;JwGx`s>k&5 z46DYed1#p2 z*cyWjpY?gHwV&&?vR)1RgXg&(a;^16a?A|X4l@V>E#2^^CyPYPB|StWIzaCb1!%pm zRcM`sTFT60sdY!nnW;&Mk&yq_Sp1j4_%9#bKZr`m#wVcfb5|^_@-QYL%>PEV`P5kA zOBW9*{s5vgbxbiM9O?t;4}cCe3J1;gasuX)`{kegr5Kv$=}rtTyzU|kT;d5C0!O@) zxX8OMsVc5!ITQqxCR}3)pLiFFIMxYN6FD(U6jzdArMhclsT~h|=KBP^8`gjBI0Zb) zliJQryp@}zk(}Ay4OFfvk^>5{ysT9!T!<=?=`0hir*O-_(ewaSMw%=O7z1)zPblyM z1Ob%SzH+;VlRi|M?lg*U%TDrIU0!);0iN(6J4{`9oV`qsp?eM2w;tx7=&;R4Kof6J zC)%P;_>!1J6z({TYI#D*#y=JXgE7>jL?blTzBE?9gjYS{uoPBLJQsnsY>?xwsP+w2 z*xJlo`x*}EGor#c^#WUjsaN_|;2!R+{{0jiJh3KUSUU;0NXNI)grt6dUk!F7*H zeHgOqh=a&)5#NmIviAxdVIF;a#b)H|+|o3nwf@8D7C9UuXq+J8Lt=4PB!+sHiY#}V zoabdTHFx*3bwmue?A_;I@Ns3_&C0BsNv**p1flMwlAlRmp^<}oU&!IT;01-ir*uJK znaOKfGB=zgh}CI&QQwYRcX6%36Acq{ox|tG4~nyRLO7F%OQZdyni@G9U|2kumA})nF}BPu_zSOU&GL(WwrwWgxa;V zLdaNtPv;L<=`o+bD5irI^#L+?RD>G_w-(GI&hmE-QdltguP5JquzylfOAkuakxNVA zo&a1AIDhUw{k};82-t!NO#(5^2Dr7hgF8<+*?0CMqkCGG>RKw*7Scf^=&SH}L9+IH z2Kc~XLl}r0E`u~~3%G{@a1;BoW#o!V;n%V~m>Oc&fM*jiNBDNWY_r4$Vy6v+*Z}Ob z0a)Y*^S5ZvmVaMm6V}ppD+o6K+(<#NXkww?R`_dAf(Ymi#BitvJ+u70e zn<>)z zoEai-ka&ccVCy(gJkgrYV-jMyZ_U~(p7;Qe@Y>%^GAI-{b8ihWM$}QAm3~BI|6FL1A8NR z-3%ar7``%34A#Vw0>{qV)G@J8d;kj;>+nu|LOe?+stEn{E? zXRJpF`I0#3zC(Tn{y`w=i_*%<44oA(WpR zSy+iSKSg;i#O0)$ypnB2HJH`GM{hNh+2O<()EWu&7VnwBoAC14clRQ^8u2y9%>6-> zm>+~Iv%@2K$O{r=!y$zYqbe1qjK_bj_zzah(t$SnwhlbeSBzoXR<=rn`MLdXXN{Ey z_JcJ;;eBPiO+m0afgQpo4U<3KFv-pNw8(DV{S*z;5W~8dXgJ((DieR}{wif3eYXvW z(YdJpt1BXfbOF2pz_UxlBznNm)J%jq-6%w8^=no%=-nud5JEcNaYDg#+B(GtUV}Ha zwz|ea2fx@BTlcPXtdt$DWd5Y<_d3?-1Xrxxwow17=@R3jfjM+fw0w{5h&rfYvn-sv zV2i%=+zb_?&E);RFx?CfmqBG@7UsW^3c%Qgr?81v!MB1@CZ3@lvzTTHwLC!Rp5Oev zXzHgG8T=xKdyzn;BX$`KPd6)cgGcC!nt0a^YT9(0cyAR9>l&^Y*oDqB2AND?rW zj|r3W#0+%2oI!F$-3e4~5N!LzGR_Y7FLT{orOj>7y?7GEA!`9t&RQKVE%{Ry8w$@k{QdINCGF#9pmrmjIaVx_nU;}C?e#fGja}p`e z#Y(@{3E;2>TX6pcle+Y8-&i-Bf8*Ib}WP0KVj0 zAoQB^Vmq!UO>rxAXFl(AcT{nIUGAqshX?LhVW%DzIU;E4@pvbj}Ea)#7RU?-b6C6p$d9A&PxxAX#luvzzeGs<9@bPc=2&72s?ySrfB zU5@*${7&Oh?y@`DOf>A9BdfyVikgQoyVFBqg5?fqYB1;k1$<#<07pe9TqUm740hpJjnyd{bS_GF5{E7{Btwk zF+MiD_w7>9`P|M$#fc3>K(&Q*Dw@*gltk3hLGHPCxI=VUsH8c53#(jiFakyn|Aux# z0+2P}K$gEGhS&j26#+b(8u6@3Kuu|#hS|N%&4j+EfSiA&t28rwI6w`s>yJc21JD^A zaLB2XD#ttes*5ab3(;{vx%;J*?Z$;W6O9k=HP1kqF(v?I#+XysbN@;9cVV zm8|l6%uP@}CUPLFH``CTX@;3pK4zbG2#S~yZ2^@4rqXU3sx(;a&@gejqpYc2UPjh- z$Bx#6FogE!K;d1_;6upz;7Ms2p289Jq!^w+O~d@85b`H5rP9Wy=_3a|}i!X9Z z7R{o@ECX}*>37LejNx`fqp9$%j>(18iv>AQouB1ZoDLDhbtIHXbMH-2#Qq4bj%RsaIFH_LSzOQWWW`dU7)9- zaR?14B(qQd}O@zJs^N1Q*)KQL&IZ3=i!C*wV9` zGeat_&J#cAfxuo4c!f3YL(4N(0K4mIK#gn-1d_6#Jn)8HYOX7tF4;NErNNvu33d4u zk}Z`{dkCRn?mUFl1S(3+LyAoX;0I)1OKY*Ox{@-)%Xh*3Hn^514vZ{K9otcFf zj;Y*Q%r50Xi{_h^&0Z>;v&1`FgA~qupKxz1+Z3m-BOMP##0xQ7(^gbYtGUrCOriYO z8dzzyxaoEP5pA3>6l|PumD)102u8rNnn9>3P|W0-yHQ>PiV$5{$SevKu^hK35Up0g zt(1mV>BUwMr*77CVR)Y~t$13RjIFrXATjX0f#<=GNB!Zc5P;421uEqs;?bu4P()g^ zqNw>$HWrlb!BTQO{{77|!$PS~pF*>AYr4A}e($M=;aAixQEtt6Z#ManTRhVgRord^ z8yDinPe5pm9zk4HMYRL6^vq+mj!#%AT(=uONR*J^H#s5aUT9{eek*&QxeR!KN`vcn zxVMz!KP-;e&Akl2FfWIEYYq&#n^kK5CQf;_a}{ofj(HUBvA5{F^~mEhuAo>$i1EF5 zMvdJ)d`G~P6#VU_82H`hSZPq;v5@f->$2v2!m1oPXNiSba>t0?t?3(PY%f)YOL(ji zKGku83?p%BER@UGycH)$pXAB?OE62M3{J=vsJb3mS}E;O&JLOBH$mj27)D(QRPbsJ zO@D>HWE89Z!l{|f?h?uGsd|;3^(sBgicd4}Y3_6#`TlC4a~DDs7j!_edKRpnHLGW0 z^{iPvGplF4O3t)K4zsd2sVTZ4r4g%PR;*>68N@>qd5--d-}lA355DpkadYytiAJNzMySZ4R`m1<1LOJn1+Rb|cx zJo_>LFXJXd0bXRMnAk%suMRknQ8<-#xCaG3t*TFJq3O{BqP8_Ax}ED#6$w}++tyKS zeJ8qM8&JHSO?1uHqw1|)#8vTsvD*K1I_&zCCy#G;#uLd6TQS3dl>rSH=i3ZB8R>N zG;-a;TiIGrzt3wS42fJw@vT-0m>9}w>Cxq+B>951zCqXIS;N-MdQeM447*a|)feef z@i3YuTq4;7EE$LLksuGn> z$Frvvt_pLnd1CACz?AkSwCEQ+2>tckM$OW8h)KjC;fTR-QS@8_kE@_EZS~iu^3qqwB^=DOHX=)r!w|2kMLK=GC#;7e^ zLIb$QT0moC{JT+433cA2KLnX&Q*ZLCH}?jIHWL6F_QRjdg;2p*lTY6my_@z$szMqH zv;tTcpMYf1IpMl3fBxB)|K6DYZ);3_fM^s=eT)QZ`1#Ptn34%6#ckQ9Dpn+qNXX{H z{0VKC^z$L2V0B%n6lJcb^0moSEB=;cKQJTZd}s+>n}Y={=Yz-BrlBan4f-S)IST~~ z$64n4NALr?`Ox9`nzZQfZfYhcpw(dd67|-IBG{&TH&;!r=;@f**t&0>sW$BG@7j0z z?4*>b*~3&wG|d%T^q4~-Ip%}1qC#Kt1uG-4dUZ9HK=qshX5? z{F92&$5Z+Xvd!eR!#xB=);av68!G5W32Jtrv9Wq(d`Dlrl{h`aGteKFNOY}dBReZS zw5FO0mKD>eWe^Lfp&2V`yix!;JvKGbGr37Z^gOtxo5q^!_QWsx2q?4$!w3O?T3yu* z(HN~Rp4fCApXyg9@+Y!uhuZdXiV0a{{LhIW>KfAc>09A_EKpiwW90#|FR0ap ziCG?nx>$$$Mr8G)C87iZxX!EuMjnkEQ;@*fH%8!3hDaz8PD-lFfiL}`8`2TiQla{M z;!-%Le6czcN+Hlx>oT`hrLgAbHiTLT_zzqz1q7#;?KA7Dk1@tlR_zp5nNg?UW+h1> zIg7-7*pug4Yf9Od`>-7h&Hps&XTeXhTRzuPfe%9w3(!z(A2hTmKtu6SrgAPJmZ*@% z=F><>VcM+TxaYx;P*WcYxRjA_btW#n$#X%pRgdBZ12iHYGrA$XxUHdj+tkL!;-x$f z>#qGQZ$gx+{g6L?&GqXLvAB*D4MpLwyx{lR?qHs@b)w`pbk&RJyH#@bMaM*>D1i(`B?bJdP?E8*zcoDu?|HK})C zMM3b?3z`ynZF?18Fvpzy#eKAEh@ih0HeKRT7Qc6MN+;En54=}C3jLjxFUZm=o)Scu zK{IFVMhbshIggbCy*mbpV4bx;_t`o+uK5Ys2l6PdvyNR@$--MdcU*-5Ac^NPIK^e| z??e{LajirVa0~&Z_?941m0?j^IW%?E_2fAQ38uDa2p5v-r|C#H1ljav^$%&YMgJw07_Lm5l+wH3xbUiQM&0Nv5xsQWVbx;5IJ;lbLR6b=C zX!8>nf)N3xiYO!YRN+@op`K29E8{N<#u>k;7Ei32t_g`4UV0)1IOb6wJ}UIsv#SIi zMWCGHC-OhF?!SNd|MBIeResqB4K68!-j$J)pr-(1r5~D!O+2lV=0l%Nw6UP?^HP^C(8o3aj`anmmBgXd|;>6rFs@LO2v zd2m=>HxQX|Lt{BiEM&h(8L$ent28s@kHtm~x`B{4$pa|Bv0!v~<8z_V9>>Ly0YNm* z!IU~FxWbrM*NFvl`4jRoX8LedbX*%=qgvpEc6jj|T~yfl4|N_cH2r7=^a#%6@&&qB zmVZ{Vk7Y&`o-FH}r9~ZV_Fh`l$3J4PRU~}w@j+a5#Fx0!c9HKMI(}WeG{{#Ex6WNe zv-<>U5D;svrY66-N^@TL$cIPuT~~t*2g0P(3?wyOBNQ%fWloat^>`ZEH(f&^ z`-2MEKOva3H|FZ@6@o|kEwc7T5MKj}Ag*g;?iU>PZI>=m01D9X35ELJBY9NcTGk!v zKUHUmtF}Y zc$~ON`sD*o<{nEhT_0y2b4ZN>;!*2-B438_x(K!Ex}8Fyd>HB@V@I9?aUwNQ2H#_l++ZHbtq7-zj zY_gtFvhgmIkJ_sfz60NuzR*rPgaye&)tTk!*4bX(h{}gkR`|HP+r8Ol9^#vSDciro zl5t8&_z>(ORJXUH=MJ4)z=o*z{Gwq7EecZ1xs%HGz*1IBx(wFcmDWZVM0eje+p{#@ zy?yOjlW={7FMZE!8OUpKNUueAnkI59di)W&emr7Sbv$_Q*tu9+0?lF|{|fdUBE`%m zEY}XKr|$7k^S9g!IH{WHbosY?@Ul>>(r)BoAA!T;Kd9Yh+4$pQTrd1##Jyk#ZiJkm zXyFO+AO|t3T+)86T-%U^=| z>oW_?BqK_?=^yR;X9pIs-oqzsfv`|w%%&sjMhY`$TGe7X;e$md!l$!Um?QdLkc%E! z892a7CeDpo6K1bX#kw$GS=`}Hnxi&~PwA;2V3osdEXv7tD5C7HxG_g&@zh4ZFh^#3 zFmaPNTjY%vzRgm*#p3RWR9e!W+{C81Oarp_ze80AW_eNi7HHp)-nR5 zr%cAt#L*QNit4b)Le?3hbcvCQ#F$ZyhxE&_3J_DDQw#LUPhqSQb=k&qEAUba{3*(Z z&z1~x@Z1qE$_h$XxE9n6=fr2eSouxeY|&_IKYb`6FmA8J>vj9NUbK?r&GJrYXpi#o z9;5vTP62c_Msj4H@7p}c^l~|Ox4)*DfzQ*HQySnIY&kJ;p51uJgSnsRsUO4oT9CuM zFpi#Qbs!@*OEri3iF(&jZ-G)q2%da&ulg|jXrX3zGbawrKVJsU=MgT;<@xxQUKj6b z^0s)MRPQ%$9o}W@APyVzcL#Z70VdH{i~ZUMU4#Y z$aic(G%mZoR1qpml2*A_;Yy9)zrL$PbeDL)Yt}%`4us-oXWi+rWEQ^c?nSH02p=Kf zBOJw|+c^}`1I`5i{;3rfF|{Uyw-AyoGhEN6UU~XHqC<seCBh$usyhI`z;Fy%VFRJ9mAouueFY zJcfnxK~wC+)LJvD_UMX=G(Ns_PYOH>`EDqDI82GOSNMVc99PAaoEIHyGE!=ZVs2Za5*! zs2g>OE<9{h*UE#E#(%CA4#*Ql&X2~|r(GZ?(rrl_TREQbjs~teL3G=YsQfnVPX7 zVN*kvhibkzBkT0A-)v~;=blKNLFxjsi zlsO!eF+QRrzyg}Zj?zUAtF~n+SEPd|QCU;6K7%OTu2Jp?*74k{scm0^NeSf)mC!V) zP1c1?$}lJ`09bdg@sSy1{i6J2u^wOrtpd;_sOYl@DTRh4JyaH`yk#S~ShZr7H;5dh zGC*>8)*8!++y4|%-Hsw8_PDZ^TTg*5hHcn>GAZ#bV0f3q_cCzEvQ~o%WPrcn-l@^r>76 z4y3KHXFj=5NoqrhH!H9t(=a-)AFtXWd+3ngd9r+b#`gYzQeCQdHhuxKyz{>Vc2Ef*gXLV$SkIc5y) zvckiNxW8KNt<*n_`%H@(Xc5cF63crS3Fv!^8-U90n_We}sZ z9O5`+fjGezj-EVmgeUGCX&@2`%_8&WyS~Z1`3|tWj2z&fjeqw4HJHLS@f#IYT@o>GMj3*@bwr*kU*QJi)x?6tv02+V(K>cmn6w|JN7GAIF= zyqAdtgu@-fV<$2^aiI{#512*nh@0Z>m<7muLKRLq9NjpN-wZ%`^L&ws_8Z*vpR|tr zCQVGH?_b#ihVrD&t)8!oVP?+JFMu%yk^!RQlp;Z;Mp(qxcPzTBL|F@^gy0B#eZU&1|h?1FTL^(c9T9O#Yc?u47eJ$~`7f47qnP$5?ZGP0#+52BoAz_NC~s0jx40J0W7o(Cv6DVj0P@^( zQQ7Jmb%|@)FHO7btQfrKI=tq$6=ct-LXrc-K?okuRuQGk4s#p2@dGYBStjuEZDD~| zj|@Wz^Uoq>8toLM0(gn(m&JZ+jOjhYEVsriQ=M@^z$d`cP!=SOXUl0oN&*s&LV@=j z9f_}3mtEbm&+?t!^nAGm05vcosC61sXdl7+O2 zQ8t}x(wG#@e26#qgE4o8rdQK2^p1g<@n7- z*bhbL%RtseMyorjcqwp+0f2Kz>{(!zL0$1=EHWj*B4QVo>EjaK<1}`g0M6pVXkjtbL>~98WJdnTjuQ z7Z2s^uRr*r_ule&w1v{h@D_JWS(L#^A1n3d3Fzqj$_oMRyl!R<;%Lmtzdf{#(zx~P zlW+)T-(PtF>V)Vq{Yxpvc9{oyPp3u5!9lSQ=R?cWp~dOY@>~*Ssp9g2M$rPmHbrYnci&3wmbF+lN- zQ~C;a={MeCVck2{b@HfrzujaaGAHIY6!Y6n*~P-G?*S}o6sNV{>Gj^eTn`6f7_N`6 zx>FuEB|eBFr+xU$ioX=|vxkJz;eb7VL`~YUP}q&t^i?<3J}ydCkLYLKmGJ$J`tOP2 zKgt{@p&BDZaMX(eeTgR+I=FU{@E1!sKgg*=f=&pJY;b9nZ(KA_RVDIGw?4e;S#*qa zhKUH6lcrSV1U@52=Y=A^+bAH_O2Qcj-1^+L>kXkG0}iP5tEjYSSqJ7hl%b}e*lvul zMe3eut<{yQnXmk0Lkedp?<%wf+;^0xzlYnj#lN}JK}3Mb70*G`ha(0)$rA0_R*3u# zXKK8>+a(EZm3GOSMX1FQ7R?jm|C{MywL`Lo_ zOMjOAjrHY*6*B{J-}xG5lTZK4oG_2dnT7{d4m5U(7HDeG0w+jptO95hE&kkOqlZgu zcy_v|834lIF}lyCyY|YX?Ob?b{c)I$$0DFYx{9?Rm7E)%Sto|&I3(cvg9zOvD^ke> zP(Rd~74pi60GkuuFXVfTXm^~4`w>%7Uq)#zqx6$}r9{(s+;58%y-c^C_KS{J@Phobuo}}B(Mw{))Eb<_=`evB?)CnaHNw8#%?JLMk z{b_ifkZWN7Awwu(I0#w>UnH?SnvL&2#Mr+CxNro*r7Y#gMX056B`>xA_!yLb+>KT7 zqxa-#Z!_x2K>~MSRvr4vfDq|JUtKH~(Lr7^M+FA7SsDW%qZ+0*2j2LDe3R-I>1}*p~9FCF+_XhGo#Wqr&{11y=ls) zOpz7SJit|Cq7w?-L?**Pbt| zpMW7d3a)*=)>EikUj*Oh8-Z+5Hp9x1m8+zjSe>M@*}e9>*LCD+kmL!-9q=Nr5Ju$K zF)Brk=>&H}ii|{3b^fyGB{PE@nnMoGIfrZ>Ad>>3EsPV6-co*@?~Ra%rCeK1Lxm0- zLk=6W4@4_1J~wzo!^;|Ge>Br#7XeAvBd2h%R&?Kq-Y?vYN4!XSf#%H3G*FduJdTG? z&)q_G&2sZ=cDqbFRb*obM1Clu0J1j((zyHcl=N$ZP-yXf`B30u$%4@5R23N_}jwZqzjP-p!!|0=eaadon9k7!{U^IhA_FYsNAD(7L@yb z!5wet4eogN&s-4K=tIqXd)|S#@!^tgYWVd!2>KNS)DasIZ{bSDq_j&CnSuaUK&ZdP zH9R6|0pG8X6)t`bQp4>KQQAN}>G?Zz=^?pvs<{zYmy?w9_=v>?y%P<78U5A5TP>Z{ z~*g`9KA(^xw0=|%w{Tl0RCYUNhc$_=->!HGy4 z-TihGJin!%7pfCV$U)3uyeFaiOlg?}=HW>nhleU0od=H$G76ED)Ll@LUb$bEMmF{y z1G_9DOdV1xzfB+!c~u-|#w+@+k|xoK(0@8U2s&_uT9{j@ag z)`-DRc4pXRC7hMY(dOUrQsG{``Lbl{n161h`or~Q9J{Z?gFXmN#r&+%Z4IY5j;^W}kvI;q z=;~pziWHs2GhX^T?23N;CJcW9t6ylnLPxhJKfaRr<8B-B&g4TkEzt~fuH=}(XJ?Z4 zJX4ZPXLBB;d1~H^6y|Vc_l>(F>3-LK^Ic~DL_k&>4zei-%8f^uIwUh_5)nk=O9HaY zm5So~4bb}w-UgRIfw|W|DfHe%YdIL+?qTYV?W8F>n>sRbIGmo;@d3lVdFC19ZSLizEK9Pwrp>SY^(o8J<;7(@34r$r4^ydt0p1xz= z(unb0_Y(#mY}jWx&5Ebwq+H16p2J=Prpesg@S1-DDOF?Yg@#-t9-t(=L4`*XWB zOu}Vvrsn0JTl!kAutWD^pxs1&x{b(Xz~+uSk$ceXEBCK>hIg84d3v22c3QXHS?5uV z>G^K(VqH9GNe?tmfLiLP9|YNMW{?qA;dTr=k2~oS)$FJ&D=DHG5Zohm@7AFnG^+A5 zw9k||%1=5E1Fmx?bx^H5{BsM?Oy`361OjfbN}9F4ogdxUr~wXVW*v?-*-3a}b`p0@ zEUpQ6o<{9Jk)1oG&gY6Um#1>oYD}$?cL5yCjiWU23(aMc%6}W+QZ!jg$N;UvQwtM2M**Xn~cK()t z2YsjXVQc0VBG~;6$&!N878I;SK8-Z*5w{D-ymJ>_P>vndRLFVwPe6rkGPV0!IlG?% zM7y6hkykLF(7kZdYZZmNoTZYX#S50@rlk2i81Zr$L*Qvt5O#HE&mtaUL%L70~s5c;m$_6LX%1Y1g5`RLdQ zba9qf9#jmolu-U=B_Q)e9yff_stDvw&Jaw11#tWW@DSuj{$0vB zdh9k4IuWR-;vBgXllp;=d*XvrJLpz?zvGCJ9B6NB-3)Ua5xFxr(W>NKJEzPdnedmG za39(lJ%Ls!W*R{B2H`#w>pCP}5?o5b)<%fRI2fc06{oGU%|iVF#I z+AM-Q@`TYUHjC>W4&ZJ9wS@6TkJ!j1p!tj}QZ>u;0s#r>1ssB>!z`EJ6Hu+9==~G% zQgl&+yx@``Axr@{AYwWbYDXLCGzecb4$iW9;dpe+!@@Z*SToZK@!;_(A}C&~3{>$} zrAz%z_5khOPQa>#WCbb@sBr9hKqtEP+ke8Z-d>fIZn7ep@%H6O=h-&P`8H3(#-kM; zHOdRiyxeZw+y&N$xiTfhY!D$W0DulJPc>X2m>CCc5l`$A3g*Fz=Q9Deiqn|@;i@7A zTJ^sjuiGc?zGU$HiQ}3|Q;Z!(Zi|UI&PIviN-_+plg}dtoQ>)6QN0Bq*NDhcDXRpS z%rMm}G>#6c1i|gwO8bUYDCv`GdFv4$BC!~Zdm;y}M_2;uVDTbOL0G(!vv2>~MH-K= zGQIpAu*{H6I1t=*Kf&9L+8nl_;Z+{{i{2`Ca4A7(`fMFd42;%3$zM#PZTQ+q!$l1i zmLvCv$IOz92^WT=&K=pkHU$}Ca6m$uFVNCi%kpYTPT4Au#=x_a8{ubpPGYZY%4s|P zJeZofVWe{fPHxP#8JC65c1+4(t-*5*I0OBt0EgAp`tOBw=#Bl*>|;;!V&d$`3-Ne6+>y<*zZA_y;h0`!HE z9xpr|2?dkPJJP{45nB3cwpJQcAq`E~?ug~tK}BVLGPVM++!erGFGFqE^Axt8|sJ`T=zB={cworzSY0%%3K59CQ*$FtlmbXMLZF=L5 zBM?Q-i&r<^;GRbeYjWXUeFi)`MSm7zrSua@&*GKxSAIbSlwJU-dJ?Mn5!D@aSORRA z(dVVD!&iq(T4WdK!WX^@^TJnQUjCh9oPIIID2&uV(=Q)p0N_yc(zrpWxL3Ry0SfMg zFE+gJa)_gJT=tITj3T}Zky~}gR(&fv4)@*?$41Nz`x+F}#zN`%!y|rpCSo3>nFk3d zEt3ip<~xthoNb+xDz!r>E40Hf|HUm&sUlvc$f7boq}bRUpuIhfrUa2BHJ$f#O?*4pplNy2A5DT=sj3EY3+&0Zn!G z)MFOu|59{TyfB<0uxs-e-PLPPJ+(ZQOFL92v5O*5GW~X2M!6rj#bB>Aic3FWi((d6 zc$)Dg^J2bYT$ad-d15*?h$bY@=Z;n=uV6BnUg)X?&%A;h!#T=pkz0j#{u$GarEPk0 z?!K0DPqwwR%LtdXvakJh&^i-d4Z?Ni09!aK^`AtU!NUx4_;9m6VeZb-jOY;H8m5qD=>m=dM$G?3AL1>NHpo9WL=c9bDU@KJ3ilY;L|CAScYQk zW_Tg56!oV1m_ZvsN^3{B#2Hrp5~FrZ^7dwU>85gd^O)vNGHi;zxx}!^Jr{kYn${Sd z1M|%TAy0jLW+wJ2Pq1SqhG7iJF}D~)HS{?GC^2LvhQP7Tfzc;{mIO?ScM+a1y%Xp4HWFE2SW}5 z+Ixj=ickq7OCSn&76QQBTkc!4_JV!!tr+KC4#B^-5?4FQaXS0h;@c(UP<_&4iRW8(&S#!G*zo~WAXc@gL^gT4sRA-fH>ppy{4@R@-)qgZ zanzOO-r`(F@Be0Fr2GKX1@wa2|^g*-yZaep&4sLB|Ke? z2;e+mt_FvD;9K(09@*O6;nll<gV*(4IVKkv=vz=xB)f z{vFT%_qMq=uLi1aJ)7<^XKAVga@if}8frcR-(l5H)Y9^{9gxv29MF_A-*U=}X%m~C zs_M!?pxc^)AfL2Z_972wcEJZiih?|UA8+DA!IzyF^UQ{7pgx2ABx<+yhiH9tbZ;T0 zTpXPCAiiWucPWG2ivR#e+92&W2w}`J6&-?m2Y03S9&btql4V*F{w_;Q^5dp~?)qj! zX>u1m`V=TzK;Wg=d-721UAA09)5B45>G^4Mx1umyW;&^5cNM6xw{p~usa=t$ZrV2# z=3woHSjpV@e2S4gs99m$Zus?Z@wfS*Cfu75#P)Z70TIUbes-_{7I;t&hX>3o_=KSH zwax0UZKyVK#8$UBpABQrDKZF{vsHk==m{@rOK2egelI%Y=EAZRy^l${EvdAg3>u(|*L+UnVcS z!xaj_H%jDXygv)AAG2eo(C(S`u}YXMFP!e4|HzZK6WFw z-OF_+yaanis>Vi?%WkEUFfrv^rl&;AqFBlmVH_Ka=Z`7m-d2LT_VEIP8SYzNADL`~+TS(fDBF&4`#9st4|i@2n_=jvNPT`7|r;H6g;I4WDA*$nA{U26{mYq*N&*YMd&W#$$r<7#GQ(#p~5f%rR?p zx8KnwCZ%aJlHwXk(q+L^>T4IL=5rUmb#K~@t~4&8}&-y{6KGt=xANh?4;W&GL1q|Pv+48i&5iX#A9nYJBXFXWs|pj?^cKHQ&KmIhIr^3AsT}w&r^7pu6qa z*x|`t+Oq3v_8K?8dg1u-EL9AfDp>A$dISr3tb4*ekjE`;x6PlRFPftF zS@9%|gLGpyJ!3nfBM|FxAoB^8$Gx*gIOO7Ww3xOqf^K6c1lql@J3@TcKK09(Gj;|< zP9m2l>qJ(~M0U+dH|QDj^akUU9b~_86|d|8n`&Y_k$AvJtUbK&-u%RVmE#(R*yOI+ zLE_y-fE*f;o4l55Jxw}@gJaYHFm*&8rqy=B$2o;J#>*xtAZ%a9WH-~~lBW)G6yjNa z8iiBiH3V>LdD(YkJL1=8R8B=l%*~}Sy|C)jCB2~6t;C5HTO$26R$RAT8C$EG6W@!p zGG5;3mW~7Xt8$gf(q*|)*Y(=1c=;!S!>dD{O>0;a}V|RAzcm z(m~Bjia;EyKXHFnkpW+XD~AGwadx;4tDgT|yvW$cqt&%0?&~rx_s)tfP`t$)4l{y= zD$ym6TypIiIQ)Tv;bl`i2lD7s7!cegA^+?U@zG_)@k#{&v1n^I#-j3xceTI}h^^IRwGL7jc#h?b3? z&{)q8((wEw4X!|Cd=p-d?{gX2dhJWPX+yP#0!pAo0U^(jJuIU!b=W>%nsXm_mF&Ef zH5s+$rEAo(nYPy4)`&emVzHSgSX;N3as`HKE&*(@Ub-yfK##d3xyTjzkeCvKlX1p! zeHkeFKMviq($L@nI-*mLS{ut8|0pB*;R>-Fi84ZxF6U&{Xq?LhIy7uYUy>UOdOCK~ zfLp!5mNC9#5i;Qv^fIyryku_y&i2c)JYmfvQA4X+=0y@OjN$DX$tF}J96Vz=Yy zlhV2DTieatpAdxK{2(te2@Jpx;V$ngcK2y2W}u7Fl(0v%p9^9>i3dTFt%p)JJjaNz>5VccvM+9AYOUC27To;KvP%meQdOwo-~ zc~SyRVkk+<s`4#nFBK8Mn@E^h%v$GfX@|N3y0*&}r&I9CgNp(EX4k5Im1( z39(L!`-7g^%v=?CKs{hn0I*!Hqwurx-9rcP`3Wj5?*Gu%{kpJM;t}6}5X>*h&C)2B ztF;x4X5m1Evx?&qY}M5yavQlN{3<@*-noizJJA)pwCRVWvewV`oW{0K(#Iv zW5pbcRs4)+naN#5U~YL8rhRn|zL2zpyKShrJV?#Mg5wsfr`FcP9`I{2e)U$?m$UxQ0+`M%~)WnUl5k!>MM8OBy;Ohz+@%rc&v(3&oq;}QKB z{30%%!%tQL2n&Dp?g|DoI`QML#uk6E}|&-lYH>K8#9^ckuUKdur#?IdDEr z)n~GTt7GY69qP?|M)Q%ld2Wi?!J7-@myINxH^vH2%5PcS;f+%6F7i2~d5+#;*6z!8 z?!jwT#BV%TnZpAO)UR!;sRw^ZRMigph^~GRl7pz} zoxi`URyKrJp4 zaE%<$W3zF+X%7>2IR$&`Ds2sW18v`&aHW6~S}wP3Hx5sA{1UKZ+}WTsw&zy)>Zb9P z*%spuy;%4hR$^Dzx*K<_tfLDpxygi{js=eI1yJBx@=dfb*G^hf4_|9 zi7R&JHm6CK0*yRsn`+gD1C|22biA|%;3WneiOxXmGGR;Tvd0Zdgv+}M0NZxcSAp^E zaOlppSqIywt!^mr5T{vT*NaC3zWlZgbaNv-zwF-|JS7mzwzRtT+KrnFs(AQq_Z~sth z*yhU$Et>-pELN$rMBDUZ1>Ocj7jWm49hbGr@1PByC0K98*2j_)@bU-0^CL@6im~ld z>rl}AcLA$$DdJF-w0v-qk#KO*I&b7Ef-Okzg#9VTUF0(L&dNf%qo?i7(c-CSvb~!e zxvh)U+NsO&oJgf>yhDqBiid|r6|D=LEL%Q}!gnr?>S!*M&acvU(&Tl8mZdgpZeE!n zP8^j8BramDEK%=_EP`FQyVLxtmbmA0eIDmnrp9qDgzUaA)dD%xz|NKq5t;bEVua)yo&|vz0@TI12+n#7X`&ZTR^{T zZK1x$4W@-vvu{2KTi;g?-CU7jtZ816#Mc8K%k4IPTDN}EJz=qSjYEyIW6t4`Ks7Fo zkPRf_s-r(bMy-siv0zlDu7`g9_Do-|3F@eXbcAeCH6&H~salnLFcdhx;Ti32qE%Uu zE*$_XraE^g=I-=?yOZYb^ntsR=I-=~5z_}o%;)x}HYvjUfH);qj;IX4RfJS}T-DxO z+1gy24`UE&)#+*UV+y88nHqoPxPnWCb;VF=1xbud%g8r^d+Qh^Vp4z zoqM6sRyQ2CZe6yDl^eE{YZMC01?pcAMe1Lw^PyH0xp9^~?bJ^DjbhLGlpV~S5@9?Z zeBWG`tv0+ShIwoRtqpI+s)}oZSR3b3Wtm-SyDwq<$;9*)^(@R+S6EftD^pW8&jcK0k7J?`6)Ni3J0#Z3#mZG zX_$-FrG<);$IX}hBm-6$)Ittov8ph0F(KKmV0|8zViI57x|kS`Yzg{_-&MWpOMEb0 zN+E5&_;Q~*5egZJ{>ahqpki6y#S^ zo3gL`d{zK;O}#=4(f2rb%|O+MdM+SqQ~y<0sIR&%&5u|BaY4b}B*gRJlcSQ}4H@eAl$ zb9J8IQs5ijNbILAfl3UFCBD_KwWCZY%sUT?EcW>211sgBn6z2@Vwt>^(P{>LkuPC$ zN>(zzY$XP>1>3w9gc(Xz8)d6u8m>UqFBOYy`No$jqDM}bq4BeBGxzyRU3kcY~WFfa+HR+u=T|z~b=M@vY__x~!Ib3`}kZa~)RU&V|szxZxgoWY0q5qSxvWb>U8r7r9=a_~lc?gQ-T~ zoJH>Y@aYqGUe^b+R=60zt9W`3iZ~6i*SHzV#mw^e^J_27Rbx-1^y4>eR2i4J`08)( z+vQ`~@KSw2`*5}!=UK>dzSTq4&vKQ>m?owAp+kyA4*y=vvgNu@6{m{Nl@qRjPvv1# zQKhm6hE4lkevV!nZ8U?ZWYf2p*6a*yagmu_Tg;3XZnU|>qPL&wt5Wv}_CFnr~WSm~T z2rj6dx+I(u9+R+k?XF_r9rTos-B+sDly1~(b%+(Kt<)hZfeiu~kHF?YHTt2e#y#ku zhuofz@ebX5^@*%1A1GHVE<*pyOQ4BK$`jPhw`IF_%4P~xr_&0fJ3RXr)jGCkLb>>| zT8y&KMQp#Dp}|X5iL)+=QP`G+%W9pzV%5#37FAyNP&nqc+G++xH$Mj+%)pB9s-^1L z|8^<6;c>;6!capJO6+$|;P70od>bZ6|La%2g!Ry_y;O8mVxmiqT!uV}!%;1TUo#?0 z|L@2o69Uu{$o92~ZTre}e#*m&^Vi6vddLh~SAD2Pw)5lUKG5F9}Oa4$wj3079 z#F8JsG}844hhNw@LiqAx3&|H@B`=ETx$BC2?*2%pL^qjlAzr@GxfUW$il0P^LAXIC z&IkpEjH9Zm99`8hlS!0tVnsfIwg-7HZ9C_gkn~$Kxs*@R#c(TInbC)(|0eWcIh2Kq z^l_Uk@Aa1Q$A2%K%bLD&f$7F6Krga;wqK@t8QX`i>N3woI{*Uv!v5$}iHa;h0XdQs zVI0s!L)@GJrkb5iHTn6DWBP9Srnt=*eR1^`FBanLzYTn|KIQ%bM5U&fK!EC+Rmz83 zeS>@(tVU(x*xdOd_AN$7-)UBk&ARI09!uo5H&2~Q^)1G>W<1gZPnd;GMz0RS1XQ& zQuCK0bAjGZsjSU3AM}@Rz48a{gHD-}K5;MhNu`)p?EXuk2r-D0M(HpgcSqSJGh*H1 zVb`LOEaO>G=n_&{q;lq;#qt86^OoGIc}s5Fa9a7?pe-Bvq8)B_ur4G~X9V zE#~~)xfIo+d z{&!5emU1I)@y*n;$hEr>+*>1#&$ogZ$9>Go4(m-}VFw4opM_@IeJ(PK1IyuB(sLp9 zK}ouX58YGUD$l|ptPP(AkkxK{m$ahIZEWO2p1V6tx?;QnuV&^%l zv^smu060}^6Vc9tuv=DXJoz79N2II%DS$&Dc1Jk zPJXDw(mQygaudhqQh|nb@=`!9z3-?$kNX7B$EmB8@^ zdsb&(O7RDCZ))xzd^}US(i7aGym-fwoX&ts{z(R@KOGZAE1sBKut8rhUd_Ya$oqKy zLY$hI1xJ(eoE$?_1;-`Kr#Z{$wW)f}Qc|7`8oPGQwg14;kTEw{>cq{pt9igu5xGX5 zXqOgAUUf|H6p-DZ)Bh|{$#b5HaH{i&=De&7mt$JV!dnW+M7)DvsTQ5dd`O27L7{)} z!k;VrQ1zOoqd10Fa-R?JOrqvu9sI7ZD%!JBipYbxazlhmm5-c4GU#1zz(;%W5W43-!U=h>u4J*n>dee3Qshfw=3)N3lOdLkD>TD~+0^~gbJZ^$;1#EQ zfm1mCSz=e|Wn+o{*WTA6d3>3An^KX|AnPLM??ZhkZHayPTbcN?%$KYR@;2EQsAR>F zWhzN=pkU?fpk5Rg6=%_jBt>OF^Gin-y-=xy8Y(J6W97n)_O&i=ak=ZmBN)sUUyhxn zwSsyOo*(ALv#L*?Is#6^p-azYd@|o6dc@VmBtmzv+TRooT(zzw`h8*m?(Ay4Ey zRGXLrD@S*kKXfvG{eL^QF4NSI}>Z(s~>V2s(d4sl8q{7i#6n5m&Ik4+#JLvXR43#-~G2QP8~ zY(rD&7F?kc9fbQ=*d%@9>O`uSC{h4JX*#nC<9$IFsTx|qoICzUt(v&qjobcvku=*e zzH|XVHQBM^wirYU%NCXny0Gl(Cd6VmHta-ViQ2exkutTcoT|SC3(6d|+fdsXq`<&3 z$lKD^ggB+PE8MSaXR-H{4V&0NKWlrBCy3{>>Twb8(L2zGEzh&2EM4GYZS$If7Ev(- zY_%WH6v>bh`OA*^g0&4Reuhh^*^uFg!qet@#qyLn7W&>6+4{lM2PS0ZhT$2^C(ipN zQ*yqhWQ%%rk42$AEYCy%V7Te*Vf3EVt(r!x6h8iAVH}-US}JTPsvKFafb^FF8f$)Z zH$LHb#FiAL@aU#h@a7TU2`EwIk3nYce^6Qm_X-2s{&Re1SaQlCmD_oSyezW)_zFZp z&PW!=1@f}i*jzd~#2Vqfx!nAbFOABl5KsDxP6x*L066q4fMmxI2HhIFrd7@A|H$*@ z6J&ac2~YGOook7Y_*j84Rg7cz8*#LS5WuYEM>?MwMToHXi8c3H-<~-eTj`;5VH*ZF zQ49RSh>CG|bQ<;ms$#q{?nd|Cm10<*pSnWc^X&l6@-hy*NlVYT%5BWJG=#zx&QZCR z5Qc?qIYDY@O0ZTLnGucl?xxu&OhgjdlM z6VI86yty-9;F#%whqv zH}`V+^tjvQ*Qe**&NADs4hCY8;O3X-0uXc#_IJpEnk&6t_mvb4TxeQ_fw|mn!HSLrgG?+dzhLA>VU;>!Syy%4&Noxuvs<=%GuNJzbHQni_B<`yxdU#O z9}N!ys_BwfGH8~xq6V%ma1VWLEPdOb2#Uc8iv!B+R)PFDf&jk2{F8+Fxn#cd%A z&)T@NOg4L0oY3-y_u8Br_l2%_q{l6zi>Bd3%WI?V+k_&jIo(#d__wC44dUA0IyP5s zcCgpWaOvac7}>hdzMb_*4Xj4JhMwsDZLC9@|%iqsFErq9ER(--|v-%_b#k9 zH+)$k3?%U?eN8-Y@5-oY&LU zkMJcj+R*c3z6^UJs7McA(AN~!U*&iYpzg|E<;AjBe5Iy1)Y@FY9fa1N-FZcczJA!g zK*{4jlthh?it1*{g4{^;)&>_4BJ{tV6K}Wzm~=y3w5%mI+&H~y5W&8X6~pnF1*YP6`02nO9W7GW8>(b0RIs7bE26sa4_qr^{RB@w-Y;R98w3qD;pug zIrQKHY&>u2wg;6Hg6B)q`nl!Hxa!cr!{0m<`8(1~KEX!Mqb**E((@M1ttan;_Y{yc_&mId3?ssS8cnR9MY2aXKg8fF**n@ zdznpi%MRw&TvftUQ)YmPSH$x>%T#)(H4ln{Ng4`p>Y!Q)p(2d;o!i=XqW4^{2gY4P z=O?rC9dzi!wc#{FCSGA_%UP0f2Q&Lv!G&eiMcs^m9>T?%D>eAY?=TI0+UP!Vp{<#e zV5E1{CX$Tnwy*n0cNznHe}R7q92bVHVYej!-QD^GJLZ-920c8ZNRduDawNZfDPbgsOiBls5Ksj7}bA52Nebh9v z-o8-=j_E%fG&(Si8bIfQ+SDA0!-Q}}CJXA0%J?>_Tk(?n5Z*(1Kk;;5sc$&n+J2_93mo}Z%O9oi2$ZHAa z&y8r)9tzjX9P943gx2^rJIm!z*+nNg@lknAEy+pP(DRiX+{7DsF~`_lo+GBL@Oj;? zri1^I2;LPKT6SNU=#h=bGtzzGinuM3zJip$lb#CrcoXTYL#g^ksrvou&K)>AmEPj3FEUn4NG^oKyz4UnQ!=H?VcR)0EFonV$5C6OeYE5OrtD9zTr+uftE{PgZ%t{; zX?RwD7m>I4=_sgNMx;)y`b`=tBfGcp8tAQ>LUylNDFF#j@5Bs%fZfz7Ny2WmJ07Ko z8s}Om8fsI?@fKrJ>M7o05q2b0%Rn1VHJl@s`V`Pnid7_-iivK$nuAC0B?1Y|OUJ&L zm;{~TU(9RS$on6VzsmuDIi}TZS1j)=LYQQDjkk{`7j7=B4rs8|fQD1c+~t(CX}ftx zmU$d?EF;OJu+6&iw?iTjn-M=X07h)tPWijj`795ozf8EP-g>M|eqk%`D~C<4d|%o6 zL^Bnb$TQ*x_Svn|u~jx6LFv`h!*#{lpI|wj*T$u*0G9nyYh$l& zCfIFP%`0iQU6`QtYW=9y<)(003R=udbXup1k1}z#JyuQ|8-#yNr%Qz`dnHjyy2rX3 zW^a1ehMCKW`}qBv-B6C-2q7Tu~>s zMGiqaF+qerbU0H(y)$5=+e#6YH=FgFN}-%;B$X=7-QLYz>d4^WeESrD_sp1A!|Q)| zRfpIAQ=x1hpj+`>3j86V>|%bYYcL@~1V-)EJXPMw7kX=v^)IdrqXk~wcwMGW1I92b zlH|XJ&Si(B2*FqKc>Ypp-F<=MBRHc*7M~ZK36?$tT;=oUX%wwT= z9bL67Lbz?F)37&C$D=|QllCQ#088I2f6MA5XA&vvUG!0B(4gABIkBwhUnR?ZcL z{9?z_iyTX@&8NnzM8~YuU-_O-z^R9Pjv$<(x}!)NR`?#S4>BX)$w8J($doS3hs?#F zF5s8<>&68g^XuhY%f-C_2MBAq2w6CRXFKH{EkL7Ph>cyZ{k~m$0lkLIZr46RmWgXi z+4x0Otw=Pw#

  • =mKLsmnxQX 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 FK>+fMrRD$t literal 0 HcmV?d00001 diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..e9de238 --- /dev/null +++ b/install-sh @@ -0,0 +1,251 @@ +#!/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/lib/Makefile b/lib/Makefile new file mode 100644 index 0000000..bd89321 --- /dev/null +++ b/lib/Makefile @@ -0,0 +1,107 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +# # +# Makefile for lib directory # +# # +########################################################################### +TOP=.. +DIRNAME=lib +BUILD_DIRS=etc multisyn +ALL_DIRS=$(BUILD_DIRS) + +PHONESETS = mrpa_phones.scm mrpa_allophones.scm radio_phones.scm \ + holmes_phones.scm darpa_phones.scm phoneset.scm \ + cmusphinx2_phones.scm unilex_phones.scm +DURSTATS = mrpa_durs.scm klatt_durs.scm gswdurtreeZ.scm f2bdurtreeZ.scm +INTSTATS = tobi.scm f2bf0lr.scm tobi_rules.scm \ + tilt.scm apml.scm apml_f2bf0lr.scm apml_kaldurtreeZ.scm +DBS = +LTSRULES = engmorph.scm engmorphsyn.scm lts.scm lts_build.scm +BRKMODELS = sec.ts20.quad.ngrambin sec.B.hept.ngrambin +MODES = email-mode.scm ogimarkup-mode.scm sable-mode.scm soleml-mode.scm \ + singing-mode.scm +GENERAL = init.scm synthesis.scm module_description.scm \ + lexicons.scm \ + festival.scm intonation.scm duration.scm pos.scm phrase.scm \ + voices.scm tts.scm festdoc.scm languages.scm token.scm \ + mbrola.scm display.scm postlex.scm tokenpos.scm \ + festtest.scm cslush.scm cart_aux.scm pauses.scm \ + scfg.scm mettree.scm java.scm clunits.scm clunits_build.scm \ + siteinit.scm +HTS = hts.scm +OTHERS = Sable.v0_2.dtd sable-latin.ent festival.el scfg_wsj_wp20.gram \ + speech.properties Singing.v0_1.dtd + +SIOD = siod.scm web.scm cstr.scm fringe.scm + +FILES=Makefile VCLocalRules $(PHONESETS) $(DURSTATS) $(INTSTATS) $(DBS) \ + $(BRKMODELS) $(GENERAL) $(LTSRULES) $(OTHERS) $(MODES) $(HTS) + +LOCAL_CLEAN=$(SIOD) + +ALL=.copy_from_est .sub_directories + +include $(TOP)/config/common_make_rules + +.copy_from_est: $(SIOD) + @: + +$(SIOD) : % : $(EST)/lib/siod/% + @echo 'Copy $* from EST/lib/siod' + @$(RM) -f $* + @{ \ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo ' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' ;\ + echo ' ;;; DO NOT EDIT THIS FILE ON PAIN OF MORE PAIN.' ;\ + echo ' ;;; ' ;\ + echo ' ;;; The master copy of this file is in $(EST)/lib/siod/$*' ;\ + echo ' ;;; and is copied here at build time.' ;\ + echo ' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + echo '' ;\ + } | cat - $(EST)/lib/siod/$* |sed -e '/mode: *scheme/s//mode: view/' > $* + @chmod a-w $* + diff --git a/lib/Sable.v0_2.dtd b/lib/Sable.v0_2.dtd new file mode 100644 index 0000000..63e7f23 --- /dev/null +++ b/lib/Sable.v0_2.dtd @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%ISOlat1; + + + diff --git a/lib/Singing.v0_1.dtd b/lib/Singing.v0_1.dtd new file mode 100644 index 0000000..b0dd8a8 --- /dev/null +++ b/lib/Singing.v0_1.dtd @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + +%ISOlat1; + + + diff --git a/lib/VCLocalRules b/lib/VCLocalRules new file mode 100644 index 0000000..45bb832 --- /dev/null +++ b/lib/VCLocalRules @@ -0,0 +1,8 @@ +SIOD = siod.scm web.scm cstr.scm fringe.scm + +.copy_from_est: $(SIOD) + +$(SIOD) : + @echo 'Copy $@ from EST/lib/siod' + -del $@ + copy $(EST)\lib\siod\$@ $@ \ No newline at end of file diff --git a/lib/apml.scm b/lib/apml.scm new file mode 100644 index 0000000..613f207 --- /dev/null +++ b/lib/apml.scm @@ -0,0 +1,547 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2002 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Rob Clark +;;; Date: July 2002 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Sets up the current voice to synthesise from APML. +;; +;; + +(require 'apml_f2bf0lr) +(require 'apml_kaldurtreeZ) + +;; Default pitch settings (if unspecified in current voice.) + +(defvar apml_default_pitch_mean 170 ) +(defvar apml_default_pitch_standard_deviation 34 ) + +;; apml sythesis wrappers. + +(define (apml_client_synth apml) + "(apml_client_synth apml) +Synthesise apml and return waveform(s) to client." + (utt.send.wave.client (apml_synth apml))) + +(define (apml_synth apml) +"(apml_synth xml) +Synthesis an apml string." +(let ((tmpfile (make_tmp_filename)) + utt) + (string_to_file tmpfile apml) + (set! utt (apml_file_synth tmpfile)) + (delete-file tmpfile) + utt)) + +(define (apml_file_synth filename) + "(apml_file_synth filename) +Synthesis an apml file." + (let ((utt (Utterance Tokens nil))) + (utt.load utt filename) + (utt.synth utt))) + +(define (string_to_file file s) +"(string_to_file file string) + Write string to file." +(let ((fd)) + (set! fd (fopen file "wb")) + (format fd "%s" s) + (fclose fd))) + + +;;; +;;; Phrasing. +;;; + +;; phrasing CART. +; +; It has been decided that by default, only punctuation should affect +; phrasing (and subsequently pauses) +; +(set! apml_phrase_tree + ' + ((lisp_apml_punc in ("?" "." ":")) ; big punctuation + ((BB)) + ((lisp_apml_punc in ("'" "\"" "," ";")) ; else little punctuation + ((B)) + ((lisp_apml_last_word is 1) + ((BB)) ; need a BB at the end! + ((NB)))))) ; else nothing + +;; feature functions for phrasing +(define (apml_punc word) + (item.feat (item.relation.parent word 'Token) 'punc)) + +(define (apml_last_word word) + (if (item.next word) + "0" "1")) + + +;;; +;;; Pauses +;;; + +;; feature functions for pauses +(define (apml_is_pause word) + (if (item.relation (item.relation.parent word 'Token) 'Pause) + t + nil)) + +(define (apml_pause word) + (if (item.relation word 'Pause) + (item.feat (item.relation.parent (item.relation.parent word 'Token) 'Pause) "sec") + 0)) + +(define (Apml_Pauses utt) + "(Pauses UTT) +Predict pause insertion for apml." + (let ((words (utt.relation.items utt 'Word)) lastword tpname) + (if words + (begin + (insert_initial_pause utt) ;; always have a start pause + (set! lastword (car (last words))) + (mapcar + (lambda (w) + (let ((pbreak (item.feat w "pbreak")) + (emph (item.feat w "R:Token.parent.EMPH"))) + (cond + ((apml_is_pause w) + (insert_pause utt w)) + ((or (string-equal "B" pbreak) + (string-equal "BB" pbreak)) + (insert_pause utt w)) + ((equal? w lastword) + (insert_pause utt w))))) + words) + ;; The embarassing bit. Remove any words labelled as punc or fpunc + (mapcar + (lambda (w) + (let ((pos (item.feat w "pos"))) + (if (or (string-equal "punc" pos) + (string-equal "fpunc" pos)) + (let ((pbreak (item.feat w "pbreak")) + (wp (item.relation w 'Phrase))) + (if (and (string-matches pbreak "BB?") + (item.relation.prev w 'Word)) + (item.set_feat + (item.relation.prev w 'Word) "pbreak" pbreak)) + (item.relation.remove w 'Word) + ;; can't refer to w as we've just deleted it + (item.relation.remove wp 'Phrase))))) + words))) + utt)) + + + +;;; +;;; Intonation. +;;; + +;; Accent prediction (well transfer really). +;; +;; We treat L+H* L-H% on a single syllable as a special case. + +(set! apml_accent_cart + ' + ((lisp_apml_accent is "Hstar") + ((H*)) + ((lisp_apml_accent is "Lstar") + ((L*)) + ((lisp_apml_LHLH is "LHLH") + ((L+H*L-H%)) + ((lisp_apml_accent is "LplusHstar") + ((L+H*)) + ((lisp_apml_accent is "LstarplusH") + ((L*+H)) + ((NONE)))))))) + +(set! apml_boundary_cart + ' + ((lisp_apml_boundary is "LL") + ((L-L%)) + ((lisp_apml_LHLH is "LHLH") + ((NONE)) ; this is dealt with by the accent feature + ((lisp_apml_boundary is "LH") + ((L-H%)) + ((lisp_apml_boundary is "HH") + ((H-H%)) + ((lisp_apml_boundary is "HL") + ((H-L%)) + ((NONE)))))))) + +;; feature functions. +(define (apml_accent syl) + (let ((token (item.relation.parent (item.relation.parent syl 'SylStructure) 'Token))) + (if (and (eq (item.feat syl 'stress) 1) + (item.relation.parent token 'Emphasis)) + (item.feat (item.relation.parent token 'Emphasis) 'x-pitchaccent) + 0))) + +(define (apml_boundary syl) + (let ((token (item.relation.parent (item.relation.parent syl 'SylStructure) 'Token))) + (if (and (> (item.feat syl 'syl_break) 0) + (item.relation.parent token 'Boundary)) + (item.feat (item.relation.parent token 'Boundary) 'type) + 0))) + +(define (apml_LHLH syl) + (let ((accent (apml_accent syl)) + (boundary (apml_boundary syl))) + (if (and (string-equal accent "LplusHstar") + (string-equal boundary "LH")) + "LHLH" + 0))) + + +(define (apml_seg_is_LHLH_vowel seg) + (if (and (string-equal (apml_LHLH (item.relation.parent seg 'SylStructure)) + "LHLH") + (string-equal (item.feat seg 'ph_vc) "+")) + "LHLH" + 0)) + + +;;;; feature functions: + +(define (apml_tgtype syl) + (let ((l (apml_boundl (item.relation.parent syl 'SylStructure))) + (r (apml_boundr (item.relation.parent syl 'SylStructure)))) + (if (eq (item.feat syl 'accented) 0) + 0 ; this is a quirk related to the way the models were trained + (cond + ((eq l 0) + 1) + ((eq r 1) + 3) + (t 2))))) + + +(define (apml_iecount syl) + (if (eq (item.feat syl 'accented) 0) + 0 ; this is a quirk related to the way the models were trained + (+ (item.feat syl 'asyl_in) 1))) + +;; suport functions. +(define (apml_boundl word) +"(apml_boundl word) +Number of boundaries in this performative to the left of this word." + (let ((w (item.prev word)) + (c 0)) + (while (and w (apml_same_p w word)) + (if (item.relation.parent (item.relation.parent w 'Token) 'Boundary) + (set! c (+ c 1))) + (set! w (item.prev w))) + c)) + +(define (apml_boundr word) +"(apml_boundr word) +Number of boundaries in this performative to the right of this word." + (let ((w word) + (c 0)) + (while (and w (apml_same_p w word)) + (if (item.relation.parent (item.relation.parent w 'Token) 'Boundary) + (set! c (+ c 1))) + (set! w (item.next w))) + c)) + +(define (apml_same_p w1 w2) +"(apml_same_p w1 w2) + Are these two words in the same performative?" +(let ((p1 (item.relation.parent (item.relation.parent w1 'Token) 'SemStructure)) + (p2 (item.relation.parent (item.relation.parent w1 'Token) 'SemStructure))) + (if (and (item.parent p1) (item.parent p2)) ; not true if theme/rheme omitted. + (equal? (item.parent p1) (item.parent p2)) + (equal? p1 p2)))) + +;;; +;;; segment timings +;;; + +(define (apml_seg_times utt) + "(apml_seg_times utt) +Output the segment timings for an apml utterance." + (let ((segs (utt.relation.items utt 'Segment))) + (mapcar + (lambda (x) + (format t "%s %s\n" (item.name x) (item.feat x 'end))) + segs) + t)) + +;;; +;;; Additional functions for f0model. +;;; + + +(define (find_hstar_left syl) +"(find_hstar_left syl) +If the closest accent or boundary to the left is H* return how many syllables away it is. Returns 0 if nearest accent is not H*" +(let ((count 0)) + ;; if this syllable has a pitch event + (if (or (not (string-equal (item.feat syl 'tobi_accent) "NONE")) + (not (string-equal (item.feat syl 'tobi_endtone) "NONE"))) + 0) + (while (and syl + (string-equal (item.feat syl 'tobi_accent) "NONE") + (string-equal (item.feat syl 'tobi_endtone) "NONE")) + (set! count (+ count 1)) + (set! syl (item.prev syl))) + (cond + ;; run out of syllables before finding accent + ((null syl) + 0) + ((string-equal (item.feat syl 'tobi_accent) "H*") + count) + (t 0)))) + +(define (find_ll_right syl) +"(find_ll_right syl) +If the closest accent or boundary to the right is L-L% return how many syllables away it is. Returns 0 if nearest is not L-L%." +(let ((count 0)) + ;; if this syllable has a pitch event + (if (or (not (string-equal (item.feat syl 'tobi_accent) "NONE")) + (not (string-equal (item.feat syl 'tobi_endtone) "NONE"))) + 0) + (while (and syl + (string-equal (item.feat syl 'tobi_accent) "NONE") + (string-equal (item.feat syl 'tobi_endtone) "NONE")) + (set! count (+ count 1)) + (set! syl (item.next syl))) + (cond + ;; run out of syllables before finding boundary + ((null syl) + 0) + ((string-equal (item.feat syl 'tobi_endtone) "L-L%") + count) + (t 0)))) + +(define (l_spread syl) +"(l_spread syl) +Proportion of pitch lowering required due to L- spreading backwards." +(let ((l (find_hstar_left syl)) + (r (find_ll_right syl))) + (cond + ((or (eq l 0) + (eq r 0)) + 0) + (t + (/ r (- (+ l r) 1)))))) + + +;;; +;;; Debuging and other useful stuff. +;;; + + + +(define (apml_print_semstruct utt) +"(apml_print_semstruct utt) +Pretty print APML semantic structure." + (let ((i (utt.relation.first utt 'SemStructure))) + (while (not (null i)) + (apml_pss_item 0 i) + (apml_pss_daughters 1 (item.daughters i)) + (set! i (item.next i))))) + +(define (apml_pss_daughters depth list) + (mapcar + (lambda (x) + (apml_pss_item depth x) + (apml_pss_daughters (+ depth 1) (item.daughters x)) + ) + list)) + + +(define (apml_pss_item depth item) + (let ((c 0)) + (while (< c depth) + (format t " ") + (set! c (+ c 1))) + (format t "%s\n" (item.name item)))) + + +(define (apml_print_words utt) +"(apml_print_words utt) + Pretty print APML words with associated accents." + (mapcar + (lambda (x) + (format t "%s (" (item.name x)) + (apml_pww_accent x) + (apml_pww_boundary x) + (apml_pww_pause x) + (format t ")\n")) + (utt.relation.items utt 'Word)) + t) + +(define (apml_pww_accent item) + (let ((p (item.relation.parent (item.relation.parent item 'Token) 'Emphasis))) + (if p (apml_ppw_list (item.features p))))) + +(define (apml_pww_boundary item) + (let ((p (item.relation.parent (item.relation.parent item 'Token) 'Boundary))) + (if p (apml_ppw_list (item.features p))))) + +(define (apml_pww_pause item) + (let ((p (item.relation.parent (item.relation.parent item 'Token) 'Pause))) + (if p (apml_ppw_list (item.features p))))) + +(define (apml_ppw_list l) + (mapcar + (lambda (x) + (format t " %s" x)) + (flatten l))) + + +(define (apml_print_sylstructure utt) +"(apml_print_sylstructure utt) +Pretty print APML syllable structure." + (mapcar + (lambda (x) + (format t "%s\n" (item.name x)) + (apml_psyl x)) + (utt.relation.items utt 'Word)) + t) + +(define (apml_psyl word) + (mapcar + (lambda (x) + (apml_psegs x) + (if (eq (item.feat x 'stress) 1) + (format t " (1)")) + (if (item.relation.daughter1 x 'Intonation) + (begin + (let ((ie (item.relation.daughter1 x 'Intonation))) + (format t " [") + (while ie + (format t "%s" (item.name ie)) + (set! ie (item.next ie)) + (if ie (format t " "))) + (format t "]")))) + (format t "\n")) + (item.daughters (item.relation word 'SylStructure)))) + +(define (apml_psegs syl) + (let ((segs (item.daughters syl))) + (format t " ") + (while segs + (format t "%s" (item.name (car segs))) + (if (cdr segs) + (format t ".")) + (set! segs (cdr segs))))) + + +(define (apml_get_lr_params) + (let ((m 0) + (s 0)) + (if (or (equal? (Parameter.get 'Int_Target_Method) Int_Targets_LR) + (equal? (Parameter.get 'Int_Target_Method) Int_Targets_5_LR)) + (begin + (set! m (car (cdr (car int_lr_params)))) + (set! s (car (cdr (car (cdr int_lr_params)))))) + (begin + (set! m apml_default_pitch_mean) + (set! s apml_default_pitch_standard_deviation))) + (list m s))) + + + + +(define (apml_initialise) + "(apml_initialise) +Set up the current voice for apml use." + (if (not (string-matches current-voice ".*multisyn.*")) ; nothing if multisyn + (cond + ((or (string-equal (Parameter.get 'Language) "americanenglish") + (string-equal (Parameter.get 'Language) "britishenglish")) + (begin + (format t "Initialising APML for English.\n") + ;; Phrasing. + (Parameter.set 'Phrase_Method 'cart_tree) + (set! phrase_cart_tree apml_phrase_tree) + ;; Pauses. + ;;(set! duration_cart_tree apml_kal_duration_cart_tree) + ;;(set! duration_ph_info apml_kal_durs) + ;;(Parameter.set 'Pause_Method Apml_Pauses) + ;; Lexicon. + ;;;; We now assume the lexicon you have already set is suitable, + ;;;; You probably want to ensure this is "apmlcmu" or "unilex" + ;;(if (not (member_string "apmlcmu" (lex.list))) + ;; (load (path-append lexdir "apmlcmu/apmlcmulex.scm"))) + ;;(lex.select "apmlcmu") + ;; Add other lex entries here: + ;;(lex.add.entry '("minerals" nil (((m ih n) 1) ((er) 0) ((ax l z) 0)))) + ;;(lex.add.entry '("fibre" nil (((f ay b) 1) ((er) 0)))) + ;;(lex.add.entry '("dont" v (((d ow n t) 1)))) + ;;(lex.add.entry '("pectoris" nil (((p eh k) 2) ((t ao r) 1) ((ih s) 0)))) + ;;(lex.add.entry '("sideeffects" nil (((s ay d) 1) ((ax f) 0) ((eh k t s) 2)))) + + ;; Intonation events. + (set! int_accent_cart_tree apml_accent_cart) + (set! int_tone_cart_tree apml_boundary_cart) + (Parameter.set 'Int_Method Intonation_Tree) + ;; Intonation f0 contour. + (set! f0_lr_start apml_f2b_f0_lr_start) + (set! f0_lr_left apml_f2b_f0_lr_left) + (set! f0_lr_mid apml_f2b_f0_lr_mid) + (set! f0_lr_right apml_f2b_f0_lr_right) + (set! f0_lr_end apml_f2b_f0_lr_end) + (set! int_lr_params + (list (list 'target_f0_mean (car (apml_get_lr_params))) + (list 'target_f0_std (car (cdr (apml_get_lr_params)))) + (list 'model_f0_mean 170) + (list 'model_f0_std 40))) + (Parameter.set 'Int_Target_Method Int_Targets_5_LR) + nil)) + ((string-equal (Parameter.get 'Language) "italian") + (begin + (format t "Initialising APML for Italian.\n") + ;; Phrasing. + (Parameter.set 'Phrase_Method 'cart_tree) + (set! phrase_cart_tree apml_phrase_tree) + ;; Intonation events. + (set! int_accent_cart_tree apml_accent_cart) + (set! int_tone_cart_tree apml_boundary_cart) + (Parameter.set 'Int_Method Intonation_Tree) + ;; Intonation f0 contour. + (set! f0_lr_start apml_f2b_f0_lr_start) + (set! f0_lr_mid apml_f2b_f0_lr_mid) + (set! f0_lr_end apml_f2b_f0_lr_end) + (set! int_lr_params + (list (list 'target_f0_mean (car (apml_get_lr_params))) + (list 'target_f0_std (car (cdr (apml_get_lr_params)))) + (list 'model_f0_mean 170) + (list 'model_f0_std 34))) + (Parameter.set 'Int_Target_Method Int_Targets_LR) + nil)) + (t nil)))) + +(provide 'apml) diff --git a/lib/apml_f2bf0lr.scm b/lib/apml_f2bf0lr.scm new file mode 100644 index 0000000..3d312a8 --- /dev/null +++ b/lib/apml_f2bf0lr.scm @@ -0,0 +1,530 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 2002 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Rob Clark +;;; Date: July 2002 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; APML.f0 trees. +;; +;; + +(set! apml_f2b_f0_lr_start +'( +( Intercept 163.9871 ) +( pp.lisp_apml_tgtype -3.1750 (1) ) +( p.lisp_apml_tgtype 5.0332 (1) ) +( lisp_apml_tgtype 0.0000 (1) ) +( n.lisp_apml_tgtype 17.7799 (1) ) +( nn.lisp_apml_tgtype 13.6845 (1) ) +( pp.lisp_apml_tgtype 0.0000 (2) ) +( p.lisp_apml_tgtype 0.0000 (2) ) +( lisp_apml_tgtype 0.0000 (2) ) +( n.lisp_apml_tgtype 0.0000 (2) ) +( nn.lisp_apml_tgtype 0.0000 (2) ) +( pp.lisp_apml_tgtype 0.0000 (3) ) +( p.lisp_apml_tgtype 0.0000 (3) ) +( lisp_apml_tgtype -9.7245 (3) ) +( n.lisp_apml_tgtype 0.0000 (3) ) +( nn.lisp_apml_tgtype -2.4009 (3) ) +( pp.lisp_apml_iecount 0.0000 ) +( p.lisp_apml_iecount -0.4484 ) +( lisp_apml_iecount 0.0000 ) +( n.lisp_apml_iecount -2.0165 ) +( nn.lisp_apml_iecount 0.0000 ) +( pp.tobi_accent 0.0000 (H*) ) +( p.tobi_accent 11.1239 (H*) ) +( tobi_accent 21.5164 (H*) ) +( n.tobi_accent -2.5990 (H*) ) +( nn.tobi_accent -6.5307 (H*) ) +( pp.tobi_accent 0.0000 (L*) ) +( p.tobi_accent -10.0000 (L*) ) +( tobi_accent -5.0000 (L*) ) +( n.tobi_accent -10.6798 (L*) ) +( nn.tobi_accent -5.6561 (L*) ) +( pp.tobi_accent 5.3577 (L*+H) ) +( p.tobi_accent 60.0000 (L*+H) ) +( tobi_accent -5.0000 (L*+H) ) +( n.tobi_accent 0.0000 (L*+H) ) +( nn.tobi_accent 0.0000 (L*+H) ) +( pp.tobi_accent 0.0000 (L+H*) ) +( p.tobi_accent 11.1200 (L+H*) ) +( tobi_accent 21.5200 (L+H*) ) +( n.tobi_accent -2.6000 (L+H*) ) +( nn.tobi_accent -6.5300 (L+H*) ) +( pp.tobi_endtone 0.0000 (L-L%) ) +( p.tobi_endtone -0.6164 (L-L%) ) +( tobi_endtone -50 (L-L%) ) +( n.tobi_endtone -10.8729 (L-L%) ) +( nn.tobi_endtone -7.6522 (L-L%) ) +( pp.tobi_endtone 0.7583 (L-H%) ) +( p.tobi_endtone 0.0000 (L-H%) ) +( tobi_endtone -20.0000 (L-H%) ) +( n.tobi_endtone -11.8935 (L-H%) ) +( nn.tobi_endtone -7.2012 (L-H%) ) +( pp.tobi_endtone 0.0000 (H-L%) ) +( p.tobi_endtone 0.0000 (H-L%) ) +( tobi_endtone 4.0790 (H-L%) ) +( n.tobi_endtone -19.3463 (H-L%) ) +( nn.tobi_endtone -29.3615 (H-L%) ) +( pp.tobi_endtone 0.0000 (H-H%) ) +( p.tobi_endtone 0.0000 (H-H%) ) +( tobi_endtone 0.0000 (H-H%) ) +( n.tobi_endtone 0.0000 (H-H%) ) +( nn.tobi_endtone 0.0000 (H-H%) ) +( pp.tobi_endtone 0.0000 (L-) ) +( p.tobi_endtone -15.1702 (L-) ) +( tobi_endtone 0.0000 (L-) ) +( n.tobi_endtone -14.5562 (L-) ) +( nn.tobi_endtone 0.0000 (L-) ) +( pp.tobi_endtone -13.5046 (H-) ) +( p.tobi_endtone 0.0000 (H-) ) +( tobi_endtone 6.3377 (H-) ) +( n.tobi_endtone -6.8631 (H-) ) +( nn.tobi_endtone 0.0000 (H-) ) +( p.tobi_accent 60.0000 (L+H*L-H%) ) +( tobi_accent -60.0000 (L+H*L-H%) ) +( n.tobi_accent 0.0000 (L+H*L-H%) ) +( pp.syl_break 0.0000 ) +( p.syl_break 0.0000 ) +( syl_break 0.6417 ) +( n.syl_break 1.3532 ) +( nn.syl_break 1.0724 ) +( pp.stress 0.0000 ) +( p.stress -0.6193 ) +( stress 2.4121 ) +( n.stress 0.0000 ) +( nn.stress 2.5478 ) +( syl_in -1.4373 ) +( syl_out 0.4181 ) +( ssyl_in 0.0000 ) +( ssyl_out 0.6125 ) +( asyl_in 0.0000 ) +( asyl_out 0.9906 ) +( last_accent 0.0000 ) +( next_accent -0.3700 ) +( sub_phrases 0.0000 ) +( lisp_l_spread -60.0000 ) +)) + +(set! apml_f2b_f0_lr_left +'( +( Intercept 162.1173 ) +( pp.lisp_apml_tgtype -1.5875 (1) ) +( p.lisp_apml_tgtype 4.8101 (1) ) +( lisp_apml_tgtype 12.8265 (1) ) +( n.lisp_apml_tgtype 16.3027 (1) ) +( nn.lisp_apml_tgtype 13.3225 (1) ) +( pp.lisp_apml_tgtype 0.0000 (2) ) +( p.lisp_apml_tgtype 1.7434 (2) ) +( lisp_apml_tgtype 6.7783 (2) ) +( n.lisp_apml_tgtype 0.6679 (2) ) +( nn.lisp_apml_tgtype 0.0000 (2) ) +( pp.lisp_apml_tgtype 1.6494 (3) ) +( p.lisp_apml_tgtype 1.2861 (3) ) +( lisp_apml_tgtype -2.0724 (3) ) +( n.lisp_apml_tgtype 0.0000 (3) ) +( nn.lisp_apml_tgtype -1.2004 (3) ) +( pp.lisp_apml_iecount 0.0000 ) +( p.lisp_apml_iecount -0.5857 ) +( lisp_apml_iecount 0.0000 ) +( n.lisp_apml_iecount -2.3543 ) +( nn.lisp_apml_iecount 0.0000 ) +( pp.tobi_accent 0.0000 (H*) ) +( p.tobi_accent 8.5867 (H*) ) +( tobi_accent 21.2169 (H*) ) +( n.tobi_accent -1.2995 (H*) ) +( nn.tobi_accent -6.5056 (H*) ) +( pp.tobi_accent 0.0000 (L*) ) +( p.tobi_accent -7.5000 (L*) ) +( tobi_accent -25.0000 (L*) ) +( n.tobi_accent -8.3939 (L*) ) +( nn.tobi_accent -4.5688 (L*) ) +( pp.tobi_accent 2.6789 (L*+H) ) +( p.tobi_accent 45.0000 (L*+H) ) +( tobi_accent -17.5000 (L*+H) ) +( n.tobi_accent -1.3600 (L*+H) ) +( nn.tobi_accent 0.0000 (L*+H) ) +( pp.tobi_accent 0.0000 (L+H*) ) +( p.tobi_accent 8.5850 (L+H*) ) +( tobi_accent 21.2200 (L+H*) ) +( n.tobi_accent -1.3000 (L+H*) ) +( nn.tobi_accent -6.5050 (L+H*) ) +( pp.tobi_endtone 1.8117 (L-L%) ) +( p.tobi_endtone -0.1681 (L-L%) ) +( tobi_endtone -70 (L-L%) ) +( n.tobi_endtone -8.9334 (L-L%) ) +( nn.tobi_endtone -8.4034 (L-L%) ) +( pp.tobi_endtone 1.2099 (L-H%) ) +( p.tobi_endtone 1.1220 (L-H%) ) +( tobi_endtone -10.0000 (L-H%) ) +( n.tobi_endtone -5.9467 (L-H%) ) +( nn.tobi_endtone -6.9072 (L-H%) ) +( pp.tobi_endtone 0.0000 (H-L%) ) +( p.tobi_endtone 0.0000 (H-L%) ) +( tobi_endtone 2.0395 (H-L%) ) +( n.tobi_endtone -12.3940 (H-L%) ) +( nn.tobi_endtone -24.2593 (H-L%) ) +( pp.tobi_endtone 0.0000 (H-H%) ) +( p.tobi_endtone 0.0000 (H-H%) ) +( tobi_endtone 0.0000 (H-H%) ) +( n.tobi_endtone 0.0000 (H-H%) ) +( nn.tobi_endtone 16.1076 (H-H%) ) +( pp.tobi_endtone -1.8913 (L-) ) +( p.tobi_endtone -15.5650 (L-) ) +( tobi_endtone -18.3620 (L-) ) +( n.tobi_endtone -9.8322 (L-) ) +( nn.tobi_endtone -1.8182 (L-) ) +( pp.tobi_endtone -13.4429 (H-) ) +( p.tobi_endtone 0.0000 (H-) ) +( tobi_endtone 1.9053 (H-) ) +( n.tobi_endtone -3.4315 (H-) ) +( nn.tobi_endtone 0.0000 (H-) ) +( p.tobi_accent 0.0000 (L+H*L-H%) ) +( tobi_accent 10.0000 (L+H*L-H%) ) +( n.tobi_accent 0.0000 (L+H*L-H%) ) +( pp.syl_break 0.3501 ) +( p.syl_break -0.8121 ) +( syl_break 0.3209 ) +( n.syl_break 0.7486 ) +( nn.syl_break 0.8182 ) +( pp.stress -0.9778 ) +( p.stress -0.3096 ) +( stress 2.7752 ) +( n.stress 0.9976 ) +( nn.stress 2.7343 ) +( syl_in -1.9845 ) +( syl_out 0.7142 ) +( ssyl_in 1.0376 ) +( ssyl_out 0.3062 ) +( asyl_in 0.0000 ) +( asyl_out 0.4953 ) +( last_accent 0.0000 ) +( next_accent 0.1084 ) +( sub_phrases 0.0000 ) +( lisp_l_spread -60.0000 ) +)) + +(set! apml_f2b_f0_lr_mid +'( +( Intercept 160.2474 ) +( pp.lisp_apml_tgtype 0.0000 (1) ) +( p.lisp_apml_tgtype 4.5869 (1) ) +( lisp_apml_tgtype 25.6530 (1) ) +( n.lisp_apml_tgtype 14.8255 (1) ) +( nn.lisp_apml_tgtype 12.9605 (1) ) +( pp.lisp_apml_tgtype 0.0000 (2) ) +( p.lisp_apml_tgtype 3.4867 (2) ) +( lisp_apml_tgtype 13.5566 (2) ) +( n.lisp_apml_tgtype 1.3359 (2) ) +( nn.lisp_apml_tgtype 0.0000 (2) ) +( pp.lisp_apml_tgtype 3.2989 (3) ) +( p.lisp_apml_tgtype 2.5723 (3) ) +( lisp_apml_tgtype 5.5798 (3) ) +( n.lisp_apml_tgtype 0.0000 (3) ) +( nn.lisp_apml_tgtype 0.0000 (3) ) +( pp.lisp_apml_iecount 0.0000 ) +( p.lisp_apml_iecount -0.7231 ) +( lisp_apml_iecount 0.0000 ) +( n.lisp_apml_iecount -2.6922 ) +( nn.lisp_apml_iecount 0.0000 ) +( pp.tobi_accent 0.0000 (H*) ) +( p.tobi_accent 6.0496 (H*) ) +( tobi_accent 20.9174 (H*) ) +( n.tobi_accent 0.0000 (H*) ) +( nn.tobi_accent -6.4804 (H*) ) +( pp.tobi_accent 0.0000 (L*) ) +( p.tobi_accent -5.0000 (L*) ) +( tobi_accent -45.0000 (L*) ) +( n.tobi_accent -6.1079 (L*) ) +( nn.tobi_accent -3.4815 (L*) ) +( pp.tobi_accent 0.0000 (L*+H) ) +( p.tobi_accent 30.0000 (L*+H) ) +( tobi_accent -30.0000 (L*+H) ) +( n.tobi_accent -2.7200 (L*+H) ) +( nn.tobi_accent 0.0000 (L*+H) ) +( pp.tobi_accent 0.0000 (L+H*) ) +( p.tobi_accent 6.0500 (L+H*) ) +( tobi_accent 20.9200 (L+H*) ) +( n.tobi_accent 0.0000 (L+H*) ) +( nn.tobi_accent -6.4800 (L+H*) ) +( pp.tobi_endtone 3.6235 (L-L%) ) +( p.tobi_endtone 0.2801 (L-L%) ) +( tobi_endtone -80 (L-L%) ) +( n.tobi_endtone -6.9938 (L-L%) ) +( nn.tobi_endtone -9.1546 (L-L%) ) +( pp.tobi_endtone 1.6616 (L-H%) ) +( p.tobi_endtone 2.2441 (L-H%) ) +( tobi_endtone 0.0000 (L-H%) ) +( n.tobi_endtone 0.0000 (L-H%) ) +( nn.tobi_endtone -6.6132 (L-H%) ) +( pp.tobi_endtone 0.0000 (H-L%) ) +( p.tobi_endtone 0.0000 (H-L%) ) +( tobi_endtone 0.0000 (H-L%) ) +( n.tobi_endtone -5.4416 (H-L%) ) +( nn.tobi_endtone -19.1570 (H-L%) ) +( pp.tobi_endtone 0.0000 (H-H%) ) +( p.tobi_endtone 0.0000 (H-H%) ) +( tobi_endtone 0.0000 (H-H%) ) +( n.tobi_endtone 0.0000 (H-H%) ) +( nn.tobi_endtone 32.2151 (H-H%) ) +( pp.tobi_endtone -3.7825 (L-) ) +( p.tobi_endtone -15.9598 (L-) ) +( tobi_endtone -36.7241 (L-) ) +( n.tobi_endtone -5.1082 (L-) ) +( nn.tobi_endtone -3.6363 (L-) ) +( pp.tobi_endtone -13.3813 (H-) ) +( p.tobi_endtone 0.0000 (H-) ) +( tobi_endtone -2.5270 (H-) ) +( n.tobi_endtone 0.0000 (H-) ) +( nn.tobi_endtone 0.0000 (H-) ) +( p.tobi_accent 0.0000 (L+H*L-H%) ) +( tobi_accent 40.0000 (L+H*L-H%) ) +( n.tobi_accent 0.0000 (L+H*L-H%) ) +( pp.syl_break 0.7003 ) +( p.syl_break -1.6241 ) +( syl_break 0.0000 ) +( n.syl_break 0.1439 ) +( nn.syl_break 0.5640 ) +( pp.stress -1.9556 ) +( p.stress 0.0000 ) +( stress 3.1383 ) +( n.stress 1.9952 ) +( nn.stress 2.9208 ) +( syl_in -2.5317 ) +( syl_out 1.0103 ) +( ssyl_in 2.0751 ) +( ssyl_out 0.0000 ) +( asyl_in 0.0000 ) +( asyl_out 0.0000 ) +( last_accent 0.0000 ) +( next_accent 0.5869 ) +( sub_phrases 0.0000 ) +( lisp_l_spread -60.0000 ) +)) + +(set! apml_f2b_f0_lr_right +'( +( Intercept 162.6687 ) +( pp.lisp_apml_tgtype -4.0459 (1) ) +( p.lisp_apml_tgtype 3.0601 (1) ) +( lisp_apml_tgtype 27.8166 (1) ) +( n.lisp_apml_tgtype 7.4127 (1) ) +( nn.lisp_apml_tgtype 11.3458 (1) ) +( pp.lisp_apml_tgtype -3.8091 (2) ) +( p.lisp_apml_tgtype 1.7434 (2) ) +( lisp_apml_tgtype 17.1672 (2) ) +( n.lisp_apml_tgtype 0.6679 (2) ) +( nn.lisp_apml_tgtype 0.0000 (2) ) +( pp.lisp_apml_tgtype 1.6494 (3) ) +( p.lisp_apml_tgtype 1.2861 (3) ) +( lisp_apml_tgtype 9.5674 (3) ) +( n.lisp_apml_tgtype -3.1085 (3) ) +( nn.lisp_apml_tgtype 0.0000 (3) ) +( pp.lisp_apml_iecount 0.0000 ) +( p.lisp_apml_iecount -0.7829 ) +( lisp_apml_iecount -0.5447 ) +( n.lisp_apml_iecount -1.3461 ) +( nn.lisp_apml_iecount -0.7178 ) +( pp.tobi_accent 0.7904 (H*) ) +( p.tobi_accent 3.0248 (H*) ) +( tobi_accent 14.1116 (H*) ) +( n.tobi_accent 0.0000 (H*) ) +( nn.tobi_accent -3.2402 (H*) ) +( pp.tobi_accent 0.0000 (L*) ) +( p.tobi_accent -2.5000 (L*) ) +( tobi_accent -32.5000 (L*) ) +( n.tobi_accent -3.0539 (L*) ) +( nn.tobi_accent -1.7408 (L*) ) +( pp.tobi_accent 0.0000 (L*+H) ) +( p.tobi_accent 17.5000 (L*+H) ) +( tobi_accent -9.0000 (L*+H) ) +( n.tobi_accent -2.8025 (L*+H) ) +( nn.tobi_accent -0.5455 (L*+H) ) +( pp.tobi_accent 0.7900 (L+H*) ) +( p.tobi_accent 3.0250 (L+H*) ) +( tobi_accent 14.1150 (L+H*) ) +( n.tobi_accent 0.0000 (L+H*) ) +( nn.tobi_accent -3.2400 (L+H*) ) +( pp.tobi_endtone 5.7534 (L-L%) ) +( p.tobi_endtone 0.1401 (L-L%) ) +( tobi_endtone -65 (L-L%) ) +( n.tobi_endtone -11.1795 (L-L%) ) +( nn.tobi_endtone -7.8158 (L-L%) ) +( pp.tobi_endtone 4.4276 (L-H%) ) +( p.tobi_endtone 1.1220 (L-H%) ) +( tobi_endtone 20.0000 (L-H%) ) +( n.tobi_endtone -6.8995 (L-H%) ) +( nn.tobi_endtone -6.1219 (L-H%) ) +( pp.tobi_endtone 2.4327 (H-L%) ) +( p.tobi_endtone 0.0000 (H-L%) ) +( tobi_endtone -7.5781 (H-L%) ) +( n.tobi_endtone -2.7208 (H-L%) ) +( nn.tobi_endtone -14.4838 (H-L%) ) +( pp.tobi_endtone 0.0000 (H-H%) ) +( p.tobi_endtone 0.0000 (H-H%) ) +( tobi_endtone 0.0000 (H-H%) ) +( n.tobi_endtone 0.0000 (H-H%) ) +( nn.tobi_endtone 16.1076 (H-H%) ) +( pp.tobi_endtone -1.8913 (L-) ) +( p.tobi_endtone -15.5651 (L-) ) +( tobi_endtone -40.2021 (L-) ) +( n.tobi_endtone -2.5541 (L-) ) +( nn.tobi_endtone -2.2224 (L-) ) +( pp.tobi_endtone -6.6906 (H-) ) +( p.tobi_endtone -3.5483 (H-) ) +( tobi_endtone -1.2635 (H-) ) +( n.tobi_endtone 0.0000 (H-) ) +( nn.tobi_endtone 0.0000 (H-) ) +( p.tobi_accent 0.0000 (L+H*L-H%) ) +( tobi_accent -40.0000 (L+H*L-H%) ) +( n.tobi_accent 0.0000 (L+H*L-H%) ) +( pp.syl_break 0.3501 ) +( p.syl_break -1.0003 ) +( syl_break -1.5536 ) +( n.syl_break 0.0720 ) +( nn.syl_break 0.5989 ) +( pp.stress -0.9778 ) +( p.stress -0.8046 ) +( stress 1.2124 ) +( n.stress 3.9715 ) +( nn.stress 2.3914 ) +( syl_in -2.3468 ) +( syl_out 0.9792 ) +( ssyl_in 2.0463 ) +( ssyl_out 0.0000 ) +( asyl_in -0.1460 ) +( asyl_out 0.0000 ) +( last_accent -1.0992 ) +( next_accent 0.2935 ) +( sub_phrases 0.0000 ) +( lisp_l_spread -60.0000 ) +)) + +(set! apml_f2b_f0_lr_end +'( +( Intercept 165.0901 ) +( pp.lisp_apml_tgtype -8.0918 (1) ) +( p.lisp_apml_tgtype 1.5332 (1) ) +( lisp_apml_tgtype 29.9802 (1) ) +( n.lisp_apml_tgtype 0.0000 (1) ) +( nn.lisp_apml_tgtype 9.7312 (1) ) +( pp.lisp_apml_tgtype -7.6181 (2) ) +( p.lisp_apml_tgtype 0.0000 (2) ) +( lisp_apml_tgtype 20.7778 (2) ) +( n.lisp_apml_tgtype 0.0000 (2) ) +( nn.lisp_apml_tgtype 0.0000 (2) ) +( pp.lisp_apml_tgtype 0.0000 (3) ) +( p.lisp_apml_tgtype 0.0000 (3) ) +( lisp_apml_tgtype 13.5550 (3) ) +( n.lisp_apml_tgtype -6.2170 (3) ) +( nn.lisp_apml_tgtype 0.0000 (3) ) +( pp.lisp_apml_iecount 0.0000 ) +( p.lisp_apml_iecount -0.8428 ) +( lisp_apml_iecount -1.0894 ) +( n.lisp_apml_iecount 0.0000 ) +( nn.lisp_apml_iecount -1.4355 ) +( pp.tobi_accent 1.5807 (H*) ) +( p.tobi_accent 0.0000 (H*) ) +( tobi_accent 7.3057 (H*) ) +( n.tobi_accent 0.0000 (H*) ) +( nn.tobi_accent 0.0000 (H*) ) +( pp.tobi_accent 0.0000 (L*) ) +( p.tobi_accent 0.0000 (L*) ) +( tobi_accent -20.0000 (L*) ) +( n.tobi_accent 0.0000 (L*) ) +( nn.tobi_accent 0.0000 (L*) ) +( pp.tobi_accent 0.0000 (L*+H) ) +( p.tobi_accent 5.0000 (L*+H) ) +( tobi_accent 12.0000 (L*+H) ) +( n.tobi_accent -2.8850 (L*+H) ) +( nn.tobi_accent -1.0910 (L*+H) ) +( pp.tobi_accent 1.5800 (L+H*) ) +( p.tobi_accent 0.0000 (L+H*) ) +( tobi_accent 7.3100 (L+H*) ) +( n.tobi_accent 0.0000 (L+H*) ) +( nn.tobi_accent 0.0000 (L+H*) ) +( pp.tobi_endtone 7.8833 (L-L%) ) +( p.tobi_endtone 0.0000 (L-L%) ) +( tobi_endtone -80 (L-L%) ) +( n.tobi_endtone -35 (L-L%) ) +( nn.tobi_endtone -6.4769 (L-L%) ) +( pp.tobi_endtone 7.1936 (L-H%) ) +( p.tobi_endtone 0.0000 (L-H%) ) +( tobi_endtone 40.0000 (L-H%) ) +( n.tobi_endtone -13.7990 (L-H%) ) +( nn.tobi_endtone -5.6305 (L-H%) ) +( pp.tobi_endtone 4.8654 (H-L%) ) +( p.tobi_endtone 0.0000 (H-L%) ) +( tobi_endtone -15.1561 (H-L%) ) +( n.tobi_endtone 0.0000 (H-L%) ) +( nn.tobi_endtone -9.8107 (H-L%) ) +( pp.tobi_endtone 0.0000 (H-H%) ) +( p.tobi_endtone 0.0000 (H-H%) ) +( tobi_endtone 0.0000 (H-H%) ) +( n.tobi_endtone 0.0000 (H-H%) ) +( nn.tobi_endtone 0.0000 (H-H%) ) +( pp.tobi_endtone 0.0000 (L-) ) +( p.tobi_endtone -15.1705 (L-) ) +( tobi_endtone -43.6801 (L-) ) +( n.tobi_endtone 0.0000 (L-) ) +( nn.tobi_endtone -0.8085 (L-) ) +( pp.tobi_endtone 0.0000 (H-) ) +( p.tobi_endtone -7.0967 (H-) ) +( tobi_endtone 0.0000 (H-) ) +( n.tobi_endtone 0.0000 (H-) ) +( nn.tobi_endtone 0.0000 (H-) ) +( p.tobi_accent 0.0000 (L+H*L-H%) ) +( tobi_accent 60.0000 (L+H*L-H%) ) +( n.tobi_accent -60.0000 (L+H*L-H%) ) +( pp.syl_break 0.0000 ) +( p.syl_break -0.3765 ) +( syl_break -3.1072 ) +( n.syl_break 0.0000 ) +( nn.syl_break 0.6338 ) +( pp.stress 0.0000 ) +( p.stress -1.6093 ) +( stress -0.7136 ) +( n.stress 5.9479 ) +( nn.stress 1.8619 ) +( syl_in -2.1619 ) +( syl_out 0.9481 ) +( ssyl_in 2.0175 ) +( ssyl_out 0.0000 ) +( asyl_in -0.2919 ) +( asyl_out 0.0000 ) +( last_accent -2.1984 ) +( next_accent 0.0000 ) +( sub_phrases 0.0000 ) +( lisp_l_spread -60.0000 ) +)) + diff --git a/lib/apml_kaldurtreeZ.scm b/lib/apml_kaldurtreeZ.scm new file mode 100644 index 0000000..5a3d44e --- /dev/null +++ b/lib/apml_kaldurtreeZ.scm @@ -0,0 +1,996 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A tree to predict zcore durations build from f2b +;;; doesn't use actual phonemes so it can have better generalizations +;;; +;;; Basically copied from ked +;;; + +(set! apml_kal_durs +'( + (uh 0.067 0.025) + (hh 0.061 0.028) + (ao 0.138 0.046) + (hv 0.053 0.020) + (v 0.051 0.019) + (ih 0.058 0.023) + (el 0.111 0.043) + (ey 0.132 0.042) + (em 0.080 0.033) + (jh 0.094 0.024) + (w 0.054 0.023) + (uw 0.107 0.044) + (ae 0.120 0.036) + (en 0.117 0.056) + (k 0.089 0.034) + (y 0.048 0.025) + (axr 0.147 0.035) +; (l 0.056 0.026) + (l 0.066 0.026) + (ng 0.064 0.024) + (zh 0.071 0.030) + (z 0.079 0.034) + (brth 0.246 0.046) + (m 0.069 0.028) + (iy 0.097 0.041) + (n 0.059 0.025) + (ah 0.087 0.031) + (er 0.086 0.010) + (b 0.069 0.024) + (pau 0.200 0.1) + (aw 0.166 0.053) + (p 0.088 0.030) + (ch 0.115 0.025) + (ow 0.134 0.039) + (dh 0.031 0.016) + (nx 0.049 0.100) + (d 0.048 0.021) + (ax 0.046 0.024) + (h# 0.060 0.083) + (r 0.053 0.031) + (eh 0.095 0.036) + (ay 0.137 0.047) + (oy 0.183 0.050) + (f 0.095 0.033) + (sh 0.108 0.031) + (s 0.102 0.037) + (g 0.064 0.021) + (dx 0.031 0.016) + (th 0.093 0.050) + (aa 0.094 0.037) + (t 0.070 0.020) +) +) + +(set! apml_kal_duration_cart_tree +' +((name is pau) + ((emph_sil is +) + ((0.0 -0.5)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 0.2) + ((0.0 0.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 0.4) + ((0.0 2.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 0.6) + ((0.0 4.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 0.8) + ((0.0 6.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 1.0) + ((0.0 8.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 1.5) + ((0.0 13.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 2.0) + ((0.0 18.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 2.5) + ((0.0 23.0)) + ((p.R:SylStructure.parent.parent.lisp_apml_pause = 3.0) + ((0.0 28.0)) + ((p.R:SylStructure.parent.parent.pbreak is BB) + ((0.0 2.0)) + ((0.0 0.0))))))))))))) + ((R:SylStructure.parent.accented is 0) + ((n.ph_ctype is 0) + ((p.ph_vlng is 0) + ((R:SylStructure.parent.syl_codasize < 1.5) + ((p.ph_ctype is n) + ((ph_ctype is f) + ((0.559208 -0.783163)) + ((1.05215 -0.222704))) + ((ph_ctype is s) + ((R:SylStructure.parent.syl_break is 2) + ((0.589948 0.764459)) + ((R:SylStructure.parent.asyl_in < 0.7) + ((1.06385 0.567944)) + ((0.691943 0.0530272)))) + ((ph_vlng is l) + ((pp.ph_vfront is 1) + ((1.06991 0.766486)) + ((R:SylStructure.parent.syl_break is 1) + ((0.69665 0.279248)) + ((0.670353 0.0567774)))) + ((p.ph_ctype is s) + ((seg_onsetcoda is coda) + ((0.828638 -0.038356)) + ((ph_ctype is f) + ((0.7631 -0.545853)) + ((0.49329 -0.765994)))) + ((R:SylStructure.parent.parent.gpos is det) + ((R:SylStructure.parent.last_accent < 0.3) + ((R:SylStructure.parent.sub_phrases < 1) + ((0.811686 0.160195)) + ((0.799015 0.713958))) + ((0.731599 -0.215472))) + ((ph_ctype is r) + ((0.673487 0.092772)) + ((R:SylStructure.parent.asyl_in < 1) + ((0.745273 0.00132813)) + ((0.75457 -0.334898))))))))) + ((pos_in_syl < 0.5) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.902446 -0.041618)) + ((R:SylStructure.parent.sub_phrases < 2.3) + ((0.900629 0.262952)) + ((1.18474 0.594794)))) + ((seg_onset_stop is 0) + ((R:SylStructure.parent.position_type is mid) + ((0.512323 -0.760444)) + ((R:SylStructure.parent.syl_out < 6.8) + ((pp.ph_vlng is a) + ((0.640575 -0.450449)) + ((ph_ctype is f) + ((R:SylStructure.parent.sub_phrases < 1.3) + ((0.862876 -0.296956)) + ((R:SylStructure.parent.syl_out < 2.4) + ((0.803215 0.0422868)) + ((0.877856 -0.154465)))) + ((R:SylStructure.parent.syl_out < 3.6) + ((R:SylStructure.parent.syl_out < 1.2) + ((0.567081 -0.264199)) + ((0.598043 -0.541738))) + ((0.676843 -0.166623))))) + ((0.691678 -0.57173)))) + ((R:SylStructure.parent.parent.gpos is cc) + ((1.15995 0.313289)) + ((pp.ph_vfront is 1) + ((0.555993 0.0695819)) + ((R:SylStructure.parent.asyl_in < 1.2) + ((R:SylStructure.parent.sub_phrases < 2.7) + ((0.721635 -0.367088)) + ((0.71919 -0.194887))) + ((0.547052 -0.0637491))))))) + ((ph_ctype is s) + ((R:SylStructure.parent.syl_break is 0) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((0.650007 -0.333421)) + ((0.846301 -0.165383))) + ((0.527756 -0.516332))) + ((R:SylStructure.parent.syl_break is 0) + ((p.ph_ctype is s) + ((0.504414 -0.779112)) + ((0.812498 -0.337611))) + ((pos_in_syl < 1.4) + ((0.513041 -0.745807)) + ((p.ph_ctype is s) + ((0.350582 -1.04907)) + ((0.362 -0.914974)))))))) + ((R:SylStructure.parent.syl_break is 0) + ((ph_ctype is n) + ((R:SylStructure.parent.position_type is initial) + ((pos_in_syl < 1.2) + ((0.580485 0.172658)) + ((0.630973 -0.101423))) + ((0.577937 -0.360092))) + ((R:SylStructure.parent.syl_out < 2.9) + ((R:SylStructure.parent.syl_out < 1.1) + ((R:SylStructure.parent.position_type is initial) + ((0.896092 0.764189)) + ((R:SylStructure.parent.sub_phrases < 3.6) + ((ph_ctype is s) + ((0.877362 0.555132)) + ((0.604511 0.369882))) + ((0.799982 0.666966)))) + ((seg_onsetcoda is coda) + ((p.ph_vlng is a) + ((R:SylStructure.parent.last_accent < 0.4) + ((0.800736 0.240634)) + ((0.720606 0.486176))) + ((1.18173 0.573811))) + ((0.607147 0.194468)))) + ((ph_ctype is r) + ((0.88377 0.499383)) + ((R:SylStructure.parent.last_accent < 0.5) + ((R:SylStructure.parent.position_type is initial) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((0.62798 0.0737318)) + ((0.787334 0.331014))) + ((ph_ctype is s) + ((0.808368 0.0929299)) + ((0.527948 -0.0443271)))) + ((seg_coda_fric is 0) + ((p.ph_vlng is a) + ((0.679745 0.517681)) + ((R:SylStructure.parent.sub_phrases < 1.1) + ((0.759979 0.128316)) + ((0.775233 0.361383)))) + ((R:SylStructure.parent.last_accent < 1.3) + ((0.696255 0.054136)) + ((0.632425 0.246742)))))))) + ((pos_in_syl < 0.3) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.847602 0.621547)) + ((ph_ctype is s) + ((0.880645 0.501679)) + ((R:SylStructure.parent.sub_phrases < 3.3) + ((R:SylStructure.parent.sub_phrases < 0.3) + ((0.901014 -0.042049)) + ((0.657493 0.183226))) + ((0.680126 0.284799))))) + ((ph_ctype is s) + ((p.ph_vlng is s) + ((0.670033 -0.820934)) + ((0.863306 -0.348735))) + ((ph_ctype is n) + ((R:SylStructure.parent.asyl_in < 1.2) + ((0.656966 -0.40092)) + ((0.530966 -0.639366))) + ((seg_coda_fric is 0) + ((1.04153 0.364857)) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.syl_out < 3.4) + ((0.81503 -0.00768613)) + ((0.602665 -0.197753))) + ((0.601844 -0.394632))))))))) + ((n.ph_ctype is f) + ((pos_in_syl < 1.5) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((pos_in_syl < 0.1) + ((1.63863 0.938841)) + ((R:SylStructure.parent.position_type is initial) + ((0.897722 -0.0796637)) + ((nn.ph_vheight is 0) + ((0.781081 0.480026)) + ((0.779711 0.127175))))) + ((ph_ctype is r) + ((p.ph_ctype is s) + ((0.581329 -0.708767)) + ((0.564366 -0.236212))) + ((ph_vlng is a) + ((p.ph_ctype is r) + ((0.70992 -0.273389)) + ((R:SylStructure.parent.parent.gpos is in) + ((0.764696 0.0581338)) + ((nn.ph_vheight is 0) + ((0.977737 0.721904)) + ((R:SylStructure.parent.sub_phrases < 2.2) + ((pp.ph_vfront is 0) + ((0.586708 0.0161206)) + ((0.619949 0.227372))) + ((0.707285 0.445569)))))) + ((ph_ctype is n) + ((R:SylStructure.parent.syl_break is 1) + ((nn.ph_vfront is 2) + ((0.430295 -0.120097)) + ((0.741371 0.219042))) + ((0.587492 0.321245))) + ((p.ph_ctype is n) + ((0.871586 0.134075)) + ((p.ph_ctype is r) + ((0.490751 -0.466418)) + ((R:SylStructure.parent.syl_codasize < 1.3) + ((R:SylStructure.parent.sub_phrases < 2.2) + ((p.ph_ctype is s) + ((0.407452 -0.425925)) + ((0.644771 -0.542809))) + ((0.688772 -0.201899))) + ((ph_vheight is 1) + ((nn.ph_vheight is 0) + ((0.692018 0.209018)) + ((0.751345 -0.178136))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((R:SylStructure.parent.asyl_in < 1.5) + ((0.599633 -0.235593)) + ((0.60042 0.126118))) + ((p.ph_vlng is a) + ((0.7148 -0.174812)) + ((R:SylStructure.parent.parent.gpos is content) + ((0.761296 -0.231509)) + ((0.813081 -0.536405))))))))))))) + ((ph_ctype is n) + ((0.898844 0.163343)) + ((p.ph_vlng is s) + ((seg_coda_fric is 0) + ((0.752921 -0.45528)) + ((0.890079 -0.0998025))) + ((ph_ctype is f) + ((0.729376 -0.930547)) + ((ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((0.745052 -0.634119)) + ((0.521502 -0.760176))) + ((R:SylStructure.parent.syl_break is 1) + ((0.766575 -0.121355)) + ((0.795616 -0.557509)))))))) + ((p.ph_vlng is 0) + ((p.ph_ctype is r) + ((ph_vlng is 0) + ((0.733659 -0.402734)) + ((R:SylStructure.parent.sub_phrases < 1.5) + ((ph_vlng is s) + ((0.326176 -0.988478)) + ((n.ph_ctype is s) + ((0.276471 -0.802536)) + ((0.438283 -0.900628)))) + ((nn.ph_vheight is 0) + ((ph_vheight is 2) + ((0.521 -0.768992)) + ((0.615436 -0.574918))) + ((ph_vheight is 1) + ((0.387376 -0.756359)) + ((pos_in_syl < 0.3) + ((0.417235 -0.808937)) + ((0.384043 -0.93315))))))) + ((ph_vlng is a) + ((ph_ctype is 0) + ((n.ph_ctype is s) + ((p.ph_ctype is f) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.415908 -0.428493)) + ((pos_in_syl < 0.1) + ((0.790441 0.0211071)) + ((0.452465 -0.254485)))) + ((p.ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.582447 -0.389966)) + ((0.757648 0.185781))) + ((R:SylStructure.parent.sub_phrases < 1.4) + ((0.628965 0.422551)) + ((0.713613 0.145576))))) + ((seg_onset_stop is 0) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((pp.ph_vfront is 1) + ((0.412363 -0.62319)) + ((R:SylStructure.parent.syl_out < 3.6) + ((0.729259 -0.317324)) + ((0.441633 -0.591051)))) + ((R:SylStructure.parent.syl_break is 1) + ((R:SylStructure.parent.sub_phrases < 2.7) + ((0.457728 -0.405607)) + ((0.532411 -0.313148))) + ((R:SylStructure.parent.last_accent < 0.3) + ((1.14175 0.159416)) + ((0.616396 -0.254651))))) + ((R:SylStructure.parent.position_type is initial) + ((0.264181 -0.799896)) + ((0.439801 -0.551309))))) + ((R:SylStructure.parent.position_type is final) + ((0.552027 -0.707084)) + ((0.585661 -0.901874)))) + ((ph_ctype is s) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((pp.ph_vfront is 1) + ((0.607449 0.196466)) + ((0.599662 0.00382414))) + ((0.64109 -0.12859))) + ((pp.ph_vfront is 1) + ((0.720484 -0.219339)) + ((0.688707 -0.516734)))) + ((ph_vlng is s) + ((n.ph_ctype is s) + ((R:SylStructure.parent.parent.gpos is content) + ((R:SylStructure.parent.position_type is single) + ((0.659206 0.159445)) + ((R:SylStructure.parent.parent.word_numsyls < 3.5) + ((R:SylStructure.parent.sub_phrases < 2) + ((0.447186 -0.419103)) + ((0.631822 -0.0928561))) + ((0.451623 -0.576116)))) + ((ph_vheight is 3) + ((0.578626 -0.64583)) + ((0.56636 -0.4665)))) + ((R:SylStructure.parent.parent.gpos is in) + ((0.771516 -0.217292)) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.688571 -0.304382)) + ((R:SylStructure.parent.parent.gpos is content) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((n.ph_ctype is n) + ((0.556085 -0.572203)) + ((0.820173 -0.240338))) + ((R:SylStructure.parent.parent.word_numsyls < 2.2) + ((0.595398 -0.588171)) + ((0.524737 -0.95797)))) + ((R:SylStructure.parent.sub_phrases < 3.9) + ((0.371492 -0.959427)) + ((0.440479 -0.845747))))))) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((p.ph_ctype is f) + ((0.524088 -0.482247)) + ((nn.ph_vheight is 1) + ((0.587666 -0.632362)) + ((ph_vlng is l) + ((R:SylStructure.parent.position_type is final) + ((0.513286 -0.713117)) + ((0.604613 -0.924308))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((0.577997 -0.891342)) + ((0.659804 -1.15252)))))) + ((pp.ph_vlng is s) + ((ph_ctype is f) + ((0.813383 -0.599624)) + ((0.984027 -0.0771909))) + ((p.ph_ctype is f) + ((R:SylStructure.parent.parent.gpos is in) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((0.313572 -1.03242)) + ((0.525854 -0.542799))) + ((R:SylStructure.parent.syl_out < 2.8) + ((0.613007 -0.423979)) + ((0.570258 -0.766379)))) + ((R:SylStructure.parent.syl_break is 1) + ((R:SylStructure.parent.parent.gpos is to) + ((0.364585 -0.792895)) + ((ph_vlng is l) + ((0.69143 -0.276816)) + ((0.65673 -0.523721)))) + ((R:SylStructure.parent.syl_out < 3.6) + ((R:SylStructure.parent.position_type is initial) + ((0.682096 -0.488102)) + ((0.406364 -0.731758))) + ((0.584694 -0.822229))))))))))) + ((n.ph_ctype is r) + ((R:SylStructure.parent.position_type is initial) + ((p.ph_vlng is a) + ((0.797058 1.02334)) + ((ph_ctype is s) + ((1.0548 0.536277)) + ((0.817253 0.138201)))) + ((R:SylStructure.parent.sub_phrases < 1.1) + ((R:SylStructure.parent.syl_out < 3.3) + ((0.884574 -0.23471)) + ((0.772063 -0.525292))) + ((nn.ph_vfront is 1) + ((1.25254 0.417485)) + ((0.955557 -0.0781996))))) + ((pp.ph_vfront is 0) + ((ph_ctype is f) + ((n.ph_ctype is s) + ((R:SylStructure.parent.parent.gpos is content) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 0) + ((0.583506 -0.56941)) + ((0.525949 -0.289362))) + ((0.749316 -0.0921038))) + ((p.ph_vlng is s) + ((0.734234 0.139463)) + ((0.680119 -0.0708717)))) + ((ph_vlng is s) + ((ph_vheight is 1) + ((0.908712 -0.618971)) + ((0.55344 -0.840495))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 1.2) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.838715 0.00913392)) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((ph_vheight is 2) + ((0.555513 -0.512523)) + ((R:SylStructure.parent.position_type is initial) + ((0.758711 0.121704)) + ((0.737555 -0.25637)))) + ((R:SylStructure.parent.syl_out < 3.1) + ((n.ph_ctype is s) + ((0.611756 -0.474522)) + ((1.05437 -0.247206))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((R:SylStructure.parent.position_type is final) + ((0.567761 -0.597866)) + ((0.785599 -0.407765))) + ((0.575598 -0.741256)))))) + ((ph_ctype is s) + ((n.ph_ctype is s) + ((0.661069 -1.08426)) + ((0.783184 -0.39789))) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((R:SylStructure.parent.sub_phrases < 2.6) + ((0.511323 -0.666011)) + ((0.691878 -0.499492))) + ((ph_ctype is r) + ((0.482131 -0.253186)) + ((0.852955 -0.372832)))))) + ((0.854447 -0.0936489))))) + ((R:SylStructure.parent.position_type is final) + ((0.685939 -0.249982)) + ((R:SylStructure.parent.syl_out < 3.2) + ((0.989843 0.18086)) + ((0.686805 -0.0402908))))))))) + ((R:SylStructure.parent.syl_out < 2.4) + ((R:SylStructure.parent.syl_out < 0.2) + ((seg_onsetcoda is coda) + ((ph_ctype is s) + ((R:SylStructure.parent.syl_break is 4) + ((pp.ph_vlng is 0) + ((0.959737 1.63203)) + ((1.20714 0.994933))) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.syl_break is 2) + ((0.864809 0.214457)) + ((0.874278 0.730381))) + ((pp.ph_vfront is 0) + ((seg_coda_fric is 0) + ((1.20844 -0.336221)) + ((1.01357 0.468302))) + ((0.658106 -0.799121))))) + ((n.ph_ctype is f) + ((ph_ctype is f) + ((1.26332 0.0300613)) + ((ph_vlng is d) + ((1.02719 1.1649)) + ((ph_ctype is 0) + ((R:SylStructure.parent.asyl_in < 1.2) + ((1.14048 2.2668)) + ((ph_vheight is 1) + ((1.15528 1.50375)) + ((1.42406 2.07927)))) + ((R:SylStructure.parent.sub_phrases < 1.1) + ((0.955892 1.10243)) + ((R:SylStructure.parent.syl_break is 2) + ((1.32682 1.8432)) + ((1.27582 1.59853))))))) + ((n.ph_ctype is 0) + ((ph_ctype is n) + ((R:SylStructure.parent.syl_break is 2) + ((1.45399 1.12927)) + ((1.05543 0.442376))) + ((R:SylStructure.parent.syl_break is 4) + ((R:SylStructure.parent.position_type is final) + ((ph_ctype is f) + ((1.46434 1.76508)) + ((0.978055 0.7486))) + ((1.2395 2.30826))) + ((ph_ctype is 0) + ((0.935325 1.69917)) + ((nn.ph_vfront is 1) + ((1.20456 1.31128)) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((nn.ph_vheight is 0) + ((1.16907 0.212421)) + ((0.952091 0.653094))) + ((p.ph_ctype is 0) + ((1.05502 1.25802)) + ((0.818731 0.777568)))))))) + ((ph_ctype is f) + ((p.ph_ctype is 0) + ((1.03918 0.163941)) + ((0.737545 -0.167063))) + ((R:SylStructure.parent.position_type is final) + ((n.ph_ctype is n) + ((R:SylStructure.parent.last_accent < 0.5) + ((R:SylStructure.parent.sub_phrases < 2.8) + ((0.826207 -0.000859005)) + ((0.871119 0.273433))) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((1.17405 1.05694)) + ((0.858394 0.244916)))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((p.ph_ctype is 0) + ((1.14092 1.21187)) + ((R:SylStructure.parent.syl_break is 2) + ((1.02653 0.59865)) + ((0.94248 1.1634)))) + ((seg_coda_fric is 0) + ((1.07441 0.292935)) + ((1.15736 0.92574))))) + ((ph_vlng is s) + ((R:SylStructure.parent.syl_break is 2) + ((1.34638 1.23484)) + ((0.951514 2.02008))) + ((ph_ctype is 0) + ((p.ph_ctype is r) + ((0.806106 0.697089)) + ((R:SylStructure.parent.syl_break is 2) + ((1.10891 0.992197)) + ((1.04657 1.51093)))) + ((1.18165 0.520952))))))))) + ((p.ph_vlng is 0) + ((pos_in_syl < 0.7) + ((R:SylStructure.parent.position_type is final) + ((ph_ctype is r) + ((0.966357 0.185827)) + ((ph_ctype is s) + ((0.647163 0.0332298)) + ((0.692972 -0.534917)))) + ((ph_ctype is s) + ((0.881521 0.575107)) + ((p.ph_ctype is f) + ((0.8223 -0.111275)) + ((R:SylStructure.parent.last_accent < 0.3) + ((0.969188 0.09447)) + ((0.894438 0.381947)))))) + ((p.ph_ctype is f) + ((0.479748 -0.490108)) + ((0.813125 -0.201268)))) + ((ph_ctype is s) + ((0.908566 1.20397)) + ((R:SylStructure.parent.last_accent < 1.2) + ((0.88078 0.636568)) + ((0.978087 1.07763)))))) + ((pos_in_syl < 1.3) + ((R:SylStructure.parent.syl_break is 0) + ((pos_in_syl < 0.1) + ((R:SylStructure.parent.position_type is initial) + ((p.ph_ctype is n) + ((0.801651 -0.0163359)) + ((ph_ctype is s) + ((n.ph_ctype is r) + ((0.893307 1.07253)) + ((p.ph_vlng is 0) + ((0.92651 0.525806)) + ((0.652444 0.952792)))) + ((p.ph_vlng is 0) + ((seg_onsetcoda is coda) + ((0.820151 0.469117)) + ((p.ph_ctype is f) + ((0.747972 -0.0716448)) + ((ph_ctype is f) + ((0.770882 0.457137)) + ((0.840905 0.102492))))) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.667824 0.697337)) + ((0.737967 0.375114)))))) + ((ph_vheight is 1) + ((0.624353 0.410671)) + ((R:SylStructure.parent.asyl_in < 0.8) + ((0.647905 -0.331055)) + ((p.ph_ctype is s) + ((0.629039 -0.240616)) + ((0.749277 -0.0191273)))))) + ((ph_vheight is 3) + ((p.ph_ctype is s) + ((0.626922 0.556537)) + ((0.789357 0.153892))) + ((seg_onsetcoda is coda) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.parent.word_numsyls < 3.4) + ((0.744714 0.123242)) + ((0.742039 0.295753))) + ((seg_coda_fric is 0) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((ph_vheight is 1) + ((0.549715 -0.341018)) + ((0.573641 -0.00893114))) + ((nn.ph_vfront is 2) + ((0.67099 -0.744625)) + ((0.664438 -0.302803)))) + ((p.ph_vlng is 0) + ((0.630028 0.113815)) + ((0.632794 -0.128733))))) + ((ph_ctype is r) + ((0.367169 -0.854509)) + ((0.94334 -0.216179)))))) + ((n.ph_ctype is f) + ((ph_vlng is 0) + ((1.3089 0.46195)) + ((R:SylStructure.parent.syl_codasize < 1.3) + ((1.07673 0.657169)) + ((pp.ph_vlng is 0) + ((0.972319 1.08222)) + ((1.00038 1.46257))))) + ((p.ph_vlng is l) + ((1.03617 0.785204)) + ((p.ph_vlng is a) + ((R:SylStructure.parent.position_type is final) + ((1.00681 0.321168)) + ((0.928115 0.950834))) + ((ph_vlng is 0) + ((pos_in_syl < 0.1) + ((R:SylStructure.parent.position_type is final) + ((0.863682 -0.167374)) + ((nn.ph_vheight is 0) + ((p.ph_ctype is f) + ((0.773591 -0.00374425)) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.951802 0.228448)) + ((1.02282 0.504252)))) + ((1.09721 0.736476)))) + ((R:SylStructure.parent.position_type is final) + ((1.04302 0.0590974)) + ((0.589208 -0.431535)))) + ((n.ph_ctype is 0) + ((1.27879 1.00642)) + ((ph_vlng is s) + ((R:SylStructure.parent.asyl_in < 1.4) + ((0.935787 0.481652)) + ((0.9887 0.749861))) + ((R:SylStructure.parent.syl_out < 1.1) + ((R:SylStructure.parent.position_type is final) + ((0.921307 0.0696307)) + ((0.83675 0.552212))) + ((0.810076 -0.0479225)))))))))) + ((ph_ctype is s) + ((n.ph_ctype is s) + ((0.706959 -1.0609)) + ((p.ph_ctype is n) + ((0.850614 -0.59933)) + ((n.ph_ctype is r) + ((0.665947 0.00698725)) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.position_type is initial) + ((0.762889 -0.0649044)) + ((0.723956 -0.248899))) + ((R:SylStructure.parent.sub_phrases < 1.4) + ((0.632957 -0.601987)) + ((0.889114 -0.302401))))))) + ((ph_ctype is f) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.865267 0.164636)) + ((0.581827 -0.0989051))) + ((nn.ph_vfront is 2) + ((0.684459 -0.316836)) + ((0.778854 -0.0961191)))) + ((R:SylStructure.parent.syl_out < 1.1) + ((p.ph_ctype is s) + ((0.837964 -0.429437)) + ((0.875304 -0.0652743))) + ((0.611071 -0.635089)))) + ((p.ph_ctype is r) + ((R:SylStructure.parent.syl_out < 1.1) + ((0.762012 0.0139361)) + ((0.567983 -0.454845))) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((ph_ctype is l) + ((1.18845 0.809091)) + ((R:SylStructure.parent.position_type is initial) + ((ph_ctype is n) + ((0.773548 -0.277092)) + ((1.01586 0.281001))) + ((p.ph_ctype is 0) + ((1.06831 0.699145)) + ((0.924189 0.241873))))) + ((R:SylStructure.parent.syl_break is 0) + ((ph_ctype is n) + ((0.592321 -0.470784)) + ((0.778688 -0.072112))) + ((n.ph_ctype is s) + ((1.08848 0.0733489)) + ((1.25674 0.608371)))))))))) + ((pos_in_syl < 0.7) + ((p.ph_vlng is 0) + ((R:SylStructure.parent.position_type is mid) + ((ph_ctype is 0) + ((ph_vheight is 2) + ((0.456225 -0.293282)) + ((0.561529 -0.0816115))) + ((0.6537 -0.504024))) + ((ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((1.31586 0.98395)) + ((R:SylStructure.parent.position_type is single) + ((0.816869 0.634789)) + ((R:SylStructure.parent.syl_out < 4.4) + ((1.05578 0.479029)) + ((R:SylStructure.parent.asyl_in < 0.4) + ((1.11813 0.143214)) + ((0.87178 0.406834)))))) + ((n.ph_ctype is n) + ((R:SylStructure.parent.last_accent < 0.6) + ((0.838154 -0.415599)) + ((0.924024 0.110288))) + ((seg_onsetcoda is coda) + ((nn.ph_vfront is 2) + ((0.670096 0.0314187)) + ((n.ph_ctype is f) + ((1.00363 0.693893)) + ((R:SylStructure.parent.syl_out < 6) + ((0.772363 0.215675)) + ((0.920313 0.574068))))) + ((R:SylStructure.parent.position_type is final) + ((0.673837 -0.458142)) + ((R:SylStructure.parent.sub_phrases < 2.8) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.894817 0.304628)) + ((ph_ctype is n) + ((0.787302 -0.23094)) + ((R:SylStructure.parent.asyl_in < 1.2) + ((ph_ctype is f) + ((R:SylStructure.parent.last_accent < 0.5) + ((1.12278 0.326954)) + ((0.802236 -0.100616))) + ((0.791255 -0.0919132))) + ((0.95233 0.219053))))) + ((R:SylStructure.parent.position_type is initial) + ((ph_ctype is f) + ((1.0616 0.216118)) + ((0.703216 -0.00834086))) + ((ph_ctype is f) + ((1.22277 0.761763)) + ((0.904811 0.332721)))))))))) + ((ph_vheight is 0) + ((p.ph_vlng is s) + ((0.873379 0.217178)) + ((n.ph_ctype is r) + ((0.723915 1.29451)) + ((n.ph_ctype is 0) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((R:SylStructure.parent.sub_phrases < 4) + ((seg_coda_fric is 0) + ((p.ph_vlng is l) + ((0.849154 0.945261)) + ((0.633261 0.687498))) + ((0.728546 0.403076))) + ((0.850962 1.00255))) + ((0.957999 1.09113))) + ((0.85771 0.209045))))) + ((ph_vheight is 2) + ((0.803401 -0.0544067)) + ((0.681353 0.256045))))) + ((n.ph_ctype is f) + ((ph_ctype is s) + ((p.ph_vlng is 0) + ((0.479307 -0.9673)) + ((0.700477 -0.351397))) + ((ph_ctype is f) + ((0.73467 -0.6233)) + ((R:SylStructure.parent.syl_break is 0) + ((p.ph_ctype is s) + ((0.56282 0.266234)) + ((p.ph_ctype is r) + ((0.446203 -0.302281)) + ((R:SylStructure.parent.sub_phrases < 2.7) + ((ph_ctype is 0) + ((0.572016 -0.0102436)) + ((0.497358 -0.274514))) + ((0.545477 0.0482177))))) + ((ph_vlng is s) + ((0.805269 0.888495)) + ((ph_ctype is n) + ((0.869854 0.653018)) + ((R:SylStructure.parent.sub_phrases < 2.2) + ((0.735031 0.0612886)) + ((0.771859 0.346637)))))))) + ((R:SylStructure.parent.syl_codasize < 1.4) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((R:SylStructure.parent.position_type is initial) + ((0.743458 0.0411808)) + ((1.13068 0.613305))) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 1) + ((1.11481 0.175467)) + ((0.937893 -0.276407))) + ((0.74264 -0.550878)))) + ((pos_in_syl < 3.4) + ((seg_onsetcoda is coda) + ((ph_ctype is r) + ((n.ph_ctype is s) + ((0.714319 -0.240328)) + ((p.ph_ctype is 0) + ((0.976987 0.330352)) + ((1.1781 -0.0816682)))) + ((ph_ctype is l) + ((n.ph_ctype is 0) + ((1.39137 0.383533)) + ((0.725585 -0.324515))) + ((ph_vheight is 3) + ((ph_vlng is d) + ((0.802626 -0.62487)) + ((n.ph_ctype is r) + ((0.661091 -0.513869)) + ((R:SylStructure.parent.position_type is initial) + ((R:SylStructure.parent.parent.word_numsyls < 2.4) + ((0.482285 0.207874)) + ((0.401601 -0.0204711))) + ((0.733755 0.397372))))) + ((n.ph_ctype is r) + ((p.ph_ctype is 0) + ((pos_in_syl < 1.2) + ((0.666325 0.271734)) + ((nn.ph_vheight is 0) + ((0.642401 -0.261466)) + ((0.783684 -0.00956571)))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.692225 -0.381895)) + ((0.741921 -0.0898767)))) + ((nn.ph_vfront is 2) + ((ph_ctype is s) + ((0.697527 -1.12626)) + ((n.ph_ctype is s) + ((ph_vlng is 0) + ((R:SylStructure.parent.sub_phrases < 2.4) + ((0.498719 -0.906926)) + ((0.635342 -0.625651))) + ((0.45886 -0.385089))) + ((0.848596 -0.359702)))) + ((p.ph_vlng is a) + ((p.ph_ctype is 0) + ((0.947278 0.216904)) + ((0.637933 -0.394349))) + ((p.ph_ctype is r) + ((R:SylStructure.parent.syl_break is 0) + ((0.529903 -0.860573)) + ((0.581378 -0.510488))) + ((ph_vlng is 0) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((seg_onset_stop is 0) + ((R:SylStructure.parent.syl_break is 0) + ((p.ph_vlng is d) + ((0.768363 0.0108428)) + ((ph_ctype is s) + ((0.835756 -0.035054)) + ((ph_ctype is f) + ((p.ph_vlng is s) + ((0.602016 -0.179727)) + ((0.640126 -0.297341))) + ((0.674628 -0.542602))))) + ((ph_ctype is s) + ((0.662261 -0.60496)) + ((0.662088 -0.432058)))) + ((R:SylStructure.parent.syl_out < 4.4) + ((0.582448 -0.389079)) + ((ph_ctype is s) + ((0.60413 -0.73564)) + ((0.567153 -0.605444))))) + ((R:SylStructure.parent.R:Syllable.p.syl_break is 2) + ((0.761115 -0.827377)) + ((ph_ctype is n) + ((0.855183 -0.275338)) + ((R:SylStructure.parent.syl_break is 0) + ((0.788288 -0.802801)) + ((R:SylStructure.parent.syl_codasize < 2.2) + ((0.686134 -0.371234)) + ((0.840184 -0.772883))))))) + ((pos_in_syl < 1.2) + ((R:SylStructure.parent.syl_break is 0) + ((n.ph_ctype is n) + ((0.423592 -0.655006)) + ((R:SylStructure.parent.syl_out < 4.4) + ((0.595269 -0.303751)) + ((0.478433 -0.456882)))) + ((0.688133 -0.133182))) + ((seg_onset_stop is 0) + ((1.27464 0.114442)) + ((0.406837 -0.167545)))))))))))) + ((ph_ctype is r) + ((0.462874 -0.87695)) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.645442 -0.640572)) + ((0.673717 -0.321322))))) + ((0.61008 -0.925472)))))))) +;; RMSE 0.8085 Correlation is 0.5899 Mean (abs) Error 0.6024 (0.5393) + + +)) + +(provide 'apml_kaldurtreeZ) diff --git a/lib/cart_aux.scm b/lib/cart_aux.scm new file mode 100644 index 0000000..e927ffd --- /dev/null +++ b/lib/cart_aux.scm @@ -0,0 +1,183 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Some functions for manipulating decision trees +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (cart_prune_tree_thresh tree threshold default) +"(prune_cart_tree_thresh TREE THRESHOLD DEFAULT) +Prune the classification tree TREE so that all tail nodes with +a prediction probabality less than THRESHOLD and changed to return +DEFAULT instead. This may be used when different mistakes have actually +different penalites hence some control of the defaults need to be +controlled." + (cond + ((cdr tree) ;; a question + (list + (car tree) + (cart_prune_tree_thresh (car (cdr tree)) threshold default) + (cart_prune_tree_thresh (car (cdr (cdr tree))) threshold default))) + ((< (cart_class_probability (car tree)) threshold) + (list (list (list threshold default) default))) + (t ;; leave asis + tree))) + +(define (cart_class_probability class) + "(cart_class_probability CLASS) +Returns the probability of the best class in the cart leaf node CLASS. +If CLASS simple has a value and now probabilities the probabilities +it assume to be 1.0." + (let ((val 0.0)) + (set! val (assoc (car (last class)) class)) + (if val + (car (cdr val)) + 1.0))) + +(define (cart_class_prune_merge tree) + "(cart_class_prune_merge tree) +Prune all sub trees which are pure. That is they all predict the +same class. This can happen when some other pruning technique +as modified a sub-tree now making it pure." + (let ((pure (cart_tree_pure tree))) + (cond + (pure pure) + ((cdr tree);; a question + (list + (car tree) + (cart_class_prune_merge (car (cdr tree))) + (cart_class_prune_merge (car (cdr (cdr tree)))))) + (t;; a leaf leave asis + tree)))) + +(define (cart_tree_pure tree) + "(cart_tree_pure tree) +Returns a probability density function if all nodes in this tree +predict the same class and nil otherwise" + (cond + ((cdr tree) + (let ((left (cart_tree_pure (car (cdr tree)))) + (right (cart_tree_pure (car (cdr (cdr tree)))))) + (cond + ((not left) nil) + ((not right) nil) + ((equal? (car (last left)) (car (last right))) + left) + (t + nil)))) + (t ;; its a leaf, so of couse its pure + tree))) + +(define (cart_simplify_tree tree map) + "(cart_simplify_tree TREE) +Simplify a CART tree by reducing probability density functions to +simple single clasifications (no probabilities). This removes valuable +information from the tree but makes them smaller easier to read by humans +and faster to read by machines. Also the classes may be mapped by the assoc +list in map. The bright ones amongst you will note this could be +better and merge 'is' operators into 'in' operators in some situations +especially if you are ignoring actual probability distributions." + (cond + ((cdr tree) + (list + (car tree) + (cart_simplify_tree (car (cdr tree)) map) + (cart_simplify_tree (car (cdr (cdr tree))) map))) + (t + (let ((class (car (last (car tree))))) + (if (assoc class map) + (list (cdr (assoc class map))) + (list (last (car tree)))))))) + +(define (cart_simplify_tree2 tree) + "(cart_simplify_tree2 TREE) +Simplify a CART tree by reducing probability density functions to +only non-zero probabilities." + (cond + ((cdr tree) + (list + (car tree) + (cart_simplify_tree2 (car (cdr tree))) + (cart_simplify_tree2 (car (cdr (cdr tree)))))) + (t + (list + (cart_remove_zero_probs (car tree)))))) + +(define (cart_remove_zero_probs pdf) + "(cart_remove_zero_probs pdf) +Removes zero probability classes in pdf, last in list +is best in class (as from cart leaf node)." + (cond + ((null (cdr pdf)) pdf) + ((equal? 0 (car (cdr (car pdf)))) + (cart_remove_zero_probs (cdr pdf))) + (t + (cons + (car pdf) + (cart_remove_zero_probs (cdr pdf)))))) + +(define (cart_interpret_debug i tree) + "(cart_interpret_debug i tree) +In comparing output between different implementations (flite vs festival) +This prints out the details as it interprets the tree." + (cond + ((cdr tree) ;; question + (format t "%s %s %s\n" (car (car tree)) (upcase (cadr (car tree))) + (car (cddr (car tree)))) + (set! a (item.feat i (car (car tree)))) + (format t "%s\n" a) + (cond + ((string-equal "is" (cadr (car tree))) + (if (string-equal a (car (cddr (car tree)))) + (begin + (format t " YES\n") + (cart_interpret_debug i (car (cdr tree)))) + (begin + (format t " NO\n") + (cart_interpret_debug i (car (cddr tree)))))) + ((string-equal "<" (cadr (car tree))) + (if (< (parse-number a) (parse-number (car (cddr (car tree))))) + (begin + (format t " YES\n") + (cart_interpret_debug i (car (cdr tree)))) + (begin + (format t " NO\n") + (cart_interpret_debug i (car (cddr tree)))))) + (t + (format t "unknown q type %l\n" (car tree))))) + (t ;; leaf + (car tree) + ))) + +(provide 'cart_aux) + diff --git a/lib/clunits.scm b/lib/clunits.scm new file mode 100644 index 0000000..9ad181a --- /dev/null +++ b/lib/clunits.scm @@ -0,0 +1,287 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Carnegie Mellon University and ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998-2001 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH, CARNEGIE MELLON UNIVERSITY AND THE ;; +;;; CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH REGARD TO ;; +;;; THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ;; +;;; AND FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF EDINBURGH, CARNEGIE ;; +;;; MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, ;; +;;; INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ;; +;;; RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION ;; +;;; OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ;; +;;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Cluster Unit selection support (Black and Taylor Eurospeech '97) +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Run-time support, selection and synthesis and some debugging functions +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require_module 'clunits) + +(defvar cluster_synth_pre_hooks nil) +(defvar cluster_synth_post_hooks nil) + +(defvar clunits_time time) ;; some old voices might use this + +(defSynthType Cluster + (apply_hooks cluster_synth_pre_hooks utt) + (Clunits_Select utt) + (Clunits_Get_Units utt) + (Clunits_Join_Units utt) + (apply_hooks cluster_synth_post_hooks utt) + utt +) + +(define (Clunits_Join_Units utt) + "(Clunits_Join_Units utt) +Join the preselected and gotten units into a waveform." + (let ((join_method (get_param 'join_method clunits_params 'simple))) + ;; Choice of function to put them together + (cond + ((string-equal join_method 'windowed) + (Clunits_Windowed_Wave utt) + (clunits::fix_segs_durs utt)) + ((string-equal join_method 'smoothedjoin) + (Clunits_SmoothedJoin_Wave utt) + (clunits::fix_segs_durs utt)) + ((string-equal join_method 'none) + t) + ((string-equal join_method 'modified_lpc) + (defvar UniSyn_module_hooks nil) + (Param.def "unisyn.window_name" "hanning") + (Param.def "unisyn.window_factor" 1.0) + (Parameter.def 'us_sigpr 'lpc) + (mapcar + (lambda (u s) + (item.set_feat s "source_end" (item.feat u "end"))) + (utt.relation.items utt 'Unit) + (utt.relation.items utt 'Segment)) + (us_unit_concat utt) + (if (not (member 'f0 (utt.relationnames utt))) + (targets_to_f0 utt)) + (if (utt.relation.last utt 'Segment) + (set! pm_end (+ (item.feat (utt.relation.last utt 'Segment) "end") + 0.02)) + (set! pm_end 0.02)) + (us_f0_to_pitchmarks utt 'f0 'TargetCoef pm_end) + (us_mapping utt 'segment_single) + (us_generate_wave utt (Parameter.get 'us_sigpr) + 'analysis_period)) + ((string-equal join_method 'smoothed_lpc) +; (format t "smoothed_lpc\n") + (defvar UniSyn_module_hooks nil) + (Param.def "unisyn.window_name" "hanning") + (Param.def "unisyn.window_factor" 1.0) + (Parameter.def 'us_sigpr 'lpc) + (mapcar + (lambda (u s) + (item.set_feat s "source_end" (item.feat u "end")) + (item.set_feat s "unit_duration" + (- (item.feat u "seg_end") (item.feat u "seg_start"))) + ) + (utt.relation.items utt 'Unit) + (utt.relation.items utt 'Segment)) + (us_unit_concat utt) + (mapcar + (lambda (u s) + (item.set_feat s "num_frames" (item.feat u "num_frames"))) + (utt.relation.items utt 'Unit) + (utt.relation.items utt 'Segment)) + (if (not (member 'f0 (utt.relationnames utt))) + (targets_to_f0 utt)) + (if (utt.relation.last utt 'Segment) + (set! pm_end (+ (item.feat (utt.relation.last utt 'Segment) "end") + 0.02)) + (set! pm_end 0.02)) + (us_f0_to_pitchmarks utt 'f0 'TargetCoef pm_end) + (cl_mapping utt clunits_params) + (us_generate_wave utt (Parameter.get 'us_sigpr) + 'analysis_period)) + (t + (Clunits_Simple_Wave utt))) + utt + ) +) + +(define (clunits::units_selected utt filename) + "(clunits::units_selected utt filename) +Output selected unitsfile indexes for each unit in the given utterance. +Results saved in given file name, or stdout if filename is \"-\"." + (let ((fd (if (string-equal filename "-") + t + (fopen filename "w"))) + (end 0) + (sample_rate + (cadr (assoc 'sample_rate (wave.info (utt.wave utt)))))) + (format fd "#\n") + (mapcar + (lambda (s) + (let ((dur (/ (- (item.feat s "samp_end") + (item.feat s "samp_start")) + sample_rate)) + (start (/ (item.feat s "samp_start") sample_rate))) + (set! end (+ end dur)) + (format fd "%f 125 %s ; %s %10s %f %f %f\n" + end + (string-before (item.name s) "_") + (item.name s) + (item.feat s "fileid") + (item.feat s "unit_start") + (item.feat s "unit_middle") + (item.feat s "unit_end")) + )) + (utt.relation.items utt 'Unit)) + (if (not (string-equal filename "-")) + (fclose fd)) + t)) + +(define (clunits::units_segs utt filename) + "(clunits::units_segs utt filename) +Svaes the unit selections (alone) for display." + (let ((fd (if (string-equal filename "-") + t + (fopen filename "w"))) + (end 0) + (sample_rate + (cadr (assoc 'sample_rate (wave.info (utt.wave utt)))))) + (format fd "#\n") + (mapcar + (lambda (s) + (let ((dur (/ (- (item.feat s "samp_end") + (item.feat s "samp_start")) + sample_rate)) + (start (/ (item.feat s "samp_start") sample_rate))) + (set! end (+ end dur)) + (format fd "%f 125 %s \n" + end + (string-before (item.name s) "_") +; (item.name s) + ) + )) + (utt.relation.items utt 'Unit)) + (if (not (string-equal filename "-")) + (fclose fd)) + t)) + +(define (clunits::fix_segs_durs utt) + "(clunits::fix_segs_durs utt) +Takes the actual unit times and places then back on the segs." + (let ((end 0) + (sample_rate + (cadr (assoc 'sample_rate (wave.info (utt.wave utt)))))) + (mapcar + (lambda (u s) + (let ((dur (/ (- (item.feat u "samp_end") + (item.feat u "samp_start")) + sample_rate)) + (seg_start (/ (- (item.feat u "samp_seg_start") + (item.feat u "samp_start")) + sample_rate))) + (if (item.prev s) + (item.set_feat (item.prev s) "end" + (+ (item.feat s "p.end") seg_start))) + (set! end (+ end dur)) + (item.set_feat s "end" end))) + (utt.relation.items utt 'Unit) + (utt.relation.items utt 'Segment) + ) + utt)) + +(define (clunits::display utt) + "(clunits::display utt) +Display utterance with emulabel. Note this saves files in +scratch/wav/ and scratch/lab/." + (let ((id "cl01")) + (utt.save.wave utt (format nil "scratch/wav/%s.wav" id)) + (utt.save.segs utt (format nil "scratch/lab/%s.lab" id)) + (system "cd scratch; emulabel ../etc/emu_lab cl01 &") + t)) + +; (define (clunits::debug_resynth_units utt) +; "(clunits::debug_resynth_units utt) +; Check each of the units in utt against the related label +; files and re-synth with any given new boundaries. Note this is +; will only work if the segment still overlaps with its original and +; also note that with a rebuild of the clunits db a complete different +; set of units may be selected for this utterance." +; (let () +; (mapcar +; (lambda (unit) +; (clunits::check_unit_boundaries unit)) +; (utt.relation.items utt 'Unit)) +; ;; This can't be done like this ... +; (Clunits_Get_Units utt) ;; get unit signal/track stuff +; (Clunits_Join_Units utt) ;; make a complete waveform +; (apply_hooks cluster_synth_post_hooks utt) +; utt) +; ) + +(define (clunits::join_parameters utt) + "(clunits::join_parameters utt) +Join selected paremeters (rather than the signal), used in F0 and +Articulatory selection." + (let ((params nil) + (num_channels 0) + (num_frames 0 )) + + (mapcar + (lambda (unit) + (set! num_frames + (+ num_frames + (track.num_frames (item.feat unit "coefs")))) + (set! num_channels (track.num_channels (item.feat unit "coefs"))) + (format t "coounting %d %d\n" num_frames num_channels) + ) + (utt.relation.items utt 'Unit)) + + (set! params (track.resize nil 0 num_channels)) + + (mapcar + (lambda (unit) + (set! frames 0) + (format t "inserting \n") + (format t "%l %l %l %l %l\n" + params (track.num_frames params) + (item.feat unit "coefs") 0 + (track.num_frames (item.feat unit "coefs"))) + (track.insert + params (track.num_frames params) + (item.feat unit "coefs") 0 + (track.num_frames (item.feat unit "coefs"))) + ) + (utt.relation.items utt 'Unit)) + + (utt.relation.create utt "AllCoefs") + (set! coefs_item (utt.relation.append utt "AllCoefs")) + (item.set_feat coefs_item "name" "AllCoefs") + (item.set_feat coefs_item "AllCoefs" params) + + utt +)) + + +(provide 'clunits) diff --git a/lib/clunits_build.scm b/lib/clunits_build.scm new file mode 100644 index 0000000..1dd438a --- /dev/null +++ b/lib/clunits_build.scm @@ -0,0 +1,465 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Carnegie Mellon University and ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1998-2005 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH, CARNEGIE MELLON UNIVERSITY AND THE ;; +;;; CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH REGARD TO ;; +;;; THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ;; +;;; AND FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF EDINBURGH, CARNEGIE ;; +;;; MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, ;; +;;; INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ;; +;;; RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION ;; +;;; OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ;; +;;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Cluster Unit selection support (Black and Taylor Eurospeech '97) +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; clunits build support +;;; +;;; There are five stages to this +;;; Load in all utterances +;;; Load in their coefficients +;;; Collect together the units of the same type +;;; build distance tables from them +;;; dump features for them +;;; + +(require_module 'clunits) ;; C++ modules support +(require 'clunits) ;; run time scheme support + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (do_all) + (let () + + (format t "Loading utterances and sorting types\n") + (set! utterances (acost:db_utts_load clunits_params)) + (set! unittypes (acost:find_same_types utterances clunits_params)) + (acost:name_units unittypes) + + (format t "Dumping features for clustering\n") + (acost:dump_features unittypes utterances clunits_params) + + (format t "Loading coefficients\n") + (acost:utts_load_coeffs utterances) + ;; If you are short of diskspace try this + (acost:disttabs_and_clusters unittypes clunits_params) + + ;; or if you have lots of diskspace try +; (format t "Building distance tables\n") +; (acost:build_disttabs unittypes clunits_params) + +; ;; Build the cluster trees (requires disttabs and features) +; (format t "Building cluster trees\n") +; (acost:find_clusters (mapcar car unittypes) clunits_params) + + ;; Tidy up and put things together + (acost:collect_trees (mapcar car unittypes) clunits_params) + + (format t "Saving unit catalogue\n") + (acost:save_catalogue utterances clunits_params) + + ) +) + +(define (do_init) + (set! utterances (acost:db_utts_load clunits_params)) + (set! unittypes (acost:find_same_types utterances clunits_params)) + (acost:name_units unittypes) + t) + +(define (acost:disttabs_and_clusters unittypes clunits_params) + "(acost:disttabs_and_custers unittypes) +Cause it uses so much diskspace, build each table individually +and them the cluster, removing the table before moving on to the +next." + (mapcar + (lambda (uu) + (acost:build_disttabs (list uu) clunits_params) + (acost:find_clusters (list (car uu)) clunits_params) + (delete-file + (format nil "%s/%s/%s%s" + (get_param 'db_dir clunits_params "./") + (get_param 'disttabs_dir clunits_params "disttabs/") + (car uu) + (get_param 'disttabs_ext clunits_params ".disttab"))) + ) + unittypes) + t) + +(define (acost:db_utts_load params) + "(acost:db_utts_load params) +Load in all utterances identified in database." + (let ((files (car (cdr (assoc 'files params))))) + (set! acost:all_utts + (mapcar + (lambda (fname) + (set! utt_seg (Utterance Text fname)) + (utt.load utt_seg + (string-append + (get_param 'db_dir params "./") + (get_param 'utts_dir params "festival/utts/") + fname + (get_param 'utts_ext params ".utt"))) + utt_seg) + files)))) + +(define (acost:utts_load_coeffs utterances) + "(acost:utts_load_coeffs utterances) +Loading the acoustic coefficients of for each utterance." + (mapcar + (lambda (utt) (acost:utt.load_coeffs utt clunits_params)) + utterances) + t) + +(define (acost:find_same_types utterances params) + "(acost:find_same_types utterances) +Find all the stream items of the same type and collect them into +lists of that type." + (let ((clunit_name_feat (get_param 'clunit_name_feat params "name")) + (clunit_relation (get_param 'clunit_relation params "Segment"))) + (set! acost:unittypes nil) + (mapcar + (lambda (u) + (mapcar + (lambda (s) + (let ((cname (item.feat s clunit_name_feat))) + (if (not (string-equal "ignore" cname)) + (begin + (item.set_feat s "clunit_name" (item.feat s clunit_name_feat)) + (let ((p (assoc (item.feat s "clunit_name") acost:unittypes))) + (if p + (set-cdr! p (cons s (cdr p))) + (set! acost:unittypes + (cons + (list (item.feat s "clunit_name") s) + acost:unittypes)))))))) + (utt.relation.items u clunit_relation))) + utterances) + (acost:prune_unittypes acost:unittypes params))) + +(define (acost:prune_unittypes unittypes params) + "(acost:prune_unittypes unittypes) +If unit types are complex (contain an _) then remove all unittypes sets +with less than unittype_prune_threshold (typically 3)." + (if (string-matches (car (car unittypes)) ".*_.*") + (let ((ut nil) (pt (get_param 'unittype_prune_threshold params 0))) + (while unittypes + (if (or (eq? pt 0) + (> (length (cdr (car unittypes))) pt)) + (set! ut (cons (car unittypes) ut))) + (set! unittypes (cdr unittypes))) + (reverse ut)) + unittypes)) + +(define (acost:name_units unittypes) + "(acost:name_units unittypes) +Names each unit with a unique id and number the occurrences of each type." + (let ((idnum 0) (tynum 0)) + (mapcar + (lambda (s) + (set! tynum 0) + (mapcar + (lambda (si) + (item.set_feat si "unitid" idnum) + (set! idnum (+ 1 idnum)) + (item.set_feat si "occurid" tynum) + (set! tynum (+ 1 tynum))) + (cdr s)) + (format t "units \"%s\" %d\n" (car s) tynum)) + unittypes) + (format t "total units %d\n" idnum) + idnum)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Generating feature files + +(define (acost:dump_features unittypes utterances params) + "(acost:dump_features unittypes utterances params) +Do multiple passes over the utterances for each unittype and +dump the desired features. This would be easier if utterances +weren't require for feature functions." + (mapcar + (lambda (utype) + (acost:dump_features_utype + (car utype) + (cdr utype) + utterances + params)) + unittypes) + t) + +(define (acost:dump_features_utype utype uitems utterances params) + "(acost:dump_features_utype utype utterances params) +Dump features for all items of type utype." + (let ((fd (fopen + (string-append + (get_param 'db_dir params "./") + (get_param 'feats_dir params "festival/feats/") + utype + (get_param 'feats_ext params ".feats")) + "w")) + (feats (car (cdr (assoc 'feats params))))) + (format t "Dumping features for %s\n" utype) + (mapcar + (lambda (s) + (mapcar + (lambda (f) + (set! fval (unwind-protect (item.feat s f) "0")) + (if (or (string-equal "" fval) + (string-equal " " fval)) + (format fd "%l " fval) + (format fd "%s " fval))) + feats) + (format fd "\n")) + uitems) + (fclose fd))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Tree building functions + +(defvar wagon-balance-size 0) + +(define (acost:find_clusters unittypes clunits_params) +"Use wagon to find the best clusters." + (mapcar + (lambda (unittype) + (build_tree unittype clunits_params)) + unittypes) + t) + +(define (build_tree unittype clunits_params) +"Build tree with Wagon for this unittype." + (let ((command + (format nil "%s -desc %s -data '%s' -balance %s -distmatrix '%s' -stop %s -output '%s' %s" + (get_param 'wagon_progname clunits_params "wagon") + (if (probe_file + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'wagon_field_desc clunits_params "wagon") + "." unittype)) + ;; So there can be unittype specific desc files + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'wagon_field_desc clunits_params "wagon") + "." unittype) + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'wagon_field_desc clunits_params "wagon"))) + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'feats_dir clunits_params "festival/feats/") + unittype + (get_param 'feats_ext clunits_params ".feats")) + (get_param 'wagon_balance_size clunits_params 0) + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'disttabs_dir clunits_params "festival/disttabs/") + unittype + (get_param 'disttabs_ext clunits_params ".disttab")) + (get_param 'wagon_cluster_size clunits_params 10) + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'trees_dir clunits_params "festival/trees/") + unittype + (get_param 'trees_ext clunits_params ".tree")) + (get_param 'wagon_other_params clunits_params "") + ))) + (format t "%s\n" command) + (system command))) + +(define (acost:collect_trees unittypes params) +"Collect the trees into one file as an assoc list" + (let ((fd (fopen + (string-append + (get_param 'db_dir params "./") + (get_param 'trees_dir params "festival/trees/") + (get_param 'index_name params "all.") + (get_param 'trees_ext params ".tree")) + "wb")) + (tree_pref + (string-append + (get_param 'db_dir params "./") + (get_param 'trees_dir params "festival/trees/"))) + (cluster_prune_limit (get_param 'cluster_prune_limit params 0)) + (cluster_merge (get_param 'cluster_merge params 0))) + (format fd ";; Autogenerated list of selection trees\n") + (mapcar + (lambda (fp) + (format fd ";; %l %l\n" (car fp) (car (cdr fp)))) + params) + (format fd "(set! clunits_selection_trees '(\n") + (mapcar + (lambda (unit) + (set! tree (car (load (string-append tree_pref unit ".tree") t))) + (if (> cluster_prune_limit 0) + (set! tree (cluster_tree_prune tree cluster_prune_limit))) + (if (> cluster_merge 0) + (set! tree (tree_merge_leafs tree cluster_merge))) + (if (boundp 'temp_tree_convert) + (set! tree (temp_tree_convert))) + (pprintf (list unit tree) fd)) + unittypes) + (format fd "))\n") + (fclose fd))) + +(define (cluster_tree_prune_in_line prune_limit) +"(cluster_tree_prune_in_line) +Prune number of units in each cluster in each tree *by* prune_limit, +if negative, or *to* prune_limit, if positive." + (set! sucs_select_trees + (mapcar + (lambda (t) + (cluster_tree_prune t prune_limit)) + sucs_select_trees))) + +(define (tree_merge_leafs tree depth) + "(tree_merge_leafs tree depth) +Merge the leafs of the tree at goven depth. This allows the trees +to be pruned then the single leafs joined together into larger +clusters (so the viterbi part has something to do)." + (let ((num_leafs (tree_num_leafs tree))) + (cond + ((< num_leafs 2) tree) ;; already at the foot + ((< num_leafs depth) + (tree_collect_leafs tree)) + (t + (list + (car tree) + (tree_merge_leafs (car (cdr tree)) depth) + (tree_merge_leafs (car (cdr (cdr tree))) depth)))))) + +(define (tree_num_leafs tree) + "(tree_num_leafs tree) +Number of leafs of given tree." + (cond + ((cdr tree) + (+ + (tree_num_leafs (car (cdr tree))) + (tree_num_leafs (car (cdr (cdr tree)))))) + (t + 1))) + +(define (tree_collect_leafs tree) + "(tree_collect_leafs tree) +Combine all units in the leafs." + (cond + ((cdr tree) + (let ((a (tree_collect_leafs (car (cdr tree)))) + (b (tree_collect_leafs (car (cdr (cdr tree)))))) + (list + (list + (append + (caar a) + (caar b)) + 10.0)))) + (t + tree))) + +(define (cluster_tree_prune tree prune_limit) +"(cluster_tree_prune TREE PRUNE_LIMIT) +Reduce the number of elements in the (CART) tree leaves to PRUNE_LIMIT +removing the ones further from the cluster centre. Maybe later this should +have guards on minimum number of units that must remain in the tree and +a per unit type limit." + (cond + ((cdr tree) ;; a question + (list + (car tree) + (cluster_tree_prune (car (cdr tree)) prune_limit) + (cluster_tree_prune (car (cdr (cdr tree))) prune_limit))) + (t ;; tree leave + (list + (list + (remove_n_worst + (car (car tree)) + (if (< prune_limit 0) + (* -1 prune_limit) + (- (length (car (car tree))) prune_limit))) + (car (cdr (car tree)))))))) + +(define (remove_n_worst lll togo) +"(remove_n_worst lll togo) +Remove togo worst items from lll." + (cond + ((< togo 0) + lll) + ((equal? 0 togo) + lll) + (t + (remove_n_worst + (remove (worst_unit (cdr lll) (car lll)) lll) + (- togo 1))))) + +(define (worst_unit lll worst_so_far) +"(worst_unit lll worst_so_far) +Returns unit with worst score in list." + (cond + ((null lll) + worst_so_far) + ((< (car (cdr worst_so_far)) (car (cdr (car lll)))) + (worst_unit (cdr lll) (car lll))) + (t + (worst_unit (cdr lll) worst_so_far)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Save the unit catalogue for use in the run-time index + +(define (acost:save_catalogue utterances clunits_params) + "(acost:save_catalogue utterances clunits_params) +Save the catalogue with named units with times." + (let ((fd (fopen + (string-append + (get_param 'db_dir clunits_params "./") + (get_param 'catalogue_dir clunits_params "trees/") + (get_param 'index_name clunits_params "catalogue.") + ".catalogue") + "wb")) + (num_units 0) + ) + (format fd "EST_File index\n") + (format fd "DataType ascii\n") + (format fd "NumEntries %d\n" + (apply + + (mapcar (lambda (u) + (length (utt.relation.items u 'Segment))) utterances))) + (format fd "IndexName %s\n" (get_param 'index_name clunits_params "cluser")) + (format fd "EST_Header_End\n") + (mapcar + (lambda (u) + (mapcar + (lambda (s) + (format fd "%s_%s %s %f %f %f\n" + (item.feat s "clunit_name") + (item.feat s 'occurid) + (utt.feat u 'fileid) + (item.feat s 'segment_start) + (item.feat s 'segment_mid) + (item.feat s 'segment_end))) + (utt.relation.items u 'Segment))) + utterances) + (fclose fd))) + +(provide 'clunits_build.scm) diff --git a/lib/cmusphinx2_phones.scm b/lib/cmusphinx2_phones.scm new file mode 100644 index 0000000..49c6597 --- /dev/null +++ b/lib/cmusphinx2_phones.scm @@ -0,0 +1,119 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;;; +;;; Carnegie Mellon University ;;; +;;; and Alan W Black and Kevin Lenzo ;;; +;;; Copyright (c) 1998-2000 ;;; +;;; All Rights Reserved. ;;; +;;; ;;; +;;; Permission is hereby granted, free of charge, to use and distribute ;;; +;;; this software and its documentation without restriction, including ;;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;;; +;;; permit persons to whom this work is furnished to do so, subject to ;;; +;;; the following conditions: ;;; +;;; 1. The code must retain the above copyright notice, this list of ;;; +;;; conditions and the following disclaimer. ;;; +;;; 2. Any modifications must be clearly marked as such. ;;; +;;; 3. Original authors' names are not deleted. ;;; +;;; 4. The authors' names are not used to endorse or promote products ;;; +;;; derived from this software without specific prior written ;;; +;;; permission. ;;; +;;; ;;; +;;; CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK ;;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;;; +;;; SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE ;;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;;; +;;; THIS SOFTWARE. ;;; +;;; ;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; A definition of the cmusphinx2 phone set used in the BU RADIO FM +;;; corpus, some people call this the darpa set. This one +;;; has the closures removed +;;; + +(defPhoneSet + cmusphinx2 + ;;; Phone Features + (;; vowel or consonant + (vc + -) + ;; vowel length: short long dipthong schwa + (vlng s l d a 0) + ;; vowel height: high mid low + (vheight 1 2 3 0) + ;; vowel frontness: front mid back + (vfront 1 2 3 0) + ;; lip rounding + (vrnd + - 0) + ;; consonant type: stop fricative affricate nasal lateral approximant + (ctype s f a n l r 0) + ;; place of articulation: labial alveolar palatal labio-dental + ;; dental velar glottal + (cplace l a p b d v g 0) + ;; consonant voicing + (cvox + - 0) + ) + ;; Phone set members + ( + + ;; Note these features were set by awb so they are wrong !!! + +; phone vc vl vh vf vr ct cp cv + (AA + l 3 3 - 0 0 0) ;; father + (AE + s 3 1 - 0 0 0) ;; fat + (AH + s 2 2 - 0 0 0) ;; but + (AO + l 3 3 + 0 0 0) ;; lawn + (AW + d 3 2 - 0 0 0) ;; how + (AX + a 2 2 - 0 0 0) ;; about + (AXR + a 2 2 - r a +) + (AY + d 3 2 - 0 0 0) ;; hide + (B - 0 0 0 0 s l +) + (CH - 0 0 0 0 a p -) + (D - 0 0 0 0 s a +) + (DH - 0 0 0 0 f d +) + (DX - 0 0 0 0 s a +) + (EH + s 2 1 - 0 0 0) ;; get + (ER + a 2 2 - r 0 0) + (EY + d 2 1 - 0 0 0) ;; gate + (F - 0 0 0 0 f b -) + (G - 0 0 0 0 s v +) + (HH - 0 0 0 0 f g -) + (IH + s 1 1 - 0 0 0) ;; bit + (IY + l 1 1 - 0 0 0) ;; beet + (JH - 0 0 0 0 a p +) + (K - 0 0 0 0 s v -) + (L - 0 0 0 0 l a +) + (M - 0 0 0 0 n l +) + (N - 0 0 0 0 n a +) + (NG - 0 0 0 0 n v +) + (OW + d 2 3 + 0 0 0) ;; lone + (OY + d 2 3 + 0 0 0) ;; toy + (P - 0 0 0 0 s l -) + (R - 0 0 0 0 r a +) + (S - 0 0 0 0 f a -) + (SH - 0 0 0 0 f p -) + (T - 0 0 0 0 s a -) + (TH - 0 0 0 0 f d -) + (UH + s 1 3 + 0 0 0) ;; full + (UW + l 1 3 + 0 0 0) ;; fool + (V - 0 0 0 0 f b +) + (W - 0 0 0 0 r l +) + (Y - 0 0 0 0 r p +) + (Z - 0 0 0 0 f a +) + (ZH - 0 0 0 0 f p +) + (SIL - 0 0 0 0 0 0 -) ; added + ) +) + +(PhoneSet.silences '(SIL)) + +(provide 'cmusphinx2_phones) + + + + diff --git a/lib/cslush.scm b/lib/cslush.scm new file mode 100644 index 0000000..6864917 --- /dev/null +++ b/lib/cslush.scm @@ -0,0 +1,79 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Functions specific to using Festival in cslush part of the OGI toolkit +;;; The OGI toolkit is a complete dialog building system with speech +;;; recognition and synthesis (Festival) it is available for free for +;;; research purposes from +;;; http://www.cse.ogi.edu/CSLU/toolkit/toolkit.html +;;; +;;; Note this cslush interface requires you to compile festival +;;; with tcl (7.6) +;;; +;;; The functions replace the C++ level functions Jacques H. de Villiers +;;; from CSLU wrote for the previous version +;;; + +(if (not (member 'tcl *modules*)) + (error "cslush: can't load cslush, TCL not supported in this installation of Festival.")) + +(define (cslush.getwave utt) +"(cslush.getwave UTT) +Extract wave memory info, pass this to wave import in CSLUsh." + (format nil "%s %s %s" + (utt.wave.info utt 'data_addr) + (utt.wave.info utt 'num_samples) + (utt.wave.info utt 'sample_rate))) + +(define (cslush.getphone utt) +"(cslush.getphone UTT) +Return segment names a single string of phones, for use to pass to +TCL." + (let ((phones "")) + (mapcar + (lambda (s) + (if (string-equal phones "") + (set! phones (format nil "%s" (utt.streamitem.feat utt s 'name))) + (set! phones (format nil "%s %s" + phones (utt.streamitem.feat utt s 'name))))) + (utt.stream utt 'Segment)) + phones)) + +(define (cslush TCLCOMMAND) +"(cslush TCLCOMMAND) +Pass TCLCOMMAND to TCL interpreter, returns what TCL returns as a +string." + (tcl_eval TCLCOMMAND)) + + +(provide 'cslush) diff --git a/lib/darpa_phones.scm b/lib/darpa_phones.scm new file mode 100644 index 0000000..184c8bf --- /dev/null +++ b/lib/darpa_phones.scm @@ -0,0 +1,115 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1999 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: April 1999 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; (yet another) darpa definition +;;; + +(require 'phoneset) + +(set! darpa_fs (cadr +(defPhoneSet + darpa + (Features + (vowel (syllabic + -) + (length long short diphthong schwa) + (height high mid low) + (front front mid back) + (round + -)) + (consonant + (syllabic + -) + (manner stop affricate fricative approximant nasal) + (place alveolar dental labial palatal velar) + (voicing + -)) + (silence + (syllabic -))) + (Phones + ;; type syl length height front round + (aa vowel + long low back -) + (ae vowel + short low front -) + (ah vowel + short mid mid -) + (ao vowel + long low front +) + (aw vowel + diphthong low mid -) + (ax vowel + schwa mid mid -) + (axr vowel + schwa mid mid -) + (ay vowel + diphthong low mid -) + (eh vowel + short mid front -) + (ey vowel + diphthong mid front -) + (ih vowel + short high front -) + (iy vowel + long high front -) + (ow vowel + diphthong mid back +) + (oy vowel + diphthong mid back +) + (uh vowel + short high back +) + (uw vowel + long high back +) + ;; type syl manner place voicing + (b consonant - stop labial +) + (ch consonant - affricate alveolar -) + (d consonant - stop alveolar +) + (dh consonant - fricative dental +) + (dx consonant - stop alveolar +) + (el consonant + approximant alveolar +) + (em consonant + nasal labial +) + (en consonant + stop alveolar +) + (er consonant + approximant alveolar +) + (f consonant - fricative labial -) + (g consonant - stop velar +) + (hh consonant - fricative velar -) + (jh consonant - affricate alveolar +) + (k consonant - stop velar -) + (l consonant - approximant alveolar +) + (m consonant - nasal labial +) + (n consonant - nasal alveolar +) + (nx consonant - nasal alveolar +) + (ng consonant - nasal velar +) + (p consonant - stop labial -) + (r consonant - approximant alveolar +) + (s consonant - fricative alveolar -) + (sh consonant - fricative palatal -) + (t consonant - stop alveolar -) + (th consonant - fricative dental -) + (v consonant - fricative labial +) + (w consonant - approximant velar +) + (y consonant - approximant palatal +) + (z consonant - fricative alveolar +) + (zh consonant - fricative palatal +) + (pau silence -) +; (sil silence -) + )))) + +(provide 'darpa_phones) + + + + diff --git a/lib/display.scm b/lib/display.scm new file mode 100644 index 0000000..b190c05 --- /dev/null +++ b/lib/display.scm @@ -0,0 +1,69 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: December 1996 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; An xwaves display function for utterances +;;; +;;; Requires Xwaves to be running, saves labels etc and sends +;;; messages to Xwaves to display the utterance. +;;; +;;; This can be a model for other display functions. +;;; + +(define (display utt) +"(display utt) +Display an utterance's waveform, F0 and segment labels in Xwaves. +Xwaves must be running on the current machine, with a labeller for +this to work." + (let ((tmpname (make_tmp_filename))) + (utt.save.wave utt (string-append tmpname ".wav")) + (utt.save.segs utt (string-append tmpname ".lab")) + (utt.save.f0 utt (string-append tmpname ".f0")) + (system (format nil "send_xwaves make file %s name %s height 150" + (string-append tmpname ".f0") tmpname)) + (system (format nil "send_xwaves make name %s file %s height 200" + tmpname (string-append tmpname ".wav"))) + (system (format nil "send_xwaves send make file %s name %s color 125" + (string-append tmpname ".lab") tmpname)) + (system (format nil "send_xwaves send activate name %s fields 1" + tmpname)) + (system (format nil "send_xwaves %s align file %s" + tmpname (string-append tmpname ".wav")))) + ) + +(provide 'display) + + + + diff --git a/lib/duration.scm b/lib/duration.scm new file mode 100644 index 0000000..7e074d7 --- /dev/null +++ b/lib/duration.scm @@ -0,0 +1,196 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Basic Duration module which will call appropriate duration +;;; (C++) modules based on set parameter +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; These modules should predict intonation events/labels +;;; based on information in the phrase and word streams + +(define (Duration utt) +"(Duration utt) +Predict segmental durations using Duration_Method defined in Parameters. +Four methods are currently available: averages, Klatt rules, CART tree +based, and fixed duration." + (let ((rval (apply_method 'Duration_Method utt))) + (cond + (rval rval) ;; new style + ;; 1.1.1 voices still use other names + ((eq 'Averages (Parameter.get 'Duration_Method)) + (Duration_Averages utt)) + ((eq 'Klatt (Parameter.get 'Duration_Method)) + (Duration_Klatt utt)) + ((eq 'Tree_ZScores (Parameter.get 'Duration_Method)) + (Duration_Tree_ZScores utt)) + ((eq 'Tree (Parameter.get 'Duration_Method)) + (Duration_Tree utt)) + (t + (Duration_Default utt))))) + +(define (Duration_LogZScores utt) +"(Duration_LogZScores utt) +Predicts duration to segments using the CART tree in duration_logzscore_tree +and duration_logzscore_tree_silence which produces a zscore of the log +duration. The variable duration_logzscore_ph_info contains (log) means +and std for each phone in the set." + (let ((silence (car (car (cdr (assoc 'silences (PhoneSet.description)))))) + ldurinfo) + (mapcar + (lambda (s) + (if (string-equal silence (item.name s)) + (set! ldurinfo + (wagon s duration_logzscore_tree_silence)) + (set! ldurinfo + (wagon s duration_logzscore_tree))) + (set! dur (exp (duration_unzscore + (item.name s) + (car (last ldurinfo)) + duration_logzscore_ph_info))) + (set! dur (* dur (duration_find_stretch s))) + (item.set_feat + s "end" (+ dur (item.feat s "start_segment")))) + (utt.relation.items utt 'Segment)) + utt)) + +(define (duration_unzscore phname zscore table) +"(duration_unzscore phname zscore table) +Look up phname in table and convert xscore back to absolute domain." + (let ((phinfo (assoc phname table)) + mean std) + (if phinfo + (begin + (set! mean (car (cdr phinfo))) + (set! std (car (cdr (cdr phinfo))))) + (begin + (format t "Duration: unzscore no info for %s\n" phname) + (set! mean 0.100) + (set! std 0.25))) + (+ mean (* zscore std)))) + +(define (duration_find_stretch seg) +"(duration_find_stretch utt seg) +Find any relavant duration stretch." + (let ((global (Parameter.get 'Duration_Stretch)) + (local (item.feat + seg "R:SylStructure.parent.parent.R:Token.parent.dur_stretch"))) + (if (or (not global) + (equal? global 0.0)) + (set! global 1.0)) + (if (string-equal local 0.0) + (set! local 1.0)) + (* global local))) + +;; These provide lisp level functions, some of which have +;; been converted in C++ (in festival/src/modules/base/ff.cc) +(define (onset_has_ctype seg type) + ;; "1" if onset contains ctype + (let ((syl (item.relation.parent seg 'SylStructure))) + (if (not syl) + "0" ;; a silence + (let ((segs (item.relation.daughters syl 'SylStructure)) + (v "0")) + (while (and segs + (not (string-equal + "+" + (item.feat (car segs) "ph_vc")))) + (if (string-equal + type + (item.feat (car segs) "ph_ctype")) + (set! v "1")) + (set! segs (cdr segs))) + v)))) + +(define (coda_has_ctype seg type) + ;; "1" if coda contains ctype + (let ((syl (item.relation.parent seg 'SylStructure))) + (if (not syl) + "0" ;; a silence + (let ((segs (reverse (item.relation.daughters + syl 'SylStructure))) + (v "0")) + (while (and segs + (not (string-equal + "+" + (item.feat (car segs) "ph_vc")))) + (if (string-equal + type + (item.feat (car segs) "ph_ctype")) + (set! v "1")) + (set! segs (cdr segs))) + v)))) + +(define (onset_stop seg) + (onset_has_ctype seg "s")) +(define (onset_fric seg) + (onset_has_ctype seg "f")) +(define (onset_nasal seg) + (onset_has_ctype seg "n")) +(define (onset_glide seg) + (let ((l (onset_has_ctype seg "l"))) + (if (string-equal l "0") + (onset_has_ctype seg "r") + "1"))) +(define (coda_stop seg) + (coda_has_ctype seg "s")) +(define (coda_fric seg) + (coda_has_ctype seg "f")) +(define (coda_nasal seg) + (coda_has_ctype seg "n")) +(define (coda_glide seg) + (let ((l (coda_has_ctype seg "l"))) + (if (string-equal l "0") + (coda_has_ctype seg "r") + "1"))) + +(define (Unisyn_Duration utt) + "(UniSyn_Duration utt) +predicts Segment durations is some speficied way but holds the +result in a way necessary for other Unisyn code." + (let ((end 0)) + (mapcar + (lambda (s) + (item.get_utt s) + (let ((dur (wagon_predict s duration_cart_tree))) + (set! dur (* (Parameter.get 'Duration_Stretch) dur)) + (set! end (+ dur end)) + (item.set_feat s "target_dur" dur) + (item.set_function s "start" "unisyn_start") + (item.set_feat s "end" end) + (item.set_feat s "dur" dur) + )) + (utt.relation.items utt 'Segment)) + utt)) + +(provide 'duration) diff --git a/lib/email-mode.scm b/lib/email-mode.scm new file mode 100644 index 0000000..4f8450f --- /dev/null +++ b/lib/email-mode.scm @@ -0,0 +1,89 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; An example tts text mode for reading email messages, this includes +;;; support for extracting the interesting headers from the message +;;; and for dealing with quoted text. Its all very primitive and +;;; will easily be confused but its here just as an example +;;; + +(define (email_init_func) + "(email_init_func) +Called on starting email text mode." + (voice_rab_diphone) + (set! email_previous_t2w_func token_to_words) + (set! english_token_to_words email_token_to_words) + (set! token_to_words english_token_to_words) + (set! email_in_quote nil)) + +(define (email_exit_func) + "(email_exit_func) +Called on exit email text mode." + (set! english_token_to_words email_previous_t2w_func) + (set! token_to_words english_token_to_words)) + +(define (email_token_to_words token name) + "(email_token_to_words utt token name) +Email spcific token to word rules." + (cond + ((string-matches name "<.*@.*>") + (append + (email_previous_t2w_func token + (string-after (string-before name "@") "<")) + (cons + "at" + (email_previous_t2w_func token + (string-before (string-after name "@") ">"))))) + ((and (string-matches name ">") + (string-matches (item.feat token "whitespace") + "[ \t\n]*\n *")) + (voice_cmu_us_awb_cg) + nil ;; return nothing to say + ) + (t ;; for all other cases + (if (string-matches (item.feat token "whitespace") + ".*\n[ \n]*") + (voice_rab_diphone)) + (email_previous_t2w_func token name)))) + +(set! tts_text_modes + (cons + (list + 'email ;; mode name + (list ;; email mode params + (list 'init_func email_init_func) + (list 'exit_func email_exit_func) + '(filter "email_filter"))) + tts_text_modes)) + +(provide 'email-mode) diff --git a/lib/engmorph.scm b/lib/engmorph.scm new file mode 100644 index 0000000..46b7c42 --- /dev/null +++ b/lib/engmorph.scm @@ -0,0 +1,151 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: December 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; THIS IS EXPERIMENTAL AND DOES *NOT* WORK +;;; +;;; Koskenniemi-style context rewrite rules for English Morphographemics +;;; Basically splits words into their (potential) morphemes. +;;; +;;; Based (roughly) on the rules in "Computational Morphology" +;;; Ritchie et al. MIT Press 1992. +;;; +;;; This is not a Scheme file and can't be loaded and evaluated +;;; It is designed for use with the wfst tools in the speech tools +;;; e.g. wfst_build -type kk -o engmorph.wfst -detmin engmorph.scm +;;; + +(KKrules + engmorph + (Alphabets + ;; Input Alphabet + (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 #) + ;; Output Alphabet + (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 + #) + ) + (Sets + (LET 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) + ) + (Rules + ;; The basic rules + ( a => nil --- nil) + ( b => nil --- nil) + ( c => nil --- nil) + ( d => nil --- nil) + ( e => nil --- nil) + ( f => nil --- nil) + ( g => nil --- nil) + ( h => nil --- nil) + ( i => nil --- nil) + ( j => nil --- nil) + ( k => nil --- nil) + ( l => nil --- nil) + ( m => nil --- nil) + ( n => nil --- nil) + ( o => nil --- nil) + ( p => nil --- nil) + ( q => nil --- nil) + ( r => nil --- nil) + ( s => nil --- nil) + ( t => nil --- nil) + ( u => nil --- nil) + ( v => nil --- nil) + ( w => nil --- nil) + ( x => nil --- nil) + ( y => nil --- nil) + ( z => nil --- nil) + ( # => nil --- nil) +; ( _epsilon_/+ => (or LET _epsilon_/e ) --- (LET)) + ( _epsilon_/+ => (or LET _epsilon_/e) --- nil) + + ;; The rules that do interesting things + + ;; Epenthesis + ;; churches -> church+s + ;; boxes -> box+s + (e/+ <=> (or (s h) (or s x z) (i/y) (c h)) + --- + (s)) + ;; Gemination + (b/+ <=> ( (or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) b ) + --- + ((or a e i o u))) + (d/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) d ) + --- + ((or a e i o u))) + (f/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) f ) + --- + ((or a e i o u))) + (g/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) g ) + --- + ((or a e i o u))) + (m/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) m ) + --- + ((or a e i o u))) + (p/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) p ) + --- + ((or a e i o u))) + (s/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) s ) + --- + ((or a e i o u))) + (t/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) t ) + --- + ((or a e i o u))) + (z/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) z ) + --- + ((or a e i o u))) + (n/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) n ) + --- + ((or a e i o u))) + (l/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) l ) + --- + ((or a e i o u))) + (r/+ <=> ((or b c d f g h j k l m n p q r s t v w z) (or a e i o u y) r ) + --- + ((or a e i o u))) + ;; tries->try+s + ( i/y <=> ((or b c d f g h j k l m n p q r s t v w x z)) + --- + ((or ( e/+ s ) + ( _epsilon_/+ (or a d e f h i l m n o p s w y))))) + ;; Elision + ;; moved -> move+ed + (_epsilon_/e <=> + ((or a e i o u ) (or b c d f g j k l m n p q r s t v x z)) + --- + ( _epsilon_/+ (or a e i o u ))) + + ) +) diff --git a/lib/engmorphsyn.scm b/lib/engmorphsyn.scm new file mode 100644 index 0000000..d6e237f --- /dev/null +++ b/lib/engmorphsyn.scm @@ -0,0 +1,170 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: December 1997 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; THIS IS EXPERIMENTAL AND DOES *NOT* WORK +;;; +;;; +;;; An English morpho-syntax finite-state grammar +;;; This is used for morphological decomposition of unknown words +;;; specifically (only) words that are not found in the lexicon. +;;; This idea is that when an unknown word is found an attempt is made +;;; to see if it contains any well known morphological inflections or +;;; derivations, if so a better use of LTS can be made on the root, of +;;; none are found this +;;; +;;; +;;; Based on "Analysis of Unknown Words through Morphological +;;; Decomposition", Black, van de Plassche, Willians, European ACL 91. +;;; with the anyword matcher from a question by Lauri Karttunen after +;;; the talk. +;;; +;;; The suffixes and finite-state morph-syntax grammar is based +;;; (very roughly) on the rules in "Computational Morphology" +;;; Ritchie et al. MIT Press 1992. +;;; +;;; Can be compiled with +;;; wfst_build -type rg -o engmorphsyn.wfst -detmin engmorphsyn.scm +;;; +;;; The result can be combined with the morphographemic rules +;;; with +;;; wfst_build -type compose engmorph.wfst engmorphsyn.wfst -detmin -o engstemmer.wfst +;;; +;;; echo "# b o x e/+ s #" | wfst_run -wfst engstemmer.wfst -recog +;;; state 0 #/# -> 1 +;;; state 1 b/b -> 3 +;;; state 3 o/o -> 17 +;;; state 17 x/x -> 14 +;;; state 14 e/+ -> 36 +;;; state 36 s/s -> 34 +;;; state 34 #/# -> 16 +;;; OK. +;;; echo "# b o x e s #" | wfst_run -wfst engstemmer.wfst -recog +;;; state 0 #/# -> 1 +;;; state 1 b/b -> 3 +;;; state 3 o/o -> 17 +;;; state 17 x/x -> 14 +;;; state 14 e/e -> 22 +;;; state 22 s/s -> -1 + +(RegularGrammar + engsuffixmorphosyntax + ;; Sets + ( + (V a e i o u y) + (C b c d f g h j k l m n p q r s t v w x y z) + ) + ;; Rules + + ( + ;; A word *must* have a suffix to be recognized + (Word -> # Syls Suffix ) + (Word -> # Syls End ) + + ;; This matches any string of characters that contains at least one vowel + (Syls -> Syl Syls ) + (Syls -> Syl ) + (Syl -> Cs V Cs ) + (Cs -> C Cs ) + (Cs -> ) + + (Suffix -> VerbSuffix ) + (Suffix -> NounSuffix ) + (Suffix -> AdjSuffix ) + (VerbSuffix -> VerbFinal End ) + (VerbSuffix -> VerbtoNoun NounSuffix ) + (VerbSuffix -> VerbtoNoun End ) + (VerbSuffix -> VerbtoAdj AdjSuffix ) + (VerbSuffix -> VerbtoAdj End ) + (NounSuffix -> NounFinal End ) + (NounSuffix -> NountoNoun NounSuffix ) + (NounSuffix -> NountoNoun End ) + (NounSuffix -> NountoAdj AdjSuffix ) + (NounSuffix -> NountoAdj End ) + (NounSuffix -> NountoVerb VerbSuffix ) + (NounSuffix -> NountoVerb End ) + (AdjSuffix -> AdjFinal End ) + (AdjSuffix -> AdjtoAdj AdjSuffix) + (AdjSuffix -> AdjtoAdj End) + (AdjSuffix -> AdjtoAdv End) ;; isn't any Adv to anything + + (End -> # ) ;; word boundary symbol *always* present + + (VerbFinal -> + e d) + (VerbFinal -> + i n g) + (VerbFinal -> + s) + + (VerbtoNoun -> + e r) + (VerbtoNoun -> + e s s) + (VerbtoNoun -> + a t i o n) + (VerbtoNoun -> + i n g) + (VerbtoNoun -> + m e n t) + + (VerbtoAdj -> + a b l e) + + (NounFinal -> + s) + + (NountoNoun -> + i s m) + (NountoNoun -> + i s t) + (NountoNoun -> + s h i p) + + (NountoAdj -> + l i k e) + (NountoAdj -> + l e s s) + (NountoAdj -> + i s h) + (NountoAdj -> + o u s) + + (NountoVerb -> + i f y) + (NountoVerb -> + i s e) + (NountoVerb -> + i z e) + + (AdjFinal -> + e r) + (AdjFinal -> + e s t) + + (AdjtoAdj -> + i s h) + (AdjtoAdv -> + l y) + (AdjtoNoun -> + n e s s) + (AdjtoVerb -> + i s e) + (AdjtoVerb -> + i z e) + +) +) + + + + + + + + diff --git a/lib/etc/Makefile b/lib/etc/Makefile new file mode 100644 index 0000000..17fb4a0 --- /dev/null +++ b/lib/etc/Makefile @@ -0,0 +1,45 @@ +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Directory for various scripts (machine independent functions) ## +## Sub-directories of this will contain machine-dependent binaries ## +## ## +########################################################################### +TOP=../.. +DIRNAME=lib/etc + +FILTERS=email_filter +FILES=Makefile $(FILTERS) + +include $(TOP)/config/common_make_rules + diff --git a/lib/etc/email_filter b/lib/etc/email_filter new file mode 100755 index 0000000..a2d9250 --- /dev/null +++ b/lib/etc/email_filter @@ -0,0 +1,47 @@ +#!/bin/sh +########################################################################### +## ## +## Centre for Speech Technology Research ## +## University of Edinburgh, UK ## +## Copyright (c) 1996,1997 ## +## All Rights Reserved. ## +## ## +## Permission is hereby granted, free of charge, to use and distribute ## +## this software and its documentation without restriction, including ## +## without limitation the rights to use, copy, modify, merge, publish, ## +## distribute, sublicense, and/or sell copies of this work, and to ## +## permit persons to whom this work is furnished to do so, subject to ## +## the following conditions: ## +## 1. The code must retain the above copyright notice, this list of ## +## conditions and the following disclaimer. ## +## 2. Any modifications must be clearly marked as such. ## +## 3. Original authors' names are not deleted. ## +## 4. The authors' names are not used to endorse or promote products ## +## derived from this software without specific prior written ## +## permission. ## +## ## +## THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ## +## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ## +## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ## +## SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ## +## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ## +## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ## +## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ## +## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ## +## THIS SOFTWARE. ## +## ## +########################################################################### +## ## +## Email filter for tts text mode ## +## usage: email_filter email_message >filtered_message ## +## ## +## Extracts the From and Subject lines form the head and the body of ## +## of the message, I suppose it could also do signature extraction ## +## ## +########################################################################### +grep "^From: " $1 +echo +grep "^Subject: " $1 +echo +# delete up to first blank line (i.e. the header) +sed '1,/^$/ d' $1 diff --git a/lib/f2bdurtreeZ.scm b/lib/f2bdurtreeZ.scm new file mode 100644 index 0000000..407943a --- /dev/null +++ b/lib/f2bdurtreeZ.scm @@ -0,0 +1,869 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; First attempt at a tree to learn durations. Although +;;; it was trained from F2B and the radio phone set should +;;; work for others that are decalred with the same phone +;;; features +;;; + +;; in ancient items (not on independent data) +;; RMSE 0.821086 Correlation is 0.573693 Mean (abs) Error 0.612327 (0.547034) + +;; on independent test data +;; RMSE 0.8054 Correlation is 0.5327 Mean (abs) Error 0.6073 (0.5290) + +(set! f2b_duration_cart_tree +' +((name is #) + ((emph_sil is +) + ((0.0 -0.5)) + ((R:Segment.p.R:SylStructure.parent.parent.pbreak is BB) + ((0.0 2.0)) + ((0.0 0.0)))) +((R:SylStructure.parent.accented is 0) + ((R:Segment.p.ph_ctype is 0) + ((R:Segment.n.ph_cplace is 0) + ((ph_ctype is n) + ((R:SylStructure.parent.position_type is initial) + ((ph_cplace is a) + ((0.675606 -0.068741)) + ((0.674321 0.204279))) + ((ph_cplace is l) + ((0.688993 -0.124997)) + ((R:SylStructure.parent.syl_out < 10) + ((0.610881 -0.394451)) + ((0.664504 -0.603196))))) + ((ph_ctype is r) + ((lisp_onset_glide is 0) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 0) + ((0.949991 0.619256)) + ((1.05066 0.979668))) + ((0.858728 0.457972))) + ((R:SylStructure.parent.position_type is single) + ((syl_initial is 0) + ((ph_ctype is s) + ((0.692981 -0.788933)) + ((0.834878 -0.116988))) + ((R:SylStructure.parent.syl_out < 9.4) + ((0.777932 0.357818)) + ((0.852909 0.115478)))) + ((R:Segment.n.ph_vrnd is +) + ((ph_ctype is s) + ((0.81305 0.87399)) + ((0.65978 0.418928))) + ((R:SylStructure.parent.position_type is final) + ((R:SylStructure.parent.parent.word_numsyls < 2.3) + ((0.71613 -0.2888)) + ((0.642029 0.0624649))) + ((R:Segment.nn.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((R:SylStructure.parent.position_type is initial) + ((0.854092 0.384456)) + ((0.769274 0.10705))) + ((lisp_coda_stop is 0) + ((0.571763 0.0755348)) + ((0.632928 -0.11117)))) + ((lisp_coda_stop is 0) + ((R:SylStructure.parent.syl_out < 8.6) + ((0.555092 0.30006)) + ((0.552673 -0.0263481))) + ((0.903186 0.519185)))) + ((R:Segment.nn.ph_cplace is p) + ((0.563915 0.204967)) + ((R:Segment.nn.ph_cvox is -) + ((ph_ctype is s) + ((0.67653 0.227681)) + ((0.550623 0.435079))) + ((R:SylStructure.parent.position_type is initial) + ((0.93428 0.732003)) + ((0.84114 0.423214))))))))))) + ((R:Segment.n.ph_ctype is s) + ((ph_ctype is s) + ((0.693376 -1.02719)) + ((R:Segment.n.ph_cplace is v) + ((ph_ctype is r) + ((0.539799 -0.344524)) + ((0.858576 0.154275))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 1.2) + ((lisp_onset_glide is 0) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((ph_ctype is n) + ((R:Segment.nn.ph_cplace is a) + ((0.64604 -0.643797)) + ((0.739746 -0.450649))) + ((ph_ctype is f) + ((0.657043 -0.462107)) + ((0.798438 -0.19569)))) + ((R:SylStructure.parent.syl_out < 8.4) + ((lisp_coda_stop is 0) + ((0.766789 -0.0484781)) + ((0.717203 -0.322113))) + ((R:SylStructure.parent.position_type is single) + ((0.508168 -0.412874)) + ((0.703458 -0.291121))))) + ((0.574827 -0.65022))) + ((0.801765 -0.120813))))) + ((ph_ctype is n) + ((R:Segment.n.ph_ctype is f) + ((R:Segment.n.ph_cplace is b) + ((0.797652 0.623764)) + ((R:Segment.n.ph_cplace is a) + ((R:Segment.n.seg_onsetcoda is coda) + ((0.675567 0.288251)) + ((0.854197 0.626272))) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.660394 -0.225466)) + ((0.65275 0.0487195))))) + ((R:Segment.n.ph_ctype is n) + ((0.685613 -0.512227)) + ((0.736366 -0.104066)))) + ((R:Segment.n.ph_ctype is r) + ((R:SylStructure.parent.position_type is initial) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.1) + ((0.98185 0.152471)) + ((0.851907 0.788208))) + ((ph_ctype is f) + ((0.76106 0.406474)) + ((R:Segment.n.ph_cplace is a) + ((1.01348 -0.0422549)) + ((0.786777 -0.714839))))) + ((ph_cplace is b) + ((R:SylStructure.parent.syl_out < 10.4) + ((0.799025 0.0992277)) + ((0.851068 -0.115896))) + ((R:Segment.n.ph_cplace is p) + ((0.669855 -0.655488)) + ((ph_ctype is r) + ((R:Segment.n.ph_cplace is a) + ((1.00772 0.130892)) + ((0.635981 -0.35826))) + ((R:Segment.n.ph_ctype is l) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((0.746089 -0.286007)) + ((0.89158 0.154432))) + ((R:Segment.n.ph_cplace is b) + ((1.04971 -0.0449782)) + ((R:SylStructure.parent.syl_out < 9.8) + ((R:Segment.n.ph_ctype is f) + ((R:Segment.n.seg_onsetcoda is coda) + ((1.4144 0.143658)) + ((0.781116 -0.281483))) + ((ph_vlng is 0) + ((0.755959 -0.33462)) + ((0.81024 -0.615287)))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((0.7426 -0.24342)) + ((R:Segment.n.ph_ctype is f) + ((R:Segment.n.ph_cplace is a) + ((R:SylStructure.parent.position_type is single) + ((0.578639 -0.322097)) + ((0.55826 -0.663238))) + ((0.616575 -0.713688))) + ((0.759572 -0.314116)))))))))))))) + ((R:Segment.n.ph_ctype is f) + ((ph_ctype is 0) + ((R:Segment.p.ph_ctype is r) + ((R:SylStructure.parent.parent.word_numsyls < 2.2) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.733193 -0.180968)) + ((0.563111 -0.467934))) + ((0.426244 -0.758137))) + ((ph_vlng is a) + ((R:Segment.n.ph_cplace is b) + ((R:Segment.nn.ph_cvox is +) + ((0.680234 0.059855)) + ((R:SylStructure.parent.position_type is single) + ((0.980851 0.443893)) + ((0.715307 0.112865)))) + ((R:Segment.p.ph_cplace is a) + ((0.851224 0.695863)) + ((R:Segment.nn.ph_cvox is -) + ((0.75892 0.195772)) + ((0.630633 0.478738))))) + ((R:Segment.n.seg_onsetcoda is coda) + ((R:Segment.n.ph_cplace is b) + ((R:Segment.nn.ph_cplace is 0) + ((0.815979 -0.477579)) + ((0.851491 -0.168622))) + ((R:SylStructure.parent.position_type is single) + ((R:Segment.nn.ph_cvox is +) + ((1.14265 0.717697)) + ((0.814726 0.291482))) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 0) + ((0.512322 -0.0749096)) + ((0.488216 0.112774))))) + ((R:SylStructure.parent.position_type is final) + ((0.693071 -0.200708)) + ((R:Segment.p.ph_cvox is +) + ((0.489147 -0.378728)) + ((0.695396 -0.525028))))))) + ((ph_vlng is s) + ((0.464234 -0.162706)) + ((R:Segment.p.ph_cvox is +) + ((R:SylStructure.parent.parent.word_numsyls < 2.2) + ((0.566845 -0.616918)) + ((0.92747 -0.26777))) + ((0.632833 -0.858295))))) + ((R:Segment.n.ph_vrnd is 0) + ((R:Segment.p.ph_ctype is r) + ((ph_vlng is 0) + ((0.845308 -0.23426)) + ((R:SylStructure.parent.syl_out < 4.8) + ((R:Segment.n.ph_ctype is n) + ((0.484602 -0.850587)) + ((0.535398 -0.586652))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((ph_vlng is a) + ((0.368898 -0.799533)) + ((lisp_coda_stop is 0) + ((0.387923 -1.11431)) + ((0.407377 -0.859849)))) + ((R:Segment.n.ph_cplace is a) + ((ph_vlng is a) + ((0.382367 -0.787669)) + ((0.522121 -0.687376))) + ((0.361185 -0.853639)))))) + ((ph_vlng is a) + ((ph_ctype is 0) + ((R:Segment.n.ph_ctype is s) + ((R:Segment.p.ph_cvox is +) + ((R:Segment.p.ph_cplace is d) + ((0.502849 -0.232866)) + ((R:SylStructure.parent.position_type is initial) + ((0.641714 -0.0545426)) + ((R:SylStructure.parent.parent.word_numsyls < 2.6) + ((0.613913 0.373746)) + ((R:Segment.n.ph_cplace is v) + ((0.581158 0.310101)) + ((0.628758 -0.068165)))))) + ((R:SylStructure.parent.position_type is mid) + ((0.459281 -0.553794)) + ((0.728208 -0.138806)))) + ((R:Segment.p.ph_cplace is v) + ((0.32179 -0.728364)) + ((R:Segment.p.ph_cplace is l) + ((0.562971 -0.550272)) + ((R:SylStructure.parent.position_type is initial) + ((0.937298 -0.0246324)) + ((R:Segment.p.ph_cvox is +) + ((R:Segment.n.ph_ctype is n) + ((R:Segment.n.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.434029 -0.404793)) + ((1.05548 -0.103717))) + ((0.408372 -0.556145))) + ((0.712335 -0.118776))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((0.379593 -0.658075)) + ((0.549207 -0.494876)))))))) + ((R:SylStructure.parent.position_type is final) + ((0.597124 -0.649729)) + ((0.628822 -1.03743)))) + ((ph_ctype is s) + ((R:Segment.n.ph_ctype is r) + ((R:SylStructure.parent.syl_out < 8.4) + ((0.760328 0.31651)) + ((0.738363 -0.0177161))) + ((R:Segment.n.ph_ctype is l) + ((0.649328 -0.108791)) + ((0.594945 -0.712753)))) + ((ph_vlng is s) + ((R:Segment.n.ph_ctype is s) + ((R:Segment.n.ph_cplace is v) + ((R:Segment.nn.ph_cplace is a) + ((0.583211 0.0724331)) + ((0.434605 -0.229857))) + ((R:Segment.p.ph_cplace is a) + ((R:SylStructure.parent.position_type is single) + ((0.785502 -0.00061573)) + ((0.544995 -0.432984))) + ((R:Segment.nn.ph_cplace is 0) + ((0.507071 -0.715041)) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.506404 -0.573733)) + ((0.62466 -0.3356)))))) + ((R:Segment.p.ph_cplace is l) + ((0.571756 -0.819693)) + ((lisp_coda_stop is 0) + ((R:SylStructure.parent.position_type is initial) + ((0.906891 -0.352911)) + ((R:Segment.n.ph_ctype is r) + ((0.620335 -0.445714)) + ((R:SylStructure.parent.parent.word_numsyls < 2.5) + ((R:Segment.p.ph_cvox is +) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.484057 -0.781483)) + ((0.653917 -0.615429))) + ((0.754814 -0.531845))) + ((0.493988 -0.881596))))) + ((0.792979 -0.32648))))) + ((R:Segment.p.ph_cvox is +) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((lisp_coda_stop is 0) + ((0.913526 -0.195111)) + ((0.56564 -0.64867))) + ((R:SylStructure.parent.position_type is single) + ((R:Segment.n.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.790882 -0.488954)) + ((0.780221 -0.185138))) + ((0.487794 -0.691338))) + ((R:Segment.p.ph_ctype is n) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.595729 -0.771698)) + ((0.57908 -1.06592))) + ((R:Segment.pp.ph_vfront is 0) + ((0.591417 -0.784735)) + ((0.486298 -0.436971)))))) + ((ph_vlng is 0) + ((0.629869 -0.960652)) + ((R:Segment.n.ph_ctype is r) + ((R:Segment.nn.ph_cplace is 0) + ((0.591783 -0.671576)) + ((R:Segment.nn.ph_cvox is +) + ((0.365135 -0.822844)) + ((0.428573 -0.988434)))) + ((lisp_coda_stop is 0) + ((R:Segment.p.ph_cplace is a) + ((R:Segment.n.ph_cplace is a) + ((0.428189 -0.730057)) + ((0.337443 -0.861764))) + ((0.57354 -0.494602))) + ((0.497606 -0.414451)))))))))) + ((ph_vlng is l) + ((R:Segment.pp.ph_vfront is 1) + ((0.937199 0.833877)) + ((R:SylStructure.parent.syl_out < 12.7) + ((0.729202 0.344121)) + ((0.71086 0.101855)))) + ((syl_initial is 0) + ((R:Segment.p.ph_ctype is r) + ((R:Segment.nn.ph_cplace is a) + ((0.844815 0.175273)) + ((0.662523 -0.297527))) + ((ph_vlng is 0) + ((R:Segment.p.ph_ctype is s) + ((R:SylStructure.parent.syl_out < 14.6) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.665332 -0.610529)) + ((0.42276 -0.848942))) + ((0.427946 -0.980726))) + ((R:SylStructure.parent.position_type is single) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((0.523367 -0.825038)) + ((0.635654 -0.535303))) + ((R:SylStructure.parent.position_type is final) + ((0.515996 -0.707614)) + ((ph_cplace is a) + ((lisp_coda_stop is 0) + ((0.689738 0.0446601)) + ((0.698347 -0.268593))) + ((R:Segment.nn.ph_cplace is a) + ((0.706504 -0.659172)) + ((0.775589 -0.201769))))))) + ((0.79472 -0.0539192)))) + ((ph_ctype is s) + ((R:SylStructure.parent.position_type is single) + ((R:Segment.p.ph_ctype is f) + ((0.641302 0.532411)) + ((R:Segment.n.ph_vrnd is +) + ((0.800655 0.325651)) + ((0.894711 0.0487864)))) + ((R:SylStructure.parent.position_type is initial) + ((R:Segment.nn.ph_cplace is a) + ((0.618082 -0.0190591)) + ((0.733637 0.156329))) + ((ph_cplace is a) + ((R:SylStructure.parent.parent.word_numsyls < 2.3) + ((0.372869 -0.0827845)) + ((0.494988 0.0882778))) + ((0.593526 -0.335404))))) + ((R:Segment.p.ph_cvox is +) + ((R:Segment.p.ph_ctype is n) + ((R:SylStructure.parent.syl_out < 5.4) + ((1.0207 -0.152517)) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.711277 -0.513467)) + ((0.509207 -0.726794)))) + ((ph_cplace is g) + ((0.545188 -0.568352)) + ((R:Segment.p.ph_cplace is a) + ((ph_ctype is n) + ((0.61149 -0.325094)) + ((R:SylStructure.parent.position_type is single) + ((R:Segment.p.ph_ctype is r) + ((0.525282 0.395446)) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((0.85778 0.0760293)) + ((0.704055 0.290369)))) + ((R:Segment.pp.ph_vfront is 0) + ((0.590093 0.136983)) + ((0.734563 -0.0570759))))) + ((R:Segment.pp.ph_vfront is 2) + ((0.519485 -0.477174)) + ((0.707546 -0.13584)))))) + ((R:SylStructure.parent.position_type is single) + ((R:Segment.p.ph_ctype is f) + ((0.797877 0.00462775)) + ((R:Segment.pp.ph_vfront is 1) + ((0.852184 -0.259914)) + ((0.65313 -0.492506)))) + ((R:SylStructure.parent.position_type is initial) + ((0.662516 -0.45585)) + ((lisp_onset_glide is 0) + ((0.652534 -0.652428)) + ((0.482818 -0.885728)))))))))))) + ((syl_initial is 0) + ((ph_cplace is 0) + ((R:SylStructure.parent.position_type is single) + ((R:Segment.n.ph_ctype is f) + ((R:Segment.p.ph_cplace is a) + ((R:Segment.n.ph_cplace is a) + ((R:Segment.pp.ph_vfront is 0) + ((1.06157 1.30945)) + ((1.12041 1.85843))) + ((1.05622 0.921414))) + ((R:Segment.nn.ph_cvox is -) + ((1.03073 0.916168)) + ((1.06857 0.452851)))) + ((R:Segment.p.ph_ctype is r) + ((R:Segment.n.ph_cplace is v) + ((1.22144 0.672433)) + ((R:Segment.p.ph_cplace is l) + ((0.859749 -0.315152)) + ((R:Segment.nn.ph_cvox is -) + ((0.89862 0.131037)) + ((0.760033 -0.121252))))) + ((R:SylStructure.parent.syl_out < 8.8) + ((R:SylStructure.parent.syl_out < 0.8) + ((1.06821 1.63716)) + ((R:Segment.n.ph_cplace is a) + ((R:Segment.p.ph_cvox is +) + ((1.04477 0.581686)) + ((R:Segment.nn.ph_cvox is +) + ((0.769059 0.301576)) + ((0.953428 0.0764058)))) + ((R:Segment.p.ph_cplace is a) + ((1.01367 0.507761)) + ((1.2827 0.945031))))) + ((R:Segment.n.ph_cplace is l) + ((0.618397 -0.0873608)) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 0) + ((R:Segment.p.ph_cvox is +) + ((0.817182 0.477262)) + ((0.792181 -0.0592145))) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((R:SylStructure.parent.syl_out < 16) + ((0.995411 0.497843)) + ((0.784087 0.152266))) + ((1.11816 0.716352)))))))) + ((R:Segment.n.ph_ctype is f) + ((R:SylStructure.parent.position_type is final) + ((1.35724 1.06028)) + ((R:Segment.p.ph_ctype is r) + ((R:SylStructure.parent.syl_out < 8.6) + ((0.511716 -0.0833005)) + ((0.492142 -0.30212))) + ((R:Segment.n.ph_cplace is b) + ((0.53059 0.00266551)) + ((R:SylStructure.parent.parent.word_numsyls < 2.3) + ((ph_vlng is l) + ((0.433396 0.821463)) + ((0.66915 0.415614))) + ((0.501369 0.154721)))))) + ((R:SylStructure.parent.position_type is final) + ((R:Segment.n.ph_ctype is s) + ((1.03896 0.524706)) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((1.15147 0.428386)) + ((R:Segment.p.ph_cplace is a) + ((0.919929 0.0314637)) + ((0.716168 -0.366629))))) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 4) + ((0.816778 0.408786)) + ((lisp_onset_glide is 0) + ((R:Segment.p.ph_ctype is n) + ((R:Segment.n.ph_ctype is s) + ((0.532911 -0.153851)) + ((0.633518 -0.762353))) + ((R:Segment.p.ph_cvox is -) + ((R:Segment.p.ph_cplace is g) + ((0.618376 -0.593197)) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((R:Segment.pp.ph_vfront is 0) + ((R:Segment.n.ph_ctype is n) + ((0.554085 -0.058903)) + ((R:Segment.p.ph_cplace is a) + ((0.59842 -0.174458)) + ((0.585539 -0.349335)))) + ((0.500857 -0.416613))) + ((R:SylStructure.parent.syl_out < 7) + ((0.616683 -0.00213272)) + ((0.631444 -0.141773))))) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 0) + ((0.5198 -0.151901)) + ((ph_vlng is s) + ((0.677428 0.203522)) + ((0.780789 0.375429)))))) + ((R:Segment.nn.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.594604 -0.27832)) + ((0.736114 -0.422756))) + ((R:Segment.p.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.512186 -0.732785)) + ((0.550759 -0.506471))) + ((0.47297 -0.791841))))))))) + ((R:Segment.p.ph_ctype is 0) + ((R:SylStructure.parent.position_type is final) + ((lisp_coda_stop is 0) + ((ph_ctype is f) + ((R:Segment.nn.ph_cplace is 0) + ((1.00978 0.366105)) + ((0.80682 -0.0827529))) + ((R:Segment.n.ph_cplace is a) + ((R:Segment.nn.ph_cvox is -) + ((1.07097 1.77503)) + ((1.14864 1.14754))) + ((R:Segment.n.ph_vrnd is -) + ((0.883474 0.286471)) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((1.22264 0.884142)) + ((1.03401 0.658192)))))) + ((ph_cplace is a) + ((R:SylStructure.parent.syl_out < 6.4) + ((R:SylStructure.parent.syl_out < 0.6) + ((1.07956 0.602849)) + ((1.12301 0.0555897))) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.898888 -0.17527)) + ((0.940932 0.274301)))) + ((1.10093 -0.68098)))) + ((R:Segment.n.ph_ctype is s) + ((ph_cplace is v) + ((0.639932 -1.33353)) + ((R:SylStructure.parent.position_type is single) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 0) + ((lisp_coda_stop is 0) + ((0.822882 -0.131692)) + ((0.971957 -0.385365))) + ((R:Segment.nn.ph_cvox is -) + ((1.06611 0.183678)) + ((lisp_coda_stop is 0) + ((0.967183 0.0925019)) + ((0.876026 -0.230108))))) + ((ph_ctype is f) + ((R:SylStructure.parent.syl_out < 13) + ((0.589198 -0.655594)) + ((0.476651 -0.926625))) + ((R:SylStructure.parent.syl_out < 5) + ((0.682936 -0.227662)) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((R:Segment.nn.ph_cplace is a) + ((0.447309 -0.700998)) + ((0.626113 -0.468853))) + ((0.657893 -0.383607))))))) + ((ph_ctype is r) + ((R:Segment.nn.ph_cvox is -) + ((1.15158 1.15233)) + ((R:Segment.n.ph_vrnd is -) + ((1.05554 0.533749)) + ((0.955478 0.0841894)))) + ((ph_ctype is l) + ((R:Segment.n.ph_ctype is 0) + ((R:Segment.nn.ph_cplace is a) + ((0.766431 0.28943)) + ((1.48633 1.09574))) + ((R:SylStructure.parent.position_type is single) + ((1.01777 0.474653)) + ((0.545859 -0.402743)))) + ((R:SylStructure.parent.syl_out < 4.8) + ((R:Segment.n.ph_vc is +) + ((ph_ctype is n) + ((0.776645 -0.433859)) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.776179 0.23435)) + ((R:SylStructure.parent.parent.word_numsyls < 2.2) + ((0.744272 -0.0859672)) + ((0.782605 0.115647)))) + ((0.626541 -0.167615)))) + ((R:Segment.n.seg_onsetcoda is coda) + ((1.28499 0.864144)) + ((ph_cplace is a) + ((0.926103 0.0435837)) + ((0.839172 -0.189514))))) + ((R:Segment.n.ph_ctype is n) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.1) + ((0.973489 -0.203415)) + ((0.777589 -0.849733))) + ((ph_ctype is n) + ((R:SylStructure.parent.position_type is initial) + ((R:Segment.n.ph_vc is +) + ((0.743482 -0.53384)) + ((0.619309 -0.0987861))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((1.15555 0.0786295)) + ((1.06689 0.681662)))) + ((R:Segment.n.ph_ctype is r) + ((R:SylStructure.parent.syl_out < 8.9) + ((0.752079 -0.237421)) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.664182 -0.041521)) + ((0.772712 0.103499)))) + ((R:Segment.n.seg_onsetcoda is coda) + ((R:SylStructure.parent.position_type is mid) + ((R:SylStructure.parent.parent.word_numsyls < 3.3) + ((0.715944 -0.275113)) + ((0.675729 0.202848))) + ((R:Segment.n.ph_vrnd is -) + ((R:SylStructure.parent.syl_out < 8.3) + ((ph_ctype is s) + ((0.82747 -0.116723)) + ((0.689586 -0.303909))) + ((R:SylStructure.parent.syl_out < 17.7) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.659686 -0.621268)) + ((ph_cplace is a) + ((0.861741 -0.285324)) + ((0.507102 -0.444082)))) + ((0.850664 -0.269084)))) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.878643 -0.255833)) + ((0.98882 0.115252))))) + ((ph_cplace is a) + ((R:SylStructure.parent.syl_out < 13) + ((0.850625 -0.289333)) + ((0.788154 -0.44844))) + ((0.70482 -0.630276)))))))))))) + ((R:Segment.p.ph_ctype is l) + ((R:SylStructure.parent.position_type is single) + ((0.873748 -0.21639)) + ((lisp_coda_stop is 0) + ((0.71002 0.428132)) + ((0.703501 0.015833)))) + ((ph_vlng is 0) + ((R:Segment.p.ph_ctype is r) + ((R:SylStructure.parent.position_type is initial) + ((0.907151 -0.494409)) + ((ph_ctype is s) + ((0.782539 -0.398555)) + ((R:Segment.p.ph_cplace is 0) + ((0.767435 -0.298857)) + ((0.767046 0.151217))))) + ((ph_cplace is a) + ((R:Segment.n.ph_ctype is r) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.689367 0.0195991)) + ((0.64446 -0.256648))) + ((R:Segment.n.ph_vc is +) + ((ph_ctype is s) + ((R:Segment.nn.ph_cvox is +) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.59482 -0.214443)) + ((0.745691 0.0292177))) + ((0.523103 -0.391245))) + ((R:Segment.p.ph_cvox is +) + ((R:Segment.p.ph_cplace is a) + ((0.524304 -0.428306)) + ((0.605117 -0.165604))) + ((R:Segment.p.ph_ctype is f) + ((0.491251 -0.455353)) + ((lisp_coda_stop is 0) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((0.175021 -1.02136)) + ((0.264113 -0.976809))) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.3) + ((0.704803 -0.716976)) + ((0.300317 -0.924727))))))) + ((ph_ctype is f) + ((R:SylStructure.parent.syl_out < 13) + ((R:Segment.n.ph_ctype is s) + ((0.731994 -0.711044)) + ((0.768008 -0.415076))) + ((0.691821 -0.803284))) + ((R:Segment.nn.ph_cplace is 0) + ((R:Segment.n.ph_cplace is a) + ((0.569567 -0.993506)) + ((0.689849 -0.761696))) + ((0.386818 -1.14744)))))) + ((R:Segment.p.seg_onsetcoda is coda) + ((R:Segment.p.ph_cplace is a) + ((0.746337 -0.866206)) + ((0.532751 -1.22185))) + ((ph_cplace is l) + ((0.74942 -0.820648)) + ((0.685988 -0.298146)))))) + ((0.812766 0.17291)))))) + ((R:SylStructure.parent.position_type is mid) + ((ph_ctype is r) + ((0.577775 -0.54714)) + ((R:Segment.n.ph_ctype is f) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.370448 0.00076407)) + ((0.460385 0.20631))) + ((R:Segment.p.ph_cvox is -) + ((ph_vlng is 0) + ((0.615959 -0.57434)) + ((0.50852 -0.197814))) + ((R:Segment.n.ph_ctype is 0) + ((1.34281 0.477163)) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.59975 -0.1342)) + ((0.640294 -0.32653))))))) + ((R:Segment.n.ph_ctype is f) + ((R:SylStructure.parent.position_type is initial) + ((0.758739 0.311943)) + ((R:Segment.n.seg_onsetcoda is coda) + ((R:Segment.p.ph_ctype is f) + ((1.28746 1.99771)) + ((R:Segment.pp.ph_vfront is 1) + ((1.42474 1.76925)) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((0.979414 1.37583)) + ((1.00321 1.06671))))) + ((1.15222 0.852004)))) + ((R:Segment.p.ph_ctype is 0) + ((R:Segment.n.ph_ctype is s) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.664807 -0.0880262)) + ((0.573589 0.217234))) + ((ph_ctype is s) + ((ph_cplace is l) + ((0.800348 0.66579)) + ((ph_cplace is a) + ((0.859133 1.46854)) + ((R:SylStructure.parent.position_type is single) + ((0.692229 1.23671)) + ((0.552426 0.923928))))) + ((R:SylStructure.parent.syl_out < 9.2) + ((R:SylStructure.parent.position_type is single) + ((R:SylStructure.parent.syl_out < 3.6) + ((1.01673 1.26824)) + ((0.848274 0.92375))) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 1) + ((R:Segment.nn.ph_cplace is a) + ((0.788163 0.818855)) + ((0.822028 1.01227))) + ((0.8365 0.483313)))) + ((lisp_coda_stop is 0) + ((R:Segment.nn.ph_cvox is +) + ((R:SylStructure.parent.R:Syllable.n.syl_onsetsize < 0.2) + ((0.807795 0.670829)) + ((0.773774 0.435486))) + ((0.849529 0.103561))) + ((0.858848 0.763836)))))) + ((R:Segment.n.ph_vrnd is -) + ((ph_vlng is 0) + ((R:SylStructure.parent.position_type is final) + ((ph_cplace is a) + ((R:Segment.nn.ph_cvox is -) + ((0.691915 -0.42124)) + ((R:Segment.p.ph_cplace is a) + ((0.773696 0.354001)) + ((0.65495 -0.14321)))) + ((0.610433 -0.479739))) + ((R:Segment.p.ph_ctype is r) + ((R:SylStructure.parent.R:Syllable.n.syl_break is 0) + ((0.560921 0.384674)) + ((0.895267 0.746476))) + ((R:Segment.p.ph_ctype is l) + ((0.704694 0.568012)) + ((R:Segment.p.ph_cplace is b) + ((1.34739 0.539049)) + ((R:Segment.p.ph_ctype is s) + ((R:SylStructure.parent.syl_out < 12.9) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.807285 0.151429)) + ((0.988033 0.383763))) + ((0.878655 0.102291))) + ((ph_ctype is n) + ((0.759582 -0.315096)) + ((R:SylStructure.parent.syl_out < 8.8) + ((R:Segment.pp.ph_vfront is 0) + ((0.846546 0.000647117)) + ((R:Segment.pp.ph_vfront is 1) + ((0.586216 0.150701)) + ((0.793898 0.379041)))) + ((lisp_coda_stop is 0) + ((ph_ctype is f) + ((0.74736 -0.31103)) + ((0.715751 -0.00576581))) + ((0.914486 0.17528)))))))))) + ((1.24204 0.908819))) + ((ph_ctype is s) + ((ph_cplace is a) + ((0.864408 1.35528)) + ((R:Segment.n.seg_onsetcoda is coda) + ((0.85602 0.344576)) + ((0.869622 0.659223)))) + ((R:Segment.nn.ph_cvox is -) + ((R:Segment.n.ph_ctype is s) + ((R:Segment.nn.ph_cplace is 0) + ((0.942964 1.27475)) + ((0.978218 0.650268))) + ((R:SylStructure.parent.syl_out < 3.9) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((1.32463 1.05026)) + ((0.896966 0.417727))) + ((R:Segment.p.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 0) + ((0.776698 0.195369)) + ((0.969518 0.432394))) + ((0.799096 -0.0203318))))) + ((ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.680861 -0.315846)) + ((R:SylStructure.parent.R:Syllable.nn.syl_break is 1) + ((0.954393 0.0965487)) + ((0.884928 0.372884)))) + ((lisp_coda_stop is 0) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((R:SylStructure.parent.position_type is final) + ((1.03696 0.565834)) + ((0.906661 0.277961))) + ((R:SylStructure.parent.position_type is final) + ((0.778429 -0.0967381)) + ((0.863993 0.314023)))) + ((R:Segment.p.ph_cplace is a) + ((R:SylStructure.parent.R:Syllable.p.stress is 0) + ((0.898898 0.571009)) + ((0.830278 0.787486))) + ((1.1101 0.333888))))))))))))) +;; RMSE 0.7726 Correlation is 0.5943 Mean (abs) Error 0.5752 (0.5160) + +)) + +(provide 'f2bdurtreeZ) diff --git a/lib/f2bf0lr.scm b/lib/f2bf0lr.scm new file mode 100644 index 0000000..6a06671 --- /dev/null +++ b/lib/f2bf0lr.scm @@ -0,0 +1,314 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; First attempt at a linear regression model to predict F0 values. +;;; This is an attempt to reimplement the work in Black and +;;; Hunt ICSLP96, though this model probably isn't as good. +;;; + +;;;start +;;; R2 = 0.251, F(74, 12711) = 57.5, Prob>F = 0.000 +;;; RMSE = 27.877 +;;;mid +;;; R2 = 0.332, F(74, 12711) = 85.6, Prob>F = 0.000 +;;; RMSE = 28.293 +;;;end +;;; R2 = 0.292, F(74, 12711) = 70.8, Prob>F = 0.000 +;;; RMSE = 27.139 + +(define (emph_syl syl) + (if (string-equal (item.feat syl "tobi_accent") "NONE") + 0.0 + (if (string-equal (item.feat + syl "R:SylStructure.parent.R:Token.parent.EMPH") "1") + 2.0 + 0.0))) + +(set! f2b_f0_lr_start +'( +( Intercept 160.584956 ) +( R:SylStructure.parent.R:Token.parent.EMPH 10.0 ) +( pp.tobi_accent 10.081770 (H*) ) +( pp.tobi_accent 3.358613 (!H*) ) +( pp.tobi_accent 4.144342 (*? X*? H*!H* * L+H* L+!H*) ) +( pp.tobi_accent -1.111794 (L*) ) +( pp.tobi_accent 19.646313 (L*+H L*+!H) ) +( p.tobi_accent 32.081029 (H*) ) +( p.tobi_accent 18.090033 (!H*) ) +( p.tobi_accent 23.255280 (*? X*? H*!H* * L+H* L+!H*) ) +( p.tobi_accent -9.623577 (L*) ) +( p.tobi_accent 26.517095 (L*+H L*+!H) ) +( tobi_accent 5.221081 (H*) ) +( tobi_accent 10.159194 (!H*) ) +( tobi_accent 3.645511 (*? X*? H*!H* * L+H* L+!H*) ) +( tobi_accent -5.720030 (L*) ) +( tobi_accent -6.355773 (L*+H L*+!H) ) +( n.tobi_accent -5.691933 (H*) ) +( n.tobi_accent 8.265606 (!H*) ) +( n.tobi_accent 0.861427 (*? X*? H*!H* * L+H* L+!H*) ) +( n.tobi_accent 1.270504 (L*) ) +( n.tobi_accent 3.499418 (L*+H L*+!H) ) +( nn.tobi_accent -3.785701 (H*) ) +( nn.tobi_accent 7.013446 (!H*) ) +( nn.tobi_accent 2.637494 (*? X*? H*!H* * L+H* L+!H*) ) +( nn.tobi_accent -0.392176 (L*) ) +( nn.tobi_accent -2.957502 (L*+H L*+!H) ) +( pp.tobi_endtone -3.531153 (L-L%) ) +( pp.tobi_endtone 0.131156 (L-) ) +( pp.tobi_endtone 2.729199 (H-L% !H-L% -X?) ) +( pp.tobi_endtone 8.258756 (L-H%) ) +( pp.tobi_endtone 5.836487 (H-) ) +( pp.tobi_endtone 11.213440 (!H- H-H%) ) +( R:Syllable.p.tobi_endtone -28.081359 (L-L%) ) +( R:Syllable.p.tobi_endtone -20.553145 (L-) ) +( R:Syllable.p.tobi_endtone -5.442577 (H-L% !H-L% -X?) ) +( R:Syllable.p.tobi_endtone -6.585836 (L-H%) ) +( R:Syllable.p.tobi_endtone 8.537044 (H-) ) +( R:Syllable.p.tobi_endtone 4.243342 (!H- H-H%) ) +( tobi_endtone -9.333926 (L-L%) ) +( tobi_endtone -0.346711 (L-) ) +( tobi_endtone -0.507352 (H-L% !H-L% -X?) ) +( tobi_endtone -0.937483 (L-H%) ) +( tobi_endtone 9.472265 (H-) ) +( tobi_endtone 14.256898 (!H- H-H%) ) +( n.tobi_endtone -13.084253 (L-L%) ) +( n.tobi_endtone -1.060688 (L-) ) +( n.tobi_endtone -7.947205 (H-L% !H-L% -X?) ) +( n.tobi_endtone -5.471592 (L-H%) ) +( n.tobi_endtone -0.095669 (H-) ) +( n.tobi_endtone 4.933708 (!H- H-H%) ) +( nn.tobi_endtone -14.993470 (L-L%) ) +( nn.tobi_endtone -3.784284 (L-) ) +( nn.tobi_endtone -15.505132 (H-L% !H-L% -X?) ) +( nn.tobi_endtone -11.352400 (L-H%) ) +( nn.tobi_endtone -5.551627 (H-) ) +( nn.tobi_endtone -0.661581 (!H- H-H%) ) +( pp.old_syl_break -3.367677 ) +( p.old_syl_break 0.641755 ) +( old_syl_break -0.659002 ) +( n.old_syl_break 1.217358 ) +( nn.old_syl_break 2.974502 ) +( pp.stress 1.588098 ) +( p.stress 3.693430 ) +( stress 2.009843 ) +( n.stress 1.645560 ) +( nn.stress 1.926870 ) +( syl_in 1.048362 ) +( syl_out 0.315553 ) +( ssyl_in -2.096079 ) +( ssyl_out 0.303531 ) +( asyl_in -4.257915 ) +( asyl_out -2.422424 ) +( last_accent -0.397647 ) +( next_accent -0.418613 ) +( sub_phrases -5.472055 ) +)) + +(set! f2b_f0_lr_mid +'( +( Intercept 169.183377 ) +( R:SylStructure.parent.R:Token.parent.EMPH 10.0 ) +( pp.tobi_accent 4.923247 (H*) ) +( pp.tobi_accent 0.955474 (!H*) ) +( pp.tobi_accent 1.193597 (*? X*? H*!H* * L+H* L+!H*) ) +( pp.tobi_accent 1.501383 (L*) ) +( pp.tobi_accent 7.992120 (L*+H L*+!H) ) +( p.tobi_accent 16.603350 (H*) ) +( p.tobi_accent 11.665814 (!H*) ) +( p.tobi_accent 13.063298 (*? X*? H*!H* * L+H* L+!H*) ) +( p.tobi_accent -2.288798 (L*) ) +( p.tobi_accent 29.168430 (L*+H L*+!H) ) +( tobi_accent 34.517868 (H*) ) +( tobi_accent 22.349656 (!H*) ) +( tobi_accent 23.551548 (*? X*? H*!H* * L+H* L+!H*) ) +( tobi_accent -14.117284 (L*) ) +( tobi_accent -5.978760 (L*+H L*+!H) ) +( n.tobi_accent -1.914945 (H*) ) +( n.tobi_accent 5.249441 (!H*) ) +( n.tobi_accent -1.929947 (*? X*? H*!H* * L+H* L+!H*) ) +( n.tobi_accent -3.287877 (L*) ) +( n.tobi_accent -4.980375 (L*+H L*+!H) ) +( nn.tobi_accent -6.147251 (H*) ) +( nn.tobi_accent 8.408949 (!H*) ) +( nn.tobi_accent 3.193500 (*? X*? H*!H* * L+H* L+!H*) ) +( nn.tobi_accent 1.323099 (L*) ) +( nn.tobi_accent 9.148058 (L*+H L*+!H) ) +( pp.tobi_endtone 4.255273 (L-L%) ) +( pp.tobi_endtone -1.033377 (L-) ) +( pp.tobi_endtone 11.992045 (H-L% !H-L% -X?) ) +( pp.tobi_endtone 6.989573 (L-H%) ) +( pp.tobi_endtone 2.598854 (H-) ) +( pp.tobi_endtone 12.178307 (!H- H-H%) ) +( R:Syllable.p.tobi_endtone -4.397973 (L-L%) ) +( R:Syllable.p.tobi_endtone -6.157077 (L-) ) +( R:Syllable.p.tobi_endtone 5.530608 (H-L% !H-L% -X?) ) +( R:Syllable.p.tobi_endtone 6.938086 (L-H%) ) +( R:Syllable.p.tobi_endtone 6.162763 (H-) ) +( R:Syllable.p.tobi_endtone 8.035727 (!H- H-H%) ) +( tobi_endtone -19.357902 (L-L%) ) +( tobi_endtone -13.877759 (L-) ) +( tobi_endtone -6.176061 (H-L% !H-L% -X?) ) +( tobi_endtone -7.328882 (L-H%) ) +( tobi_endtone 12.694193 (H-) ) +( tobi_endtone 30.923398 (!H- H-H%) ) +( n.tobi_endtone -17.727785 (L-L%) ) +( n.tobi_endtone -2.539592 (L-) ) +( n.tobi_endtone -8.126830 (H-L% !H-L% -X?) ) +( n.tobi_endtone -8.701685 (L-H%) ) +( n.tobi_endtone -1.006439 (H-) ) +( n.tobi_endtone 6.834498 (!H- H-H%) ) +( nn.tobi_endtone -15.407530 (L-L%) ) +( nn.tobi_endtone -2.974196 (L-) ) +( nn.tobi_endtone -12.287673 (H-L% !H-L% -X?) ) +( nn.tobi_endtone -7.621437 (L-H%) ) +( nn.tobi_endtone -0.458837 (H-) ) +( nn.tobi_endtone 3.170632 (!H- H-H%) ) +( pp.old_syl_break -4.196950 ) +( p.old_syl_break -5.176929 ) +( old_syl_break 0.047922 ) +( n.old_syl_break 2.153968 ) +( nn.old_syl_break 2.577074 ) +( pp.stress -2.368192 ) +( p.stress 1.080493 ) +( stress 1.135556 ) +( n.stress 2.447219 ) +( nn.stress 1.318122 ) +( syl_in 0.291663 ) +( syl_out -0.411814 ) +( ssyl_in -1.643456 ) +( ssyl_out 0.580589 ) +( asyl_in -5.649243 ) +( asyl_out 0.489823 ) +( last_accent 0.216634 ) +( next_accent 0.244134 ) +( sub_phrases -5.758156 ) +)) + + +(set! f2b_f0_lr_end +'( +( Intercept 169.570381 ) +( R:SylStructure.parent.R:Token.parent.EMPH 10.0 ) +( pp.tobi_accent 3.594771 (H*) ) +( pp.tobi_accent 0.432519 (!H*) ) +( pp.tobi_accent 0.235664 (*? X*? H*!H* * L+H* L+!H*) ) +( pp.tobi_accent 1.513892 (L*) ) +( pp.tobi_accent 2.474823 (L*+H L*+!H) ) +( p.tobi_accent 11.214208 (H*) ) +( p.tobi_accent 9.619350 (!H*) ) +( p.tobi_accent 9.084690 (*? X*? H*!H* * L+H* L+!H*) ) +( p.tobi_accent 0.519202 (L*) ) +( p.tobi_accent 26.593112 (L*+H L*+!H) ) +( tobi_accent 25.217589 (H*) ) +( tobi_accent 13.759851 (!H*) ) +( tobi_accent 17.635192 (*? X*? H*!H* * L+H* L+!H*) ) +( tobi_accent -12.149974 (L*) ) +( tobi_accent 13.345913 (L*+H L*+!H) ) +( n.tobi_accent 4.944848 (H*) ) +( n.tobi_accent 7.398383 (!H*) ) +( n.tobi_accent 1.683011 (*? X*? H*!H* * L+H* L+!H*) ) +( n.tobi_accent -6.516900 (L*) ) +( n.tobi_accent -6.768201 (L*+H L*+!H) ) +( nn.tobi_accent -4.335797 (H*) ) +( nn.tobi_accent 5.656462 (!H*) ) +( nn.tobi_accent 0.263288 (*? X*? H*!H* * L+H* L+!H*) ) +( nn.tobi_accent 1.022002 (L*) ) +( nn.tobi_accent 6.702368 (L*+H L*+!H) ) +( pp.tobi_endtone 10.274958 (L-L%) ) +( pp.tobi_endtone 3.129947 (L-) ) +( pp.tobi_endtone 15.476240 (H-L% !H-L% -X?) ) +( pp.tobi_endtone 10.446935 (L-H%) ) +( pp.tobi_endtone 6.104384 (H-) ) +( pp.tobi_endtone 14.182688 (!H- H-H%) ) +( R:Syllable.p.tobi_endtone 1.767454 (L-L%) ) +( R:Syllable.p.tobi_endtone -1.040077 (L-) ) +( R:Syllable.p.tobi_endtone 18.438093 (H-L% !H-L% -X?) ) +( R:Syllable.p.tobi_endtone 8.750018 (L-H%) ) +( R:Syllable.p.tobi_endtone 5.000340 (H-) ) +( R:Syllable.p.tobi_endtone 10.913437 (!H- H-H%) ) +( tobi_endtone -12.637935 (L-L%) ) +( tobi_endtone -13.597961 (L-) ) +( tobi_endtone -6.501965 (H-L% !H-L% -X?) ) +( tobi_endtone 8.747483 (L-H%) ) +( tobi_endtone 15.165833 (H-) ) +( tobi_endtone 50.190326 (!H- H-H%) ) +( n.tobi_endtone -16.965781 (L-L%) ) +( n.tobi_endtone -5.222475 (L-) ) +( n.tobi_endtone -7.358555 (H-L% !H-L% -X?) ) +( n.tobi_endtone -7.833168 (L-H%) ) +( n.tobi_endtone 4.701087 (H-) ) +( n.tobi_endtone 10.349902 (!H- H-H%) ) +( nn.tobi_endtone -15.369483 (L-L%) ) +( nn.tobi_endtone -2.207161 (L-) ) +( nn.tobi_endtone -9.363835 (H-L% !H-L% -X?) ) +( nn.tobi_endtone -7.052374 (L-H%) ) +( nn.tobi_endtone 2.207854 (H-) ) +( nn.tobi_endtone 5.271546 (!H- H-H%) ) +( pp.old_syl_break -4.745862 ) +( p.old_syl_break -5.685178 ) +( old_syl_break -2.633291 ) +( n.old_syl_break 1.678340 ) +( nn.old_syl_break 2.274729 ) +( pp.stress -2.747198 ) +( p.stress 0.306724 ) +( stress -0.565613 ) +( n.stress 2.838327 ) +( nn.stress 1.285244 ) +( syl_in 0.169955 ) +( syl_out -1.045661 ) +( ssyl_in -1.487774 ) +( ssyl_out 0.752405 ) +( asyl_in -5.081677 ) +( asyl_out 3.016218 ) +( last_accent 0.312900 ) +( next_accent 0.837992 ) +( sub_phrases -5.397805 ) + +)) + +;; groups +;; tobi_accent_1 25.217589 (H*) ) +;; tobi_accent_2 13.759851 (!H*) ) +;; tobi_accent_3 17.635192 (*? X*? H*!H* * L+H* L+!H*) ) +;; tobi_accent_4 -12.149974 (L*) ) +;; tobi_accent_5 13.345913 (L*+H L*+!H) ) + +;; tobi_endtone_1 10.274958 (L-L%) ) +;; tobi_endtone_2 3.129947 (L-) ) +;; tobi_endtone_3 15.476240 (H-L% !H-L% -X?) ) +;; tobi_endtone_4 10.446935 (L-H%) ) +;; tobi_endtone_5 6.104384 (H-) ) +;; tobi_endtone_6 14.182688 (!H- H-H%) ) + +(provide 'f2bf0lr) + diff --git a/lib/festdoc.scm b/lib/festdoc.scm new file mode 100644 index 0000000..13bc5dd --- /dev/null +++ b/lib/festdoc.scm @@ -0,0 +1,178 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; ;; +;;; Centre for Speech Technology Research ;; +;;; University of Edinburgh, UK ;; +;;; Copyright (c) 1996,1997 ;; +;;; All Rights Reserved. ;; +;;; ;; +;;; Permission is hereby granted, free of charge, to use and distribute ;; +;;; this software and its documentation without restriction, including ;; +;;; without limitation the rights to use, copy, modify, merge, publish, ;; +;;; distribute, sublicense, and/or sell copies of this work, and to ;; +;;; permit persons to whom this work is furnished to do so, subject to ;; +;;; the following conditions: ;; +;;; 1. The code must retain the above copyright notice, this list of ;; +;;; conditions and the following disclaimer. ;; +;;; 2. Any modifications must be clearly marked as such. ;; +;;; 3. Original authors' names are not deleted. ;; +;;; 4. The authors' names are not used to endorse or promote products ;; +;;; derived from this software without specific prior written ;; +;;; permission. ;; +;;; ;; +;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;; +;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;; +;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;; +;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;; +;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;; +;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;; +;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;; +;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;; +;;; THIS SOFTWARE. ;; +;;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Author: Alan W Black +;;; Date: August 1996 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Save documentation strings as texinfo files +;;; +;;; Finds all functions with documentation, and all variables with +;;; documentation, sorts and dumps the information in doc/festfunc.texi +;;; and doc/festvars.texi +;;; +;;; The makefile in the doc directory runs the compiled festival binary and +;;; causes these files to be created form the currently defined functions +;;; and variables +;;; +;;; Also provides function to extract manual section for documentation +;;; string and send a url to Netscape to display it +;;; + +(define (make-doc) +"(make-doc) +Find function and variable document strings and save them in texinfo +format to respective files." + (format t "Making function, feature and variable lists\n") + + ;; Need to ensure all library files are actually loaded if they contain + ;; funcstions/variables which have to be put in the manual + (require 'display) + (require 'mbrola) + (require 'tilt) + + (make-a-doc "festfunc.texi" 'function) + (make-a-doc "festfeat.texi" 'features) + (make-a-doc "festvars.texi" 'vars)) + +(define (make-a-doc outfile doclist) +"(make-a-doc FILENAME DOCLIST) +Make a texinfo document in FILENAME as a texinfo table, items are +from DOCLIST. DOCLIST names which doclist to use, it may be +one of 'function, 'features or 'vars." + (let ((outfp (fopen outfile "wb"))) + (format outfp "@table @code\n") + ;; Yes I am so lazy I'm not willing to write a sort function in Scheme + (sort-and-dump-docstrings doclist outfp) + (format outfp "@end table\n") + (fclose outfp))) + +;;; +;;; Documentation string may refer to a section in the manual +;;; If it does then we can automatically go to that section in the +;;; menu using Netscape. +;;; + +(defvar manual-browser "netscape" +"manual-browser +The Unix program name of your Netscape Navigator browser. +[see Getting some help]") + +(defvar manual-url + (format nil "http://www.cstr.ed.ac.uk/projects/festival/manual-%s.%s.%s/" + (car festival_version_number) + (car (cdr festival_version_number)) + (car (cdr (cdr festival_version_number)))) +"manual-url +The default URL for the Festival Manual in html format. You may +reset this to a file://.../... type URL on you're local machine. +[see Getting some help]") + +;;; Paul got this idea from VM, the email system for emacs and +;;; I found out how to do this from their code, thanks Kyle + +(define (send-url-to-netscape url) +"(send-url-to-netscape URL) +Send given URL to netscape for display. This is primarily used to +display parts of the manual referenced in documentation strings." + (system + (string-append + manual-browser + " -remote \"openURL( " + url + " )\" "))) + +(define (lastline string) +"(lastline STRING) +Returns the part of the string which between the last newline and the +end of string." + (let ((ns (string-after string "\n"))) + (if (string-equal ns "") + string + (lastline ns)))) + +(define (manual-sym symbol) +"(manual-sym SYMBOL) +Display the section in the manual that SYMBOL's docstring has +identified as the most relevant. The section is named on the +last line of a documentation string with no newlines within it +prefixed by \"[see \" with a \"]\" just immediately before the end +of the documentation string. The manual section name is translated to +the section in the HTML version of the manual and a URL is +and sent to Netscape for display. [see Getting some help]" +(let ((section (string-before (string-after + (lastline (eval (list 'doc symbol))) + "[see ") + "]"))) + (cond + ((string-equal section "") + (eval (list 'doc symbol))) ;; nothing there + (t + (manual section))))) + +(define (manual section) +"(manual SECTION) +Display SECTION in the manual. SECTION is a string identifying +a manual section (it could be an initial substring. If SECTION +is nil or unspecifed then the Manual table of contents is displayed. +This uses netscape to display the manual page so you must have that +(use variable manual-browser to identify it) and the variable +manual-url pointing to a copy of the manual. [see Getting some help]" +(let ((tmpfile (make_tmp_filename)) + (manual-section)) + (cond + ((string-matches section "\"") + (string-append "Invalid section reference containing quote: " + section "\n")) + ((not section) + (send-url-to-netscape (string-append manual-url "festival_toc.html"))) + (t ;; find section in manual + (get_url (string-append manual-url "festival_toc.html") tmpfile) + (system + (string-append + "grep -i \"^